OSDN Git Service

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