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 6167a349 EMPIREDB-444 ValueUtils: Fix for converting Enum to number
6167a349 is described below

commit 6167a349e95b8be75f319e0cc735f0de512e6429
Author: Rainer Döbele <[email protected]>
AuthorDate: Thu Oct 31 16:04:06 2024 +0100

    EMPIREDB-444
    ValueUtils: Fix for converting Enum to number
---
 .../java/org/apache/empire/commons/ValueUtils.java |  8 ++++++++
 .../java/org/apache/empire/db/DBRecordBase.java    | 24 ++++++++++++++++++++++
 2 files changed, 32 insertions(+)

diff --git a/empire-db/src/main/java/org/apache/empire/commons/ValueUtils.java 
b/empire-db/src/main/java/org/apache/empire/commons/ValueUtils.java
index 10330d61..421a13e1 100644
--- a/empire-db/src/main/java/org/apache/empire/commons/ValueUtils.java
+++ b/empire-db/src/main/java/org/apache/empire/commons/ValueUtils.java
@@ -266,6 +266,8 @@ public class ValueUtils
             return 0;
         if (v instanceof Number)
             return ((Number)v).intValue();
+        if (v instanceof Enum)
+            return toInteger(getEnumValue(((Enum<?>)v), true));
         // Try to convert
         String str = v.toString();
         return Integer.parseInt(str);
@@ -282,6 +284,8 @@ public class ValueUtils
             return 0;
         if (v instanceof Number)
             return ((Number)v).longValue();
+        if (v instanceof Enum)
+            return toLong(getEnumValue(((Enum<?>)v), true));
         // Try to convert
         String str = v.toString();
         return Long.parseLong(str);
@@ -299,6 +303,8 @@ public class ValueUtils
             return 0.0;
         if (v instanceof Number)
             return ((Number)v).doubleValue();
+        if (v instanceof Enum)
+            return toDouble(getEnumValue(((Enum<?>)v), true));
         // parse String for Integer value
         String val = v.toString(); 
         return Double.parseDouble(val);
@@ -328,6 +334,8 @@ public class ValueUtils
             // Default: convert via double
             return BigDecimal.valueOf(((Number)v).doubleValue());
         }
+        if (v instanceof Enum)
+            return toDecimal(getEnumValue(((Enum<?>)v), true));
         // parse String for Integer value
         // Last-Chance > Try a string conversion
         return new BigDecimal(v.toString());
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRecordBase.java 
b/empire-db/src/main/java/org/apache/empire/db/DBRecordBase.java
index 02c548ce..0143563b 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRecordBase.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRecordBase.java
@@ -1096,6 +1096,30 @@ public abstract class DBRecordBase extends DBRecordData 
implements Record, Clone
         if (fireChangeEvent)
             onFieldChanged(index);
     }
+
+    protected void setFieldModified(int index, boolean modifiedFlag)
+    {   // Check valid
+        checkValid(index);
+        if (modified == null && !modifiedFlag)
+            return; // Nothing to do
+        // modified state array
+        if (modified == null)
+        {   modified = new boolean[fields.length];
+            for (int j = 0; j < fields.length; j++)
+                modified[j] = false;
+        }
+        // set value and modified
+        modified[index] = modifiedFlag;
+        // set record state
+        boolean recordModified = modifiedFlag;
+        for (int j = 0; j < fields.length && !recordModified; j++)
+            recordModified |= modified[j];
+        // Change record state if necessary
+        if (recordModified && state.isLess(State.Modified))
+            changeState(State.Modified);
+        else if (recordModified==false && state==State.Modified)
+            changeState(State.Valid);
+    }
     
     /**
      * Override this to do extra handling when the record changes

Reply via email to