You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ad...@apache.org on 2013/10/09 23:12:46 UTC

svn commit: r1530794 - /commons/sandbox/convert/trunk/src/main/java/org/apache/commons/convert/NumberConverters.java

Author: adrianc
Date: Wed Oct  9 21:12:46 2013
New Revision: 1530794

URL: http://svn.apache.org/r1530794
Log:
Fixed a problem with String->Number->String conversion when a format string was specified.

https://issues.apache.org/jira/browse/SANDBOX-461

Modified:
    commons/sandbox/convert/trunk/src/main/java/org/apache/commons/convert/NumberConverters.java

Modified: commons/sandbox/convert/trunk/src/main/java/org/apache/commons/convert/NumberConverters.java
URL: http://svn.apache.org/viewvc/commons/sandbox/convert/trunk/src/main/java/org/apache/commons/convert/NumberConverters.java?rev=1530794&r1=1530793&r2=1530794&view=diff
==============================================================================
--- commons/sandbox/convert/trunk/src/main/java/org/apache/commons/convert/NumberConverters.java (original)
+++ commons/sandbox/convert/trunk/src/main/java/org/apache/commons/convert/NumberConverters.java Wed Oct  9 21:12:46 2013
@@ -20,6 +20,7 @@ package org.apache.commons.convert;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.text.DecimalFormat;
 import java.text.NumberFormat;
 import java.text.ParseException;
 import java.util.Locale;
@@ -30,8 +31,7 @@ public class NumberConverters implements
 
     protected static final Class<?>[] classArray = {BigDecimal.class, BigInteger.class, Byte.class, Double.class, Integer.class, Float.class, Long.class, Short.class};
 
-    protected static Number fromString(String str, Locale locale) throws ConversionException {
-        NumberFormat nf = NumberFormat.getNumberInstance(locale);
+    protected static Number fromString(String str, NumberFormat nf) throws ConversionException {
         try {
             return nf.parse(str);
         } catch (ParseException e) {
@@ -62,21 +62,11 @@ public class NumberConverters implements
         }
     }
 
-    public static abstract class AbstractNumberConverter<S, T> extends AbstractLocalizedConverter<S, T> {
-        protected AbstractNumberConverter(Class<S> sourceClass, Class<T> targetClass) {
-            super(sourceClass, targetClass);
-        }
-
-        public T convert(S obj, Locale locale, TimeZone timeZone, String formatString) throws ConversionException {
-            return convert(obj, locale, null);
-        }
-    }
-
     /**
      * An abstract <code>Number</code> to <code>String</code> converter class
      * that implements some of the <code>LocalizedConverter</code> methods. 
      */
-    public static abstract class AbstractNumberToStringConverter<N extends Number> extends AbstractNumberConverter<N, String> {
+    public static abstract class AbstractNumberToStringConverter<N extends Number> extends AbstractLocalizedConverter<N, String> {
         public AbstractNumberToStringConverter(Class<N> sourceClass) {
             super(sourceClass, String.class);
         }
@@ -85,8 +75,12 @@ public class NumberConverters implements
             return obj.toString();
         }
 
-        public String convert(N obj, Locale locale, TimeZone timeZone) throws ConversionException {
-            return format(obj, NumberFormat.getNumberInstance(locale));
+        public String convert(N obj, Locale locale, TimeZone timeZone, String formatString) throws ConversionException {
+            if (formatString == null) {
+                return format(obj, NumberFormat.getNumberInstance(locale));
+            } else {
+                return format(obj, new DecimalFormat(formatString));
+            }
         }
 
         protected abstract String format(N obj, NumberFormat nf) throws ConversionException;
@@ -96,15 +90,19 @@ public class NumberConverters implements
      * An abstract <code>String</code> to <code>Number</code> converter class
      * that implements some of the <code>LocalizedConverter</code> methods. 
      */
-    public static abstract class AbstractStringToNumberConverter<N extends Number> extends AbstractNumberConverter<String, N> {
+    public static abstract class AbstractStringToNumberConverter<N extends Number> extends AbstractLocalizedConverter<String, N> {
         public AbstractStringToNumberConverter(Class<N> targetClass) {
             super(String.class, targetClass);
         }
 
         protected abstract N convert(Number number) throws ConversionException;
 
-        public N convert(String obj, Locale locale, TimeZone timeZone) throws ConversionException {
-            return convert(fromString(obj, locale));
+        public N convert(String obj, Locale locale, TimeZone timeZone, String formatString) throws ConversionException {
+            if (formatString == null) {
+                return convert(fromString(obj, NumberFormat.getNumberInstance(locale)));
+            } else {
+                return convert(fromString(obj, new DecimalFormat(formatString)));
+            }
         }
     }