Refactored FilterControls, moving some logic in the superclass.
diff --git a/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControl.java b/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControl.java
index 7f9b32f..7c66509 100644
--- a/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControl.java
+++ b/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControl.java
@@ -10,6 +10,7 @@
******************************************************************************/
package org.eclipse.rmf.reqif10.search.filter.ui;
+import java.util.List;
import java.util.ResourceBundle;
import org.eclipse.rmf.reqif10.AttributeDefinition;
@@ -23,41 +24,155 @@
import org.eclipse.rmf.reqif10.search.filter.AbstractTextFilter;
import org.eclipse.rmf.reqif10.search.filter.BoolFilter;
import org.eclipse.rmf.reqif10.search.filter.DateFilter;
+import org.eclipse.rmf.reqif10.search.filter.DateFilter.InternalAttribute;
import org.eclipse.rmf.reqif10.search.filter.EnumFilter;
import org.eclipse.rmf.reqif10.search.filter.IFilter;
import org.eclipse.rmf.reqif10.search.filter.NumberFilter;
+import org.eclipse.rmf.reqif10.search.filter.IFilter.Operator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
/**
- * Represents the actual {@link Control} that holds the settings for the contained filter.
+ * Represents the actual {@link Control} that holds the settings for the
+ * contained filter. The infrastructure manages the operator.
+ *
* Also provides factory methods for building {@link FilterControl} instances.
*
* @author jastram
*/
public abstract class FilterControl extends Composite {
- public FilterControl(Composite parent, int style) {
- super(parent, style);
+ protected IFilter templateFilter;
+ protected Object attribute;
+
+ private Combo operatorControl;
+
+ /**
+ * New {@link FilterControl} for the given {@link #attribute}, which can be
+ * an internal attribute or an {@link AttributeDefinition}.
+ */
+ public FilterControl(FilterPanel parent, AttributeDefinition attribute) {
+ super(parent, SWT.FLAT);
+ this.attribute = attribute;
+ init();
+ }
+
+ public FilterControl(FilterPanel parent, InternalAttribute attribute) {
+ super(parent, SWT.FLAT);
+ this.attribute = attribute;
+ init();
+ }
+
+ public FilterControl(
+ FilterPanel parent,
+ org.eclipse.rmf.reqif10.search.filter.AbstractTextFilter.InternalAttribute attribute) {
+ super(parent, SWT.FLAT);
+ this.attribute = attribute;
+ init();
}
/**
+ * New {@link FilterControl} for the given template {@link IFilter}.
+ */
+ public FilterControl(FilterPanel parent, IFilter template) {
+ super(parent, SWT.FLAT);
+ this.templateFilter = template;
+ this.attribute = template.getAttribute();
+ init();
+ }
+
+
+
+ /**
+ * Returns the operator selected in the GUI, never null.
+ *
+ * @return
+ */
+ protected final Operator getOperator() {
+ return getOperators().get(operatorControl.getSelectionIndex());
+ }
+
+ /**
+ * Typical implementation:
+ *
+ * <pre>
+ * return ABCFilter.SUPPORTED_OPERATORS.asList();
+ * </pre>
+ */
+ protected abstract List<Operator> getOperators();
+
+ /**
+ * Called when the operator changes. As different operators require
+ * different numbers of values, the GUI may need to be adapted accordingly.
+ *
+ * If initialize is true, the controls should be initialized from the
+ * template.
+ */
+ protected abstract void updateValueControls(boolean initialize);
+
+ /**
* Constructs a Filter object from the current configuration of the Control.
+ *
* @return the {@link IFilter} object.
*/
abstract public IFilter getFilter();
-
+
+ private void init() {
+ if (attribute == null) throw new NullPointerException();
+ setLayout(new GridLayout(3, false));
+ createOperators();
+ updateValueControls(templateFilter != null);
+ }
+
+ private void createOperators() {
+ operatorControl = new Combo(this, SWT.DROP_DOWN | SWT.BORDER
+ | SWT.READ_ONLY);
+ GridData layoutData = new GridData(SWT.LEFT, SWT.CENTER, false, false);
+ operatorControl.setLayoutData(layoutData);
+ for (Operator operator : getOperators()) {
+ operatorControl.add(operator.toLocaleString());
+ }
+ operatorControl.select(0);
+ if (templateFilter != null) {
+ operatorControl.select(getOperators().indexOf(
+ templateFilter.getOperator()));
+ }
+
+ operatorControl.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ updateValueControls(false);
+ layout(true);
+ }
+ });
+ }
+
+ // //////////////////////////////////////////////////////////////////////////
+
/**
* This factory instantiates the correct FilterControl for a given filter.
*/
- public static FilterControl createFilterControl(FilterPanel parent, IFilter filter) {
- if (filter instanceof AbstractTextFilter) return new FilterControlString(parent, (AbstractTextFilter)filter);
- if (filter instanceof DateFilter) return new FilterControlDate(parent, (DateFilter)filter);
- if (filter instanceof NumberFilter) return new FilterControlNumber(parent, (NumberFilter)filter);
- if (filter instanceof BoolFilter) return new FilterControlBoolean(parent, (BoolFilter)filter);
- if (filter instanceof EnumFilter) return new FilterControlEnum(parent, (EnumFilter)filter);
+ public static FilterControl createFilterControl(FilterPanel parent,
+ IFilter filter) {
+ if (filter instanceof AbstractTextFilter)
+ return new FilterControlString(parent, (AbstractTextFilter) filter);
+ if (filter instanceof DateFilter)
+ return new FilterControlDate(parent, (DateFilter) filter);
+ if (filter instanceof NumberFilter)
+ return new FilterControlNumber(parent, (NumberFilter) filter);
+ if (filter instanceof BoolFilter)
+ return new FilterControlBoolean(parent, (BoolFilter) filter);
+ if (filter instanceof EnumFilter)
+ return new FilterControlEnum(parent, (EnumFilter) filter);
- throw new IllegalArgumentException("Don't know how to create: " + filter);
+ throw new IllegalArgumentException("Don't know how to create: "
+ + filter);
}
/**
@@ -100,12 +215,13 @@
throw new IllegalArgumentException("Don't know how to create (yet): "
+ attribute);
}
-
+
/**
* This method retrieves a value from the Plugin.
*/
public static String getString(String key) {
- // Note that ResourceBundle has nothing to do with Eclipse. But it's a convenient
+ // Note that ResourceBundle has nothing to do with Eclipse. But it's a
+ // convenient
// means of accessing plugin.properties, which we need anyway.
return ResourceBundle.getBundle("plugin").getString(key);
}
diff --git a/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControlBoolean.java b/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControlBoolean.java
index 18be3e8..654d579 100644
--- a/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControlBoolean.java
+++ b/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControlBoolean.java
@@ -10,61 +10,45 @@
******************************************************************************/
package org.eclipse.rmf.reqif10.search.filter.ui;
+import java.util.List;
+
import org.eclipse.rmf.reqif10.AttributeDefinitionBoolean;
import org.eclipse.rmf.reqif10.search.filter.BoolFilter;
import org.eclipse.rmf.reqif10.search.filter.IFilter;
-import org.eclipse.rmf.reqif10.search.filter.NumberFilter;
import org.eclipse.rmf.reqif10.search.filter.IFilter.Operator;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
-import com.google.common.collect.ImmutableList;
-
/**
- * Used for plain text and XHTML
+ * Used for Boolean
*
* @author jastram
*/
public class FilterControlBoolean extends FilterControl {
private Combo valueControl;
- private Combo attr;
- private AttributeDefinitionBoolean attribute;
- private BoolFilter templateFilter;
public FilterControlBoolean(FilterPanel parent,
AttributeDefinitionBoolean attribute) {
- super(parent, SWT.FLAT);
- this.attribute = attribute;
- init();
+ super(parent, attribute);
}
public FilterControlBoolean(FilterPanel parent, BoolFilter template) {
- super(parent, SWT.FLAT);
- this.attribute = (AttributeDefinitionBoolean) template.getAttribute();
- this.templateFilter = template;
- init();
+ super(parent, template);
}
- private void init() {
- if (!(attribute instanceof AttributeDefinitionBoolean)) {
- throw new IllegalArgumentException("Not allowed: " + attribute);
- }
- setLayout(new GridLayout(2, false));
- createOperators();
- createValueControl();
- }
-
- private void createValueControl() {
- showValueControl(true);
- if (templateFilter != null) {
- boolean value = (Boolean)templateFilter.getFilterValue1();
- valueControl.select(value ? 1 : 0);
- }
+ protected void updateValueControls(boolean initialize) {
+ if (getOperator() == Operator.IS_SET || getOperator() == Operator.IS_NOT_SET) {
+ showValueControl(false);
+ } else {
+ showValueControl(true);
+ if (initialize) {
+ Boolean defaultValue = (Boolean) templateFilter.getFilterValue1();
+ valueControl.select(Boolean.TRUE.equals(defaultValue) ? 1 : 0);
+ }
+ }
+ layout();
}
private void showValueControl(boolean show) {
@@ -80,44 +64,15 @@
valueControl = null;
}
}
-
- private void createOperators() {
- attr = new Combo(this, SWT.DROP_DOWN | SWT.BORDER | SWT.READ_ONLY);
- GridData layoutData = new GridData(SWT.LEFT, SWT.CENTER, false, false);
- attr.setLayoutData(layoutData);
- for (Operator operator : BoolFilter.SUPPORTED_OPERATORS) {
- attr.add(operator.toLocaleString());
- }
- attr.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- updateValueControls();
- layout(true);
- }
- });
-
- attr.select(0);
- if (templateFilter != null)
- attr.select(BoolFilter.SUPPORTED_OPERATORS.asList().indexOf(
- templateFilter.getOperator()));
- }
-
- protected void updateValueControls() {
- ImmutableList<Operator> operatorList = NumberFilter.SUPPORTED_OPERATORS.asList();
-
- if (operatorList.indexOf(Operator.IS_SET) == attr.getSelectionIndex()
- || NumberFilter.SUPPORTED_OPERATORS.asList().indexOf(
- Operator.IS_NOT_SET) == attr.getSelectionIndex()) {
- showValueControl(false);
- } else {
- showValueControl(true);
- }
- layout();
- }
public IFilter getFilter() {
- Operator operator = BoolFilter.SUPPORTED_OPERATORS.asList().get(attr.getSelectionIndex());
Boolean value = valueControl == null ? null : new Boolean(valueControl.getSelectionIndex() == 1);
- return new BoolFilter(operator, value, attribute);
+ return new BoolFilter(getOperator(), value, (AttributeDefinitionBoolean) attribute);
}
+
+ @Override
+ protected List<Operator> getOperators() {
+ return BoolFilter.SUPPORTED_OPERATORS.asList();
+ }
+
}
diff --git a/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControlDate.java b/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControlDate.java
index baaf7ea..7ff6b29 100644
--- a/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControlDate.java
+++ b/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControlDate.java
@@ -12,6 +12,7 @@
import java.util.Calendar;
import java.util.GregorianCalendar;
+import java.util.List;
import org.eclipse.rmf.reqif10.AttributeDefinitionDate;
import org.eclipse.rmf.reqif10.search.filter.DateFilter;
@@ -19,104 +20,88 @@
import org.eclipse.rmf.reqif10.search.filter.IFilter;
import org.eclipse.rmf.reqif10.search.filter.IFilter.Operator;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.DateTime;
public class FilterControlDate extends FilterControl {
-
- private DateTime date1;
- private DateTime date2;
- private Combo attr;
- private Object attribute;
- private DateFilter templateFilter;
+
+ private DateTime control[];
public FilterControlDate(FilterPanel parent, DateFilter.InternalAttribute attribute) {
- this(parent, (DateFilter)null);
- this.attribute = attribute;
+ super(parent, attribute);
}
public FilterControlDate(FilterPanel parent,
AttributeDefinitionDate attribute) {
- this(parent, (DateFilter)null);
- this.attribute = attribute;
+ super(parent, attribute);
}
public FilterControlDate(FilterPanel parent, DateFilter template) {
- super(parent, SWT.FLAT);
- if (template != null) {
- this.attribute = template.getAttribute();
- this.templateFilter = template;
- }
- setLayout(new GridLayout(3, false));
- createOperators();
- createValueControls();
+ super(parent, template);
}
- private void createValueControls() {
- date1 = new DateTime(this, SWT.DATE | SWT.DROP_DOWN | SWT.BORDER);
- GridData layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
- date1.setLayoutData(layoutData);
- updateValueControls();
-
- if (templateFilter != null) {
- GregorianCalendar cal1 = templateFilter.getFilterValue1();
- date1.setDate(cal1.get(Calendar.YEAR), cal1.get(Calendar.MONTH), cal1.get(Calendar.DAY_OF_MONTH));
- GregorianCalendar cal2 = templateFilter.getFilterValue2();
- if (cal2 != null) {
- date2.setDate(cal2.get(Calendar.YEAR), cal2.get(Calendar.MONTH), cal2.get(Calendar.DAY_OF_MONTH));
- }
- }
+ @Override
+ protected List<Operator> getOperators() {
+ return DateFilter.SUPPORTED_OPERATORS.asList();
}
- private void createOperators() {
- attr = new Combo(this, SWT.DROP_DOWN | SWT.BORDER | SWT.READ_ONLY);
- GridData layoutData = new GridData(SWT.LEFT, SWT.CENTER, false, false);
- attr.setLayoutData(layoutData);
- for (Operator operator : DateFilter.SUPPORTED_OPERATORS) {
- attr.add(operator.toLocaleString());
+ @Override
+ protected void updateValueControls(boolean initialize) {
+ if (getOperator() == Operator.IS_SET
+ || getOperator() == Operator.IS_NOT_SET) {
+ showControl(0, false);
+ showControl(1, false);
}
- attr.select(0);
- if (templateFilter != null)
- attr.select(DateFilter.SUPPORTED_OPERATORS.asList().indexOf(
- templateFilter.getOperator()));
-
- attr.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- updateValueControls();
- layout(true);
- }
- });
- }
-
- protected void updateValueControls() {
- if (DateFilter.SUPPORTED_OPERATORS.asList().indexOf(Operator.BETWEEN) == attr.getSelectionIndex()) {
- if (date2 == null) {
- date2 = new DateTime(this, SWT.DATE | SWT.DROP_DOWN | SWT.BORDER);
- GridData layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
- date2.setLayoutData(layoutData);
- }
+ else if (getOperator() == Operator.BETWEEN) {
+ showControl(0, true);
+ showControl(1, true);
} else {
- if (date2 != null) {
- date2.dispose();
- date2 = null;
+ showControl(0, true);
+ showControl(1, false);
+ }
+
+ if (initialize) {
+ if (templateFilter.getFilterValue1() != null) {
+ GregorianCalendar cal = (GregorianCalendar) templateFilter.getFilterValue1();
+ control[0].setDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH));
+ }
+ if (templateFilter.getFilterValue2() != null) {
+ GregorianCalendar cal = (GregorianCalendar) templateFilter.getFilterValue2();
+ control[1].setDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH));
}
}
+
layout();
}
+ private void showControl(int controlId, boolean show) {
+ if (control == null) control = new DateTime[2];
+
+ if (show && control[controlId] == null) {
+ control[controlId] = new DateTime(this, SWT.DATE | SWT.DROP_DOWN | SWT.BORDER);
+ GridData layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
+ control[controlId].setLayoutData(layoutData);
+ }
+ if (! show && control[controlId] != null) {
+ control[controlId].dispose();
+ control[controlId] = null;
+ }
+ }
+
+ @Override
public IFilter getFilter() {
- Operator operator = DateFilter.SUPPORTED_OPERATORS.asList().get(attr.getSelectionIndex());
- GregorianCalendar value1 = new GregorianCalendar(date1.getYear(), date1.getMonth(), date1.getDay());
- GregorianCalendar value2 = date2 == null ? null : new GregorianCalendar(date2.getYear(), date2.getMonth(), date2.getDay());
+ GregorianCalendar value1 = control[0] == null ? null
+ : new GregorianCalendar(control[0].getYear(),
+ control[0].getMonth(), control[0].getDay());
+ GregorianCalendar value2 = control[1] == null ? null
+ : new GregorianCalendar(control[1].getYear(),
+ control[1].getMonth(), control[1].getDay());
if (attribute instanceof InternalAttribute) {
- return new DateFilter(operator, value1, value2, (InternalAttribute)attribute);
+ return new DateFilter(getOperator(), value1, value2,
+ (InternalAttribute) attribute);
} else {
- return new DateFilter(operator, value1, value2, (AttributeDefinitionDate)attribute);
+ return new DateFilter(getOperator(), value1, value2,
+ (AttributeDefinitionDate) attribute);
}
}
}
diff --git a/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControlEnum.java b/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControlEnum.java
index bd12ebe..d136e55 100644
--- a/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControlEnum.java
+++ b/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControlEnum.java
@@ -10,10 +10,12 @@
******************************************************************************/
package org.eclipse.rmf.reqif10.search.filter.ui;
+import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashSet;
import java.util.Iterator;
+import java.util.List;
+import org.eclipse.emf.common.util.EList;
import org.eclipse.rmf.reqif10.AttributeDefinitionEnumeration;
import org.eclipse.rmf.reqif10.EnumValue;
import org.eclipse.rmf.reqif10.pror.editor.presentation.EnumSelector;
@@ -24,9 +26,7 @@
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
@@ -38,57 +38,65 @@
public class FilterControlEnum extends FilterControl {
private Button valueControl;
- private Combo attr;
- private AttributeDefinitionEnumeration attribute;
- private EnumFilter templateFilter;
private Collection<EnumValue> items;
public FilterControlEnum(FilterPanel parent,
AttributeDefinitionEnumeration attribute) {
- super(parent, SWT.FLAT);
- this.attribute = attribute;
- init();
+ super(parent, attribute);
}
public FilterControlEnum(FilterPanel parent, EnumFilter template) {
- super(parent, SWT.FLAT);
- this.attribute = (AttributeDefinitionEnumeration) template.getAttribute();
- this.templateFilter = template;
- init();
+ super(parent, template);
}
- private void init() {
- if (!(attribute instanceof AttributeDefinitionEnumeration)) {
- throw new IllegalArgumentException("Not allowed: " + attribute);
- }
- setLayout(new GridLayout(2, false));
- if (templateFilter != null) {
- items = templateFilter.getFilterValue1();
+ @Override
+ protected List<Operator> getOperators() {
+ return EnumFilter.SUPPORTED_OPERATORS.asList();
+ }
+
+ @Override
+ protected void updateValueControls(boolean initialize) {
+ if (getOperator() == Operator.IS_SET
+ || getOperator() == Operator.IS_NOT_SET) {
+ showControl(false);
} else {
- items = new HashSet<EnumValue>();
+ showControl(true);
}
- createOperators();
- createValueControl();
- updateItems(items);
+ if (initialize) {
+ if (valueControl != null) {
+ updateItems(((EnumFilter)templateFilter).getFilterValue1());
+ }
+ }
}
- private void createValueControl() {
- valueControl = new Button(this, SWT.PUSH | SWT.FLAT | SWT.WRAP);
- GridData layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
- layoutData.widthHint = 200;
- valueControl.setLayoutData(layoutData);
- valueControl.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- popupSelector(valueControl);
- }
- });
+ private void showControl(boolean show) {
+ if (show && valueControl == null) {
+ if (items == null) items = new ArrayList<EnumValue>();
+
+ valueControl = new Button(this, SWT.PUSH | SWT.FLAT | SWT.WRAP);
+ GridData layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
+ layoutData.widthHint = 200;
+ valueControl.setLayoutData(layoutData);
+ valueControl.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ popupSelector(valueControl);
+ }
+ });
+ }
+ if (!show && valueControl != null) {
+ valueControl.dispose();
+ valueControl = null;
+ items = null;
+ }
}
protected void popupSelector(Control control) {
+ EList<EnumValue> specifiedValues = ((AttributeDefinitionEnumeration) attribute)
+ .getType().getSpecifiedValues();
Shell shell = EnumSelector.createShell(control);
- EnumSelector selector = new EnumSelector(attribute.getType()
- .getSpecifiedValues(), items, shell, SWT.BORDER);
+ EnumSelector selector = new EnumSelector(specifiedValues, items, shell,
+ SWT.BORDER);
int status = selector.showEnumSelector(shell);
if (status == SWT.OK) {
updateItems(selector.getItems());
@@ -96,13 +104,15 @@
}
private void updateItems(Collection<EnumValue> items) {
+ EList<EnumValue> specifiedValues = ((AttributeDefinitionEnumeration) attribute)
+ .getType().getSpecifiedValues();
this.items = items;
StringBuilder sb = new StringBuilder();
for (Iterator<EnumValue> i = items.iterator(); i.hasNext();) {
EnumValue value = i.next();
// In case items have been removed
- if (! attribute.getType().getSpecifiedValues().contains(value)) continue;
+ if (! specifiedValues.contains(value)) continue;
String label = value.getLongName() != null ? value.getLongName() : value.getIdentifier();
sb.append(label);
@@ -114,22 +124,9 @@
getParent().getParent().layout();
}
- // TODO use correct operators.
- private void createOperators() {
- attr = new Combo(this, SWT.DROP_DOWN | SWT.BORDER | SWT.READ_ONLY);
- GridData layoutData = new GridData(SWT.LEFT, SWT.CENTER, false, false);
- attr.setLayoutData(layoutData);
- for (Operator operator : EnumFilter.SUPPORTED_OPERATORS) {
- attr.add(operator.toLocaleString());
- }
- attr.select(0);
- if (templateFilter != null)
- attr.select(EnumFilter.SUPPORTED_OPERATORS.asList().indexOf(
- templateFilter.getOperator()));
- }
-
public IFilter getFilter() {
- Operator operator = EnumFilter.SUPPORTED_OPERATORS.asList().get(attr.getSelectionIndex());
- return new EnumFilter(operator, items, attribute);
+ return new EnumFilter(getOperator(), items,
+ (AttributeDefinitionEnumeration) attribute);
}
+
}
diff --git a/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControlNumber.java b/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControlNumber.java
index 7daac69..766f8e6 100644
--- a/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControlNumber.java
+++ b/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControlNumber.java
@@ -11,6 +11,7 @@
package org.eclipse.rmf.reqif10.search.filter.ui;
import java.math.BigInteger;
+import java.util.List;
import org.eclipse.rmf.reqif10.AttributeDefinition;
import org.eclipse.rmf.reqif10.AttributeDefinitionReal;
@@ -18,120 +19,82 @@
import org.eclipse.rmf.reqif10.search.filter.IFilter.Operator;
import org.eclipse.rmf.reqif10.search.filter.NumberFilter;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.Text;
-import com.google.common.collect.ImmutableList;
-
/**
* This control handles Integers and Reals.
* @author jastram
*/
public class FilterControlNumber extends FilterControl {
-
- private NumberControl num[] = new NumberControl[2];
- private Combo attr;
- private AttributeDefinition attribute;
- private NumberFilter templateFilter;
-
+
+ private NumberControl control[];
+
public FilterControlNumber(FilterPanel parent,
AttributeDefinition attribute) {
- super(parent, SWT.FLAT);
- this.attribute = attribute;
- init();
+ super(parent, attribute);
}
public FilterControlNumber(FilterPanel parent, NumberFilter template) {
- super(parent, SWT.FLAT);
- this.attribute = template.getAttribute();
- this.templateFilter = template;
- init();
- }
-
- private void init() {
- setLayout(new GridLayout(3, false));
- createOperators();
- showNum(1, true);
- updateValueControls();
-
- if (templateFilter != null) {
- if (templateFilter.getFilterValue1() != null) {
- num[0].setValue(templateFilter.getFilterValue1());
- }
- if (templateFilter.getFilterValue2() != null) {
- num[1].setValue(templateFilter.getFilterValue2());
- }
- }
- }
-
- private void createOperators() {
- attr = new Combo(this, SWT.DROP_DOWN | SWT.BORDER | SWT.READ_ONLY);
- GridData layoutData = new GridData(SWT.LEFT, SWT.CENTER, false, false);
- attr.setLayoutData(layoutData);
- for (Operator operator : NumberFilter.SUPPORTED_OPERATORS) {
- attr.add(operator.toLocaleString());
- }
- attr.select(0);
- if (templateFilter != null)
- attr.select(NumberFilter.SUPPORTED_OPERATORS.asList().indexOf(
- templateFilter.getOperator()));
-
- attr.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- updateValueControls();
- layout(true);
- }
- });
+ super(parent, template);
}
- protected void updateValueControls() {
- ImmutableList<Operator> operatorList = NumberFilter.SUPPORTED_OPERATORS.asList();
+
+ @Override
+ protected List<Operator> getOperators() {
+ return NumberFilter.SUPPORTED_OPERATORS.asList(); }
- if (operatorList.indexOf(Operator.IS_SET) == attr.getSelectionIndex()
- || NumberFilter.SUPPORTED_OPERATORS.asList().indexOf(
- Operator.IS_NOT_SET) == attr.getSelectionIndex()) {
- showNum(0, false);
- showNum(1, false);
+ @Override
+ protected void updateValueControls(boolean initialize) {
+ if (getOperator() == Operator.IS_SET
+ || getOperator() == Operator.IS_NOT_SET) {
+ showControl(0, false);
+ showControl(1, false);
}
- else if (NumberFilter.SUPPORTED_OPERATORS.asList().indexOf(Operator.BETWEEN) == attr.getSelectionIndex()) {
- showNum(0, true);
- showNum(1, true);
+ else if (getOperator() == Operator.BETWEEN) {
+ showControl(0, true);
+ showControl(1, true);
} else {
- showNum(0, true);
- showNum(1, false);
+ showControl(0, true);
+ showControl(1, false);
}
+
+ if (initialize) {
+ if (templateFilter.getFilterValue1() != null) {
+ control[0].setValue((Number) templateFilter.getFilterValue1());
+ }
+ if (templateFilter.getFilterValue2() != null) {
+ control[1].setValue((Number) templateFilter.getFilterValue1());
+ }
+ }
+
layout();
}
-
- private void showNum(int controlId, boolean show) {
- if (show && num[controlId] == null) {
- num[controlId] = new NumberControl(this, attribute instanceof AttributeDefinitionReal);
+
+ private void showControl(int controlId, boolean show) {
+ if (control == null) control = new NumberControl[2];
+
+ if (show && control[controlId] == null) {
+ control[controlId] = new NumberControl(this, attribute instanceof AttributeDefinitionReal);
GridData layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
- num[controlId].getControl().setLayoutData(layoutData);
+ control[controlId].getControl().setLayoutData(layoutData);
}
- if (! show && num[controlId] != null) {
- num[controlId].getControl().dispose();
- num[controlId] = null;
+ if (! show && control[controlId] != null) {
+ control[controlId].getControl().dispose();
+ control[controlId] = null;
}
}
+ @Override
public IFilter getFilter() {
- Operator operator = NumberFilter.SUPPORTED_OPERATORS.asList().get(attr.getSelectionIndex());
- Number value1 = num[0] == null ? null : num[0].getNumber();
- Number value2 = num[1] == null ? null : num[1].getNumber();
-
- return new NumberFilter(operator, value1,
- value2, attribute);
+ Number value1 = control[0] == null ? null : control[0].getNumber();
+ Number value2 = control[1] == null ? null : control[1].getNumber();
+ return new NumberFilter(getOperator(), value1, value2, (AttributeDefinition)attribute);
}
}
diff --git a/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControlString.java b/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControlString.java
index a9e1ef4..3a95d0a 100644
--- a/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControlString.java
+++ b/org.eclipse.rmf.reqif10.search.ui/src/org/eclipse/rmf/reqif10/search/filter/ui/FilterControlString.java
@@ -10,6 +10,8 @@
******************************************************************************/
package org.eclipse.rmf.reqif10.search.filter.ui;
+import java.util.List;
+
import org.eclipse.rmf.reqif10.AttributeDefinition;
import org.eclipse.rmf.reqif10.AttributeDefinitionString;
import org.eclipse.rmf.reqif10.AttributeDefinitionXHTML;
@@ -21,101 +23,92 @@
import org.eclipse.rmf.reqif10.search.filter.XhtmlFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Text;
-import com.google.common.collect.ImmutableSet;
-
/**
* Used for plain text and XHTML
*
* @author jastram
*/
public class FilterControlString extends FilterControl {
-
+
private Text text;
- private Combo attr;
private Button caseSensitive;
- private Object attribute;
- private AbstractTextFilter templateFilter;
- private ImmutableSet<Operator> operators;
public FilterControlString(FilterPanel parent, StringFilter.InternalAttribute attribute) {
- super(parent, SWT.FLAT);
- this.attribute = attribute;
- init();
+ super(parent, attribute);
}
public FilterControlString(FilterPanel parent,
AttributeDefinition attribute) {
- super(parent, SWT.FLAT);
- this.attribute = attribute;
- init();
+ super(parent, attribute);
}
public FilterControlString(FilterPanel parent, AbstractTextFilter template) {
- super(parent, SWT.FLAT);
- this.attribute = template.getAttribute();
- this.templateFilter = template;
- init();
+ super(parent, template);
}
- private void init() {
- if (!(attribute instanceof AttributeDefinitionXHTML
- || attribute instanceof AttributeDefinitionString || attribute instanceof InternalAttribute)) {
- throw new IllegalArgumentException("Not allowed: " + attribute);
+ @Override
+ protected List<Operator> getOperators() {
+ if (attribute instanceof AttributeDefinitionXHTML) {
+ return XhtmlFilter.SUPPORTED_OPERATORS.asList();
+ } else {
+ return StringFilter.SUPPORTED_OPERATORS.asList();
}
- setLayout(new GridLayout(3, false));
- createOperators();
- createCaseSensitive();
- createText();
}
- private void createText() {
- text = new Text(this, SWT.SINGLE | SWT.BORDER | SWT.FILL);
- GridData layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
- text.setLayoutData(layoutData);
- if (templateFilter != null) text.setText(templateFilter.getFilterValue1());
- }
-
- private void createCaseSensitive() {
- caseSensitive = new Button(this, SWT.CHECK);
- caseSensitive.setText("Aa");
- caseSensitive.setToolTipText("Case Sensitive");
- GridData layoutData = new GridData(SWT.LEFT, SWT.CENTER, false, false);
- caseSensitive.setLayoutData(layoutData);
- if (templateFilter != null) caseSensitive.setSelection(templateFilter.isCaseSensitive());
- }
-
- private void createOperators() {
- operators = attribute instanceof AttributeDefinitionXHTML ? XhtmlFilter.SUPPORTED_OPERATORS
- : StringFilter.SUPPORTED_OPERATORS;
-
- attr = new Combo(this, SWT.DROP_DOWN | SWT.BORDER | SWT.READ_ONLY);
- GridData layoutData = new GridData(SWT.LEFT, SWT.CENTER, false, false);
- attr.setLayoutData(layoutData);
- for (Operator operator : operators) {
- attr.add(operator.toLocaleString());
+ @Override
+ protected void updateValueControls(boolean initialize) {
+ if (getOperator() == Operator.IS_SET
+ || getOperator() == Operator.IS_NOT_SET) {
+ showControl(false);
+ } else {
+ showControl(true);
}
- attr.select(0);
- if (templateFilter != null)
- attr.select(operators.asList().indexOf(
- templateFilter.getOperator()));
- }
+ if (initialize) {
+ if (text != null) {
+ caseSensitive.setSelection(((StringFilter) templateFilter)
+ .isCaseSensitive());
+ text.setText((String) templateFilter.getFilterValue1());
+ }
+ }
+ }
+
+ private void showControl(boolean show) {
+ if (show && text == null) {
+ caseSensitive = new Button(this, SWT.CHECK);
+ caseSensitive.setText("Aa");
+ caseSensitive.setToolTipText("Case Sensitive");
+ GridData layoutData = new GridData(SWT.LEFT, SWT.CENTER, false, false);
+ caseSensitive.setLayoutData(layoutData);
+
+ text = new Text(this, SWT.SINGLE | SWT.BORDER | SWT.FILL);
+ layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
+ text.setLayoutData(layoutData);
+ }
+ if (!show && text != null) {
+ text.dispose();
+ text = null;
+ caseSensitive.dispose();
+ caseSensitive = null;
+ }
+ }
+
public IFilter getFilter() {
- Operator operator = operators.asList().get(attr.getSelectionIndex());
- String value = text.getText();
+ String value = text == null ? null : text.getText();
+ boolean cv = caseSensitive == null ? false : caseSensitive.getSelection();
+
if (attribute instanceof InternalAttribute) {
- return new StringFilter(operator, value, (InternalAttribute) attribute, caseSensitive.getSelection());
+ return new StringFilter(getOperator(), value, (InternalAttribute) attribute, cv);
} else if (attribute instanceof AttributeDefinitionString) {
- return new StringFilter(operator, value, (AttributeDefinitionString) attribute, caseSensitive.getSelection());
+ return new StringFilter(getOperator(), value, (AttributeDefinitionString) attribute, cv);
} else if (attribute instanceof AttributeDefinitionXHTML) {
- return new XhtmlFilter(operator, value, (AttributeDefinitionXHTML) attribute, caseSensitive.getSelection());
+ return new XhtmlFilter(getOperator(), value, (AttributeDefinitionXHTML) attribute, cv);
} else {
throw new IllegalStateException("Can't handle: " + attribute);
}
}
+
}