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