You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by oh...@apache.org on 2013/08/22 21:58:47 UTC

svn commit: r1516572 - in /commons/proper/configuration/trunk/src: main/java/org/apache/commons/configuration/beanutils/ main/java/org/apache/commons/configuration/convert/ test/java/org/apache/commons/configuration/convert/

Author: oheger
Date: Thu Aug 22 19:58:46 2013
New Revision: 1516572

URL: http://svn.apache.org/r1516572
Log:
Added a to() method to PropertyConverter expecting a DefaultConversionHandler.

This variant of the method obtains meta information required for the conversion
(e.g. the date format) from the conversion handler object rather than using an
Object array. The to() method operating on an Object array is going to be
removed after all calling references have been adapted.

Modified:
    commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/beanutils/DefaultBeanFactory.java
    commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/convert/DefaultConversionHandler.java
    commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/convert/PropertyConverter.java
    commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/convert/TestDefaultConversionHandler.java
    commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/convert/TestPropertyConverter.java

Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/beanutils/DefaultBeanFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/beanutils/DefaultBeanFactory.java?rev=1516572&r1=1516571&r2=1516572&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/beanutils/DefaultBeanFactory.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/beanutils/DefaultBeanFactory.java Thu Aug 22 19:58:46 2013
@@ -139,7 +139,7 @@ public class DefaultBeanFactory implemen
             Object val =
                     arg.isNestedBeanDeclaration() ? BeanHelper.createBean(arg
                             .getBeanDeclaration()) : arg.getValue();
-            args[idx] = PropertyConverter.to(types[idx], val, null);
+            args[idx] = PropertyConverter.to(types[idx], val, (Object[]) null);
             idx++;
         }
 

Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/convert/DefaultConversionHandler.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/convert/DefaultConversionHandler.java?rev=1516572&r1=1516571&r2=1516572&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/convert/DefaultConversionHandler.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/convert/DefaultConversionHandler.java Thu Aug 22 19:58:46 2013
@@ -273,7 +273,7 @@ public class DefaultConversionHandler im
         }
 
         return targetCls.cast(PropertyConverter.to(targetCls, src,
-                new Object[0]));
+                this));
     }
 
     /**

Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/convert/PropertyConverter.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/convert/PropertyConverter.java?rev=1516572&r1=1516571&r2=1516572&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/convert/PropertyConverter.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/convert/PropertyConverter.java Thu Aug 22 19:58:46 2013
@@ -181,6 +181,113 @@ public final class PropertyConverter
     }
 
     /**
+     * Performs a data type conversion from the specified value object to the
+     * given target data class. If additional information is required for this
+     * conversion, it is obtained from the passed in
+     * {@code DefaultConversionHandler} object. If the class is a primitive type
+     * (Integer.TYPE, Boolean.TYPE, etc), the value returned will use the
+     * wrapper type (Integer.class, Boolean.class, etc).
+     *
+     * @param cls the target class of the converted value
+     * @param value the value to convert
+     * @param convHandler the conversion handler object
+     * @return the converted value
+     * @throws ConversionException if the value is not compatible with the
+     *         requested type
+     */
+    public static Object to(Class<?> cls, Object value,
+            DefaultConversionHandler convHandler) throws ConversionException
+    {
+        if (cls.isInstance(value))
+        {
+            return value; // no conversion needed
+        }
+
+        if (String.class.equals(cls))
+        {
+            return String.valueOf(value);
+        }
+        if (Boolean.class.equals(cls) || Boolean.TYPE.equals(cls))
+        {
+            return toBoolean(value);
+        }
+        else if (Character.class.equals(cls) || Character.TYPE.equals(cls))
+        {
+            return toCharacter(value);
+        }
+        else if (Number.class.isAssignableFrom(cls) || cls.isPrimitive())
+        {
+            if (Integer.class.equals(cls) || Integer.TYPE.equals(cls))
+            {
+                return toInteger(value);
+            }
+            else if (Long.class.equals(cls) || Long.TYPE.equals(cls))
+            {
+                return toLong(value);
+            }
+            else if (Byte.class.equals(cls) || Byte.TYPE.equals(cls))
+            {
+                return toByte(value);
+            }
+            else if (Short.class.equals(cls) || Short.TYPE.equals(cls))
+            {
+                return toShort(value);
+            }
+            else if (Float.class.equals(cls) || Float.TYPE.equals(cls))
+            {
+                return toFloat(value);
+            }
+            else if (Double.class.equals(cls) || Double.TYPE.equals(cls))
+            {
+                return toDouble(value);
+            }
+            else if (BigInteger.class.equals(cls))
+            {
+                return toBigInteger(value);
+            }
+            else if (BigDecimal.class.equals(cls))
+            {
+                return toBigDecimal(value);
+            }
+        }
+        else if (Date.class.equals(cls))
+        {
+            return toDate(value, convHandler.getDateFormat());
+        }
+        else if (Calendar.class.equals(cls))
+        {
+            return toCalendar(value, convHandler.getDateFormat());
+        }
+        else if (URL.class.equals(cls))
+        {
+            return toURL(value);
+        }
+        else if (Locale.class.equals(cls))
+        {
+            return toLocale(value);
+        }
+        else if (isEnum(cls))
+        {
+            return convertToEnum(cls, value);
+        }
+        else if (Color.class.equals(cls))
+        {
+            return toColor(value);
+        }
+        else if (cls.getName().equals(INTERNET_ADDRESS_CLASSNAME))
+        {
+            return toInternetAddress(value);
+        }
+        else if (InetAddress.class.isAssignableFrom(cls))
+        {
+            return toInetAddress(value);
+        }
+
+        throw new ConversionException("The value '" + value + "' (" + value.getClass() + ")"
+                + " can't be converted to a " + cls.getName() + " object");
+    }
+
+    /**
      * Convert the specified object into a Boolean. Internally the
      * {@code org.apache.commons.lang.BooleanUtils} class from the
      * <a href="http://commons.apache.org/lang/">Commons Lang</a>

Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/convert/TestDefaultConversionHandler.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/convert/TestDefaultConversionHandler.java?rev=1516572&r1=1516571&r2=1516572&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/convert/TestDefaultConversionHandler.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/convert/TestDefaultConversionHandler.java Thu Aug 22 19:58:46 2013
@@ -22,7 +22,9 @@ import static org.junit.Assert.assertTru
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Calendar;
 import java.util.Collection;
+import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 
@@ -301,9 +303,40 @@ public class TestDefaultConversionHandle
     @Test
     public void testSetDateFormat()
     {
-        String dateFormat = "dd.mm.yyyy";
+        String dateFormat = "dd.MM.yyyy";
         handler.setDateFormat(dateFormat);
         assertEquals("Date format not changed", dateFormat,
                 handler.getDateFormat());
     }
+
+    /**
+     * Tests whether a conversion to a date object is possible if a specific
+     * date format is used.
+     */
+    @Test
+    public void testToDateWithFormat()
+    {
+        handler.setDateFormat("dd.MM.yyyy");
+        Date dt = handler.to("19.08.2013", Date.class, null);
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(dt);
+        assertEquals("Wrong day", 19, cal.get(Calendar.DATE));
+        assertEquals("Wrong month", Calendar.AUGUST, cal.get(Calendar.MONTH));
+        assertEquals("Wrong year", 2013, cal.get(Calendar.YEAR));
+    }
+
+    /**
+     * Tests a conversion to a Calendar object using the default format.
+     */
+    @Test
+    public void testToCalendarWithDefaultFormat()
+    {
+        Calendar cal = handler.to("2013-08-19 21:17:22", Calendar.class, null);
+        assertEquals("Wrong day", 19, cal.get(Calendar.DATE));
+        assertEquals("Wrong month", Calendar.AUGUST, cal.get(Calendar.MONTH));
+        assertEquals("Wrong year", 2013, cal.get(Calendar.YEAR));
+        assertEquals("Wrong hour", 21, cal.get(Calendar.HOUR_OF_DAY));
+        assertEquals("Wrong minute", 17, cal.get(Calendar.MINUTE));
+        assertEquals("Wrong second", 22, cal.get(Calendar.SECOND));
+    }
 }

Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/convert/TestPropertyConverter.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/convert/TestPropertyConverter.java?rev=1516572&r1=1516571&r2=1516572&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/convert/TestPropertyConverter.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/convert/TestPropertyConverter.java Thu Aug 22 19:58:46 2013
@@ -161,8 +161,8 @@ public class TestPropertyConverter
     public void testToNoConversionNeeded()
     {
         String value = "testValue";
-        assertEquals("Wrong conversion result", value,
-                PropertyConverter.to(String.class, value, null));
+        assertEquals("Wrong conversion result", value, PropertyConverter.to(
+                String.class, value, new DefaultConversionHandler()));
     }
 
     /**
@@ -172,7 +172,8 @@ public class TestPropertyConverter
     public void testToCharSuccess()
     {
         assertEquals("Wrong conversion result", Character.valueOf('t'),
-                PropertyConverter.to(Character.class, "t", null));
+                PropertyConverter.to(Character.class, "t",
+                        new DefaultConversionHandler()));
     }
 
     /**
@@ -191,7 +192,8 @@ public class TestPropertyConverter
             }
         };
         assertEquals("Wrong conversion result", Character.valueOf('X'),
-                PropertyConverter.to(Character.TYPE, value, null));
+                PropertyConverter.to(Character.TYPE, value,
+                        new DefaultConversionHandler()));
     }
 
     /**
@@ -200,7 +202,8 @@ public class TestPropertyConverter
     @Test(expected = ConversionException.class)
     public void testToCharFailed()
     {
-        PropertyConverter.to(Character.TYPE, "FF", null);
+        PropertyConverter.to(Character.TYPE, "FF",
+                new DefaultConversionHandler());
     }
 
     /**
@@ -210,7 +213,9 @@ public class TestPropertyConverter
     public void testToStringConversion()
     {
         Integer src = 42;
-        Object result = PropertyConverter.to(String.class, src, null);
+        Object result =
+                PropertyConverter.to(String.class, src,
+                        new DefaultConversionHandler());
         assertEquals("Wrong resulting string", "42", result);
     }
 }