You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2012/04/04 09:36:11 UTC
[1/2] git commit: WICKET-4486 Give StringValue toEnum methods
Updated Branches:
refs/heads/master d7b32ce77 -> 0d87d94a6
WICKET-4486 Give StringValue toEnum methods
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/0d87d94a
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/0d87d94a
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/0d87d94a
Branch: refs/heads/master
Commit: 0d87d94a6084cb7c877921c786ef5270db8a8786
Parents: 6d708a1
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Apr 4 09:35:06 2012 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Wed Apr 4 09:35:06 2012 +0200
----------------------------------------------------------------------
.../org/apache/wicket/util/string/StringValue.java | 72 +++++++++++++++
.../org/apache/wicket/util/string/Strings.java | 24 +++++
.../apache/wicket/util/string/StringValueTest.java | 31 ++++++-
3 files changed, 126 insertions(+), 1 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/0d87d94a/wicket-util/src/main/java/org/apache/wicket/util/string/StringValue.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/string/StringValue.java b/wicket-util/src/main/java/org/apache/wicket/util/string/StringValue.java
index 366c52f..e8ed26b 100755
--- a/wicket-util/src/main/java/org/apache/wicket/util/string/StringValue.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/string/StringValue.java
@@ -23,6 +23,7 @@ import java.text.ParseException;
import java.util.Locale;
import org.apache.wicket.util.io.IClusterable;
+import org.apache.wicket.util.lang.Args;
import org.apache.wicket.util.lang.Objects;
import org.apache.wicket.util.time.Duration;
import org.apache.wicket.util.time.Time;
@@ -848,6 +849,77 @@ public class StringValue implements IClusterable
}
/**
+ * Convert this text to an enum.
+ *
+ * @param eClass
+ * enum type
+ * @return The value as an enum
+ * @throws StringValueConversionException
+ */
+ public final <T extends Enum<T>> T toEnum(Class<T> eClass)
+ throws StringValueConversionException
+ {
+ return Strings.toEnum(text, eClass);
+ }
+
+ /**
+ * Convert this text to an enum.
+ *
+ * @param defaultValue
+ * This will be returned if there is an error converting the value
+ * @return The value as an enum
+ */
+ public final <T extends Enum<T>> T toEnum(final T defaultValue)
+ {
+ Args.notNull(defaultValue, "defaultValue");
+ return toEnum((Class<T>)defaultValue.getClass(), defaultValue);
+ }
+
+ /**
+ * Convert this text to an enum.
+ *
+ * @param eClass
+ * enum type
+ * @param defaultValue
+ * This will be returned if there is an error converting the value
+ * @return The value as an enum
+ */
+ public final <T extends Enum<T>> T toEnum(Class<T> eClass, final T defaultValue)
+ {
+ if (text != null)
+ {
+ try
+ {
+ return toEnum(eClass);
+ }
+ catch (StringValueConversionException x)
+ {
+ if (LOG.isDebugEnabled())
+ {
+ LOG.debug(String.format("An error occurred while converting '%s' to a %s: %s",
+ text, eClass, x.getMessage()), x);
+ }
+ }
+ }
+ return defaultValue;
+ }
+
+ /**
+ * Convert to enum, returning null if text is null or empty.
+ *
+ * @param eClass
+ * enum type
+ *
+ * @return converted
+ * @throws StringValueConversionException
+ */
+ public final <T extends Enum<T>> T toOptionalEnum(Class<T> eClass)
+ throws StringValueConversionException
+ {
+ return Strings.isEmpty(text) ? null : toEnum(eClass);
+ }
+
+ /**
* Returns whether the text is null.
*
* @return <code>true</code> if the text is <code>null</code>, <code>false</code> otherwise.
http://git-wip-us.apache.org/repos/asf/wicket/blob/0d87d94a/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java b/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java
index 5bf85ee..25d70db 100755
--- a/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java
@@ -1515,4 +1515,28 @@ public final class Strings
}
return hex.toString();
}
+
+
+ /**
+ * Return this value as en enum value.
+ *
+ * @param enumClass
+ * the enum type
+ * @return an enum value
+ */
+ public static <T extends Enum<T>> T toEnum(final CharSequence value, final Class<T> enumClass)
+ {
+ Args.notNull(enumClass, "enumClass");
+ Args.notNull(value, "value");
+
+ try
+ {
+ return Enum.valueOf(enumClass, value.toString());
+ }
+ catch (Exception e)
+ {
+ throw new StringValueConversionException(
+ String.format("Cannot convert '{}' to enum constant of type '{}'.", value, enumClass), e);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/0d87d94a/wicket-util/src/test/java/org/apache/wicket/util/string/StringValueTest.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/test/java/org/apache/wicket/util/string/StringValueTest.java b/wicket-util/src/test/java/org/apache/wicket/util/string/StringValueTest.java
index 9e7a8bd..ef32462 100644
--- a/wicket-util/src/test/java/org/apache/wicket/util/string/StringValueTest.java
+++ b/wicket-util/src/test/java/org/apache/wicket/util/string/StringValueTest.java
@@ -80,7 +80,6 @@ public class StringValueTest extends Assert
assertEquals("unknown", sv.toString("def"));
}
-
@Test
public void toType()
{
@@ -108,5 +107,35 @@ public class StringValueTest extends Assert
sv = new StringValue("");
assertNull(sv.toOptional(String.class));
assertNull(sv.toOptional(String[].class));
+ }
+
+ static enum TestEnum {
+ FOO, BAR, BAZ
+ }
+
+ @Test
+ public void enums() throws Exception
+ {
+ assertEquals(TestEnum.FOO, new StringValue("FOO").toEnum(TestEnum.class));
+ assertEquals(TestEnum.FOO, new StringValue("FOO").toEnum(TestEnum.BAR));
+ assertEquals(TestEnum.FOO, new StringValue("FOO").toEnum(TestEnum.class, TestEnum.BAR));
+
+ assertEquals(TestEnum.BAR, new StringValue(null).toEnum(TestEnum.BAR));
+ assertEquals(TestEnum.BAZ, new StringValue("killer rabbit").toEnum(TestEnum.BAZ));
+ assertEquals(TestEnum.BAZ,
+ new StringValue("killer rabbit").toEnum(TestEnum.class, TestEnum.BAZ));
+ assertNull(new StringValue(null).toOptionalEnum(TestEnum.class));
+ }
+
+ @Test(expected = StringValueConversionException.class)
+ public void failingEnum() throws Exception
+ {
+ new StringValue("camelot").toEnum(TestEnum.class);
+ }
+
+ @Test(expected = StringValueConversionException.class)
+ public void failingEnum2() throws Exception
+ {
+ new StringValue("camelot").toOptionalEnum(TestEnum.class);
}
}