Title: [waffle-scm] [639] trunk/waffle-core/src/test/java/org/codehaus/waffle/bind/converters: Refactored ListValueConverter to use NumberFormat to parse numbers.
Revision
639
Author
mauro
Date
2008-04-20 17:27:30 -0500 (Sun, 20 Apr 2008)

Log Message

Refactored ListValueConverter to use NumberFormat to parse numbers.

Modified Paths


Diff

Modified: trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/ListValueConverter.java (638 => 639)

--- trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/ListValueConverter.java	2008-04-20 21:36:15 UTC (rev 638)
+++ trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/ListValueConverter.java	2008-04-20 22:27:30 UTC (rev 639)
@@ -10,12 +10,10 @@
  *****************************************************************************/
 package org.codehaus.waffle.bind.converters;
 
-import static java.lang.Double.parseDouble;
-import static java.lang.Float.parseFloat;
-import static java.lang.Integer.parseInt;
-import static java.lang.Long.parseLong;
 import static java.util.Arrays.asList;
 
+import java.text.NumberFormat;
+import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -30,8 +28,7 @@
  *  <li>"bind.error.list" ([EMAIL PROTECTED] #BIND_ERROR_LIST_KEY}): list is <code>null</code> or empty (message defaults to [EMAIL PROTECTED] #DEFAULT_LIST_MESSAGE})</li>
  * </ul>
  *  
- * The converter also looks to see if the values in the list are numbers (in order: longs, ints, doubles or floats) and if so
- * parses them to the appropriate Number instance.
+ * The converter also looks to see if the values in the list are numbers and if so parses them using the default <code>NumberFormat</code> instance.
  * 
  * @author Mauro Talevi
  */
@@ -61,84 +58,32 @@
         if ( values.size() == 0 ){
             return (T) values;
         }
-        if ( areLongs(values) ){
-            return (T) toLongs(values);
-        } else if ( areIntegers(values) ){
-            return (T) toIntegers(values);
-        } else if ( areDoubles(values)) {
-            return (T) toDoubles(values);
-        } else if ( areFloats(values) ){
-            return (T) toFloats(values);
-        } 
+        if ( areNumbers(values) ){
+            return (T) toNumbers(values);            
+        }
         return (T) values;
     }
-
-    private boolean areLongs(List<String> values) {
-        try {
-            parseLong(values.get(0));
-            return true;
-        } catch ( NumberFormatException e) {
-            return false;
-        }
-    }
-
-    private List<Long> toLongs(List<String> values) {
-        List<Long> list = new ArrayList<Long>();
-        for ( String value : values ){
-            list.add(parseLong(value));
-        }
-        return list;
-    }
     
-    private boolean areIntegers(List<String> values) {
+    private boolean areNumbers(List<String> values) {
         try {
-            parseInt(values.get(0));
+            NumberFormat.getInstance().parse(values.get(0));
             return true;
-        } catch ( NumberFormatException e) {
+        } catch ( ParseException e) {
             return false;
         }
     }
-
-    private List<Integer> toIntegers(List<String> values) {
-        List<Integer> list = new ArrayList<Integer>();
-        for ( String value : values ){
-            list.add(parseInt(value));
-        }
-        return list;
-    }
     
-    private boolean areDoubles(List<String> values) {
-        try {
-            parseDouble(values.get(0));
-            return true;
-        } catch ( NumberFormatException e) {
-            return false;
-        }
-    }
-
-    private List<Double> toDoubles(List<String> values) {
-        List<Double> list = new ArrayList<Double>();
+    private List<Number> toNumbers(List<String> values) {
+        NumberFormat format = NumberFormat.getInstance();
+        List<Number> list = new ArrayList<Number>();
         for ( String value : values ){
-            list.add(parseDouble(value));
+            try {
+                list.add(format.parse(value));                
+            } catch (ParseException e) {
+                // skip unparseable
+            }
         }
         return list;
     }
 
-    private boolean areFloats(List<String> values) {
-        try {
-            parseFloat(values.get(0));
-            return true;
-        } catch ( NumberFormatException e) {
-            return false;
-        }
-    }
-
-    private List<Float> toFloats(List<String> values) {
-        List<Float> list = new ArrayList<Float>();
-        for ( String value : values ){
-            list.add(parseFloat(value));
-        }
-        return list;
-    }
-    
 }

Modified: trunk/waffle-core/src/test/java/org/codehaus/waffle/bind/converters/ListValueConverterTest.java (638 => 639)

--- trunk/waffle-core/src/test/java/org/codehaus/waffle/bind/converters/ListValueConverterTest.java	2008-04-20 21:36:15 UTC (rev 638)
+++ trunk/waffle-core/src/test/java/org/codehaus/waffle/bind/converters/ListValueConverterTest.java	2008-04-20 22:27:30 UTC (rev 639)
@@ -25,8 +25,8 @@
 
     private static final List<Integer> INTEGERS = asList(1,2,3);
     private static final List<Long> LONGS = asList(1L,2L,3L);
+    private static final List<Double> DOUBLES = asList(0.1d,0.2d,0.3d);
     private static final List<Float> FLOATS = asList(0.1f,0.2f,0.3f);
-    private static final List<Double> DOUBLES = asList(0.1d,0.2d,0.3d);
     
     private MessageResourcesConfiguration configuration = new MessageResourcesConfiguration(){
 
@@ -49,14 +49,15 @@
     public void canConvert() throws OgnlException {
         DefaultMessageResources resources = new DefaultMessageResources(configuration);
         ListValueConverter converter = new ListValueConverter(resources);
-        assertCanConvertValueToList(converter, INTEGERS, "1,2,3");
-        assertCanConvertValueToList(converter, LONGS, "1,2,3");
-        assertCanConvertValueToList(converter, FLOATS, "0.1,0.2,0.3");
-        assertCanConvertValueToList(converter, DOUBLES, "0.1,0.2,0.3");
+        assertCanConvertValueToList(converter, INTEGERS, "1,2,3", Integer.class);
+        assertCanConvertValueToList(converter, LONGS, "1,2,3", Long.class);
+        assertCanConvertValueToList(converter, DOUBLES, "0.1,0.2,0.3", Double.class);
+        assertCanConvertValueToList(converter, FLOATS, "0.1,0.2,0.3", Float.class);
     }
 
-    private void assertCanConvertValueToList(ListValueConverter converter, List<?> list, String value) {
+    private void assertCanConvertValueToList(ListValueConverter converter, List<?> list, String value, Class<? extends Number> type) {
         assertEquals(list.toString(), converter.convertValue("property-name", value, List.class).toString());
+        assertTrue(list.get(0).getClass().isAssignableFrom(type));
     }
 
     @Test


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to