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