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 c8dbebe  EMPIREDB-313 Handle numeric enum columns correctly.
c8dbebe is described below

commit c8dbebe64e1fc97f3efb97f4d528e349e40abbc6
Author: Rainer Döbele <[email protected]>
AuthorDate: Wed Oct 16 18:33:47 2019 +0200

    EMPIREDB-313
    Handle numeric enum columns correctly.
---
 .../java/org/apache/empire/jsf2/app/DBELResolver.java   |  1 -
 .../apache/empire/jsf2/controls/SelectInputControl.java | 17 +++++++++++++++++
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git 
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/DBELResolver.java 
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/DBELResolver.java
index 8c94cf7..e16a914 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/DBELResolver.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/DBELResolver.java
@@ -27,7 +27,6 @@ import javax.el.ELResolver;
 import javax.faces.context.FacesContext;
 
 import org.apache.empire.commons.StringUtils;
-import org.apache.empire.data.Record;
 import org.apache.empire.data.RecordData;
 import org.apache.empire.db.DBColumnExpr;
 import org.apache.empire.db.DBDatabase;
diff --git 
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectInputControl.java
 
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectInputControl.java
index 2795cce..1ece85f 100644
--- 
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectInputControl.java
+++ 
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectInputControl.java
@@ -31,7 +31,10 @@ import javax.faces.context.FacesContext;
 import org.apache.empire.commons.ObjectUtils;
 import org.apache.empire.commons.OptionEntry;
 import org.apache.empire.commons.Options;
+import org.apache.empire.commons.StringUtils;
 import org.apache.empire.data.Column;
+import org.apache.empire.db.exceptions.FieldIllegalValueException;
+import org.apache.empire.db.exceptions.FieldValueOutOfRangeException;
 import org.apache.empire.exceptions.InternalException;
 import org.apache.empire.exceptions.InvalidArgumentException;
 import org.apache.empire.exceptions.ItemNotFoundException;
@@ -294,6 +297,20 @@ public class SelectInputControl extends InputControl
     @Override
     protected Object formatInputValue(Object value, InputInfo ii)
     {
+        if ((value instanceof Number)) 
+        {   // Check whether it's an Enum
+            Object enumType = 
ii.getColumn().getAttribute(Column.COLATTR_ENUMTYPE);
+            if ((enumType instanceof Class<?>)) 
+            {   // Convert ordinal value to Enum
+                int ordinal = ObjectUtils.getInteger(value);
+                Class<? extends Enum<?>> enumTypeClazz = (Class<? extends 
Enum<?>>)enumType;
+                Enum<?>[] items = enumTypeClazz.getEnumConstants();
+                if (ordinal>=0 && ordinal<items.length)
+                    value = items[ordinal].name();
+                else
+                    log.warn("Enum lookup failed. Ordinal {} out of range.", 
ordinal);
+            } 
+        }
         // the value
         return formatInputValue(value);
     }

Reply via email to