]> source.dussan.org Git - vaadin-framework.git/commitdiff
StringToBooleanConverter API improved (#18466)
authorelmot <elmot@vaadin.com>
Fri, 10 Jul 2015 09:09:52 +0000 (12:09 +0300)
committerVaadin Code Review <review@vaadin.com>
Wed, 15 Jul 2015 08:46:21 +0000 (08:46 +0000)
Added simple customization for text representation
Added API for locale-specific conversion

Change-Id: I866b37bb085e85ef3d67e9d5e6db82b22e9bc464

server/src/com/vaadin/data/util/converter/StringToBooleanConverter.java
server/tests/src/com/vaadin/tests/data/converter/StringToBooleanConverterTest.java

index 0e802da879769b08816e6cbbf1bec33c090f176f..dafcf8dac2761db24b72badd2fe122c544739777 100644 (file)
@@ -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
index f734d766333b63bc1ce648e4ed716e9a3656e1e8..6e81af97a3f27ccbfdd7b7f150b56226d706ea7a 100644 (file)
@@ -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));
+    }
+
 }