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 2477610 EMPIREDB-315 Extends Options to allow entries being
active/inactive
2477610 is described below
commit 2477610325277916752c74a6f76c3d09297b8f24
Author: Rainer Döbele <[email protected]>
AuthorDate: Thu Oct 31 13:10:18 2019 +0100
EMPIREDB-315
Extends Options to allow entries being active/inactive
---
.../apache/empire/jsf2/components/SelectTag.java | 148 +++++++++++++++-
.../apache/empire/jsf2/controls/InputControl.java | 9 +-
.../empire/jsf2/controls/RadioInputControl.java | 4 +-
.../empire/jsf2/controls/SelectInputControl.java | 197 ++++++++-------------
.../jsf2/pageelements/BeanListPageElement.java | 2 -
.../org/apache/empire/commons/OptionEntry.java | 21 ++-
.../java/org/apache/empire/commons/Options.java | 61 +++++--
.../org/apache/empire/commons/OptionsTest.java | 2 +-
8 files changed, 289 insertions(+), 155 deletions(-)
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/SelectTag.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/SelectTag.java
index cdd593b..36929ed 100644
---
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/SelectTag.java
+++
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/SelectTag.java
@@ -19,8 +19,10 @@
package org.apache.empire.jsf2.components;
import java.io.IOException;
+import java.util.Locale;
import java.util.Map;
+import javax.el.ValueExpression;
import javax.faces.component.NamingContainer;
import javax.faces.component.UIInput;
import javax.faces.component.html.HtmlSelectOneMenu;
@@ -31,11 +33,14 @@ import javax.faces.context.FacesContext;
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.exceptions.InvalidPropertyException;
+import org.apache.empire.exceptions.NotSupportedException;
import org.apache.empire.jsf2.app.FacesUtils;
import org.apache.empire.jsf2.app.TextResolver;
import org.apache.empire.jsf2.controls.InputAttachedObjectsHandler;
import org.apache.empire.jsf2.controls.InputControl;
+import org.apache.empire.jsf2.controls.InputControl.InputInfo;
import org.apache.empire.jsf2.controls.InputControlManager;
import org.apache.empire.jsf2.controls.SelectInputControl;
import org.apache.empire.jsf2.utils.TagEncodingHelper;
@@ -51,6 +56,141 @@ public class SelectTag extends UIInput implements
NamingContainer
protected SelectInputControl control = null;
+ private class SelectInputInfo implements InputInfo
+ {
+ @Override
+ public Column getColumn()
+ {
+ return null;
+ }
+
+ @Override
+ public Options getOptions()
+ {
+ return SelectTag.this.getOptionList();
+ }
+
+ @Override
+ public Object getValue(boolean evalExpression)
+ {
+ Object value = SelectTag.this.getValue();
+ if (value != null)
+ {
+ if (value.getClass().isEnum())
+ value = ((Enum<?>) value).name();
+ else
+ value = String.valueOf(value);
+ }
+ return value;
+ }
+
+ @Override
+ public String getFormat()
+ {
+ String nullText = SelectTag.this.getNullText();
+ if (StringUtils.isEmpty(nullText))
+ return null;
+ // return format for null text
+ return InputControl.FORMAT_NULL+nullText;
+ }
+
+ @Override
+ public Locale getLocale()
+ {
+ return null;
+ }
+
+ @Override
+ public String getText(String key)
+ {
+ return null;
+ }
+
+ @Override
+ public TextResolver getTextResolver()
+ {
+ return
FacesUtils.getTextResolver(FacesContext.getCurrentInstance());
+ }
+
+ @Override
+ public String getStyleClass(String addlStyle)
+ {
+ return null;
+ }
+
+ @Override
+ public boolean isInsideUIData()
+ {
+ return false;
+ }
+
+ @Override
+ public void setValue(Object value)
+ {
+ throw new NotSupportedException(SelectTag.this, "setValue");
+ }
+
+ @Override
+ public void validate(Object value)
+ {
+ }
+
+ @Override
+ public boolean isRequired()
+ {
+ return !(SelectTag.this.isAllowNull());
+ }
+
+ @Override
+ public boolean isDisabled()
+ {
+ return SelectTag.this.isDisabled();
+ }
+
+ @Override
+ public boolean isFieldReadOnly()
+ {
+ return false;
+ }
+
+ @Override
+ public String getInputId()
+ {
+ return "select";
+ }
+
+ @Override
+ public boolean hasError()
+ {
+ return false;
+ }
+
+ @Override
+ public Object getAttribute(String name)
+ {
+ return null;
+ }
+
+ @Override
+ public Object getAttributeEx(String name)
+ {
+ Object value = SelectTag.this.getAttributes().get(name);
+ if (value==null)
+ { // try value expression
+ ValueExpression ve = SelectTag.this.getValueExpression(name);
+ if (ve!=null)
+ { // It's a value expression
+ FacesContext ctx = FacesContext.getCurrentInstance();
+ value = ve.getValue(ctx.getELContext());
+ }
+ }
+ return value;
+ }
+
+ }
+
+ private SelectInputInfo selectInputInfo = new SelectInputInfo();
+
public SelectTag()
{
log.trace("component select created");
@@ -105,9 +245,7 @@ public class SelectTag extends UIInput implements
NamingContainer
boolean disabled = isDisabled();
((HtmlSelectOneMenu) inputComponent).setDisabled(disabled);
// Options (sync)
- Options options = getOptionList();
- boolean hasEmpty = isAllowNull() && !options.contains("");
- control.syncOptions((HtmlSelectOneMenu) inputComponent,
textResolver, options, hasEmpty, getNullText(), false);
+ control.syncOptions((HtmlSelectOneMenu) inputComponent,
textResolver, selectInputInfo);
setInputValue((HtmlSelectOneMenu) inputComponent);
}
else
@@ -229,9 +367,7 @@ public class SelectTag extends UIInput implements
NamingContainer
copyAttributes(input);
input.setId(SELECT_COMPONENT_ID);
// Options
- Options options = getOptionList();
- boolean addEmpty = isAllowNull() && !options.contains("");
- control.initOptions(input, textResolver, options, addEmpty,
getNullText());
+ control.initOptions(input, textResolver, selectInputInfo);
// disabled
boolean disabled = isDisabled();
input.setDisabled(disabled);
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java
index 935a555..eb497a2 100644
---
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java
+++
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/InputControl.java
@@ -47,7 +47,7 @@ public abstract class InputControl
{
private static final Logger log =
LoggerFactory.getLogger(InputControl.class);
-
+
// format attributes
public static final String FORMAT_NULL = "null:";
public static final String FORMAT_NULL_ATTRIBUTE = "format:null";
@@ -759,8 +759,13 @@ public abstract class InputControl
protected Object getFormatOption(ValueInfo vi, String option, String
columnAttributeName)
{
+ // direct format provided?
String format = getFormatOption(vi, option);
- return (format != null) ? format :
vi.getColumn().getAttribute(columnAttributeName);
+ if (format!=null)
+ return format;
+ // column format provided?
+ Column column = vi.getColumn();
+ return (column!=null ? column.getAttribute(columnAttributeName) :
null);
}
protected String getFormatString(ValueInfo vi, String option, String
columnAttributeName)
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/RadioInputControl.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/RadioInputControl.java
index 0f2b0a4..334ae22 100644
---
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/RadioInputControl.java
+++
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/RadioInputControl.java
@@ -132,7 +132,7 @@ public class RadioInputControl extends InputControl
input.setDisabled(disabled);
// Options
Options options = ii.getOptions();
- boolean addEmpty = getEmptyEntryRequired(ii, disabled) &&
!options.contains("");
+ boolean addEmpty = getEmptyEntryRequired(ii, disabled) &&
!options.containsNull();
String nullText = (addEmpty) ? getNullText(ii) : "";
initOptions(input, ii.getTextResolver(), options, addEmpty, nullText);
// add
@@ -158,7 +158,7 @@ public class RadioInputControl extends InputControl
input.setDisabled(disabled);
// Options (sync)
Options options = ii.getOptions();
- boolean addEmpty = getEmptyEntryRequired(ii, disabled) &&
!options.contains("");
+ boolean addEmpty = getEmptyEntryRequired(ii, disabled) &&
!options.containsNull();
String nullText = (addEmpty) ? getNullText(ii) : "";
syncOptions(input, ii.getTextResolver(), options, addEmpty, nullText);
// Set Value
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 1ece85f..b4c719e 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,10 +31,7 @@ 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;
@@ -89,10 +86,7 @@ public class SelectInputControl extends InputControl
boolean disabled = ii.isDisabled();
input.setDisabled(disabled);
// Options
- Options options = getOptions(ii);
- boolean addEmpty = isEmptyEntryRequired(options, ii, disabled);
- String nullText = (addEmpty) ? getNullText(ii) : "";
- initOptions(input, ii.getTextResolver(), options, addEmpty, nullText);
+ initOptions(input, ii.getTextResolver(), ii);
// add
compList.add(input);
// style
@@ -117,20 +111,7 @@ public class SelectInputControl extends InputControl
boolean disabled = ii.isDisabled();
input.setDisabled(disabled);
// Options (sync)
- Options options = ii.getOptions();
- if (options!=null)
- { // syncOptions
- boolean addEmpty = isEmptyEntryRequired(options, ii, disabled);
- String nullText = (addEmpty) ? getNullText(ii) : "";
- syncOptions(input, ii.getTextResolver(), options, addEmpty,
nullText, ii.isInsideUIData());
- }
- else
- { // clear or not?
- if (ii.getValue(false)!=null)
- log.warn("No options have been set for column {}",
ii.getColumn().getName());
- else
- input.getChildren().clear();
- }
+ syncOptions(input, ii.getTextResolver(), ii);
// set value
if (setValue)
{ // style
@@ -141,37 +122,73 @@ public class SelectInputControl extends InputControl
}
}
- protected boolean isEmptyEntryRequired(Options options, InputInfo ii,
boolean disabled)
+ protected boolean isEmptyEntryRequired(Options options, InputInfo ii,
Object currentValue)
{
- if (options.contains(""))
+ if (options!=null && options.containsNull())
{ // already has an empty option
return false;
}
- if (!ii.isRequired() && !(disabled && ii.getColumn().isRequired()))
- {
- return true;
+ if (!ii.isRequired())
+ { // check disabled and column
+ Column column = ii.getColumn();
+ if (!(ii.isDisabled() && (column==null ||
ii.getColumn().isRequired())))
+ {
+ return true;
+ }
}
// Check Value
- return (ii.getValue(true) == null);
+ return ObjectUtils.isEmpty(currentValue);
}
- public void initOptions(HtmlSelectOneMenu input, TextResolver
textResolver, Options options, boolean addEmpty, String nullText)
+ public void initOptions(HtmlSelectOneMenu input, TextResolver
textResolver, InputInfo ii)
{
- if (addEmpty)
- { // Empty entry
- addSelectItem(input, textResolver, new OptionEntry(null,
nullText));
+ // get the options
+ Options options = ii.getOptions();
+ if (options==null)
+ { // invalid options
+ if (ii.getColumn()!=null)
+ log.warn("No options given for column {}",
ii.getColumn().getName());
+ else
+ log.warn("No options given for select tag {}",
input.getClientId());
+ options = new Options();
+ }
+ // current
+ Object currentValue = ii.getValue(true);
+ if (isEmptyEntryRequired(options, ii, currentValue))
+ { // Empty entry
+ addSelectItem(input, textResolver, new OptionEntry(null,
getNullText(ii)));
}
if (options != null && options.size() > 0)
- { // Add options
- for (OptionEntry e : options)
- { // Option entries
- addSelectItem(input, textResolver, e);
+ { // Add options
+ for (OptionEntry oe : options)
+ { // Option entries
+ if (oe.isActive() || ObjectUtils.compareEqual(oe.getValue(),
currentValue))
+ { // add active or current item
+ addSelectItem(input, textResolver, oe);
+ }
+ else if (log.isDebugEnabled())
+ { // not active, ignore this one
+ log.debug("Select item {} is not active.", oe.getValue());
+ }
}
}
}
- public void syncOptions(HtmlSelectOneMenu input, TextResolver
textResolver, Options options, boolean hasEmpty, String nullText, boolean
isInsideUIData)
+ public void syncOptions(HtmlSelectOneMenu input, TextResolver
textResolver, InputInfo ii)
{
+ // get the options
+ Options options = ii.getOptions();
+ if (options==null)
+ { // clear or not?
+ if (ii.getValue(false)!=null)
+ log.warn("No options have been set for column {}",
ii.getColumn().getName());
+ else
+ input.getChildren().clear();
+ return;
+ }
+ Object currentValue = ii.getValue(true);
+ boolean hasEmpty = isEmptyEntryRequired(options, ii, currentValue);
+ // boolean isInsideUIData = ii.isInsideUIData();
// Compare child-items with options
Iterator<OptionEntry> ioe = options.iterator();
OptionEntry oe = (ioe.hasNext() ? ioe.next() : null);
@@ -206,11 +223,16 @@ public class SelectInputControl extends InputControl
}
// Not equal - do a full reload
input.getChildren().clear();
- if (hasEmpty)
- addSelectItem(input, textResolver, new OptionEntry("",
nullText));
- for (OptionEntry e : options)
- { // Option entries
- addSelectItem(input, textResolver, e);
+ if (hasEmpty) {
+ // add empty entry
+ addSelectItem(input, textResolver, new OptionEntry("",
getNullText(ii)));
+ }
+ for (OptionEntry opt : options)
+ { // Option entries
+ if (opt.isActive() || ObjectUtils.compareEqual(opt.getValue(),
currentValue))
+ { // add active or current item
+ addSelectItem(input, textResolver, opt);
+ }
}
// done
return;
@@ -218,16 +240,19 @@ public class SelectInputControl extends InputControl
// check empty entry
if (hasEmpty && !emptyPresent)
{ // add missing empty entry
- addSelectItem(input, textResolver, new OptionEntry("", nullText),
0);
+ addSelectItem(input, textResolver, new OptionEntry("",
getNullText(ii)), 0);
}
// Are there any items left?
while (oe != null)
- { // add missing item
- addSelectItem(input, textResolver, oe);
+ { // add missing item
+ if (oe.isActive() || ObjectUtils.compareEqual(oe.getValue(),
currentValue))
+ { // add item
+ addSelectItem(input, textResolver, oe);
+ }
oe = (ioe.hasNext() ? ioe.next() : null);
}
}
-
+
public void addSelectItem(UIComponent input, TextResolver textResolver,
OptionEntry e, int pos)
{
UISelectItem selectItem = new UISelectItem();
@@ -303,6 +328,7 @@ public class SelectInputControl extends InputControl
if ((enumType instanceof Class<?>))
{ // Convert ordinal value to Enum
int ordinal = ObjectUtils.getInteger(value);
+ @SuppressWarnings("unchecked")
Class<? extends Enum<?>> enumTypeClazz = (Class<? extends
Enum<?>>)enumType;
Enum<?>[] items = enumTypeClazz.getEnumConstants();
if (ordinal>=0 && ordinal<items.length)
@@ -358,85 +384,4 @@ public class SelectInputControl extends InputControl
return value;
}
- /**
- * gets the options in a safe way (not null)
- * @param ii
- * @return the options for this column
- */
- protected Options getOptions(InputInfo ii)
- {
- Options options = ii.getOptions();
- if (options==null)
- {
- log.warn("No options given for column {}",
ii.getColumn().getName());
- options = new Options();
- }
- return options;
- }
-
- /*
- @Override
- public void renderInput(ResponseWriter writer, ControlInfo ci)
- {
- boolean disabled = ci.getDisabled();
-
- HtmlTag input = writer.startTag("select");
- input.addAttribute("id", ci.getId());
- input.addAttribute("class", ci.getCssClass());
- input.addAttribute("style", ci.getCssStyle());
- if (disabled)
- {
- input.addAttribute("disabled");
- } else
- {
- input.addAttribute("name", ci.getName());
- }
- // Event Attributes
- input.addAttribute("onclick", ci.getOnclick());
- input.addAttribute("onchange", ci.getOnchange());
- input.addAttribute("onfocus", ci.getOnfocus());
- input.addAttribute("onblur", ci.getOnblur());
- input.beginBody(true);
- // Render List of Options
- Options options = ci.getOptions();
- if (options!=null)
- { // Render option list
- Object current = ci.getValue();
- if (hasFormatOption(ci, "allownull") &&
options.contains(null)==false)
- { // add an empty entry
- addEmtpyEntry(writer, ObjectUtils.isEmpty(current));
- }
- for (OptionEntry entry : options)
- {
- Object value = entry.getValue();
- boolean isCurrent = ObjectUtils.compareEqual(current, value);
- if (isCurrent == false && disabled)
- continue; //
- // Add Option entry
- HtmlTag option = writer.startTag("option");
- option.addAttributeNoCheck("value", value, true);
- option.addAttribute("selected", isCurrent);
- option.beginBody(ci.getTranslation(entry.getText()));
- option.endTag(true);
- }
- }
- else
- { // No Option list available
- log.error("No options available for select input control.");
- }
- // done
- input.endTag();
- }
-
- private void addEmtpyEntry(HtmlWriter writer, boolean isCurrent)
- {
- // Add Option entry
- HtmlTag option = writer.startTag("option");
- option.addAttributeNoCheck("value", "", false);
- option.addAttribute("selected", isCurrent);
- option.beginBody("");
- option.endTag(true);
- }
- */
-
}
diff --git
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/BeanListPageElement.java
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/BeanListPageElement.java
index 8da9047..e248852 100644
---
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/BeanListPageElement.java
+++
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/pageelements/BeanListPageElement.java
@@ -28,7 +28,6 @@ import org.apache.commons.beanutils.BeanUtils;
import org.apache.empire.commons.ObjectUtils;
import org.apache.empire.commons.StringUtils;
import org.apache.empire.data.Column;
-import org.apache.empire.data.DataType;
import org.apache.empire.db.DBColumn;
import org.apache.empire.db.DBColumnExpr;
import org.apache.empire.db.DBCommand;
@@ -37,7 +36,6 @@ import org.apache.empire.db.DBDriverFeature;
import org.apache.empire.db.DBReader;
import org.apache.empire.db.DBRecordData;
import org.apache.empire.db.DBRowSet;
-import org.apache.empire.db.exceptions.NoPrimaryKeyException;
import org.apache.empire.db.expr.order.DBOrderByExpr;
import org.apache.empire.exceptions.InternalException;
import org.apache.empire.exceptions.InvalidArgumentException;
diff --git a/empire-db/src/main/java/org/apache/empire/commons/OptionEntry.java
b/empire-db/src/main/java/org/apache/empire/commons/OptionEntry.java
index e297ea3..a01b38b 100644
--- a/empire-db/src/main/java/org/apache/empire/commons/OptionEntry.java
+++ b/empire-db/src/main/java/org/apache/empire/commons/OptionEntry.java
@@ -31,13 +31,20 @@ public class OptionEntry implements Serializable
{
private static final long serialVersionUID = 1L;
- private Object value;
+ private final Object value;
private String text;
+ private boolean active;
- public OptionEntry(Object value, String text)
+ public OptionEntry(Object value, String text, boolean active)
{
this.value = value;
this.text = text;
+ this.active = active;
+ }
+
+ public OptionEntry(Object value, String text)
+ {
+ this(value, text, true);
}
public Object getValue()
@@ -71,4 +78,14 @@ public class OptionEntry implements Serializable
{
this.text = text;
}
+
+ public boolean isActive()
+ {
+ return active;
+ }
+
+ public void setActive(boolean active)
+ {
+ this.active = active;
+ }
}
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 13f4c34..8bf29cd 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
@@ -92,9 +92,9 @@ public class Options extends AbstractSet<OptionEntry>
implements Cloneable, Seri
return -1;
}
- protected OptionEntry createOptionEntry(Object value, String text)
+ protected OptionEntry createOptionEntry(Object value, String text, boolean
active)
{
- return new OptionEntry(value, text);
+ return new OptionEntry(value, text, active);
}
public OptionEntry getEntry(Object value)
@@ -109,6 +109,12 @@ public class Options extends AbstractSet<OptionEntry>
implements Cloneable, Seri
return (i >= 0 ? list.get(i).getText() : EMPTY_STRING);
}
+ public boolean isActive(Object value)
+ {
+ int i = getIndex(value);
+ return (i >= 0 ? list.get(i).isActive() : false);
+ }
+
/**
* Gets the value of the entry at index i
*
@@ -148,7 +154,7 @@ public class Options extends AbstractSet<OptionEntry>
implements Cloneable, Seri
* @param text the text
* @param pos the position, see {@link InsertPos}
*/
- public void set(Object value, String text, InsertPos pos)
+ public void set(Object value, String text, boolean active, InsertPos pos)
{
if (text == null)
{ // text must not be null!
@@ -170,11 +176,23 @@ public class Options extends AbstractSet<OptionEntry>
implements Cloneable, Seri
else // bottom is default
index = list.size();
// add entry now
- list.add(index, createOptionEntry(value, text));
+ list.add(index, createOptionEntry(value, text, active));
}
}
/**
+ * Sets or Adds an option at a certain position
+ *
+ * @param value the value object
+ * @param text the text
+ * @param pos the position, see {@link InsertPos}
+ */
+ public void set(Object value, String text, InsertPos pos)
+ {
+ set(value, text, true, pos);
+ }
+
+ /**
* Sets or adds Adds an option at the bottom
*
* @param value the value object
@@ -193,15 +211,18 @@ public class Options extends AbstractSet<OptionEntry>
implements Cloneable, Seri
* @param text the text
* @param noCheck set to true to skip testing for an existing key (handle
with care!)
*/
- public void add(Object value, String text, boolean noCheck)
+ public void add(Object value, String text, boolean active)
{
- if (noCheck)
- {
- list.add(createOptionEntry(value, text));
- }
+ int i = getIndex(value);
+ if (i >= 0)
+ {
+ OptionEntry oe = list.get(i);
+ oe.setText(text);
+ oe.setActive(active);
+ }
else
{
- set(value, text);
+ list.add(createOptionEntry(value, text, active));
}
}
@@ -227,12 +248,24 @@ public class Options extends AbstractSet<OptionEntry>
implements Cloneable, Seri
}
@Override
- public boolean contains(Object object)
- {
- // Check if exits
- return (getIndex(object) >= 0);
+ public boolean contains(Object value)
+ { // Check if exits
+ return (getIndex(value) >= 0);
}
+ public boolean containsNull()
+ { // Check if exits
+ return (getIndex("") >= 0);
+ }
+
+ /**
+ * same as contains(), but IDE may not issue warning
+ */
+ public boolean exists(Object value)
+ { // Check if exits
+ return (getIndex(value) >= 0);
+ }
+
@Override
public boolean isEmpty()
{
diff --git a/empire-db/src/test/java/org/apache/empire/commons/OptionsTest.java
b/empire-db/src/test/java/org/apache/empire/commons/OptionsTest.java
index 9600d5e..73e738b 100644
--- a/empire-db/src/test/java/org/apache/empire/commons/OptionsTest.java
+++ b/empire-db/src/test/java/org/apache/empire/commons/OptionsTest.java
@@ -136,7 +136,7 @@ public class OptionsTest
public void testCreateOptionEntry()
{
Options options = new Options();
- OptionEntry entry = options.createOptionEntry(Integer.valueOf(123),
"test");
+ OptionEntry entry = options.createOptionEntry(Integer.valueOf(123),
"test", true);
assertEquals("test", entry.getText());
assertEquals(Integer.valueOf(123), entry.getValue());
}