aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorelmot <elmot@vaadin.com>2015-07-10 12:09:52 +0300
committerVaadin Code Review <review@vaadin.com>2015-07-15 08:46:21 +0000
commitb5365d5cca1a25efdb0b80855d28d20da71111d1 (patch)
tree32acac948b5e93a449261e9af6a7c8ffd4a795b2
parent0f9d0b0bf1cd5fb58f47f22bd6d52a9fac31c530 (diff)
downloadvaadin-framework-b5365d5cca1a25efdb0b80855d28d20da71111d1.tar.gz
vaadin-framework-b5365d5cca1a25efdb0b80855d28d20da71111d1.zip
StringToBooleanConverter API improved (#18466)
Added simple customization for text representation Added API for locale-specific conversion Change-Id: I866b37bb085e85ef3d67e9d5e6db82b22e9bc464
-rw-r--r--server/src/com/vaadin/data/util/converter/StringToBooleanConverter.java83
-rw-r--r--server/tests/src/com/vaadin/tests/data/converter/StringToBooleanConverterTest.java34
2 files changed, 99 insertions, 18 deletions
diff --git a/server/src/com/vaadin/data/util/converter/StringToBooleanConverter.java b/server/src/com/vaadin/data/util/converter/StringToBooleanConverter.java
index 0e802da879..dafcf8dac2 100644
--- a/server/src/com/vaadin/data/util/converter/StringToBooleanConverter.java
+++ b/server/src/com/vaadin/data/util/converter/StringToBooleanConverter.java
@@ -19,20 +19,43 @@ package com.vaadin.data.util.converter;
import java.util.Locale;
/**
- * A converter that converts from {@link String} to {@link Boolean} and back.
- * The String representation is given by Boolean.toString().
- * <p>
- * Leading and trailing white spaces are ignored when converting from a String.
- * </p>
- *
+ * A converter that converts from {@link String} to {@link Boolean} and back. The String representation is given by
+ * {@link Boolean#toString()} or provided in constructor {@link #StringToBooleanConverter(String, String)}.
+ * <p> Leading and trailing white spaces are ignored when converting from a String. </p>
+ * <p> For language-dependent representation, subclasses should overwrite {@link #getFalseString(Locale)} and {@link #getTrueString(Locale)}</p>
+ *
* @author Vaadin Ltd
* @since 7.0
*/
public class StringToBooleanConverter implements Converter<String, Boolean> {
+ private final String trueString;
+
+ private final String falseString;
+
+ /**
+ * Creates converter with default string representations - "true" and "false"
+ *
+ */
+ public StringToBooleanConverter() {
+ this(Boolean.TRUE.toString(), Boolean.FALSE.toString());
+ }
+
+ /**
+ * Creates converter with custom string representation.
+ *
+ * @since
+ * @param falseString string representation for <code>false</code>
+ * @param trueString string representation for <code>true</code>
+ */
+ public StringToBooleanConverter(String trueString, String falseString) {
+ this.trueString = trueString;
+ this.falseString = falseString;
+ }
+
/*
* (non-Javadoc)
- *
+ *
* @see
* com.vaadin.data.util.converter.Converter#convertToModel(java.lang.Object,
* java.lang.Class, java.util.Locale)
@@ -59,26 +82,26 @@ public class StringToBooleanConverter implements Converter<String, Boolean> {
}
/**
- * Gets the string representation for true. Default is "true".
- *
+ * Gets the string representation for true. Default is "true", if not set in constructor.
+ *
* @return the string representation for true
*/
protected String getTrueString() {
- return Boolean.TRUE.toString();
+ return trueString;
}
/**
- * Gets the string representation for false. Default is "false".
- *
+ * Gets the string representation for false. Default is "false", if not set in constructor.
+ *
* @return the string representation for false
*/
protected String getFalseString() {
- return Boolean.FALSE.toString();
+ return falseString;
}
/*
* (non-Javadoc)
- *
+ *
* @see
* com.vaadin.data.util.converter.Converter#convertToPresentation(java.lang
* .Object, java.lang.Class, java.util.Locale)
@@ -91,15 +114,39 @@ public class StringToBooleanConverter implements Converter<String, Boolean> {
return null;
}
if (value) {
- return getTrueString();
+ return getTrueString(locale);
} else {
- return getFalseString();
+ return getFalseString(locale);
}
}
+ /**
+ * Gets the locale-depended string representation for false.
+ * Default is locale-independent value provided by {@link #getFalseString()}
+ *
+ * @since
+ * @param locale to be used
+ * @return the string representation for false
+ */
+ protected String getFalseString(Locale locale) {
+ return getFalseString();
+ }
+
+ /**
+ * Gets the locale-depended string representation for true.
+ * Default is locale-independent value provided by {@link #getTrueString()}
+ *
+ * @since
+ * @param locale to be used
+ * @return the string representation for true
+ */
+ protected String getTrueString(Locale locale) {
+ return getTrueString();
+ }
+
/*
* (non-Javadoc)
- *
+ *
* @see com.vaadin.data.util.converter.Converter#getModelType()
*/
@Override
@@ -109,7 +156,7 @@ public class StringToBooleanConverter implements Converter<String, Boolean> {
/*
* (non-Javadoc)
- *
+ *
* @see com.vaadin.data.util.converter.Converter#getPresentationType()
*/
@Override
diff --git a/server/tests/src/com/vaadin/tests/data/converter/StringToBooleanConverterTest.java b/server/tests/src/com/vaadin/tests/data/converter/StringToBooleanConverterTest.java
index f734d76633..6e81af97a3 100644
--- a/server/tests/src/com/vaadin/tests/data/converter/StringToBooleanConverterTest.java
+++ b/server/tests/src/com/vaadin/tests/data/converter/StringToBooleanConverterTest.java
@@ -4,9 +4,25 @@ import junit.framework.TestCase;
import com.vaadin.data.util.converter.StringToBooleanConverter;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
public class StringToBooleanConverterTest extends TestCase {
StringToBooleanConverter converter = new StringToBooleanConverter();
+ StringToBooleanConverter yesNoConverter = new StringToBooleanConverter("yes","no");
+ StringToBooleanConverter localeConverter = new StringToBooleanConverter() {
+ @Override
+ public String getFalseString(Locale locale) {
+ return SimpleDateFormat.getDateInstance(SimpleDateFormat.LONG,locale).format(new Date(3000000000000L));
+ }
+
+ @Override
+ public String getTrueString(Locale locale) {
+ return SimpleDateFormat.getDateInstance(SimpleDateFormat.LONG,locale).format(new Date(2000000000000L));
+ }
+ };
public void testNullConversion() {
assertEquals(null, converter.convertToModel(null, Boolean.class, null));
@@ -20,4 +36,22 @@ public class StringToBooleanConverterTest extends TestCase {
assertTrue(converter.convertToModel("true", Boolean.class, null));
assertFalse(converter.convertToModel("false", Boolean.class, null));
}
+
+ public void testYesNoValueConversion() {
+ assertTrue(yesNoConverter.convertToModel("yes", Boolean.class, null));
+ assertFalse(yesNoConverter.convertToModel("no", Boolean.class, null));
+
+ assertEquals("yes", yesNoConverter.convertToPresentation(true, String.class, null));
+ assertEquals("no", yesNoConverter.convertToPresentation(false, String.class, null));
+ }
+
+
+ public void testLocale() {
+ assertEquals("May 18, 2033", localeConverter.convertToPresentation(true, String.class, Locale.US));
+ assertEquals("January 24, 2065", localeConverter.convertToPresentation(false, String.class, Locale.US));
+
+ assertEquals("18. Mai 2033", localeConverter.convertToPresentation(true, String.class, Locale.GERMANY));
+ assertEquals("24. Januar 2065", localeConverter.convertToPresentation(false, String.class, Locale.GERMANY));
+ }
+
}