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 96a590b  EMPIREDB-315 Improve Options
96a590b is described below

commit 96a590b3a0c1a76155a7a792cf2de521e4db020a
Author: Rainer Döbele <[email protected]>
AuthorDate: Tue Dec 24 11:10:48 2019 +0100

    EMPIREDB-315
    Improve Options
---
 .../java/org/apache/empire/commons/Options.java    | 40 ++++++++++++++++------
 .../java/org/apache/empire/db/DBTableColumn.java   | 13 ++-----
 2 files changed, 31 insertions(+), 22 deletions(-)

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.Iterator;
 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 @@ public class Options extends AbstractSet<OptionEntry> 
implements Cloneable, Seri
 {
        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);
     }
-
-    @Override
-    public Options clone()
-    {
-        return new Options(this);
-    }
     
     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);
+    }
 
     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 class DBTableColumn extends DBColumn
      */
     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);
     }

Reply via email to