You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jd...@apache.org on 2010/05/25 17:26:55 UTC

svn commit: r948075 - in /wicket/trunk: wicket-util/src/main/java/org/apache/wicket/util/convert/converter/ wicket/src/test/java/org/apache/wicket/util/convert/converters/

Author: jdonnerstag
Date: Tue May 25 15:26:54 2010
New Revision: 948075

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

Modified:
    wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/AbstractDecimalConverter.java
    wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/BigDecimalConverter.java
    wicket/trunk/wicket/src/test/java/org/apache/wicket/util/convert/converters/ConvertersTest.java

Modified: wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/AbstractDecimalConverter.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/AbstractDecimalConverter.java?rev=948075&r1=948074&r2=948075&view=diff
==============================================================================
--- wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/AbstractDecimalConverter.java (original)
+++ wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/AbstractDecimalConverter.java Tue May 25 15:26:54 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/trunk/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/BigDecimalConverter.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/BigDecimalConverter.java?rev=948075&r1=948074&r2=948075&view=diff
==============================================================================
--- wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/BigDecimalConverter.java (original)
+++ wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/BigDecimalConverter.java Tue May 25 15:26:54 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/trunk/wicket/src/test/java/org/apache/wicket/util/convert/converters/ConvertersTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/util/convert/converters/ConvertersTest.java?rev=948075&r1=948074&r2=948075&view=diff
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/util/convert/converters/ConvertersTest.java (original)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/util/convert/converters/ConvertersTest.java Tue May 25 15:26:54 2010
@@ -383,4 +383,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