You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2013/05/09 12:12:19 UTC
git commit: ISIS-396: fix for parsing of BigDecimal values.
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 <da...@apache.org>
Authored: Thu May 9 12:11:43 2013 +0200
Committer: Dan Haywood <da...@apache.org>
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);
+ }
+
+
+}