Author: jdonnerstag
Date: Tue May 25 15:26:06 2010
New Revision: 948074

URL: http://svn.apache.org/viewvc?rev=948074&view=rev
Log:
fixed WICKET-2878 BigDecimalConverter improvement
Issue: WICKET-2878

Modified:
    
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/convert/converters/AbstractDecimalConverter.java
    
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/convert/converters/BigDecimalConverter.java
    
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/convert/converters/ConvertersTest.java

Modified: 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/convert/converters/AbstractDecimalConverter.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/convert/converters/AbstractDecimalConverter.java?rev=948074&r1=948073&r2=948074&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/convert/converters/AbstractDecimalConverter.java
 (original)
+++ 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/convert/converters/AbstractDecimalConverter.java
 Tue May 25 15:26:06 2010
@@ -46,12 +46,7 @@ public abstract class AbstractDecimalCon
                if (numberFormat == null)
                {
                        numberFormat = newNumberFormat(locale);
-                       if (numberFormat instanceof DecimalFormat)
-                       {
-                               
((DecimalFormat)numberFormat).setParseBigDecimal(true);
-                       }
-
-                       numberFormats.put(locale, numberFormat);
+                       setNumberFormat(locale, numberFormat);
                }
                return (NumberFormat)numberFormat.clone();
        }
@@ -76,6 +71,11 @@ public abstract class AbstractDecimalCon
         */
        public final void setNumberFormat(final Locale locale, final 
NumberFormat numberFormat)
        {
+               if (numberFormat instanceof DecimalFormat)
+               {
+                       ((DecimalFormat)numberFormat).setParseBigDecimal(true);
+               }
+
                numberFormats.put(locale, numberFormat);
        }
 }

Modified: 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/convert/converters/BigDecimalConverter.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/convert/converters/BigDecimalConverter.java?rev=948074&r1=948073&r2=948074&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/convert/converters/BigDecimalConverter.java
 (original)
+++ 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/convert/converters/BigDecimalConverter.java
 Tue May 25 15:26:06 2010
@@ -23,21 +23,33 @@ import java.util.Locale;
  * BigDecimal converter
  * 
  * see IConverter
- * 
  */
 public class BigDecimalConverter extends AbstractDecimalConverter
 {
        private static final long serialVersionUID = 1L;
 
+       /**
+        * @see 
org.apache.wicket.util.convert.converters.AbstractConverter#getTargetType()
+        */
        @Override
        protected Class<?> getTargetType()
        {
                return BigDecimal.class;
        }
 
-       public BigDecimal convertToObject(String value, Locale locale)
+       /**
+        * @see 
org.apache.wicket.util.convert.IConverter#convertToObject(java.lang.String,
+        *      java.util.Locale)
+        */
+       public BigDecimal convertToObject(String value, final Locale locale)
        {
-               if (value == null || value.trim().equals(""))
+               if (value == null)
+               {
+                       return null;
+               }
+
+               value = value.trim();
+               if (value.trim().equals(""))
                {
                        return null;
                }
@@ -49,7 +61,9 @@ public class BigDecimalConverter extends
                }
                else if (number instanceof Double)
                {
-                       return new BigDecimal(number.doubleValue());
+                       // See link why the String is preferred for doubles
+                       // 
http://java.sun.com/j2se/1.4.2/docs/api/java/math/BigDecimal.html#BigDecimal%28double%29
+                       return new 
BigDecimal(Double.toString(number.doubleValue()));
                }
                else if (number instanceof Long)
                {

Modified: 
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/convert/converters/ConvertersTest.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/convert/converters/ConvertersTest.java?rev=948074&r1=948073&r2=948074&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/convert/converters/ConvertersTest.java
 (original)
+++ 
wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/convert/converters/ConvertersTest.java
 Tue May 25 15:26:06 2010
@@ -374,4 +374,17 @@ public final class ConvertersTest extend
                        // this is correct
                }
        }
+
+       /**
+        * See WICKET-2878 and
+        * 
http://java.sun.com/j2se/1.4.2/docs/api/java/math/BigDecimal.html#BigDecimal%28double%29
+        */
+       public void testBigDecimalsDoubles()
+       {
+               BigDecimal bd = new 
BigDecimalConverter().convertToObject("0.1", Locale.US);
+               assertTrue(bd.doubleValue() == 0.1d);
+
+               bd = new BigDecimalConverter().convertToObject("0,1", 
Locale.GERMAN);
+               assertTrue(bd.doubleValue() == 0.1d);
+       }
 }
\ No newline at end of file


Reply via email to