OSDN Git Service

Spiという名前をすべてServiceに変更した.
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / filter / TargetNameComparisonPairFilter.java
1 package jp.sourceforge.stigmata.filter;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import jp.sourceforge.stigmata.ComparisonPair;
7 import jp.sourceforge.stigmata.spi.ComparisonPairFilterService;
8
9 /**
10  * 
11  * @author Haruaki TAMADA
12  */
13 public class TargetNameComparisonPairFilter extends AbstractComparisonPairFilter{
14     private static final List<Criterion> CRITERIA = new ArrayList<Criterion>();
15
16     static{
17         CRITERIA.add(Criterion.STARTS_WITH);
18         CRITERIA.add(Criterion.NOT_STARTS_WITH); 
19         CRITERIA.add(Criterion.ENDS_WITH);
20         CRITERIA.add(Criterion.NOT_ENDS_WITH);
21         CRITERIA.add(Criterion.EQUALS_AS);
22         CRITERIA.add(Criterion.NOT_EQUALS_AS);
23         CRITERIA.add(Criterion.MATCH);
24         CRITERIA.add(Criterion.NOT_MATCH);
25     };
26     private FilterTarget target = FilterTarget.BOTH_TARGETS;
27     private String value;
28
29     public TargetNameComparisonPairFilter(ComparisonPairFilterService service){
30         super(service);
31     }
32
33     @Override
34     public Criterion[] getAcceptableCriteria(){
35         return getValidCriteria();
36     }
37
38     public static Criterion[] getValidCriteria(){
39         return CRITERIA.toArray(new Criterion[CRITERIA.size()]);
40     }
41
42     @Override
43     public boolean isFiltered(ComparisonPair pair){
44         String v = value;
45         if(v == null) v = "";
46         boolean flag;
47         if(getTarget() == FilterTarget.TARGET_1){
48             flag = checkMatch(pair.getTarget1().getName(), v);
49         }
50         else if(getTarget() == FilterTarget.TARGET_2){
51             flag = checkMatch(pair.getTarget2().getName(), v);
52         }
53         else{
54             flag = checkMatch(pair.getTarget1().getName(), pair.getTarget2().getName(), v);
55         }
56         return flag;
57     }
58
59     public String getValue(){
60         return value;
61     }
62
63     public void setValue(String value){
64         this.value = value;
65     }
66
67     public FilterTarget getTarget(){
68         return target;
69     }
70
71     public void setTarget(FilterTarget target){
72         this.target = target;
73     }
74
75     private boolean checkMatch(String name1, String name2, String value){
76         boolean flag1;
77         boolean flag2;
78         switch(getCriterion()){
79         case STARTS_WITH:
80             flag1 = name1.startsWith(value);
81             flag2 = name2.startsWith(value);
82             break;
83         case ENDS_WITH:
84             flag1 = name1.endsWith(value);
85             flag2 = name2.endsWith(value);
86             break;
87         case EQUALS_AS:
88             flag1 = name1.equals(value);
89             flag2 = name2.equals(value);
90             break;
91         case NOT_EQUALS_AS:
92             flag1 = !name1.equals(value);
93             flag2 = !name2.equals(value);
94             break;
95         case MATCH:
96             flag1 = name1.equals(name2);
97             flag2 = flag1;
98             break;
99         case NOT_MATCH:
100             flag1 = !name1.equals(name2);
101             flag2 = flag1;
102             break;
103         default:
104             flag1 = false;
105             flag2 = false;
106             break;
107         }
108         
109         boolean flag;
110         if(getTarget() == FilterTarget.BOTH_TARGETS){
111             flag = flag1 && flag2;
112         }
113         else{
114             flag = flag1 || flag2;
115         }
116         return flag;
117     }
118
119     private boolean checkMatch(String name, String value){
120         boolean flag;
121         switch(getCriterion()){
122         case STARTS_WITH:
123             flag = name.startsWith(value);
124             break;
125         case ENDS_WITH:
126             flag = name.endsWith(value);
127             break;
128         case EQUALS_AS:
129             flag = name.equals(value);
130             break;
131         case NOT_EQUALS_AS:
132             flag = !name.equals(value);
133             break;
134         default:
135             flag = false;
136             break;
137         }
138         return flag;
139     }
140
141     @Override
142     public String toString(){
143         if(getCriterion() == Criterion.MATCH || getCriterion() == Criterion.NOT_MATCH){
144             String value = " match ";
145             if(getCriterion() == Criterion.NOT_MATCH) value = " not match ";
146             return "target1.name" + value + "target2.name";
147         }
148         StringBuilder sb = new StringBuilder();
149         switch(getTarget()){
150         case TARGET_1:       sb.append("target1.name");           break;
151         case TARGET_2:       sb.append("target2.name");           break;
152         case BOTH_TARGETS:   sb.append("(target1&target2).name"); break;
153         case ONE_OF_TARGETS: sb.append("(target1|target2).name"); break; 
154         }
155         switch(getCriterion()){
156         case STARTS_WITH:     sb.append(" starts with ");     break;
157         case NOT_STARTS_WITH: sb.append(" not starts with "); break;
158         case ENDS_WITH:       sb.append(" ends with ");       break;
159         case NOT_ENDS_WITH:   sb.append(" not ends with ");   break;
160         case EQUALS_AS:       sb.append(" equals as ");       break;
161         case NOT_EQUALS_AS:   sb.append(" not equals as ");   break;
162         }
163         sb.append(getValue());
164
165         return new String(sb);
166     }
167 }