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);
}