1 package jp.sourceforge.stigmata.ui.swing.filter;
3 import java.awt.Dimension;
4 import java.awt.GridLayout;
5 import java.util.ArrayList;
8 import javax.swing.JComboBox;
9 import javax.swing.JLabel;
10 import javax.swing.JTextField;
12 import jp.sourceforge.stigmata.ComparisonPairFilter;
13 import jp.sourceforge.stigmata.filter.BirthmarkElementCountComparisonPairFilter;
14 import jp.sourceforge.stigmata.filter.BirthmarkElementCountComparisonPairFilterService;
15 import jp.sourceforge.stigmata.filter.FilterTarget;
16 import jp.sourceforge.stigmata.spi.BirthmarkSpi;
17 import jp.sourceforge.stigmata.spi.ComparisonPairFilterSpi;
18 import jp.sourceforge.stigmata.ui.swing.BirthmarkServiceListCellRenderer;
19 import jp.sourceforge.stigmata.ui.swing.BirthmarkServiceListener;
20 import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
24 * @author Haruaki TAMADA
26 public class BirthmarkElementCountComparisonPairFilterComponentService extends AbstractComparisonPairFilterComponentService implements BirthmarkServiceListener{
30 public ComparisonPairFilterPane createComponent(StigmataFrame frame, ComparisonPairFilterSpi service){
31 pane = new Pane(frame, service);
36 public String getFilterName(){
37 return "elementcount";
41 public void serviceAdded(BirthmarkSpi service){
42 pane.serviceAdded(service);
46 public void serviceRemoved(BirthmarkSpi service){
47 pane.serviceRemoved(service);
51 public ComparisonPairFilterSpi getComparisonPairFilterService(){
52 return new BirthmarkElementCountComparisonPairFilterService();
55 private static class Pane extends ComparisonPairFilterPane implements BirthmarkServiceListener{
56 private static final long serialVersionUID = -6398073942592186671L;
58 private ComparisonPairFilterSpi service;
59 private JComboBox criterionType;
60 private JTextField threshold;
61 private JComboBox targetType;
62 private JComboBox birthmarks;
64 public Pane(StigmataFrame frame, ComparisonPairFilterSpi service){
66 this.service = service;
71 public void serviceAdded(BirthmarkSpi service){
72 birthmarks.addItem(service);
76 public void serviceRemoved(BirthmarkSpi service){
77 birthmarks.removeItem(service);
81 public String[] getErrors(){
82 List<String> errors = new ArrayList<String>();
83 if(threshold.getText().trim().equals("")){
84 errors.add(getMessages().get("error.empty.threshold"));
87 int v = Integer.parseInt(threshold.getText());
89 errors.add(getMessages().format("error.negative.value", v));
91 } catch(NumberFormatException e){
92 errors.add(getMessages().format("error.invalid.format.integer", threshold.getText()));
95 return errors.toArray(new String[errors.size()]);
99 public ComparisonPairFilter getFilter(){
101 BirthmarkElementCountComparisonPairFilter filter = new BirthmarkElementCountComparisonPairFilter(service);
102 filter.setBirthmarkType(getBirthmarkType());
103 filter.setCriterion(getCriterion((String)criterionType.getSelectedItem()));
104 filter.setThreshold(Integer.parseInt(threshold.getText()));
105 filter.setTarget(getTarget((String)targetType.getSelectedItem()));
108 } catch(Exception e){
114 public void resetComponents(){
115 threshold.setText("");
116 criterionType.setSelectedIndex(0);
117 targetType.setSelectedItem(getDisplayTarget(FilterTarget.BOTH_TARGETS));
121 public void setFilter(ComparisonPairFilter cpf){
122 BirthmarkElementCountComparisonPairFilter filter = (BirthmarkElementCountComparisonPairFilter)cpf;
123 criterionType.setSelectedItem(getDisplayCriterion(filter.getCriterion()));
124 threshold.setText(String.valueOf(filter.getThreshold()));
125 targetType.setSelectedItem(getDisplayTarget(filter.getTarget()));
128 private void initLayouts(){
129 JLabel label = new JLabel(getMessages().get("filter.elementcount.label"));
130 threshold = new JTextField();
131 criterionType = createCriteriaBox(BirthmarkElementCountComparisonPairFilter.getValidCriteria());
132 birthmarks = new JComboBox();
133 birthmarks.setRenderer(new BirthmarkServiceListCellRenderer(new Dimension(200, 20), 60));
134 JLabel label2 = new JLabel(getMessages().get("filter.elementcount.label.next"));
135 targetType = createTargetBox();
137 setLayout(new GridLayout(6, 1));
146 private String getBirthmarkType(){
147 BirthmarkSpi service = (BirthmarkSpi)birthmarks.getSelectedItem();
149 return service.getType();
151 throw new IllegalStateException("invalid birthmarks");