You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2012/02/02 03:12:31 UTC

[7/9] git commit: WICKET-4356 StringValueConversionException should not be thrown when requesting a conversion on StringValue with a default value

WICKET-4356
StringValueConversionException should not be thrown when requesting a conversion on StringValue with a default value

Improve the signature of to(Class) so the user don't need to cast.
Add toOptional(Class).


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/2f57d707
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/2f57d707
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/2f57d707

Branch: refs/heads/sandbox/feedback
Commit: 2f57d707bf86f512d16a3c1c4e2d34a3e544b915
Parents: 818620b
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Feb 1 10:37:37 2012 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Wed Feb 1 10:37:37 2012 +0200

----------------------------------------------------------------------
 .../org/apache/wicket/util/string/StringValue.java |   31 ++++++++++----
 .../apache/wicket/util/string/StringValueTest.java |   29 ++++++++++++++
 2 files changed, 51 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/2f57d707/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 bbad52b..c483e8e 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
@@ -308,46 +308,46 @@ public class StringValue implements IClusterable
 	 * @return The converted value
 	 * @throws StringValueConversionException
 	 */
-	public final Object to(final Class<?> type) throws StringValueConversionException
+	public final <T> T to(final Class<T> type) throws StringValueConversionException
 	{
 		if (type == String.class)
 		{
-			return toString();
+			return (T) toString();
 		}
 
 		if ((type == Integer.TYPE) || (type == Integer.class))
 		{
-			return toInteger();
+			return (T) toInteger();
 		}
 
 		if ((type == Long.TYPE) || (type == Long.class))
 		{
-			return toLongObject();
+			return (T) toLongObject();
 		}
 
 		if ((type == Boolean.TYPE) || (type == Boolean.class))
 		{
-			return toBooleanObject();
+			return (T) toBooleanObject();
 		}
 
 		if ((type == Double.TYPE) || (type == Double.class))
 		{
-			return toDoubleObject();
+			return (T) toDoubleObject();
 		}
 
 		if ((type == Character.TYPE) || (type == Character.class))
 		{
-			return toCharacter();
+			return (T) toCharacter();
 		}
 
 		if (type == Time.class)
 		{
-			return toTime();
+			return (T) toTime();
 		}
 
 		if (type == Duration.class)
 		{
-			return toDuration();
+			return (T) toDuration();
 		}
 
 		throw new StringValueConversionException("Cannot convert '" + toString() + "'to type " +
@@ -355,6 +355,19 @@ public class StringValue implements IClusterable
 	}
 
 	/**
+	 * Converts this StringValue to a given type or {@code null} if the value is empty.
+	 *
+	 * @param type
+	 *            The type to convert to
+	 * @return The converted value
+	 * @throws StringValueConversionException
+	 */
+	public final <T> T toOptional(final Class<T> type) throws StringValueConversionException
+	{
+		return Strings.isEmpty(text) ? null : to(type);
+	}
+	
+	/**
 	 * Convert this text to a boolean.
 	 * 
 	 * @return This string value as a boolean

http://git-wip-us.apache.org/repos/asf/wicket/blob/2f57d707/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 0b3d4f5..9e7a8bd 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,4 +80,33 @@ public class StringValueTest extends Assert
 
 		assertEquals("unknown", sv.toString("def"));
 	}
+	
+	@Test
+	public void toType()
+	{
+		StringValue sv = new StringValue("4");
+		
+		assertEquals(Long.valueOf(4), sv.to(Long.class));
+		assertEquals(Integer.valueOf(4), sv.to(Integer.class));
+		assertEquals(Double.valueOf(4), sv.to(Double.class));
+		assertEquals(Character.valueOf('4'), sv.to(Character.class));
+		assertEquals("4", sv.to(String.class));
+		
+		try
+		{
+			sv.to(String[].class);
+			fail("Should not be able to convert to unsupported type!");
+		} catch (StringValueConversionException svcx)
+		{
+			assertTrue(true);
+		}
+		
+		sv = new StringValue(null);
+		assertNull(sv.toOptional(String.class));
+		assertNull(sv.toOptional(String[].class));
+
+		sv = new StringValue("");
+		assertNull(sv.toOptional(String.class));
+		assertNull(sv.toOptional(String[].class));
+	}
 }