Author: mgrigorov
Date: Sat May  7 15:53:13 2011
New Revision: 1100561

URL: http://svn.apache.org/viewvc?rev=1100561&view=rev
Log:
WICKET-3680 Make Objects.convertValue() generic


Modified:
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/lang/PropertyResolverConverter.java
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java
    
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/lang/Objects.java

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java?rev=1100561&r1=1100560&r2=1100561&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java 
(original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java 
Sat May  7 15:53:13 2011
@@ -99,10 +99,10 @@ public class ConverterLocator implements
 
                        try
                        {
-                               Object converted = Objects.convertValue(value, 
theType);
-                               if 
(theType.isAssignableFrom(converted.getClass()))
+                               C converted = Objects.convertValue(value, 
theType);
+                               if (converted != null)
                                {
-                                       return theType.cast(converted);
+                                       return converted;
                                }
                                else
                                {
@@ -129,9 +129,9 @@ public class ConverterLocator implements
 
                        try
                        {
-                               return (String)Objects.convertValue(value, 
String.class);
+                               return Objects.convertValue(value, 
String.class);
                        }
-                       catch (Exception e)
+                       catch (RuntimeException e)
                        {
                                throw new ConversionException("Could not 
convert object of type: " +
                                        value.getClass() + " to string. 
Possible its #toString() returned null. " +

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/lang/PropertyResolverConverter.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/lang/PropertyResolverConverter.java?rev=1100561&r1=1100560&r2=1100561&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/lang/PropertyResolverConverter.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/lang/PropertyResolverConverter.java
 Sat May  7 15:53:13 2011
@@ -49,13 +49,12 @@ public class PropertyResolverConverter i
        /**
         * @param <T>
         *            target type
-        * @param <I>
-        *            input object's type
         * @param object
         * @param clz
-        * @return The converted object
+        * @return converted value of the type given, or null if the value 
cannot be converted to the
+        *         given type.
         */
-       public <T, I> Object convert(I object, Class<T> clz)
+       public <T> T convert(Object object, Class<T> clz)
        {
                if (object == null)
                {
@@ -63,7 +62,9 @@ public class PropertyResolverConverter i
                }
                if (clz.isAssignableFrom(object.getClass()))
                {
-                       return object;
+                       @SuppressWarnings("unchecked")
+                       T result = (T)object;
+                       return result;
                }
                IConverter<T> converter = converterSupplier.getConverter(clz);
                if (object instanceof String)
@@ -72,21 +73,27 @@ public class PropertyResolverConverter i
                }
                else if (clz == String.class)
                {
-                       return convertToString(object, locale);
+                       @SuppressWarnings("unchecked")
+                       T result = (T)convertToString(object, locale);
+                       return result;
                }
                else
                {
+                       T result;
                        try
                        {
-                               return Objects.convertValue(object, clz);
+                               result = Objects.convertValue(object, clz);
                        }
                        catch (RuntimeException ex)
                        {
-                               // ignore that try it the other way
+                               result = null;
                        }
-                       // go through string to convert to the right object.
-                       String tmp = convertToString(object, locale);
-                       return converter.convertToObject(tmp, locale);
+                       if (result == null)
+                       {
+                               String tmp = convertToString(object, locale);
+                               result = converter.convertToObject(tmp, locale);
+                       }
+                       return result;
                }
        }
 

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java?rev=1100561&r1=1100560&r2=1100561&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java
 (original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/lang/PropertyResolverTest.java
 Sat May  7 15:53:13 2011
@@ -615,7 +615,7 @@ public class PropertyResolverTest extend
                                private static final long serialVersionUID = 1L;
 
                                @Override
-                               public <T, I> Object convert(I object, 
java.lang.Class<T> clz)
+                               public <T> T convert(Object object, 
java.lang.Class<T> clz)
                                {
                                        return null;
                                }

Modified: 
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/lang/Objects.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/lang/Objects.java?rev=1100561&r1=1100560&r2=1100561&view=diff
==============================================================================
--- 
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/lang/Objects.java 
(original)
+++ 
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/lang/Objects.java 
Sat May  7 15:53:13 2011
@@ -283,14 +283,16 @@ public final class Objects
         * This method also detects when arrays are being converted and 
converts the components of one
         * array to the type of the other.
         * 
+        * @param <T>
+        *            target type
         * @param value
         *            an object to be converted to the given type
         * @param toType
         *            class type to be converted to
-        * @return converted value of the type given, or value if the value 
cannot be converted to the
+        * @return converted value of the type given, or null if the value 
cannot be converted to the
         *         given type.
         */
-       public static Object convertValue(final Object value, final Class<?> 
toType)
+       public static <T> T convertValue(final Object value, final Class<T> 
toType)
        {
                Object result = null;
 
@@ -362,7 +364,9 @@ public final class Objects
                                result = primitiveDefaults.get(toType);
                        }
                }
-               return (result != null) ? result : value;
+               @SuppressWarnings("unchecked")
+               T finalResult = (T)result;
+               return finalResult;
        }
 
        /**


Reply via email to