EMPIREDB-239
support enum types in bean properties
diff --git a/empire-db/src/main/java/org/apache/empire/data/Record.java b/empire-db/src/main/java/org/apache/empire/data/Record.java
index 362dac1..470d0df 100644
--- a/empire-db/src/main/java/org/apache/empire/data/Record.java
+++ b/empire-db/src/main/java/org/apache/empire/data/Record.java
@@ -146,7 +146,7 @@
      * @param ignoreList list of column to ignore
      * @return the number of fields that have been set    
      */
-    int setBeanValues(Object bean, Collection<Column> ignoreList);
+    int setRecordValues(Object bean, Collection<Column> ignoreList);
 
     /**
      * sets all record values from a particular bean.
@@ -156,6 +156,6 @@
      * @param bean the Java Bean from which to read the value from
      * @return the number of fields that have been set    
      */
-    int setBeanValues(Object bean);
+    int setRecordValues(Object bean);
 
 }
diff --git a/empire-db/src/main/java/org/apache/empire/data/RecordData.java b/empire-db/src/main/java/org/apache/empire/data/RecordData.java
index 101b049..19da930 100644
--- a/empire-db/src/main/java/org/apache/empire/data/RecordData.java
+++ b/empire-db/src/main/java/org/apache/empire/data/RecordData.java
@@ -98,7 +98,7 @@
      * @param bean the Java Bean for which to set the properties
      * @param ignoreList list of columns to skip (optional)
      */
-    int getBeanProperties(Object bean, Collection<ColumnExpr> ignoreList);
+    int setBeanProperties(Object bean, Collection<ColumnExpr> ignoreList);
 
     /**
      * copies all field values into a static Java Bean.
@@ -107,6 +107,6 @@
      * the property name is detected by ColumnExpr.getBeanPropertyName()     
      * @param bean the Java Bean for which to set the properties
      */
-    int getBeanProperties(Object bean);
+    int setBeanProperties(Object bean);
 
 }
diff --git a/empire-db/src/main/java/org/apache/empire/data/bean/BeanRecordProxy.java b/empire-db/src/main/java/org/apache/empire/data/bean/BeanRecordProxy.java
index 6cd0b7e..f481f68 100644
--- a/empire-db/src/main/java/org/apache/empire/data/bean/BeanRecordProxy.java
+++ b/empire-db/src/main/java/org/apache/empire/data/bean/BeanRecordProxy.java
@@ -313,13 +313,13 @@
     // --------------- Bean support ------------------
 
     @Override
-    public int getBeanProperties(Object bean)
+    public int setBeanProperties(Object bean)
     {
-        return getBeanProperties(bean, null);
+        return setBeanProperties(bean, null);
     }
 
     @Override
-    public int getBeanProperties(Object bean, Collection<ColumnExpr> ignoreList)
+    public int setBeanProperties(Object bean, Collection<ColumnExpr> ignoreList)
     {
         // Add all Columns
         int count = 0;
@@ -337,7 +337,7 @@
     }
 
     @Override
-    public int setBeanValues(Object bean, Collection<Column> ignoreList)
+    public int setRecordValues(Object bean, Collection<Column> ignoreList)
     {
         // Add all Columns
         int count = 0;
@@ -356,15 +356,15 @@
         }
         return count;
     }
-
+    
     @Override
-    public int setBeanValues(Object bean)
+    public int setRecordValues(Object bean)
     {
-        return setBeanValues(bean, null);
+        return setRecordValues(bean, null);
     }
 
     // --------------- protected ------------------
-    
+
     protected Object getBeanPropertyValue(Object bean, ColumnExpr column)
     {
         // Check Params
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBReader.java b/empire-db/src/main/java/org/apache/empire/db/DBReader.java
index ec899bc..91f5902 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBReader.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBReader.java
@@ -675,7 +675,7 @@
                 else
                 {   // Use Property Setters
                     T bean = t.newInstance();
-                    getBeanProperties(bean);
+                    setBeanProperties(bean);
                     c.add(bean);
                 }
                 // Decrease count
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRecord.java b/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
index ec13ced..942f01e 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
@@ -27,6 +27,7 @@
 import org.apache.commons.beanutils.PropertyUtilsBean;
 import org.apache.empire.commons.ObjectUtils;
 import org.apache.empire.commons.Options;
+import org.apache.empire.commons.StringUtils;
 import org.apache.empire.data.Column;
 import org.apache.empire.data.ColumnExpr;
 import org.apache.empire.data.Record;
@@ -1022,14 +1023,12 @@
      * @param property the name of the property
      * @param column the column for which to set the record value
      */
-    protected void setBeanValue(Object bean, String property, Column column)
+    protected void setRecordValue(Column column, Object bean, String property)
     {
+        if (StringUtils.isEmpty(property))
+            property = column.getBeanPropertyName();
         try
-        {   /*
-            if (log.isTraceEnabled())
-                log.trace(bean.getClass().getName() + ": getting property '" + property + "' for column " + column.getName());
-            */
-            
+        {
             // Get Property Value
             PropertyUtilsBean pub = BeanUtilsBean.getInstance().getPropertyUtils();
             Object value = pub.getSimpleProperty(bean, property);
@@ -1055,7 +1054,7 @@
      * @return true if at least one value has been set successfully 
      */
     @Override
-    public int setBeanValues(Object bean, Collection<Column> ignoreList)
+    public int setRecordValues(Object bean, Collection<Column> ignoreList)
     {
         // Add all Columns
         int count = 0;
@@ -1068,7 +1067,7 @@
                 continue; // ignore this property
             // Get Property Name
             String property = column.getBeanPropertyName();
-            setBeanValue(bean, property, column);
+            setRecordValue(column, bean, property);
             count++;
         }
         return count;
@@ -1079,9 +1078,9 @@
      * @return true if at least one value has been set sucessfully
      */
     @Override
-    public final int setBeanValues(Object bean)
+    public final int setRecordValues(Object bean)
     {
-        return setBeanValues(bean, null);
+        return setRecordValues(bean, null);
     }
     
     /**
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRecordData.java b/empire-db/src/main/java/org/apache/empire/db/DBRecordData.java
index 704ff14..173505b 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRecordData.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRecordData.java
@@ -27,6 +27,7 @@
 import org.apache.commons.beanutils.PropertyUtils;
 import org.apache.empire.commons.ObjectUtils;
 import org.apache.empire.commons.StringUtils;
+import org.apache.empire.data.Column;
 import org.apache.empire.data.ColumnExpr;
 import org.apache.empire.data.RecordData;
 import org.apache.empire.exceptions.BeanPropertySetException;
@@ -297,8 +298,11 @@
     /**
      * Set a single property value of a java bean object used by readProperties.
      */
-    protected void getBeanProperty(Object bean, String property, Object value)
+    @SuppressWarnings("rawtypes")
+    protected void setBeanProperty(ColumnExpr column, Object bean, String property, Object value)
     {
+        if (StringUtils.isEmpty(property))
+            property = column.getBeanPropertyName();
         try
         {
             if (bean==null)
@@ -315,6 +319,19 @@
                 value = DateUtils.addDate((Date)value, 0, 0, 0);
             }
             */
+            Object type = column.getAttribute(Column.COLATTR_ENUMTYPE);
+            if (type!=null && value!=null)
+            {
+                String name = value.toString();
+                @SuppressWarnings("unchecked")
+                Class<Enum> enumType = (Class<Enum>)type;
+                for (Enum e : enumType.getEnumConstants())
+                    if (e.name().equals(name))
+                    {
+                        value = e;
+                        break;
+                    }
+            }
             // Set Property Value
             if (value!=null)
             {   // Bean utils will convert if necessary
@@ -348,7 +365,7 @@
      * @return the number of bean properties set on the supplied bean
      */
     @Override
-    public int getBeanProperties(Object bean, Collection<ColumnExpr> ignoreList)
+    public int setBeanProperties(Object bean, Collection<ColumnExpr> ignoreList)
     {
         // Add all Columns
         int count = 0;
@@ -360,7 +377,7 @@
             // Get Property Name
             String property = column.getBeanPropertyName();
             if (property!=null)
-                getBeanProperty(bean, property, this.getValue(i));
+                setBeanProperty(column, bean, property, this.getValue(i));
             count++;
         }
         return count;
@@ -372,9 +389,9 @@
      * @return the number of bean properties set on the supplied bean
      */
     @Override
-    public final int getBeanProperties(Object bean)
+    public final int setBeanProperties(Object bean)
     {
-        return getBeanProperties(bean, null);
+        return setBeanProperties(bean, null);
     }
     
 }