- 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
- trunk/waffle-core/src/main/java/org/codehaus/waffle/bind/converters/ListValueConverter.java
- trunk/waffle-core/src/test/java/org/codehaus/waffle/bind/converters/ListValueConverterTest.java
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:
