1 package jp.sourceforge.stigmata.ui.swing.filter;
3 import java.awt.GridLayout;
4 import java.util.ArrayList;
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;
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.ComparisonPairFilterService;
17 import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
21 * @author Haruaki TAMADA
23 public class SimilarityComparisonPairFilterComponentService extends AbstractComparisonPairFilterComponentService{
26 public ComparisonPairFilterPane createComponent(StigmataFrame frame, ComparisonPairFilterService service){
27 return new Pane(frame, service);
31 public String getFilterName(){
36 public ComparisonPairFilterService getComparisonPairFilterService(){
37 return new SimilarityComparisonPairFilterService();
40 private static class Pane extends ComparisonPairFilterPane{
41 private static final long serialVersionUID = 8912037614500713027L;
42 private ComparisonPairFilterService service;
43 private JComboBox criterionType;
44 private JTextField threshold;
46 public Pane(StigmataFrame frame, ComparisonPairFilterService service){
48 this.service = service;
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"));
59 double v = Double.parseDouble(threshold.getText());
61 errors.add(getMessages().format("error.negative.value", v));
64 errors.add(getMessages().format("error.over.range", "0-1"));
66 } catch(NumberFormatException e){
67 errors.add(getMessages().format("error.invalid.format.double", threshold.getText()));
70 return errors.toArray(new String[errors.size()]);
74 public ComparisonPairFilter getFilter(){
76 SimilarityComparisonPairFilter filter = new SimilarityComparisonPairFilter(service);
77 filter.setThreshold(Double.parseDouble(threshold.getText()));
78 filter.setCriterion(getCriterion((String)criterionType.getSelectedItem()));
87 public void resetComponents(){
88 threshold.setText("");
89 criterionType.setSelectedIndex(0);
93 public void setFilter(ComparisonPairFilter filter){
95 SimilarityComparisonPairFilter sf = (SimilarityComparisonPairFilter)filter;
96 criterionType.setSelectedItem(getDisplayCriterion(sf.getCriterion()));
97 threshold.setText(Double.toString(sf.getThreshold()));
104 private void initLayouts(){
105 JLabel label = new JLabel(getMessages().get("filter.similarity.label"));
106 threshold = new JTextField();
107 criterionType = createCriteriaBox(SimilarityComparisonPairFilter.getValidCriteria());
109 setLayout(new GridLayout(3, 1));
114 threshold.getDocument().addDocumentListener(new DocumentListener(){
116 public void changedUpdate(DocumentEvent e){
120 public void insertUpdate(DocumentEvent e){
124 public void removeUpdate(DocumentEvent e){