OSDN Git Service

Remove Date tag of Subversion
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / ui / swing / filter / BirthmarkElementCountComparisonPairFilterComponentService.java
1 package jp.sourceforge.stigmata.ui.swing.filter;
2
3 /*
4  * $Id$
5  */
6
7 import java.awt.Dimension;
8 import java.awt.GridLayout;
9 import java.util.ArrayList;
10 import java.util.List;
11
12 import javax.swing.JComboBox;
13 import javax.swing.JLabel;
14 import javax.swing.JTextField;
15
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;
25
26 /**
27  * 
28  * @author Haruaki TAMADA
29  * @version $Revision$ 
30  */
31 public class BirthmarkElementCountComparisonPairFilterComponentService extends AbstractComparisonPairFilterComponentService implements BirthmarkServiceListener{
32     private Pane pane;
33
34     public ComparisonPairFilterPane createComponent(StigmataFrame frame, ComparisonPairFilterSpi service){
35         pane = new Pane(frame, service);
36         return pane;
37     }
38
39     public String getFilterName(){
40         return "elementcount";
41     }
42
43     public void serviceAdded(BirthmarkSpi service){
44         pane.serviceAdded(service);
45     }
46
47     public void serviceRemoved(BirthmarkSpi service){
48         pane.serviceRemoved(service);
49     }
50
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         public void serviceAdded(BirthmarkSpi service){
71             birthmarks.addItem(service);
72         }
73
74         public void serviceRemoved(BirthmarkSpi service){
75             birthmarks.removeItem(service);
76         }
77
78         @Override
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"));
83             }
84             try{
85                 int v = Integer.parseInt(threshold.getText());
86                 if(v < 0){
87                     errors.add(getMessages().format("error.negative.value", v));
88                 }
89             } catch(NumberFormatException e){
90                 errors.add(getMessages().format("error.invalid.format.integer", threshold.getText()));
91             }
92
93             return errors.toArray(new String[errors.size()]);
94         }
95
96         @Override
97         public ComparisonPairFilter getFilter(){
98             try{
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()));
104
105                 return filter;
106             } catch(Exception e){
107             }
108             return null;
109         }
110
111         @Override
112         public void resetComponents(){
113             threshold.setText("");
114             criterionType.setSelectedIndex(0);
115             targetType.setSelectedItem(getDisplayTarget(FilterTarget.BOTH_TARGETS));
116         }
117
118         @Override
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()));
124         }
125
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();
134
135             setLayout(new GridLayout(6, 1));
136             add(label);
137             add(birthmarks);
138             add(label2);
139             add(targetType);
140             add(criterionType);
141             add(threshold);
142         }
143
144         private String getBirthmarkType(){
145             BirthmarkSpi service = (BirthmarkSpi)birthmarks.getSelectedItem();
146             if(service != null){
147                 return service.getType();
148             }
149             throw new IllegalStateException("invalid birthmarks");
150         }
151     }
152 }