OSDN Git Service

73ab063eecbd9fb5a20a75d1ff4ece2b3fede1e4
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / ui / swing / filter / BirthmarkElementCountComparisonPairFilterComponentService.java
1 package jp.sourceforge.stigmata.ui.swing.filter;
2
3 import java.awt.Dimension;
4 import java.awt.GridLayout;
5 import java.util.ArrayList;
6 import java.util.List;
7
8 import javax.swing.JComboBox;
9 import javax.swing.JLabel;
10 import javax.swing.JTextField;
11
12 import jp.sourceforge.stigmata.ComparisonPairFilter;
13 import jp.sourceforge.stigmata.filter.BirthmarkElementCountComparisonPairFilter;
14 import jp.sourceforge.stigmata.filter.BirthmarkElementCountComparisonPairFilterService;
15 import jp.sourceforge.stigmata.filter.FilterTarget;
16 import jp.sourceforge.stigmata.spi.BirthmarkSpi;
17 import jp.sourceforge.stigmata.spi.ComparisonPairFilterSpi;
18 import jp.sourceforge.stigmata.ui.swing.BirthmarkServiceListCellRenderer;
19 import jp.sourceforge.stigmata.ui.swing.BirthmarkServiceListener;
20 import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
21
22 /**
23  * 
24  * @author Haruaki TAMADA
25  */
26 public class BirthmarkElementCountComparisonPairFilterComponentService extends AbstractComparisonPairFilterComponentService implements BirthmarkServiceListener{
27     private Pane pane;
28
29     @Override
30     public ComparisonPairFilterPane createComponent(StigmataFrame frame, ComparisonPairFilterSpi service){
31         pane = new Pane(frame, service);
32         return pane;
33     }
34
35     @Override
36     public String getFilterName(){
37         return "elementcount";
38     }
39
40     @Override
41     public void serviceAdded(BirthmarkSpi service){
42         pane.serviceAdded(service);
43     }
44
45     @Override
46     public void serviceRemoved(BirthmarkSpi service){
47         pane.serviceRemoved(service);
48     }
49
50     @Override
51     public ComparisonPairFilterSpi getComparisonPairFilterService(){
52         return new BirthmarkElementCountComparisonPairFilterService();
53     }
54
55     private static class Pane extends ComparisonPairFilterPane implements BirthmarkServiceListener{
56         private static final long serialVersionUID = -6398073942592186671L;
57
58         private ComparisonPairFilterSpi service;
59         private JComboBox criterionType;
60         private JTextField threshold;
61         private JComboBox targetType;
62         private JComboBox birthmarks;
63
64         public Pane(StigmataFrame frame, ComparisonPairFilterSpi service){
65             super(frame);
66             this.service = service;
67             initLayouts();
68         }
69
70         @Override
71         public void serviceAdded(BirthmarkSpi service){
72             birthmarks.addItem(service);
73         }
74
75         @Override
76         public void serviceRemoved(BirthmarkSpi service){
77             birthmarks.removeItem(service);
78         }
79
80         @Override
81         public String[] getErrors(){
82             List<String> errors = new ArrayList<String>();
83             if(threshold.getText().trim().equals("")){
84                 errors.add(getMessages().get("error.empty.threshold"));
85             }
86             try{
87                 int v = Integer.parseInt(threshold.getText());
88                 if(v < 0){
89                     errors.add(getMessages().format("error.negative.value", v));
90                 }
91             } catch(NumberFormatException e){
92                 errors.add(getMessages().format("error.invalid.format.integer", threshold.getText()));
93             }
94
95             return errors.toArray(new String[errors.size()]);
96         }
97
98         @Override
99         public ComparisonPairFilter getFilter(){
100             try{
101                 BirthmarkElementCountComparisonPairFilter filter = new BirthmarkElementCountComparisonPairFilter(service);
102                 filter.setBirthmarkType(getBirthmarkType());
103                 filter.setCriterion(getCriterion((String)criterionType.getSelectedItem()));
104                 filter.setThreshold(Integer.parseInt(threshold.getText()));
105                 filter.setTarget(getTarget((String)targetType.getSelectedItem()));
106
107                 return filter;
108             } catch(Exception e){
109             }
110             return null;
111         }
112
113         @Override
114         public void resetComponents(){
115             threshold.setText("");
116             criterionType.setSelectedIndex(0);
117             targetType.setSelectedItem(getDisplayTarget(FilterTarget.BOTH_TARGETS));
118         }
119
120         @Override
121         public void setFilter(ComparisonPairFilter cpf){
122             BirthmarkElementCountComparisonPairFilter filter = (BirthmarkElementCountComparisonPairFilter)cpf;
123             criterionType.setSelectedItem(getDisplayCriterion(filter.getCriterion()));
124             threshold.setText(String.valueOf(filter.getThreshold()));
125             targetType.setSelectedItem(getDisplayTarget(filter.getTarget()));
126         }
127
128         private void initLayouts(){
129             JLabel label = new JLabel(getMessages().get("filter.elementcount.label"));
130             threshold = new JTextField();
131             criterionType = createCriteriaBox(BirthmarkElementCountComparisonPairFilter.getValidCriteria());
132             birthmarks = new JComboBox();
133             birthmarks.setRenderer(new BirthmarkServiceListCellRenderer(new Dimension(200, 20), 60));
134             JLabel label2 = new JLabel(getMessages().get("filter.elementcount.label.next"));
135             targetType = createTargetBox();
136
137             setLayout(new GridLayout(6, 1));
138             add(label);
139             add(birthmarks);
140             add(label2);
141             add(targetType);
142             add(criterionType);
143             add(threshold);
144         }
145
146         private String getBirthmarkType(){
147             BirthmarkSpi service = (BirthmarkSpi)birthmarks.getSelectedItem();
148             if(service != null){
149                 return service.getType();
150             }
151             throw new IllegalStateException("invalid birthmarks");
152         }
153     }
154 }