EMPIREDB-315
Improve Options
diff --git a/empire-db/src/main/java/org/apache/empire/commons/Options.java b/empire-db/src/main/java/org/apache/empire/commons/Options.java
index 895c824..96037f7 100644
--- a/empire-db/src/main/java/org/apache/empire/commons/Options.java
+++ b/empire-db/src/main/java/org/apache/empire/commons/Options.java
@@ -26,6 +26,7 @@
 import java.util.Map.Entry;
 import java.util.Set;
 
+import org.apache.empire.exceptions.InvalidArgumentException;
 import org.apache.empire.xml.XMLUtil;
 import org.w3c.dom.Element;
 
@@ -41,38 +42,55 @@
 {
 	private static final long serialVersionUID = 1L;
 
+    private static final String EMPTY_STRING = "";
+
 	public enum InsertPos
     {
         Top, Bottom, Sort
     }
 
-    private static final String EMPTY_STRING = "";
-
-    private ArrayList<OptionEntry> list = new ArrayList<OptionEntry>();
+    private final ArrayList<OptionEntry> list;
     
     public Options()
-    {
-        // Default constructor
+    {   // Default constructor
+        this.list = new ArrayList<OptionEntry>();
     }
     
     public Options(Options other)
     {
+        this.list = new ArrayList<OptionEntry>(other.size());
         this.addAll(other);
     }
+    
+    public Options(OptionEntry [] entries)
+    {
+        this.list = new ArrayList<OptionEntry>(entries.length);
+        for (int i=0; i<entries.length; i++)
+        {
+            this.add(entries[i]);
+        }
+    }
+    
+    public Options(Class<?> enumType)
+    {   // must be an enum
+        if (enumType==null || !enumType.isEnum())
+            throw new InvalidArgumentException("enumType", enumType);
+        // create options from enum
+        @SuppressWarnings("unchecked")
+        Enum<?>[] items = ((Class<Enum<?>>)enumType).getEnumConstants();
+        this.list = new ArrayList<OptionEntry>(items.length);
+        for (int i=0; i<items.length; i++)
+        {
+            Enum<?> item = items[i];
+            add(item, item.toString(), true);
+        }
+    }
 
     @Override
     public Options clone()
     {
         return new Options(this);
     }
-    
-    public Options(OptionEntry [] entries)
-    {
-        for (int i=0; i<entries.length; i++)
-        {
-            this.add(entries[i]);
-        }
-    }
 
     protected int getIndex(Object value)
     {
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 af494e0..7400e49 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
@@ -334,18 +334,9 @@
      */
     public void setEnumOptions(Class<?> enumType)
     {
-        if (enumType==null || !enumType.isEnum())
-            throw new InvalidArgumentException("enumType", enumType);
         // Enum special treatment
-        log.debug("Creating options for enum type {}.", enumType.getName());            
-        @SuppressWarnings({ "rawtypes", "unchecked" })
-        Enum<?>[] items = ((Class<Enum>)enumType).getEnumConstants();
-        this.options = new Options();
-        for (int i=0; i<items.length; i++)
-        {
-            Enum<?> item = items[i];
-            options.add(item, item.toString(), true);
-        }
+        log.debug("Adding enum options of type {} for column {}.", enumType.getName(), getName());            
+        this.options = new Options(enumType);
         // set enumType
         setAttribute(Column.COLATTR_ENUMTYPE, enumType);
     }