summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorArtur Signell <artur@vaadin.com>2012-12-18 10:00:14 +0200
committerVaadin Code Review <review@vaadin.com>2013-05-22 13:48:41 +0000
commit70131cdb9ba6ecb505a7b627db03ad9d739d7c66 (patch)
tree3737510a881581885befe682124c3e132d258555 /server
parentebb92e621a3dee4253f3618a32edcd59ee51ef69 (diff)
downloadvaadin-framework-70131cdb9ba6ecb505a7b627db03ad9d739d7c66.tar.gz
vaadin-framework-70131cdb9ba6ecb505a7b627db03ad9d739d7c66.zip
Extracted common code for number conveters to abstract super class (#11900)
Change-Id: I53e413f8e9c8754915d80c30d3dca97eb1881c74
Diffstat (limited to 'server')
-rw-r--r--server/src/com/vaadin/data/util/converter/AbstractStringToNumberConverter.java120
-rw-r--r--server/src/com/vaadin/data/util/converter/StringToDoubleConverter.java67
-rw-r--r--server/src/com/vaadin/data/util/converter/StringToFloatConverter.java67
-rw-r--r--server/src/com/vaadin/data/util/converter/StringToIntegerConverter.java54
-rw-r--r--server/src/com/vaadin/data/util/converter/StringToNumberConverter.java69
5 files changed, 148 insertions, 229 deletions
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
index 0000000000..b9a122ecb5
--- /dev/null
+++ b/server/src/com/vaadin/data/util/converter/AbstractStringToNumberConverter.java
@@ -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;
+ }
+
+}
diff --git a/server/src/com/vaadin/data/util/converter/StringToDoubleConverter.java b/server/src/com/vaadin/data/util/converter/StringToDoubleConverter.java
index 69a0faf8f4..8bb82498b9 100644
--- a/server/src/com/vaadin/data/util/converter/StringToDoubleConverter.java
+++ b/server/src/com/vaadin/data/util/converter/StringToDoubleConverter.java
@@ -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;
- }
}
diff --git a/server/src/com/vaadin/data/util/converter/StringToFloatConverter.java b/server/src/com/vaadin/data/util/converter/StringToFloatConverter.java
index 1adfd87565..a207654358 100644
--- a/server/src/com/vaadin/data/util/converter/StringToFloatConverter.java
+++ b/server/src/com/vaadin/data/util/converter/StringToFloatConverter.java
@@ -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;
- }
}
diff --git a/server/src/com/vaadin/data/util/converter/StringToIntegerConverter.java b/server/src/com/vaadin/data/util/converter/StringToIntegerConverter.java
index 4bb933bcc8..4f34cf1cd3 100644
--- a/server/src/com/vaadin/data/util/converter/StringToIntegerConverter.java
+++ b/server/src/com/vaadin/data/util/converter/StringToIntegerConverter.java
@@ -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;
- }
-
}
diff --git a/server/src/com/vaadin/data/util/converter/StringToNumberConverter.java b/server/src/com/vaadin/data/util/converter/StringToNumberConverter.java
index 99ff7007ad..eae73e4cfa 100644
--- a/server/src/com/vaadin/data/util/converter/StringToNumberConverter.java
+++ b/server/src/com/vaadin/data/util/converter/StringToNumberConverter.java
@@ -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;
- }
-
}