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; } /**