This is an automated email from the ASF dual-hosted git repository.

doebele pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/empire-db.git


The following commit(s) were added to refs/heads/master by this push:
     new b782592  EMPIREDB-354 Auto-round BigDecimal if scale is exceeded
b782592 is described below

commit b782592aaeef4a3c49631f8fbd28d019c4981798
Author: Rainer Döbele <[email protected]>
AuthorDate: Mon May 24 13:08:40 2021 +0200

    EMPIREDB-354
    Auto-round BigDecimal if scale is exceeded
---
 .../empire/jsf2/controls/TextInputControl.java      |  6 +++---
 .../java/org/apache/empire/db/DBTableColumn.java    | 21 ++++++++++++++++-----
 2 files changed, 19 insertions(+), 8 deletions(-)

diff --git 
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextInputControl.java
 
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextInputControl.java
index c206bb1..207cdb8 100644
--- 
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextInputControl.java
+++ 
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextInputControl.java
@@ -99,7 +99,7 @@ public class TextInputControl extends InputControl
         compList.add(input);
         // add unit
         String unit = getUnitString(ii);
-        if (StringUtils.isNotEmpty(unit) && !hasFormatOption(ii, "nounit"))
+        if (StringUtils.isNotEmpty(unit))
         {   // add the unit
             compList.add(createUnitLabel("eUnit", ii, unit));
         }
@@ -366,7 +366,7 @@ public class TextInputControl extends InputControl
         writer.append(text);
         // unit?
         String unit = getUnitString(vi);
-        if (StringUtils.isNotEmpty(unit) && !hasFormatOption(vi, "nounit"))
+        if (StringUtils.isNotEmpty(unit))
         { // append unit
             writer.append(" ");
             writer.append(unit);
@@ -584,7 +584,7 @@ public class TextInputControl extends InputControl
         String format = getFormatString(vi, TextInputControl.FORMAT_UNIT, 
TextInputControl.FORMAT_UNIT_ATTRIBUTE);
         if (format != null)
         {
-            return vi.getTextResolver().resolveText(format);
+            return (format.length()>0 ? 
vi.getTextResolver().resolveText(format) : null);
         }
         // Is it a currency column
         Column column = vi.getColumn();
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBTableColumn.java 
b/empire-db/src/main/java/org/apache/empire/db/DBTableColumn.java
index 4a3447a..47e11bf 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBTableColumn.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBTableColumn.java
@@ -19,6 +19,7 @@
 package org.apache.empire.db;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.sql.Connection;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -449,7 +450,7 @@ public class DBTableColumn extends DBColumn
                     }
                 }
                 // validate Number
-                validateNumber(type, (Number)value);
+                value = validateNumber(type, (Number)value);
                 break;
 
             case FLOAT:
@@ -465,7 +466,7 @@ public class DBTableColumn extends DBColumn
                     }
                 }
                 // validate Number
-                validateNumber(type, (Number)value);
+                value = validateNumber(type, (Number)value);
                 break;
 
             case INTEGER:
@@ -487,7 +488,7 @@ public class DBTableColumn extends DBColumn
                     }
                 }
                 // validate Number
-                validateNumber(type, (Number)value);
+                value = validateNumber(type, (Number)value);
                 break;
 
             case TEXT:
@@ -514,7 +515,7 @@ public class DBTableColumn extends DBColumn
         return value;
     }
     
-    protected void validateNumber(DataType type, Number n)
+    protected Number validateNumber(DataType type, Number n)
     {
         // Check Range
         Object min = getAttribute(Column.COLATTR_MINVALUE);
@@ -554,9 +555,19 @@ public class DBTableColumn extends DBColumn
             double size = getSize();
             int reqPrec = (int)size;
             int reqScale = getDecimalScale();
-            if ((prec-scale)>(reqPrec-reqScale) || scale>reqScale)
+            if (scale>reqScale)
+            {   // Round if scale is exceeded
+                dv = dv.setScale(reqScale, RoundingMode.HALF_UP);
+                prec  = dv.precision();
+                scale = dv.scale();
+                n = dv;
+            }
+            if ((prec-scale)>(reqPrec-reqScale))
+            {   
                 throw new FieldValueOutOfRangeException(this);
+            }
         }
+        return n;
     }
 
     /**

Reply via email to