OSDN Git Service

5aacbcda5c5a8cc27782f9a274a6d486f9a40ccf
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / ui / swing / filter / SimilarityComparisonPairFilterComponentService.java
1 package jp.sourceforge.stigmata.ui.swing.filter;
2
3 import java.awt.GridLayout;
4 import java.util.ArrayList;
5 import java.util.List;
6
7 import javax.swing.JComboBox;
8 import javax.swing.JLabel;
9 import javax.swing.JTextField;
10 import javax.swing.event.DocumentEvent;
11 import javax.swing.event.DocumentListener;
12
13 import jp.sourceforge.stigmata.ComparisonPairFilter;
14 import jp.sourceforge.stigmata.filter.SimilarityComparisonPairFilter;
15 import jp.sourceforge.stigmata.filter.SimilarityComparisonPairFilterService;
16 import jp.sourceforge.stigmata.spi.ComparisonPairFilterSpi;
17 import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
18
19 /**
20  * 
21  * @author Haruaki TAMADA
22  */
23 public class SimilarityComparisonPairFilterComponentService extends AbstractComparisonPairFilterComponentService{
24
25     @Override
26     public ComparisonPairFilterPane createComponent(StigmataFrame frame, ComparisonPairFilterSpi service){
27         return new Pane(frame, service);
28     }
29
30     @Override
31     public String getFilterName(){
32         return "similarity";
33     }
34
35     @Override
36     public ComparisonPairFilterSpi getComparisonPairFilterService(){
37         return new SimilarityComparisonPairFilterService();
38     }
39
40     private static class Pane extends ComparisonPairFilterPane{
41         private static final long serialVersionUID = 8912037614500713027L;
42         private ComparisonPairFilterSpi service;
43         private JComboBox criterionType;
44         private JTextField threshold;
45
46         public Pane(StigmataFrame frame, ComparisonPairFilterSpi service){
47             super(frame);
48             this.service = service;
49             initLayouts();
50         }
51
52         @Override
53         public String[] getErrors(){
54             List<String> errors = new ArrayList<String>();
55             if(threshold.getText().trim().equals("")){
56                 errors.add(getMessages().get("error.empty.threshold"));
57             }
58             try{
59                 double v = Double.parseDouble(threshold.getText());
60                 if(v < 0d){
61                     errors.add(getMessages().format("error.negative.value", v));
62                 }
63                 else if(v > 1.0d){
64                     errors.add(getMessages().format("error.over.range", "0-1"));
65                 }
66             } catch(NumberFormatException e){
67                 errors.add(getMessages().format("error.invalid.format.double", threshold.getText()));
68             }
69
70             return errors.toArray(new String[errors.size()]);
71         }
72
73         @Override
74         public ComparisonPairFilter getFilter(){
75             try{
76                 SimilarityComparisonPairFilter filter = new SimilarityComparisonPairFilter(service);
77                 filter.setThreshold(Double.parseDouble(threshold.getText()));
78                 filter.setCriterion(getCriterion((String)criterionType.getSelectedItem()));
79
80                 return filter;
81             } catch(Exception e){
82             }
83             return null;
84         }
85
86         @Override
87         public void resetComponents(){
88             threshold.setText("");
89             criterionType.setSelectedIndex(0);
90         }
91
92         @Override
93         public void setFilter(ComparisonPairFilter filter){
94             if(filter != null){
95                 SimilarityComparisonPairFilter sf = (SimilarityComparisonPairFilter)filter;
96                 criterionType.setSelectedItem(getDisplayCriterion(sf.getCriterion()));
97                 threshold.setText(Double.toString(sf.getThreshold()));
98             }
99             else{
100                 resetComponents();
101             }
102         }
103
104         private void initLayouts(){
105             JLabel label = new JLabel(getMessages().get("filter.similarity.label"));
106             threshold = new JTextField();
107             criterionType = createCriteriaBox(SimilarityComparisonPairFilter.getValidCriteria());
108
109             setLayout(new GridLayout(3, 1));
110             add(label);
111             add(criterionType);
112             add(threshold);
113
114             threshold.getDocument().addDocumentListener(new DocumentListener(){
115                 @Override
116                 public void changedUpdate(DocumentEvent e){
117                 }
118
119                 @Override
120                 public void insertUpdate(DocumentEvent e){
121                 }
122
123                 @Override
124                 public void removeUpdate(DocumentEvent e){
125                 }
126             });
127         }
128     };
129 }