1 package jp.sourceforge.stigmata.filter;
3 import java.util.ArrayList;
6 import jp.sourceforge.stigmata.ComparisonPair;
7 import jp.sourceforge.stigmata.spi.ComparisonPairFilterService;
11 * @author Haruaki TAMADA
13 public class TargetNameComparisonPairFilter extends AbstractComparisonPairFilter{
14 private static final List<Criterion> CRITERIA = new ArrayList<Criterion>();
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);
26 private FilterTarget target = FilterTarget.BOTH_TARGETS;
29 public TargetNameComparisonPairFilter(ComparisonPairFilterService service){
34 public Criterion[] getAcceptableCriteria(){
35 return getValidCriteria();
38 public static Criterion[] getValidCriteria(){
39 return CRITERIA.toArray(new Criterion[CRITERIA.size()]);
43 public boolean isFiltered(ComparisonPair pair){
47 if(getTarget() == FilterTarget.TARGET_1){
48 flag = checkMatch(pair.getTarget1().getName(), v);
50 else if(getTarget() == FilterTarget.TARGET_2){
51 flag = checkMatch(pair.getTarget2().getName(), v);
54 flag = checkMatch(pair.getTarget1().getName(), pair.getTarget2().getName(), v);
59 public String getValue(){
63 public void setValue(String value){
67 public FilterTarget getTarget(){
71 public void setTarget(FilterTarget target){
75 private boolean checkMatch(String name1, String name2, String value){
78 switch(getCriterion()){
80 flag1 = name1.startsWith(value);
81 flag2 = name2.startsWith(value);
84 flag1 = name1.endsWith(value);
85 flag2 = name2.endsWith(value);
88 flag1 = name1.equals(value);
89 flag2 = name2.equals(value);
92 flag1 = !name1.equals(value);
93 flag2 = !name2.equals(value);
96 flag1 = name1.equals(name2);
100 flag1 = !name1.equals(name2);
110 if(getTarget() == FilterTarget.BOTH_TARGETS){
111 flag = flag1 && flag2;
114 flag = flag1 || flag2;
119 private boolean checkMatch(String name, String value){
121 switch(getCriterion()){
123 flag = name.startsWith(value);
126 flag = name.endsWith(value);
129 flag = name.equals(value);
132 flag = !name.equals(value);
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";
148 StringBuilder sb = new StringBuilder();
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;
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;
163 sb.append(getValue());
165 return new String(sb);