Updated Branches:
  refs/heads/master c3addb515 -> a5368b3a9

ISIS-396: fix for parsing of BigDecimal values.

was truncating in some situations... fixed impl.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/a5368b3a
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/a5368b3a
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/a5368b3a

Branch: refs/heads/master
Commit: a5368b3a997432b0e7adfa1f2c84f22f4d9c51bf
Parents: c3addb5
Author: Dan Haywood <[email protected]>
Authored: Thu May 9 12:11:43 2013 +0200
Committer: Dan Haywood <[email protected]>
Committed: Thu May 9 12:11:43 2013 +0200

----------------------------------------------------------------------
 .../scalars/jdkmath/BigDecimalConverter.java       |   29 ++++++++
 .../scalars/jdkmath/BigDecimalTextField.java       |   30 ++++++++
 .../scalars/jdkmath/JavaMathBigDecimalPanel.java   |   56 +--------------
 .../valuechoices/ValueChoicesSelect2Panel.java     |   16 +----
 .../scalars/jdkmath/BigDecimalConverterTest.java   |   36 +++++++++
 5 files changed, 98 insertions(+), 69 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/a5368b3a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverter.java
----------------------------------------------------------------------
diff --git 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverter.java
 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverter.java
new file mode 100644
index 0000000..e66e167
--- /dev/null
+++ 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverter.java
@@ -0,0 +1,29 @@
+package org.apache.isis.viewer.wicket.ui.components.scalars.jdkmath;
+
+import java.math.BigDecimal;
+import java.util.Locale;
+
+import org.apache.wicket.util.convert.IConverter;
+
+final class BigDecimalConverter implements IConverter<BigDecimal> {
+    private final Integer scale;
+    private static final long serialVersionUID = 1L;
+
+    BigDecimalConverter(Integer scale) {
+        this.scale = scale;
+    }
+
+    @Override
+    public BigDecimal convertToObject(String value, Locale locale) {
+        try {
+            return new BigDecimal(value).setScale(scale);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    @Override
+    public String convertToString(BigDecimal value, Locale locale) {
+        return value.toPlainString();
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/a5368b3a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalTextField.java
----------------------------------------------------------------------
diff --git 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalTextField.java
 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalTextField.java
new file mode 100644
index 0000000..bbbee7c
--- /dev/null
+++ 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalTextField.java
@@ -0,0 +1,30 @@
+package org.apache.isis.viewer.wicket.ui.components.scalars.jdkmath;
+
+import java.math.BigDecimal;
+
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.util.convert.IConverter;
+
+import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+
+final class BigDecimalTextField extends TextField<BigDecimal> {
+    
+        private final ScalarModel model;
+        private static final long serialVersionUID = 1L;
+
+        BigDecimalTextField(String id, IModel<BigDecimal> model, 
Class<BigDecimal> type, ScalarModel model2) {
+            super(id, model, type);
+            this.model = model2;
+        }
+
+        @SuppressWarnings("unchecked")
+        @Override
+        public <C> IConverter<C> getConverter(Class<C> type) {
+
+            final Integer scale = model.getScale();
+            return type == BigDecimal.class 
+                    ? (IConverter<C>) new BigDecimalConverter(scale) 
+                    : super.getConverter(type);
+        }
+    }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/a5368b3a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
----------------------------------------------------------------------
diff --git 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
index 2380da2..5096f44 100644
--- 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
+++ 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
@@ -20,15 +20,8 @@
 package org.apache.isis.viewer.wicket.ui.components.scalars.jdkmath;
 
 import java.math.BigDecimal;
-import java.math.MathContext;
-import java.math.RoundingMode;
-import java.text.DecimalFormat;
-import java.text.NumberFormat;
-import java.text.ParseException;
-import java.util.Locale;
 
 import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.util.convert.IConverter;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import 
org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
@@ -53,54 +46,7 @@ public class JavaMathBigDecimalPanel extends 
ScalarPanelTextFieldNumeric<BigDeci
         
         final ScalarModel model = getModel();
         
-        final TextField<BigDecimal> textField = new TextField<BigDecimal>(id, 
newTextFieldValueModel(), cls) {
-
-            private static final long serialVersionUID = 1L;
-
-            @SuppressWarnings("unchecked")
-            @Override
-            public <C> IConverter<C> getConverter(Class<C> type) {
-
-                Integer scale = model.getScale();
-                final MathContext mathContext = new MathContext(scale+1, 
RoundingMode.HALF_UP);
-                
-//                final NumberFormat numberFormat = NumberFormat.getInstance();
-//                numberFormat.setMinimumFractionDigits(scale);
-//                numberFormat.setMaximumFractionDigits(scale);
-//                numberFormat.setMaximumIntegerDigits(model.getLength());
-
-                if(type == BigDecimal.class) {
-                    return (IConverter<C>) new IConverter<BigDecimal>() {
-
-                        private static final long serialVersionUID = 1L;
-
-                        @Override
-                        public BigDecimal convertToObject(String value, Locale 
locale) {
-                            try {
-                                return new BigDecimal(value, mathContext);
-//                                final Number parsed = 
numberFormat.parse(value);
-//                                return (BigDecimal) parsed;
-                            } catch (Exception e) {
-                                return null;
-                            }
-                        }
-
-                        @Override
-                        public String convertToString(BigDecimal value, Locale 
locale) {
-                            //return numberFormat.format(value);
-                            return value.toPlainString();
-                        }}; 
-                } else {
-                    return super.getConverter(type);
-                }
-            }
-        };
-        
-        
-        return textField;
+        return new BigDecimalTextField(id, newTextFieldValueModel(), cls, 
model);
     }
-    
-    
-
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/a5368b3a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
index 79a9b29..b550d1f 100644
--- 
a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
+++ 
b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
@@ -55,7 +55,6 @@ public class ValueChoicesSelect2Panel extends 
ScalarPanelAbstract { // ScalarPan
 
     private static final String ID_SCALAR_IF_REGULAR = "scalarIfRegular";
     private static final String ID_SCALAR_IF_COMPACT = "scalarIfCompact";
-    private static final String ID_FEEDBACK = "feedback";
 
     private static final String ID_SCALAR_NAME = "scalarName";
 
@@ -124,9 +123,7 @@ public class ValueChoicesSelect2Panel extends 
ScalarPanelAbstract { // ScalarPan
                     }
                     
scalarModel.setObject(pending.getObjectAdapter(ConcurrencyChecking.NO_CHECK));
                 }
-
             }
-
         };
     }
 
@@ -181,7 +178,7 @@ public class ValueChoicesSelect2Panel extends 
ScalarPanelAbstract { // ScalarPan
             protected String getDisplayText(ObjectAdapterMemento choice) {
                 
                 final ObjectAdapter objectAdapter = 
choice.getObjectAdapter(ConcurrencyChecking.NO_CHECK);
-                return objectAdapter.titleString();
+                return objectAdapter.titleString(null);
             }
 
             @Override
@@ -210,16 +207,7 @@ public class ValueChoicesSelect2Panel extends 
ScalarPanelAbstract { // ScalarPan
             }
 
         };
-        return new Select2Choice<ObjectAdapterMemento>(id, modelObject, 
provider) {
-
-            private static final long serialVersionUID = 1L;
-            
-//            @Override
-//            protected void convertInput() {
-//                super.convertInput();
-//                modelObject.setObject(getConvertedInput());
-//            }
-        };
+        return new Select2Choice<ObjectAdapterMemento>(id, modelObject, 
provider);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/a5368b3a/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverterTest.java
----------------------------------------------------------------------
diff --git 
a/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverterTest.java
 
b/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverterTest.java
new file mode 100644
index 0000000..8b6e1c6
--- /dev/null
+++ 
b/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverterTest.java
@@ -0,0 +1,36 @@
+package org.apache.isis.viewer.wicket.ui.components.scalars.jdkmath;
+
+import java.math.BigDecimal;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class BigDecimalConverterTest {
+
+    final BigDecimal bd_123_45_scale2 = new BigDecimal("123.45").setScale(2);
+    final BigDecimal bd_123_45_scale4 = new BigDecimal("123.45").setScale(4);
+    final BigDecimal bd_123_4500_scale2 = new 
BigDecimal("123.4500").setScale(2);
+    final BigDecimal bd_123_4500_scale4 = new 
BigDecimal("123.4500").setScale(4);
+    
+    @Test
+    public void test_scale2() {
+        final BigDecimal actual = new 
BigDecimalConverter(2).convertToObject("123.45", null);
+        Assert.assertEquals(bd_123_4500_scale2, actual);
+        Assert.assertEquals(bd_123_45_scale2, actual);
+        
+        Assert.assertNotEquals(bd_123_4500_scale4, actual);
+        Assert.assertNotEquals(bd_123_45_scale4, actual);
+    }
+    
+    @Test
+    public void test_scale4() {
+        final BigDecimal actual = new 
BigDecimalConverter(4).convertToObject("123.45", null);
+        Assert.assertNotEquals(bd_123_4500_scale2, actual);
+        Assert.assertNotEquals(bd_123_45_scale2, actual);
+        
+        Assert.assertEquals(bd_123_4500_scale4, actual);
+        Assert.assertEquals(bd_123_45_scale4, actual);
+    }
+    
+
+}

Reply via email to