+++ /dev/null
-/*\r
-@VaadinApache2LicenseForJavaFiles@\r
- */\r
-\r
-package com.vaadin.data.util.converter;\r
-\r
-import java.util.Locale;\r
-\r
-/**\r
- * A converter that converts from {@link Boolean} to {@link String} and back.\r
- * The String representation is given by Boolean.toString().\r
- * <p>\r
- * Leading and trailing white spaces are ignored when converting from a String.\r
- * </p>\r
- * \r
- * @author Vaadin Ltd\r
- * @version\r
- * @VERSION@\r
- * @since 7.0\r
- */\r
-public class BooleanToStringConverter implements Converter<Boolean, String> {\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * com.vaadin.data.util.converter.Converter#convertFromTargetToSource(java\r
- * .lang.Object, java.util.Locale)\r
- */\r
- public Boolean convertToModel(String value, Locale locale)\r
- throws ConversionException {\r
- if (value == null) {\r
- return null;\r
- }\r
-\r
- // Remove leading and trailing white space\r
- value = value.trim();\r
-\r
- if (getTrueString().equals(value)) {\r
- return true;\r
- } else if (getFalseString().equals(value)) {\r
- return false;\r
- } else {\r
- throw new ConversionException("Cannot convert " + value\r
- + " to Boolean");\r
- }\r
- }\r
-\r
- protected String getTrueString() {\r
- return Boolean.TRUE.toString();\r
- }\r
-\r
- protected String getFalseString() {\r
- return Boolean.FALSE.toString();\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * com.vaadin.data.util.converter.Converter#convertFromSourceToTarget(java\r
- * .lang.Object, java.util.Locale)\r
- */\r
- public String convertToPresentation(Boolean value, Locale locale)\r
- throws ConversionException {\r
- if (value == null) {\r
- return null;\r
- }\r
- if (value) {\r
- return getTrueString();\r
- } else {\r
- return getFalseString();\r
- }\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see com.vaadin.data.util.converter.Converter#getSourceType()\r
- */\r
- public Class<Boolean> getModelType() {\r
- return Boolean.class;\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see com.vaadin.data.util.converter.Converter#getTargetType()\r
- */\r
- public Class<String> getPresentationType() {\r
- return String.class;\r
- }\r
-\r
-}\r
* @VERSION@\r
* @since 7.0\r
*/\r
-public interface Converter<MODEL, PRESENTATION> extends Serializable {\r
+public interface Converter<PRESENTATION, MODEL> extends Serializable {\r
\r
/**\r
* Converts the given value from target type to source type.\r
import java.io.Serializable;\r
\r
/**\r
- * Factory interface for providing Converters based on a source and target type.\r
+ * Factory interface for providing Converters based on a presentation type and a\r
+ * model type.\r
* \r
* @author Vaadin Ltd.\r
* @version\r
* \r
*/\r
public interface ConverterFactory extends Serializable {\r
- <SOURCE, TARGET> Converter<SOURCE, TARGET> createConverter(\r
- Class<SOURCE> sourceType, Class<TARGET> targetType);\r
+ public <PRESENTATION, MODEL> Converter<PRESENTATION, MODEL> createConverter(\r
+ Class<PRESENTATION> presentationType, Class<MODEL> modelType);\r
\r
}\r
--- /dev/null
+/*\r
+@VaadinApache2LicenseForJavaFiles@\r
+ */\r
+\r
+package com.vaadin.data.util.converter;\r
+\r
+import java.util.Date;\r
+import java.util.Locale;\r
+\r
+/**\r
+ * A converter that converts from {@link Long} to {@link Date} and back.\r
+ * \r
+ * @author Vaadin Ltd\r
+ * @version\r
+ * @VERSION@\r
+ * @since 7.0\r
+ */\r
+public class DateToLongConverter implements Converter<Date, Long> {\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see\r
+ * com.vaadin.data.util.converter.Converter#convertFromTargetToSource(java\r
+ * .lang.Object, java.util.Locale)\r
+ */\r
+ public Long convertToModel(Date value, Locale locale) {\r
+ if (value == null) {\r
+ return null;\r
+ }\r
+\r
+ return value.getTime();\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see\r
+ * com.vaadin.data.util.converter.Converter#convertFromSourceToTarget(java\r
+ * .lang.Object, java.util.Locale)\r
+ */\r
+ public Date convertToPresentation(Long value, Locale locale) {\r
+ if (value == null) {\r
+ return null;\r
+ }\r
+\r
+ return new Date(value);\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see com.vaadin.data.util.converter.Converter#getSourceType()\r
+ */\r
+ public Class<Long> getModelType() {\r
+ return Long.class;\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see com.vaadin.data.util.converter.Converter#getTargetType()\r
+ */\r
+ public Class<Date> getPresentationType() {\r
+ return Date.class;\r
+ }\r
+\r
+}\r
+++ /dev/null
-/*\r
-@VaadinApache2LicenseForJavaFiles@\r
- */\r
-\r
-package com.vaadin.data.util.converter;\r
-\r
-import java.text.DateFormat;\r
-import java.text.ParsePosition;\r
-import java.util.Date;\r
-import java.util.Locale;\r
-\r
-/**\r
- * A converter that converts from {@link Date} to {@link String} and back. Uses\r
- * the given locale and {@link DateFormat} for formatting and parsing.\r
- * <p>\r
- * Leading and trailing white spaces are ignored when converting from a String.\r
- * </p>\r
- * <p>\r
- * Override and overwrite {@link #getFormat(Locale)} to use a different format.\r
- * </p>\r
- * \r
- * @author Vaadin Ltd\r
- * @version\r
- * @VERSION@\r
- * @since 7.0\r
- */\r
-public class DateToStringConverter implements Converter<Date, String> {\r
-\r
- /**\r
- * Returns the format used by\r
- * {@link #convertToPresentation(Date, Locale)} and\r
- * {@link #convertToModel(String, Locale)}.\r
- * \r
- * @param locale\r
- * The locale to use\r
- * @return A DateFormat instance\r
- */\r
- protected DateFormat getFormat(Locale locale) {\r
- if (locale == null) {\r
- locale = Locale.getDefault();\r
- }\r
-\r
- DateFormat f = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,\r
- DateFormat.MEDIUM, locale);\r
- f.setLenient(false);\r
- return f;\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * com.vaadin.data.util.converter.Converter#convertFromTargetToSource(java\r
- * .lang.Object, java.util.Locale)\r
- */\r
- public Date convertToModel(String value, Locale locale)\r
- throws com.vaadin.data.util.converter.Converter.ConversionException {\r
- if (value == null) {\r
- return null;\r
- }\r
-\r
- // Remove leading and trailing white space\r
- value = value.trim();\r
-\r
- ParsePosition parsePosition = new ParsePosition(0);\r
- Date parsedValue = getFormat(locale).parse(value, parsePosition);\r
- if (parsePosition.getIndex() != value.length()) {\r
- throw new ConversionException("Could not convert '" + value\r
- + "' to " + getPresentationType().getName());\r
- }\r
-\r
- return parsedValue;\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * com.vaadin.data.util.converter.Converter#convertFromSourceToTarget(java\r
- * .lang.Object, java.util.Locale)\r
- */\r
- public String convertToPresentation(Date value, Locale locale)\r
- throws com.vaadin.data.util.converter.Converter.ConversionException {\r
- if (value == null) {\r
- return null;\r
- }\r
-\r
- return getFormat(locale).format(value);\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see com.vaadin.data.util.converter.Converter#getSourceType()\r
- */\r
- public Class<Date> getModelType() {\r
- return Date.class;\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see com.vaadin.data.util.converter.Converter#getTargetType()\r
- */\r
- public Class<String> getPresentationType() {\r
- return String.class;\r
- }\r
-\r
-}\r
private final static Logger log = Logger\r
.getLogger(DefaultConverterFactory.class.getName());\r
\r
- public <SOURCE, TARGET> Converter<SOURCE, TARGET> createConverter(\r
- Class<SOURCE> sourceType, Class<TARGET> targetType) {\r
- Converter<SOURCE, TARGET> converter = findConverter(sourceType,\r
- targetType);\r
+ public <PRESENTATION, MODEL> Converter<PRESENTATION, MODEL> createConverter(\r
+ Class<PRESENTATION> presentationType, Class<MODEL> modelType) {\r
+ Converter<PRESENTATION, MODEL> converter = findConverter(\r
+ presentationType, modelType);\r
if (converter != null) {\r
log.finest(getClass().getName() + " created a "\r
+ converter.getClass());\r
}\r
\r
// Try to find a reverse converter\r
- Converter<TARGET, SOURCE> reverseConverter = findConverter(targetType,\r
- sourceType);\r
+ Converter<MODEL, PRESENTATION> reverseConverter = findConverter(\r
+ modelType, presentationType);\r
if (reverseConverter != null) {\r
log.finest(getClass().getName() + " created a reverse "\r
+ reverseConverter.getClass());\r
- return new ReverseConverter<SOURCE, TARGET>(reverseConverter);\r
+ return new ReverseConverter<PRESENTATION, MODEL>(reverseConverter);\r
}\r
\r
log.finest(getClass().getName() + " could not find a converter for "\r
- + sourceType.getName() + " to " + targetType.getName()\r
+ + presentationType.getName() + " to " + modelType.getName()\r
+ " conversion");\r
return null;\r
\r
}\r
\r
- protected <SOURCE, TARGET> Converter<SOURCE, TARGET> findConverter(\r
- Class<SOURCE> sourceType, Class<TARGET> targetType) {\r
- if (targetType == String.class) {\r
+ protected <PRESENTATION, MODEL> Converter<PRESENTATION, MODEL> findConverter(\r
+ Class<PRESENTATION> presentationType, Class<MODEL> modelType) {\r
+ if (presentationType == String.class) {\r
// TextField converters and more\r
- Converter<SOURCE, TARGET> converter = (Converter<SOURCE, TARGET>) createStringConverter(sourceType);\r
+ Converter<PRESENTATION, MODEL> converter = (Converter<PRESENTATION, MODEL>) createStringConverter(modelType);\r
if (converter != null) {\r
return converter;\r
}\r
- } else if (targetType == Date.class) {\r
+ } else if (presentationType == Date.class) {\r
// DateField converters and more\r
- Converter<SOURCE, TARGET> converter = (Converter<SOURCE, TARGET>) createDateConverter(sourceType);\r
+ Converter<PRESENTATION, MODEL> converter = (Converter<PRESENTATION, MODEL>) createDateConverter(modelType);\r
if (converter != null) {\r
return converter;\r
}\r
\r
}\r
\r
- protected Converter<?, Date> createDateConverter(Class<?> sourceType) {\r
+ protected Converter<Date, ?> createDateConverter(Class<?> sourceType) {\r
if (Long.class.isAssignableFrom(sourceType)) {\r
- return new LongToDateConverter();\r
+ return new DateToLongConverter();\r
} else {\r
return null;\r
}\r
}\r
\r
- protected Converter<?, String> createStringConverter(Class<?> sourceType) {\r
+ protected Converter<String, ?> createStringConverter(Class<?> sourceType) {\r
if (Double.class.isAssignableFrom(sourceType)) {\r
- return new DoubleToStringConverter();\r
+ return new StringToDoubleConverter();\r
} else if (Integer.class.isAssignableFrom(sourceType)) {\r
- return new IntegerToStringConverter();\r
+ return new StringToIntegerConverter();\r
} else if (Boolean.class.isAssignableFrom(sourceType)) {\r
- return new BooleanToStringConverter();\r
+ return new StringToBooleanConverter();\r
} else if (Number.class.isAssignableFrom(sourceType)) {\r
- return new NumberToStringConverter();\r
+ return new StringToNumberConverter();\r
} else if (Date.class.isAssignableFrom(sourceType)) {\r
- return new DateToStringConverter();\r
+ return new StringToDateConverter();\r
} else {\r
return null;\r
}\r
+++ /dev/null
-/*\r
-@VaadinApache2LicenseForJavaFiles@\r
- */\r
-\r
-package com.vaadin.data.util.converter;\r
-\r
-import java.text.NumberFormat;\r
-import java.text.ParsePosition;\r
-import java.util.Locale;\r
-\r
-/**\r
- * A converter that converts from {@link Double} to {@link String} and back.\r
- * Uses the given locale and a {@link NumberFormat} instance for formatting and\r
- * parsing.\r
- * <p>\r
- * Leading and trailing white spaces are ignored when converting from a String.\r
- * </p>\r
- * <p>\r
- * Override and overwrite {@link #getFormat(Locale)} to use a different format.\r
- * </p>\r
- * \r
- * @author Vaadin Ltd\r
- * @version\r
- * @VERSION@\r
- * @since 7.0\r
- */\r
-public class DoubleToStringConverter implements Converter<Double, String> {\r
-\r
- /**\r
- * Returns the format used by\r
- * {@link #convertToPresentation(Double, Locale)} and\r
- * {@link #convertToModel(String, Locale)}.\r
- * \r
- * @param locale\r
- * The locale to use\r
- * @return A NumberFormat instance\r
- */\r
- protected NumberFormat getFormat(Locale locale) {\r
- if (locale == null) {\r
- locale = Locale.getDefault();\r
- }\r
-\r
- return NumberFormat.getNumberInstance(locale);\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * com.vaadin.data.util.converter.Converter#convertFromTargetToSource(java\r
- * .lang.Object, java.util.Locale)\r
- */\r
- public Double convertToModel(String value, Locale locale)\r
- throws ConversionException {\r
- if (value == null) {\r
- return null;\r
- }\r
-\r
- // Remove leading and trailing white space\r
- value = value.trim();\r
-\r
- ParsePosition parsePosition = new ParsePosition(0);\r
- Number parsedValue = getFormat(locale).parse(value, parsePosition);\r
- if (parsePosition.getIndex() != value.length()) {\r
- throw new ConversionException("Could not convert '" + value\r
- + "' to " + getPresentationType().getName());\r
- }\r
- return parsedValue.doubleValue();\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * com.vaadin.data.util.converter.Converter#convertFromSourceToTarget(java\r
- * .lang.Object, java.util.Locale)\r
- */\r
- public String convertToPresentation(Double value, Locale locale)\r
- throws ConversionException {\r
- if (value == null) {\r
- return null;\r
- }\r
-\r
- return getFormat(locale).format(value);\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see com.vaadin.data.util.converter.Converter#getSourceType()\r
- */\r
- public Class<Double> getModelType() {\r
- return Double.class;\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see com.vaadin.data.util.converter.Converter#getTargetType()\r
- */\r
- public Class<String> getPresentationType() {\r
- return String.class;\r
- }\r
-}\r
+++ /dev/null
-/*\r
-@VaadinApache2LicenseForJavaFiles@\r
- */\r
-\r
-package com.vaadin.data.util.converter;\r
-\r
-import java.text.NumberFormat;\r
-import java.text.ParsePosition;\r
-import java.util.Locale;\r
-\r
-/**\r
- * A converter that converts from {@link Integer} to {@link String} and back.\r
- * Uses the given locale and a {@link NumberFormat} instance for formatting and\r
- * parsing.\r
- * <p>\r
- * Override and overwrite {@link #getFormat(Locale)} to use a different format.\r
- * </p>\r
- * \r
- * @author Vaadin Ltd\r
- * @version\r
- * @VERSION@\r
- * @since 7.0\r
- */\r
-public class IntegerToStringConverter implements Converter<Integer, String> {\r
-\r
- /**\r
- * Returns the format used by\r
- * {@link #convertToPresentation(Integer, Locale)} and\r
- * {@link #convertToModel(String, Locale)}.\r
- * \r
- * @param locale\r
- * The locale to use\r
- * @return A NumberFormat instance\r
- */\r
- protected NumberFormat getFormat(Locale locale) {\r
- if (locale == null) {\r
- locale = Locale.getDefault();\r
- }\r
- return NumberFormat.getIntegerInstance(locale);\r
- }\r
-\r
- public Integer convertToModel(String value, Locale locale)\r
- throws ConversionException {\r
- if (value == null) {\r
- return null;\r
- }\r
-\r
- // Remove leading and trailing white space\r
- value = value.trim();\r
-\r
- // Parse and detect errors. If the full string was not used, it is\r
- // an error.\r
- ParsePosition parsePosition = new ParsePosition(0);\r
- Number parsedValue = getFormat(locale).parse(value, parsePosition);\r
- if (parsePosition.getIndex() != value.length()) {\r
- throw new ConversionException("Could not convert '" + value\r
- + "' to " + getModelType().getName());\r
- }\r
-\r
- if (parsedValue == null) {\r
- // Convert "" to null\r
- return null;\r
- }\r
- return parsedValue.intValue();\r
- }\r
-\r
- public String convertToPresentation(Integer value, Locale locale)\r
- throws ConversionException {\r
- if (value == null) {\r
- return null;\r
- }\r
-\r
- return getFormat(locale).format(value);\r
- }\r
-\r
- public Class<Integer> getModelType() {\r
- return Integer.class;\r
- }\r
-\r
- public Class<String> getPresentationType() {\r
- return String.class;\r
- }\r
-\r
-}\r
+++ /dev/null
-/*\r
-@VaadinApache2LicenseForJavaFiles@\r
- */\r
-\r
-package com.vaadin.data.util.converter;\r
-\r
-import java.util.Date;\r
-import java.util.Locale;\r
-\r
-/**\r
- * A converter that converts from {@link Long} to {@link Date} and back.\r
- * \r
- * @author Vaadin Ltd\r
- * @version\r
- * @VERSION@\r
- * @since 7.0\r
- */\r
-public class LongToDateConverter implements Converter<Long, Date> {\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * com.vaadin.data.util.converter.Converter#convertFromTargetToSource(java\r
- * .lang.Object, java.util.Locale)\r
- */\r
- public Long convertToModel(Date value, Locale locale) {\r
- if (value == null) {\r
- return null;\r
- }\r
-\r
- return value.getTime();\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * com.vaadin.data.util.converter.Converter#convertFromSourceToTarget(java\r
- * .lang.Object, java.util.Locale)\r
- */\r
- public Date convertToPresentation(Long value, Locale locale) {\r
- if (value == null) {\r
- return null;\r
- }\r
-\r
- return new Date(value);\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see com.vaadin.data.util.converter.Converter#getSourceType()\r
- */\r
- public Class<Long> getModelType() {\r
- return Long.class;\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see com.vaadin.data.util.converter.Converter#getTargetType()\r
- */\r
- public Class<Date> getPresentationType() {\r
- return Date.class;\r
- }\r
-\r
-}\r
+++ /dev/null
-/*\r
-@VaadinApache2LicenseForJavaFiles@\r
- */\r
-\r
-package com.vaadin.data.util.converter;\r
-\r
-import java.text.NumberFormat;\r
-import java.text.ParsePosition;\r
-import java.util.Locale;\r
-\r
-/**\r
- * A converter that converts from {@link Number} to {@link String} and back.\r
- * Uses the given locale and {@link NumberFormat} for formatting and parsing.\r
- * <p>\r
- * Override and overwrite {@link #getFormat(Locale)} to use a different format.\r
- * </p>\r
- * \r
- * @author Vaadin Ltd\r
- * @version\r
- * @VERSION@\r
- * @since 7.0\r
- */\r
-public class NumberToStringConverter implements Converter<Number, String> {\r
-\r
- /**\r
- * Returns the format used by\r
- * {@link #convertToPresentation(Number, Locale)} and\r
- * {@link #convertToModel(String, Locale)}.\r
- * \r
- * @param locale\r
- * The locale to use\r
- * @return A NumberFormat instance\r
- */\r
- protected NumberFormat getFormat(Locale locale) {\r
- if (locale == null) {\r
- locale = Locale.getDefault();\r
- }\r
-\r
- return NumberFormat.getNumberInstance(locale);\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * com.vaadin.data.util.converter.Converter#convertFromTargetToSource(java\r
- * .lang.Object, java.util.Locale)\r
- */\r
- public Number convertToModel(String value, Locale locale)\r
- throws ConversionException {\r
- if (value == null) {\r
- return null;\r
- }\r
-\r
- // Remove leading and trailing white space\r
- value = value.trim();\r
-\r
- // Parse and detect errors. If the full string was not used, it is\r
- // an error.\r
- ParsePosition parsePosition = new ParsePosition(0);\r
- Number parsedValue = getFormat(locale).parse(value, parsePosition);\r
- if (parsePosition.getIndex() != value.length()) {\r
- throw new ConversionException("Could not convert '" + value\r
- + "' to " + getPresentationType().getName());\r
- }\r
-\r
- if (parsedValue == null) {\r
- // Convert "" to null\r
- return null;\r
- }\r
- return parsedValue;\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * com.vaadin.data.util.converter.Converter#convertFromSourceToTarget(java\r
- * .lang.Object, java.util.Locale)\r
- */\r
- public String convertToPresentation(Number value, Locale locale)\r
- throws ConversionException {\r
- if (value == null) {\r
- return null;\r
- }\r
-\r
- return getFormat(locale).format(value);\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see com.vaadin.data.util.converter.Converter#getSourceType()\r
- */\r
- public Class<Number> getModelType() {\r
- return Number.class;\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see com.vaadin.data.util.converter.Converter#getTargetType()\r
- */\r
- public Class<String> getPresentationType() {\r
- return String.class;\r
- }\r
-\r
-}\r
* @VERSION@\r
* @since 7.0\r
*/\r
-public class ReverseConverter<MODEL, PRESENTATION> implements\r
- Converter<MODEL, PRESENTATION> {\r
+public class ReverseConverter<PRESENTATION, MODEL> implements\r
+ Converter<PRESENTATION, MODEL> {\r
\r
- private Converter<PRESENTATION, MODEL> realConverter;\r
+ private Converter<MODEL, PRESENTATION> realConverter;\r
\r
/**\r
* Creates a converter from source to target based on a converter that\r
* @param converter\r
* The converter to use in a reverse fashion\r
*/\r
- public ReverseConverter(Converter<PRESENTATION, MODEL> converter) {\r
+ public ReverseConverter(Converter<MODEL, PRESENTATION> converter) {\r
this.realConverter = converter;\r
}\r
\r
--- /dev/null
+/*\r
+@VaadinApache2LicenseForJavaFiles@\r
+ */\r
+\r
+package com.vaadin.data.util.converter;\r
+\r
+import java.util.Locale;\r
+\r
+/**\r
+ * A converter that converts from {@link String} to {@link Boolean} and back.\r
+ * The String representation is given by Boolean.toString().\r
+ * <p>\r
+ * Leading and trailing white spaces are ignored when converting from a String.\r
+ * </p>\r
+ * \r
+ * @author Vaadin Ltd\r
+ * @version\r
+ * @VERSION@\r
+ * @since 7.0\r
+ */\r
+public class StringToBooleanConverter implements Converter<String, Boolean> {\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see\r
+ * com.vaadin.data.util.converter.Converter#convertFromTargetToSource(java\r
+ * .lang.Object, java.util.Locale)\r
+ */\r
+ public Boolean convertToModel(String value, Locale locale)\r
+ throws ConversionException {\r
+ if (value == null) {\r
+ return null;\r
+ }\r
+\r
+ // Remove leading and trailing white space\r
+ value = value.trim();\r
+\r
+ if (getTrueString().equals(value)) {\r
+ return true;\r
+ } else if (getFalseString().equals(value)) {\r
+ return false;\r
+ } else {\r
+ throw new ConversionException("Cannot convert " + value\r
+ + " to Boolean");\r
+ }\r
+ }\r
+\r
+ protected String getTrueString() {\r
+ return Boolean.TRUE.toString();\r
+ }\r
+\r
+ protected String getFalseString() {\r
+ return Boolean.FALSE.toString();\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see\r
+ * com.vaadin.data.util.converter.Converter#convertFromSourceToTarget(java\r
+ * .lang.Object, java.util.Locale)\r
+ */\r
+ public String convertToPresentation(Boolean value, Locale locale)\r
+ throws ConversionException {\r
+ if (value == null) {\r
+ return null;\r
+ }\r
+ if (value) {\r
+ return getTrueString();\r
+ } else {\r
+ return getFalseString();\r
+ }\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see com.vaadin.data.util.converter.Converter#getSourceType()\r
+ */\r
+ public Class<Boolean> getModelType() {\r
+ return Boolean.class;\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see com.vaadin.data.util.converter.Converter#getTargetType()\r
+ */\r
+ public Class<String> getPresentationType() {\r
+ return String.class;\r
+ }\r
+\r
+}\r
--- /dev/null
+/*\r
+@VaadinApache2LicenseForJavaFiles@\r
+ */\r
+\r
+package com.vaadin.data.util.converter;\r
+\r
+import java.text.DateFormat;\r
+import java.text.ParsePosition;\r
+import java.util.Date;\r
+import java.util.Locale;\r
+\r
+/**\r
+ * A converter that converts from {@link Date} to {@link String} and back. Uses\r
+ * the given locale and {@link DateFormat} for formatting and parsing.\r
+ * <p>\r
+ * Leading and trailing white spaces are ignored when converting from a String.\r
+ * </p>\r
+ * <p>\r
+ * Override and overwrite {@link #getFormat(Locale)} to use a different format.\r
+ * </p>\r
+ * \r
+ * @author Vaadin Ltd\r
+ * @version\r
+ * @VERSION@\r
+ * @since 7.0\r
+ */\r
+public class StringToDateConverter implements Converter<String, Date> {\r
+\r
+ /**\r
+ * Returns the format used by {@link #convertToPresentation(Date, Locale)}\r
+ * and {@link #convertToModel(String, Locale)}.\r
+ * \r
+ * @param locale\r
+ * The locale to use\r
+ * @return A DateFormat instance\r
+ */\r
+ protected DateFormat getFormat(Locale locale) {\r
+ if (locale == null) {\r
+ locale = Locale.getDefault();\r
+ }\r
+\r
+ DateFormat f = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,\r
+ DateFormat.MEDIUM, locale);\r
+ f.setLenient(false);\r
+ return f;\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see\r
+ * com.vaadin.data.util.converter.Converter#convertFromTargetToSource(java\r
+ * .lang.Object, java.util.Locale)\r
+ */\r
+ public Date convertToModel(String value, Locale locale)\r
+ throws com.vaadin.data.util.converter.Converter.ConversionException {\r
+ if (value == null) {\r
+ return null;\r
+ }\r
+\r
+ // Remove leading and trailing white space\r
+ value = value.trim();\r
+\r
+ ParsePosition parsePosition = new ParsePosition(0);\r
+ Date parsedValue = getFormat(locale).parse(value, parsePosition);\r
+ if (parsePosition.getIndex() != value.length()) {\r
+ throw new ConversionException("Could not convert '" + value\r
+ + "' to " + getPresentationType().getName());\r
+ }\r
+\r
+ return parsedValue;\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see\r
+ * com.vaadin.data.util.converter.Converter#convertFromSourceToTarget(java\r
+ * .lang.Object, java.util.Locale)\r
+ */\r
+ public String convertToPresentation(Date value, Locale locale)\r
+ throws com.vaadin.data.util.converter.Converter.ConversionException {\r
+ if (value == null) {\r
+ return null;\r
+ }\r
+\r
+ return getFormat(locale).format(value);\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see com.vaadin.data.util.converter.Converter#getSourceType()\r
+ */\r
+ public Class<Date> getModelType() {\r
+ return Date.class;\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see com.vaadin.data.util.converter.Converter#getTargetType()\r
+ */\r
+ public Class<String> getPresentationType() {\r
+ return String.class;\r
+ }\r
+\r
+}\r
--- /dev/null
+/*\r
+@VaadinApache2LicenseForJavaFiles@\r
+ */\r
+\r
+package com.vaadin.data.util.converter;\r
+\r
+import java.text.NumberFormat;\r
+import java.text.ParsePosition;\r
+import java.util.Locale;\r
+\r
+/**\r
+ * A converter that converts from {@link String} to {@link Double} and back.\r
+ * Uses the given locale and a {@link NumberFormat} instance for formatting and\r
+ * parsing.\r
+ * <p>\r
+ * Leading and trailing white spaces are ignored when converting from a String.\r
+ * </p>\r
+ * <p>\r
+ * Override and overwrite {@link #getFormat(Locale)} to use a different format.\r
+ * </p>\r
+ * \r
+ * @author Vaadin Ltd\r
+ * @version\r
+ * @VERSION@\r
+ * @since 7.0\r
+ */\r
+public class StringToDoubleConverter implements Converter<String, Double> {\r
+\r
+ /**\r
+ * Returns the format used by {@link #convertToPresentation(Double, Locale)}\r
+ * and {@link #convertToModel(String, Locale)}.\r
+ * \r
+ * @param locale\r
+ * The locale to use\r
+ * @return A NumberFormat instance\r
+ */\r
+ protected NumberFormat getFormat(Locale locale) {\r
+ if (locale == null) {\r
+ locale = Locale.getDefault();\r
+ }\r
+\r
+ return NumberFormat.getNumberInstance(locale);\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see\r
+ * com.vaadin.data.util.converter.Converter#convertFromTargetToSource(java\r
+ * .lang.Object, java.util.Locale)\r
+ */\r
+ public Double convertToModel(String value, Locale locale)\r
+ throws ConversionException {\r
+ if (value == null) {\r
+ return null;\r
+ }\r
+\r
+ // Remove leading and trailing white space\r
+ value = value.trim();\r
+\r
+ ParsePosition parsePosition = new ParsePosition(0);\r
+ Number parsedValue = getFormat(locale).parse(value, parsePosition);\r
+ if (parsePosition.getIndex() != value.length()) {\r
+ throw new ConversionException("Could not convert '" + value\r
+ + "' to " + getPresentationType().getName());\r
+ }\r
+ return parsedValue.doubleValue();\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see\r
+ * com.vaadin.data.util.converter.Converter#convertFromSourceToTarget(java\r
+ * .lang.Object, java.util.Locale)\r
+ */\r
+ public String convertToPresentation(Double value, Locale locale)\r
+ throws ConversionException {\r
+ if (value == null) {\r
+ return null;\r
+ }\r
+\r
+ return getFormat(locale).format(value);\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see com.vaadin.data.util.converter.Converter#getSourceType()\r
+ */\r
+ public Class<Double> getModelType() {\r
+ return Double.class;\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see com.vaadin.data.util.converter.Converter#getTargetType()\r
+ */\r
+ public Class<String> getPresentationType() {\r
+ return String.class;\r
+ }\r
+}\r
--- /dev/null
+/*\r
+@VaadinApache2LicenseForJavaFiles@\r
+ */\r
+\r
+package com.vaadin.data.util.converter;\r
+\r
+import java.text.NumberFormat;\r
+import java.text.ParsePosition;\r
+import java.util.Locale;\r
+\r
+/**\r
+ * A converter that converts from {@link String} to {@link Integer} and back.\r
+ * Uses the given locale and a {@link NumberFormat} instance for formatting and\r
+ * parsing.\r
+ * <p>\r
+ * Override and overwrite {@link #getFormat(Locale)} to use a different format.\r
+ * </p>\r
+ * \r
+ * @author Vaadin Ltd\r
+ * @version\r
+ * @VERSION@\r
+ * @since 7.0\r
+ */\r
+public class StringToIntegerConverter implements Converter<String, Integer> {\r
+\r
+ /**\r
+ * Returns the format used by\r
+ * {@link #convertToPresentation(Integer, Locale)} and\r
+ * {@link #convertToModel(String, Locale)}.\r
+ * \r
+ * @param locale\r
+ * The locale to use\r
+ * @return A NumberFormat instance\r
+ */\r
+ protected NumberFormat getFormat(Locale locale) {\r
+ if (locale == null) {\r
+ locale = Locale.getDefault();\r
+ }\r
+ return NumberFormat.getIntegerInstance(locale);\r
+ }\r
+\r
+ public Integer convertToModel(String value, Locale locale)\r
+ throws ConversionException {\r
+ if (value == null) {\r
+ return null;\r
+ }\r
+\r
+ // Remove leading and trailing white space\r
+ value = value.trim();\r
+\r
+ // Parse and detect errors. If the full string was not used, it is\r
+ // an error.\r
+ ParsePosition parsePosition = new ParsePosition(0);\r
+ Number parsedValue = getFormat(locale).parse(value, parsePosition);\r
+ if (parsePosition.getIndex() != value.length()) {\r
+ throw new ConversionException("Could not convert '" + value\r
+ + "' to " + getModelType().getName());\r
+ }\r
+\r
+ if (parsedValue == null) {\r
+ // Convert "" to null\r
+ return null;\r
+ }\r
+ return parsedValue.intValue();\r
+ }\r
+\r
+ public String convertToPresentation(Integer value, Locale locale)\r
+ throws ConversionException {\r
+ if (value == null) {\r
+ return null;\r
+ }\r
+\r
+ return getFormat(locale).format(value);\r
+ }\r
+\r
+ public Class<Integer> getModelType() {\r
+ return Integer.class;\r
+ }\r
+\r
+ public Class<String> getPresentationType() {\r
+ return String.class;\r
+ }\r
+\r
+}\r
--- /dev/null
+/*\r
+@VaadinApache2LicenseForJavaFiles@\r
+ */\r
+\r
+package com.vaadin.data.util.converter;\r
+\r
+import java.text.NumberFormat;\r
+import java.text.ParsePosition;\r
+import java.util.Locale;\r
+\r
+/**\r
+ * A converter that converts from {@link Number} to {@link String} and back.\r
+ * Uses the given locale and {@link NumberFormat} for formatting and parsing.\r
+ * <p>\r
+ * Override and overwrite {@link #getFormat(Locale)} to use a different format.\r
+ * </p>\r
+ * \r
+ * @author Vaadin Ltd\r
+ * @version\r
+ * @VERSION@\r
+ * @since 7.0\r
+ */\r
+public class StringToNumberConverter implements Converter<String, Number> {\r
+\r
+ /**\r
+ * Returns the format used by {@link #convertToPresentation(Number, Locale)}\r
+ * and {@link #convertToModel(String, Locale)}.\r
+ * \r
+ * @param locale\r
+ * The locale to use\r
+ * @return A NumberFormat instance\r
+ */\r
+ protected NumberFormat getFormat(Locale locale) {\r
+ if (locale == null) {\r
+ locale = Locale.getDefault();\r
+ }\r
+\r
+ return NumberFormat.getNumberInstance(locale);\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see\r
+ * com.vaadin.data.util.converter.Converter#convertFromTargetToSource(java\r
+ * .lang.Object, java.util.Locale)\r
+ */\r
+ public Number convertToModel(String value, Locale locale)\r
+ throws ConversionException {\r
+ if (value == null) {\r
+ return null;\r
+ }\r
+\r
+ // Remove leading and trailing white space\r
+ value = value.trim();\r
+\r
+ // Parse and detect errors. If the full string was not used, it is\r
+ // an error.\r
+ ParsePosition parsePosition = new ParsePosition(0);\r
+ Number parsedValue = getFormat(locale).parse(value, parsePosition);\r
+ if (parsePosition.getIndex() != value.length()) {\r
+ throw new ConversionException("Could not convert '" + value\r
+ + "' to " + getPresentationType().getName());\r
+ }\r
+\r
+ if (parsedValue == null) {\r
+ // Convert "" to null\r
+ return null;\r
+ }\r
+ return parsedValue;\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see\r
+ * com.vaadin.data.util.converter.Converter#convertFromSourceToTarget(java\r
+ * .lang.Object, java.util.Locale)\r
+ */\r
+ public String convertToPresentation(Number value, Locale locale)\r
+ throws ConversionException {\r
+ if (value == null) {\r
+ return null;\r
+ }\r
+\r
+ return getFormat(locale).format(value);\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see com.vaadin.data.util.converter.Converter#getSourceType()\r
+ */\r
+ public Class<Number> getModelType() {\r
+ return Number.class;\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * \r
+ * @see com.vaadin.data.util.converter.Converter#getTargetType()\r
+ */\r
+ public Class<String> getPresentationType() {\r
+ return String.class;\r
+ }\r
+\r
+}\r
* A converter used to convert from the data model type to the field type
* and vice versa.
*/
- private Converter<Object, T> converter = null;
+ private Converter<T, Object> converter = null;
/**
* Connected data-source.
*/
* from
*/
public void setConverter(Class<?> datamodelType) {
- Converter<?, T> converter = null;
+ Converter<T, ?> converter = null;
Application app = Application.getCurrentApplication();
if (app != null) {
ConverterFactory factory = app.getConverterFactory();
- converter = (Converter<?, T>) factory.createConverter(
- datamodelType, getType());
+ converter = (Converter<T, ?>) factory.createConverter(getType(),
+ datamodelType);
}
setConverter(converter);
}
* an exception.
*/
try {
- return converter.convertToModel(fieldValue,
- getLocale());
+ return converter.convertToModel(fieldValue, getLocale());
} catch (com.vaadin.data.util.converter.Converter.ConversionException e) {
throw new Converter.ConversionException(
getValueConversionError(converter.getModelType()), e);
// to validate the converted value
if (getConverter() != null) {
try {
- valueToValidate = getConverter().convertToModel(
- fieldValue, getLocale());
+ valueToValidate = getConverter().convertToModel(fieldValue,
+ getLocale());
} catch (Exception e) {
throw new InvalidValueException(
getValueConversionError(getConverter().getModelType()));
*
* @return The converter or null if none is set.
*/
- public Converter<Object, T> getConverter() {
+ public Converter<T, Object> getConverter() {
return converter;
}
/**
- * Sets the converter used to convert the property data source value to the
- * field value. The converter must have a target type that matches the field
- * type.
- *
- * The source for the converter is the data model and the target is the
- * field.
+ * Sets the converter used to convert the field value to property data
+ * source type. The converter must have a presentation type that matches the
+ * field type.
*
* @param converter
* The new converter to use.
*/
- public void setConverter(Converter<?, T> converter) {
- this.converter = (Converter<Object, T>) converter;
+ public void setConverter(Converter<T, ?> converter) {
+ this.converter = (Converter<T, Object>) converter;
requestRepaint();
}
private boolean painted = false;
- private HashMap<Object, Converter> propertyValueConverters = new HashMap<Object, Converter>();
+ private HashMap<Object, Converter<String, Object>> propertyValueConverters = new HashMap<Object, Converter<String, Object>>();
/* Table constructors */
if (property == null) {
return "";
}
- Converter<Object, String> converter = null;
+ Converter<String, Object> converter = null;
if (hasConverter(colId)) {
converter = getConverter(colId);
} else {
Application app = Application.getCurrentApplication();
if (app != null) {
- converter = (Converter<Object, String>) app
- .getConverterFactory().createConverter(
- property.getType(), String.class);
+ converter = (Converter<String, Object>) app
+ .getConverterFactory().createConverter(String.class,
+ property.getType());
}
}
Object value = property.getValue();
* @param converter
* The converter to use for the property id
*/
- public void setConverter(Object propertyId, Converter<?, String> converter) {
+ public void setConverter(Object propertyId, Converter<String, ?> converter) {
if (!getContainerPropertyIds().contains(propertyId)) {
throw new IllegalArgumentException("PropertyId " + propertyId
+ " must be in the container");
// + ") must match converter source type ("
// + converter.getSourceType() + ")");
// }
- propertyValueConverters.put(propertyId, converter);
+ propertyValueConverters.put(propertyId,
+ (Converter<String, Object>) converter);
refreshRowCache();
}
* @return The converter used to format the propertyId or null if no
* converter has been set
*/
- public Converter<Object, String> getConverter(Object propertyId) {
+ public Converter<String, Object> getConverter(Object propertyId) {
return propertyValueConverters.get(propertyId);
}
\r
import com.vaadin.data.util.MethodProperty;\r
import com.vaadin.data.util.converter.Converter;\r
-import com.vaadin.data.util.converter.IntegerToStringConverter;\r
+import com.vaadin.data.util.converter.StringToIntegerConverter;\r
import com.vaadin.tests.data.bean.Address;\r
import com.vaadin.tests.data.bean.Country;\r
import com.vaadin.tests.data.bean.Person;\r
\r
public void testFailingConversion() {\r
TextField tf = new TextField();\r
- tf.setConverter(new Converter<Integer, String>() {\r
+ tf.setConverter(new Converter<String, Integer>() {\r
\r
public Integer convertToModel(String value, Locale locale) {\r
throw new ConversionException("Failed");\r
public void testIntegerStringConversion() {\r
TextField tf = new TextField();\r
\r
- tf.setConverter(new IntegerToStringConverter());\r
+ tf.setConverter(new StringToIntegerConverter());\r
tf.setPropertyDataSource(new MethodProperty<Integer>(paulaBean, "age"));\r
assertEquals(34, tf.getPropertyDataSource().getValue());\r
assertEquals("34", tf.getValue());\r
CheckBox cb = new CheckBox();\r
cb.setConverter(new Converter<Boolean, Boolean>() {\r
\r
- public Boolean convertToModel(Boolean value,\r
- Locale locale) {\r
+ public Boolean convertToModel(Boolean value, Locale locale) {\r
// value from a CheckBox should never be null as long as it is\r
// not set to null (handled by conversion below).\r
assertNotNull(value);\r
return value;\r
}\r
\r
- public Boolean convertToPresentation(Boolean value,\r
- Locale locale) {\r
+ public Boolean convertToPresentation(Boolean value, Locale locale) {\r
// Datamodel -> field\r
if (value == null) {\r
return false;\r
import com.vaadin.data.util.converter.Converter;\r
\r
public class Vaadin6ImplicitDoubleConverter implements\r
- Converter<Double, String> {\r
+ Converter<String, Double> {\r
\r
public Double convertToModel(String value, Locale locale)\r
throws com.vaadin.data.util.converter.Converter.ConversionException {\r
import com.vaadin.data.Property.ValueChangeListener;\r
import com.vaadin.data.util.BeanItemContainer;\r
import com.vaadin.data.util.converter.Converter;\r
-import com.vaadin.data.util.converter.NumberToStringConverter;\r
+import com.vaadin.data.util.converter.StringToNumberConverter;\r
import com.vaadin.tests.components.TestBase;\r
import com.vaadin.tests.data.bean.Address;\r
import com.vaadin.tests.data.bean.Country;\r
}\r
\r
private void addConverters(Table t) {\r
- t.setConverter("sex", new Converter<Sex, String>() {\r
+ t.setConverter("sex", new Converter<String, Sex>() {\r
\r
public Sex convertToModel(String value, Locale locale)\r
throws com.vaadin.data.util.converter.Converter.ConversionException {\r
- // not used in this test - Table only converts from source to\r
- // target\r
+ // not used in this test - Table only converts to presentation\r
return null;\r
}\r
\r
return String.class;\r
}\r
});\r
- t.setConverter("deceased", new Converter<Boolean, String>() {\r
+ t.setConverter("deceased", new Converter<String, Boolean>() {\r
\r
public Boolean convertToModel(String value, Locale locale) {\r
// not used in this test - Table only converts from source to\r
return String.class;\r
}\r
});\r
- t.setConverter("age", new Converter<Integer, String>() {\r
+ t.setConverter("age", new Converter<String, Integer>() {\r
\r
public Integer convertToModel(String value, Locale locale)\r
throws com.vaadin.data.util.converter.Converter.ConversionException {\r
return String.class;\r
}\r
});\r
- t.setConverter("address", new Converter<Address, String>() {\r
+ t.setConverter("address", new Converter<String, Address>() {\r
\r
public Address convertToModel(String value, Locale locale)\r
throws ConversionException {\r
- // not used in this test - Table only converts from source to\r
- // target\r
+ // not used in this test - Table only converts to presentation\r
return null;\r
}\r
\r
\r
});\r
\r
- t.setConverter("rent", new NumberToStringConverter() {\r
+ t.setConverter("rent", new StringToNumberConverter() {\r
@Override\r
protected NumberFormat getFormat(Locale locale) {\r
return NumberFormat.getCurrencyInstance(locale);\r
import com.vaadin.data.fieldbinder.FieldBinder.CommitHandler;\r
import com.vaadin.data.fieldbinder.FormBuilder;\r
import com.vaadin.data.util.BeanItem;\r
-import com.vaadin.data.util.converter.BooleanToStringConverter;\r
+import com.vaadin.data.util.converter.StringToBooleanConverter;\r
import com.vaadin.data.validator.EmailValidator;\r
import com.vaadin.data.validator.IntegerRangeValidator;\r
import com.vaadin.data.validator.StringLengthValidator;\r
age.addValidator(new IntegerRangeValidator(\r
"Must be between 0 and 150, {0} is not", 0, 150));\r
sex.setPageLength(0);\r
- deceased.setConverter(new BooleanToStringConverter() {\r
+ deceased.setConverter(new StringToBooleanConverter() {\r
@Override\r
protected String getTrueString() {\r
return "YAY!";\r