import jalview.util.matcher.Condition;
import jalview.util.matcher.KeyedMatcher;
import jalview.util.matcher.KeyedMatcherI;
-import jalview.util.matcher.Matcher;
-import jalview.util.matcher.MatcherI;
+import jalview.util.matcher.KeyedMatcherSet;
+import jalview.util.matcher.KeyedMatcherSetI;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Iterator;
/**
* Populates the attribute filter fields for the initial display
*
- * @param attributeFilters
+ * @param filters
*/
- void setInitialFilters(KeyedMatcherI attributeFilters)
+ void setInitialFilters(KeyedMatcherSetI filters)
{
// todo generalise to populate N conditions
-
- if (attributeFilters != null)
- {
- filterAttribute.setSelectedItem(attributeFilters.getKey());
- filterCondition.setSelectedItem(attributeFilters.getMatcher()
- .getCondition());
- filterValue.setText(attributeFilters.getMatcher().getPattern());
-
- KeyedMatcherI second = attributeFilters.getSecondMatcher();
- if (second != null)
- {
- // todo add OR/AND condition to gui
- filterAttribute2.setSelectedItem(second.getKey());
- filterCondition2
- .setSelectedItem(second.getMatcher().getCondition());
- filterValue2.setText(second.getMatcher().getPattern());
- }
+
+ if (filters == null)
+ {
+ return;
+ }
+
+ Iterator<KeyedMatcherI> theFilters = filters.getMatchers();
+ if (theFilters.hasNext())
+ {
+ KeyedMatcherI filter = theFilters.next();
+ filterAttribute.setSelectedItem(filter.getKey());
+ filterCondition.setSelectedItem(filter.getMatcher().getCondition());
+ filterValue.setText(filter.getMatcher().getPattern());
+ }
+ if (theFilters.hasNext())
+ {
+ KeyedMatcherI filter = theFilters.next();
+ boolean anded = filters.isAnded();
+ // todo add OR/AND condition to gui
+ // - user choice for the second condition, fixed thereafter
+ filterAttribute2.setSelectedItem(filter.getKey());
+ filterCondition2.setSelectedItem(filter.getMatcher().getCondition());
+ filterValue2.setText(filter.getMatcher().getPattern());
}
}
String attribute = (String) filterAttribute.getSelectedItem();
Condition cond = (Condition) filterCondition.getSelectedItem();
String pattern = filterValue.getText().trim();
- if (pattern.length() > 1)
+ if (pattern.length() > 0)
{
- MatcherI filter = new Matcher(cond, pattern);
- KeyedMatcherI km = new KeyedMatcher(attribute, filter);
+ KeyedMatcherSetI filters = new KeyedMatcherSet();
+ KeyedMatcherI km = new KeyedMatcher(attribute, cond, pattern);
+ filters.and(km);
/*
* is there a second condition?
- * todo: generalise to N conditions
+ * todo: allow N conditions with choice of AND or OR (but not both!)
*/
pattern = filterValue2.getText().trim();
if (pattern.length() > 1)
{
attribute = (String) filterAttribute2.getSelectedItem();
cond = (Condition) filterCondition2.getSelectedItem();
- filter = new Matcher(cond, pattern);
- km = km.and(attribute, filter);
+ KeyedMatcherI km2 = new KeyedMatcher(attribute, cond, pattern);
+ filters.and(km2);
}
- acg.setAttributeFilters(km);
+ acg.setAttributeFilters(filters);
}
}
filterAttribute.addItem(attName);
filterAttribute2.addItem(attName);
}
- filterAttribute.addActionListener(new ActionListener()
+ filterAttribute.addItemListener(new ItemListener()
{
@Override
- public void actionPerformed(ActionEvent e)
+ public void itemStateChanged(ItemEvent e)
{
changeColour(true);
}
{
filterCondition.addItem(cond);
}
- filterCondition.addActionListener(new ActionListener()
+ filterCondition.addItemListener(new ItemListener()
{
@Override
- public void actionPerformed(ActionEvent e)
+ public void itemStateChanged(ItemEvent e)
{
changeColour(true);
}