1 package jp.sourceforge.stigmata.ui.swing.filter;
7 import java.awt.Dimension;
8 import java.awt.GridLayout;
9 import java.util.ArrayList;
10 import java.util.List;
12 import javax.swing.JComboBox;
13 import javax.swing.JLabel;
14 import javax.swing.JTextField;
16 import jp.sourceforge.stigmata.ComparisonPairFilter;
17 import jp.sourceforge.stigmata.filter.BirthmarkElementCountComparisonPairFilter;
18 import jp.sourceforge.stigmata.filter.BirthmarkElementCountComparisonPairFilterService;
19 import jp.sourceforge.stigmata.filter.FilterTarget;
20 import jp.sourceforge.stigmata.spi.BirthmarkSpi;
21 import jp.sourceforge.stigmata.spi.ComparisonPairFilterSpi;
22 import jp.sourceforge.stigmata.ui.swing.BirthmarkServiceListCellRenderer;
23 import jp.sourceforge.stigmata.ui.swing.BirthmarkServiceListener;
24 import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
28 * @author Haruaki TAMADA
31 public class BirthmarkElementCountComparisonPairFilterComponentService extends AbstractComparisonPairFilterComponentService implements BirthmarkServiceListener{
34 public ComparisonPairFilterPane createComponent(StigmataFrame frame, ComparisonPairFilterSpi service){
35 pane = new Pane(frame, service);
39 public String getFilterName(){
40 return "elementcount";
43 public void serviceAdded(BirthmarkSpi service){
44 pane.serviceAdded(service);
47 public void serviceRemoved(BirthmarkSpi service){
48 pane.serviceRemoved(service);
51 public ComparisonPairFilterSpi getComparisonPairFilterService(){
52 return new BirthmarkElementCountComparisonPairFilterService();
55 private static class Pane extends ComparisonPairFilterPane implements BirthmarkServiceListener{
56 private static final long serialVersionUID = -6398073942592186671L;
58 private ComparisonPairFilterSpi service;
59 private JComboBox criterionType;
60 private JTextField threshold;
61 private JComboBox targetType;
62 private JComboBox birthmarks;
64 public Pane(StigmataFrame frame, ComparisonPairFilterSpi service){
66 this.service = service;
70 public void serviceAdded(BirthmarkSpi service){
71 birthmarks.addItem(service);
74 public void serviceRemoved(BirthmarkSpi service){
75 birthmarks.removeItem(service);
79 public String[] getErrors(){
80 List<String> errors = new ArrayList<String>();
81 if(threshold.getText().trim().equals("")){
82 errors.add(getMessages().get("error.empty.threshold"));
85 int v = Integer.parseInt(threshold.getText());
87 errors.add(getMessages().format("error.negative.value", v));
89 } catch(NumberFormatException e){
90 errors.add(getMessages().format("error.invalid.format.integer", threshold.getText()));
93 return errors.toArray(new String[errors.size()]);
97 public ComparisonPairFilter getFilter(){
99 BirthmarkElementCountComparisonPairFilter filter = new BirthmarkElementCountComparisonPairFilter(service);
100 filter.setBirthmarkType(getBirthmarkType());
101 filter.setCriterion(getCriterion((String)criterionType.getSelectedItem()));
102 filter.setThreshold(Integer.parseInt(threshold.getText()));
103 filter.setTarget(getTarget((String)targetType.getSelectedItem()));
106 } catch(Exception e){
112 public void resetComponents(){
113 threshold.setText("");
114 criterionType.setSelectedIndex(0);
115 targetType.setSelectedItem(getDisplayTarget(FilterTarget.BOTH_TARGETS));
119 public void setFilter(ComparisonPairFilter cpf){
120 BirthmarkElementCountComparisonPairFilter filter = (BirthmarkElementCountComparisonPairFilter)cpf;
121 criterionType.setSelectedItem(getDisplayCriterion(filter.getCriterion()));
122 threshold.setText(String.valueOf(filter.getThreshold()));
123 targetType.setSelectedItem(getDisplayTarget(filter.getTarget()));
126 private void initLayouts(){
127 JLabel label = new JLabel(getMessages().get("filter.elementcount.label"));
128 threshold = new JTextField();
129 criterionType = createCriteriaBox(BirthmarkElementCountComparisonPairFilter.getValidCriteria());
130 birthmarks = new JComboBox();
131 birthmarks.setRenderer(new BirthmarkServiceListCellRenderer(new Dimension(200, 20), 60));
132 JLabel label2 = new JLabel(getMessages().get("filter.elementcount.label.next"));
133 targetType = createTargetBox();
135 setLayout(new GridLayout(6, 1));
144 private String getBirthmarkType(){
145 BirthmarkSpi service = (BirthmarkSpi)birthmarks.getSelectedItem();
147 return service.getType();
149 throw new IllegalStateException("invalid birthmarks");