1 package jp.sourceforge.stigmata.ui.swing.filter;
7 import java.awt.GridLayout;
8 import java.util.ArrayList;
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;
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;
25 * @author Haruaki TAMADA
28 public class SimilarityComparisonPairFilterComponentService extends AbstractComparisonPairFilterComponentService{
31 public ComparisonPairFilterPane createComponent(StigmataFrame frame, ComparisonPairFilterSpi service){
32 return new Pane(frame, service);
36 public String getFilterName(){
41 public ComparisonPairFilterSpi getComparisonPairFilterService(){
42 return new SimilarityComparisonPairFilterService();
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;
51 public Pane(StigmataFrame frame, ComparisonPairFilterSpi service){
53 this.service = service;
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"));
64 double v = Double.parseDouble(threshold.getText());
66 errors.add(getMessages().format("error.negative.value", v));
69 errors.add(getMessages().format("error.over.range", "0-1"));
71 } catch(NumberFormatException e){
72 errors.add(getMessages().format("error.invalid.format.double", threshold.getText()));
75 return errors.toArray(new String[errors.size()]);
79 public ComparisonPairFilter getFilter(){
81 SimilarityComparisonPairFilter filter = new SimilarityComparisonPairFilter(service);
82 filter.setThreshold(Double.parseDouble(threshold.getText()));
83 filter.setCriterion(getCriterion((String)criterionType.getSelectedItem()));
92 public void resetComponents(){
93 threshold.setText("");
94 criterionType.setSelectedIndex(0);
98 public void setFilter(ComparisonPairFilter filter){
100 SimilarityComparisonPairFilter sf = (SimilarityComparisonPairFilter)filter;
101 criterionType.setSelectedItem(getDisplayCriterion(sf.getCriterion()));
102 threshold.setText(Double.toString(sf.getThreshold()));
109 private void initLayouts(){
110 JLabel label = new JLabel(getMessages().get("filter.similarity.label"));
111 threshold = new JTextField();
112 criterionType = createCriteriaBox(SimilarityComparisonPairFilter.getValidCriteria());
114 setLayout(new GridLayout(3, 1));
119 threshold.getDocument().addDocumentListener(new DocumentListener(){
121 public void changedUpdate(DocumentEvent e){
125 public void insertUpdate(DocumentEvent e){
129 public void removeUpdate(DocumentEvent e){