Browse Source

StringToBooleanConverter API improved (#18466)

Added simple customization for text representation
Added API for locale-specific conversion

Change-Id: I866b37bb085e85ef3d67e9d5e6db82b22e9bc464
tags/7.6.0.alpha3^2
elmot 8 years ago
parent
commit
b5365d5cca

+ 65
- 18
server/src/com/vaadin/data/util/converter/StringToBooleanConverter.java View 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

+ 34
- 0
server/tests/src/com/vaadin/tests/data/converter/StringToBooleanConverterTest.java View 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));
}

}

Loading…
Cancel
Save