]> source.dussan.org Git - vaadin-framework.git/commitdiff
Extracted common code for number conveters to abstract super class (#11900)
authorArtur Signell <artur@vaadin.com>
Tue, 18 Dec 2012 08:00:14 +0000 (10:00 +0200)
committerVaadin Code Review <review@vaadin.com>
Wed, 22 May 2013 13:48:41 +0000 (13:48 +0000)
Change-Id: I53e413f8e9c8754915d80c30d3dca97eb1881c74

server/src/com/vaadin/data/util/converter/AbstractStringToNumberConverter.java [new file with mode: 0644]
server/src/com/vaadin/data/util/converter/StringToDoubleConverter.java
server/src/com/vaadin/data/util/converter/StringToFloatConverter.java
server/src/com/vaadin/data/util/converter/StringToIntegerConverter.java
server/src/com/vaadin/data/util/converter/StringToNumberConverter.java

diff --git a/server/src/com/vaadin/data/util/converter/AbstractStringToNumberConverter.java b/server/src/com/vaadin/data/util/converter/AbstractStringToNumberConverter.java
new file mode 100644 (file)
index 0000000..b9a122e
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2012 Vaadin Ltd.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.vaadin.data.util.converter;
+
+import java.text.NumberFormat;
+import java.text.ParsePosition;
+import java.util.Locale;
+
+/**
+ * A converter that converts from the number type T to {@link String} and back.
+ * Uses the given locale and {@link NumberFormat} for formatting and parsing.
+ * Automatically trims the input string, removing any leading and trailing white
+ * space.
+ * <p>
+ * Override and overwrite {@link #getFormat(Locale)} to use a different format.
+ * </p>
+ * 
+ * @author Vaadin Ltd
+ * @since 7.1
+ */
+public abstract class AbstractStringToNumberConverter<T> implements
+        Converter<String, T> {
+
+    /**
+     * Returns the format used by {@link #convertToPresentation(Object, Locale)}
+     * and {@link #convertToModel(Object, Locale)}.
+     * 
+     * @param locale
+     *            The locale to use
+     * @return A NumberFormat instance
+     * @since 7.1
+     */
+    protected NumberFormat getFormat(Locale locale) {
+        if (locale == null) {
+            locale = Locale.getDefault();
+        }
+
+        return NumberFormat.getNumberInstance(locale);
+    }
+
+    /**
+     * Convert the value to a Number using the given locale and
+     * {@link #getFormat(Locale)}.
+     * 
+     * @param value
+     *            The value to convert
+     * @param locale
+     *            The locale to use for conversion
+     * @return The converted value
+     * @throws ConversionException
+     *             If there was a problem converting the value
+     * @since 7.1
+     */
+    protected Number convertToNumber(String value, Locale locale)
+            throws ConversionException {
+        if (value == null) {
+            return null;
+        }
+
+        // Remove leading and trailing white space
+        value = value.trim();
+
+        // Parse and detect errors. If the full string was not used, it is
+        // an error.
+        ParsePosition parsePosition = new ParsePosition(0);
+        Number parsedValue = getFormat(locale).parse(value, parsePosition);
+        if (parsePosition.getIndex() != value.length()) {
+            throw new ConversionException("Could not convert '" + value
+                    + "' to " + getModelType().getName());
+        }
+
+        if (parsedValue == null) {
+            // Convert "" to null
+            return null;
+        }
+        return parsedValue;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.vaadin.data.util.converter.Converter#convertToPresentation(java.lang
+     * .Object, java.util.Locale)
+     */
+    @Override
+    public String convertToPresentation(T value, Locale locale)
+            throws ConversionException {
+        if (value == null) {
+            return null;
+        }
+
+        return getFormat(locale).format(value);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.vaadin.data.util.converter.Converter#getPresentationType()
+     */
+    @Override
+    public Class<String> getPresentationType() {
+        return String.class;
+    }
+
+}
index 69a0faf8f4395db47dc783659c135ed14c574fe6..8bb82498b970427fb45c7312f72e05399077ba74 100644 (file)
@@ -17,7 +17,6 @@
 package com.vaadin.data.util.converter;
 
 import java.text.NumberFormat;
-import java.text.ParsePosition;
 import java.util.Locale;
 
 /**
@@ -34,23 +33,8 @@ import java.util.Locale;
  * @author Vaadin Ltd
  * @since 7.0
  */
-public class StringToDoubleConverter implements Converter<String, Double> {
-
-    /**
-     * Returns the format used by {@link #convertToPresentation(Double, Locale)}
-     * and {@link #convertToModel(String, Locale)}.
-     * 
-     * @param locale
-     *            The locale to use
-     * @return A NumberFormat instance
-     */
-    protected NumberFormat getFormat(Locale locale) {
-        if (locale == null) {
-            locale = Locale.getDefault();
-        }
-
-        return NumberFormat.getNumberInstance(locale);
-    }
+public class StringToDoubleConverter extends
+        AbstractStringToNumberConverter<Double> {
 
     /*
      * (non-Javadoc)
@@ -62,42 +46,8 @@ public class StringToDoubleConverter implements Converter<String, Double> {
     @Override
     public Double convertToModel(String value, Locale locale)
             throws ConversionException {
-        if (value == null) {
-            return null;
-        }
-
-        // Remove leading and trailing white space
-        value = value.trim();
-
-        ParsePosition parsePosition = new ParsePosition(0);
-        Number parsedValue = getFormat(locale).parse(value, parsePosition);
-        if (parsePosition.getIndex() != value.length()) {
-            throw new ConversionException("Could not convert '" + value
-                    + "' to " + getModelType().getName());
-        }
-        if (parsedValue == null) {
-            // Convert "" to null
-            return null;
-        }
-
-        return parsedValue.doubleValue();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * com.vaadin.data.util.converter.Converter#convertToPresentation(java.lang
-     * .Object, java.util.Locale)
-     */
-    @Override
-    public String convertToPresentation(Double value, Locale locale)
-            throws ConversionException {
-        if (value == null) {
-            return null;
-        }
-
-        return getFormat(locale).format(value);
+        Number n = convertToNumber(value, locale);
+        return n == null ? null : n.doubleValue();
     }
 
     /*
@@ -110,13 +60,4 @@ public class StringToDoubleConverter implements Converter<String, Double> {
         return Double.class;
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.vaadin.data.util.converter.Converter#getPresentationType()
-     */
-    @Override
-    public Class<String> getPresentationType() {
-        return String.class;
-    }
 }
index 1adfd875659d0511bf13fd83eee6d401c6dd4ace..a207654358625fd2407e3727a0ac35d3e075fac6 100644 (file)
@@ -17,7 +17,6 @@
 package com.vaadin.data.util.converter;
 
 import java.text.NumberFormat;
-import java.text.ParsePosition;
 import java.util.Locale;
 
 /**
@@ -34,23 +33,8 @@ import java.util.Locale;
  * @author Vaadin Ltd
  * @since 7.0
  */
-public class StringToFloatConverter implements Converter<String, Float> {
-
-    /**
-     * Returns the format used by {@link #convertToPresentation(Float, Locale)}
-     * and {@link #convertToModel(String, Locale)}.
-     * 
-     * @param locale
-     *            The locale to use
-     * @return A NumberFormat instance
-     */
-    protected NumberFormat getFormat(Locale locale) {
-        if (locale == null) {
-            locale = Locale.getDefault();
-        }
-
-        return NumberFormat.getNumberInstance(locale);
-    }
+public class StringToFloatConverter extends
+        AbstractStringToNumberConverter<Float> {
 
     /*
      * (non-Javadoc)
@@ -62,42 +46,8 @@ public class StringToFloatConverter implements Converter<String, Float> {
     @Override
     public Float convertToModel(String value, Locale locale)
             throws ConversionException {
-        if (value == null) {
-            return null;
-        }
-
-        // Remove leading and trailing white space
-        value = value.trim();
-
-        ParsePosition parsePosition = new ParsePosition(0);
-        Number parsedValue = getFormat(locale).parse(value, parsePosition);
-        if (parsePosition.getIndex() != value.length()) {
-            throw new ConversionException("Could not convert '" + value
-                    + "' to " + getModelType().getName());
-        }
-        if (parsedValue == null) {
-            // Convert "" to null
-            return null;
-        }
-
-        return parsedValue.floatValue();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * com.vaadin.data.util.converter.Converter#convertToPresentation(java.lang
-     * .Object, java.util.Locale)
-     */
-    @Override
-    public String convertToPresentation(Float value, Locale locale)
-            throws ConversionException {
-        if (value == null) {
-            return null;
-        }
-
-        return getFormat(locale).format(value);
+        Number n = convertToNumber(value, locale);
+        return n == null ? null : n.floatValue();
     }
 
     /*
@@ -110,13 +60,4 @@ public class StringToFloatConverter implements Converter<String, Float> {
         return Float.class;
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.vaadin.data.util.converter.Converter#getPresentationType()
-     */
-    @Override
-    public Class<String> getPresentationType() {
-        return String.class;
-    }
 }
index 4bb933bcc86c949ab85ff9d30084cf4c117763b8..4f34cf1cd3bca75737a7edb2b7af9d4a5f91c28b 100644 (file)
@@ -17,7 +17,6 @@
 package com.vaadin.data.util.converter;
 
 import java.text.NumberFormat;
-import java.text.ParsePosition;
 import java.util.Locale;
 
 /**
@@ -31,7 +30,8 @@ import java.util.Locale;
  * @author Vaadin Ltd
  * @since 7.0
  */
-public class StringToIntegerConverter implements Converter<String, Integer> {
+public class StringToIntegerConverter extends
+        AbstractStringToNumberConverter<Integer> {
 
     /**
      * Returns the format used by
@@ -42,6 +42,7 @@ public class StringToIntegerConverter implements Converter<String, Integer> {
      *            The locale to use
      * @return A NumberFormat instance
      */
+    @Override
     protected NumberFormat getFormat(Locale locale) {
         if (locale == null) {
             locale = Locale.getDefault();
@@ -49,50 +50,29 @@ public class StringToIntegerConverter implements Converter<String, Integer> {
         return NumberFormat.getIntegerInstance(locale);
     }
 
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * com.vaadin.data.util.converter.Converter#convertToModel(java.lang.Object,
+     * java.util.Locale)
+     */
     @Override
     public Integer convertToModel(String value, Locale locale)
             throws ConversionException {
-        if (value == null) {
-            return null;
-        }
-
-        // Remove leading and trailing white space
-        value = value.trim();
+        Number n = convertToNumber(value, locale);
+        return n == null ? null : n.intValue();
 
-        // Parse and detect errors. If the full string was not used, it is
-        // an error.
-        ParsePosition parsePosition = new ParsePosition(0);
-        Number parsedValue = getFormat(locale).parse(value, parsePosition);
-        if (parsePosition.getIndex() != value.length()) {
-            throw new ConversionException("Could not convert '" + value
-                    + "' to " + getModelType().getName());
-        }
-
-        if (parsedValue == null) {
-            // Convert "" to null
-            return null;
-        }
-        return parsedValue.intValue();
-    }
-
-    @Override
-    public String convertToPresentation(Integer value, Locale locale)
-            throws ConversionException {
-        if (value == null) {
-            return null;
-        }
-
-        return getFormat(locale).format(value);
     }
 
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.vaadin.data.util.converter.Converter#getModelType()
+     */
     @Override
     public Class<Integer> getModelType() {
         return Integer.class;
     }
 
-    @Override
-    public Class<String> getPresentationType() {
-        return String.class;
-    }
-
 }
index 99ff7007ad2d92bf287efcfa76276e3089b09a20..eae73e4cfae3c636be1f4595da11d76560868bf8 100644 (file)
@@ -17,7 +17,6 @@
 package com.vaadin.data.util.converter;
 
 import java.text.NumberFormat;
-import java.text.ParsePosition;
 import java.util.Locale;
 
 /**
@@ -30,23 +29,8 @@ import java.util.Locale;
  * @author Vaadin Ltd
  * @since 7.0
  */
-public class StringToNumberConverter implements Converter<String, Number> {
-
-    /**
-     * Returns the format used by {@link #convertToPresentation(Number, Locale)}
-     * and {@link #convertToModel(String, Locale)}.
-     * 
-     * @param locale
-     *            The locale to use
-     * @return A NumberFormat instance
-     */
-    protected NumberFormat getFormat(Locale locale) {
-        if (locale == null) {
-            locale = Locale.getDefault();
-        }
-
-        return NumberFormat.getNumberInstance(locale);
-    }
+public class StringToNumberConverter extends
+        AbstractStringToNumberConverter<Number> {
 
     /*
      * (non-Javadoc)
@@ -58,44 +42,7 @@ public class StringToNumberConverter implements Converter<String, Number> {
     @Override
     public Number convertToModel(String value, Locale locale)
             throws ConversionException {
-        if (value == null) {
-            return null;
-        }
-
-        // Remove leading and trailing white space
-        value = value.trim();
-
-        // Parse and detect errors. If the full string was not used, it is
-        // an error.
-        ParsePosition parsePosition = new ParsePosition(0);
-        Number parsedValue = getFormat(locale).parse(value, parsePosition);
-        if (parsePosition.getIndex() != value.length()) {
-            throw new ConversionException("Could not convert '" + value
-                    + "' to " + getModelType().getName());
-        }
-
-        if (parsedValue == null) {
-            // Convert "" to null
-            return null;
-        }
-        return parsedValue;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * com.vaadin.data.util.converter.Converter#convertToPresentation(java.lang
-     * .Object, java.util.Locale)
-     */
-    @Override
-    public String convertToPresentation(Number value, Locale locale)
-            throws ConversionException {
-        if (value == null) {
-            return null;
-        }
-
-        return getFormat(locale).format(value);
+        return convertToNumber(value, locale);
     }
 
     /*
@@ -108,14 +55,4 @@ public class StringToNumberConverter implements Converter<String, Number> {
         return Number.class;
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.vaadin.data.util.converter.Converter#getPresentationType()
-     */
-    @Override
-    public Class<String> getPresentationType() {
-        return String.class;
-    }
-
 }