aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtur Signell <artur@vaadin.com>2014-12-09 22:16:50 +0200
committerHenri Sara <hesara@vaadin.com>2014-12-11 07:20:28 +0000
commitc4e4f449464f22c11e33b92f8aa578db959e92b2 (patch)
treeb673bea7db35b3a55a13d4cb07e4012ee68c8f8c
parentb91063f884108bfc69a617846d91263339b062fe (diff)
downloadvaadin-framework-c4e4f449464f22c11e33b92f8aa578db959e92b2.tar.gz
vaadin-framework-c4e4f449464f22c11e33b92f8aa578db959e92b2.zip
Convert empty string to null Enum value, only throw ConversionExceptions (#14756)
Change-Id: I027a245975db12e3661740bd233edd98e73994e9
-rw-r--r--server/src/com/vaadin/data/util/converter/StringToEnumConverter.java20
-rw-r--r--server/tests/src/com/vaadin/tests/data/converter/TestStringToEnumConverter.java14
-rw-r--r--uitest/src/com/vaadin/tests/components/textfield/EnumTextField.java1
-rw-r--r--uitest/src/com/vaadin/tests/components/textfield/EnumTextFieldTest.java7
4 files changed, 30 insertions, 12 deletions
diff --git a/server/src/com/vaadin/data/util/converter/StringToEnumConverter.java b/server/src/com/vaadin/data/util/converter/StringToEnumConverter.java
index a1328d831c..29bf8fc400 100644
--- a/server/src/com/vaadin/data/util/converter/StringToEnumConverter.java
+++ b/server/src/com/vaadin/data/util/converter/StringToEnumConverter.java
@@ -34,7 +34,7 @@ public class StringToEnumConverter implements Converter<String, Enum> {
@Override
public Enum convertToModel(String value, Class<? extends Enum> targetType,
Locale locale) throws ConversionException {
- if (value == null) {
+ if (value == null || value.trim().equals("")) {
return null;
}
if (locale == null) {
@@ -46,19 +46,21 @@ public class StringToEnumConverter implements Converter<String, Enum> {
String result = value.replace(" ", "_").toUpperCase(locale);
try {
return Enum.valueOf(targetType, result);
- } catch (IllegalArgumentException ee) {
+ } catch (Exception ee) {
// There was no match. Try to compare the available values to see if
// the constant is using something else than all upper case
-
- EnumSet<?> set = EnumSet.allOf(targetType);
- for (Enum e : set) {
- if (e.name().toUpperCase(locale).equals(result)) {
- return e;
+ try {
+ EnumSet<?> set = EnumSet.allOf(targetType);
+ for (Enum e : set) {
+ if (e.name().toUpperCase(locale).equals(result)) {
+ return e;
+ }
}
+ } catch (Exception e) {
}
- // Fallback did not work either, re-throw original exception so user
- // knows what went wrong
+ // Fallback did not work either, re-throw original exception so
+ // user knows what went wrong
throw new ConversionException(ee);
}
}
diff --git a/server/tests/src/com/vaadin/tests/data/converter/TestStringToEnumConverter.java b/server/tests/src/com/vaadin/tests/data/converter/TestStringToEnumConverter.java
index 2b19395c08..5dc24ca43a 100644
--- a/server/tests/src/com/vaadin/tests/data/converter/TestStringToEnumConverter.java
+++ b/server/tests/src/com/vaadin/tests/data/converter/TestStringToEnumConverter.java
@@ -3,6 +3,7 @@ package com.vaadin.tests.data.converter;
import junit.framework.TestCase;
import com.vaadin.data.util.converter.Converter;
+import com.vaadin.data.util.converter.Converter.ConversionException;
import com.vaadin.data.util.converter.ReverseConverter;
import com.vaadin.data.util.converter.StringToEnumConverter;
@@ -16,6 +17,19 @@ public class TestStringToEnumConverter extends TestCase {
Converter<Enum, String> reverseConverter = new ReverseConverter<Enum, String>(
converter);
+ public void testEmptyStringConversion() {
+ assertEquals(null, converter.convertToModel("", Enum.class, null));
+ }
+
+ public void testInvalidEnumClassConversion() {
+ try {
+ converter.convertToModel("Foo", Enum.class, null);
+ fail("No exception thrown");
+ } catch (ConversionException e) {
+ // OK
+ }
+ }
+
public void testNullConversion() {
assertEquals(null, converter.convertToModel(null, Enum.class, null));
}
diff --git a/uitest/src/com/vaadin/tests/components/textfield/EnumTextField.java b/uitest/src/com/vaadin/tests/components/textfield/EnumTextField.java
index 67b3b84688..99e08ae32d 100644
--- a/uitest/src/com/vaadin/tests/components/textfield/EnumTextField.java
+++ b/uitest/src/com/vaadin/tests/components/textfield/EnumTextField.java
@@ -31,6 +31,7 @@ public class EnumTextField extends AbstractTestUIWithLog {
@Override
protected void setup(VaadinRequest request) {
final TextField tf = new TextField();
+ tf.setNullRepresentation("");
tf.addValueChangeListener(new ValueChangeListener() {
@Override
diff --git a/uitest/src/com/vaadin/tests/components/textfield/EnumTextFieldTest.java b/uitest/src/com/vaadin/tests/components/textfield/EnumTextFieldTest.java
index 113acee3a2..fe26fb7aad 100644
--- a/uitest/src/com/vaadin/tests/components/textfield/EnumTextFieldTest.java
+++ b/uitest/src/com/vaadin/tests/components/textfield/EnumTextFieldTest.java
@@ -27,8 +27,7 @@ public class EnumTextFieldTest extends SingleBrowserTest {
public void validValues() {
openTestURL();
$(TextFieldElement.class).first().clear();
- $(TextFieldElement.class).first().sendKeys("Value");
- $(TextFieldElement.class).first().sendKeys(Keys.TAB);
+ $(TextFieldElement.class).first().sendKeys("Value", Keys.TAB);
Assert.assertEquals("3. Value (valid)", getLogRow(0));
$(TextFieldElement.class).first().clear();
@@ -41,13 +40,15 @@ public class EnumTextFieldTest extends SingleBrowserTest {
$(TextFieldElement.class).first().sendKeys(Keys.TAB);
Assert.assertEquals("7. The last value (valid)", getLogRow(0));
+ $(TextFieldElement.class).first().clear();
+ Assert.assertEquals("8. null (valid)", getLogRow(0));
+
}
@Test
public void invalidValue() {
openTestURL();
$(TextFieldElement.class).first().clear();
- Assert.assertEquals("2. (INVALID)", getLogRow(0));
$(TextFieldElement.class).first().sendKeys("bar");
$(TextFieldElement.class).first().sendKeys(Keys.TAB);