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 TotalElementCountComparisonPairFilter extends AbstractComparisonPairFilter{
14 private static final List<Criterion> CRITERIA = new ArrayList<Criterion>();
16 CRITERIA.add(Criterion.GREATER_EQUALS);
17 CRITERIA.add(Criterion.GREATER_THAN);
18 CRITERIA.add(Criterion.LESS_EQUALS);
19 CRITERIA.add(Criterion.LESS_THAN);
20 CRITERIA.add(Criterion.EQUALS_AS);
21 CRITERIA.add(Criterion.NOT_EQUALS_AS);
22 CRITERIA.add(Criterion.MATCH);
23 CRITERIA.add(Criterion.NOT_MATCH);
26 private int threshold = 0;
27 private FilterTarget target;
29 public TotalElementCountComparisonPairFilter(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){
45 if(getTarget() == FilterTarget.TARGET_1){
46 flag = checkFiltered(pair.getTarget1().getSumOfElementCount());
48 else if(getTarget() == FilterTarget.TARGET_2){
49 flag = checkFiltered(pair.getTarget2().getSumOfElementCount());
52 flag = checkFiltered(pair.getTarget1().getSumOfElementCount(), pair.getTarget2().getSumOfElementCount());
57 private boolean checkFiltered(int e1, int e2){
60 int t = getThreshold();
61 switch(getCriterion()){
63 flag1 = e1 >= t; flag2 = e2 >= t;
66 flag1 = e1 > t; flag2 = e2 > t;
69 flag1 = e1 <= t; flag2 = e2 <= t;
72 flag1 = e1 < t; flag2 = e2 < t;
75 flag1 = e1 == t; flag2 = e2 == t;
78 flag1 = e1 != t; flag2 = e2 != t;
81 flag1 = e1 == e2; flag2 = flag1;
84 flag1 = e1 != e2; flag2 = flag1;
91 return (getTarget() == FilterTarget.BOTH_TARGETS && flag1 && flag2) ||
92 (getTarget() == FilterTarget.ONE_OF_TARGETS && (flag1 || flag2));
95 private boolean checkFiltered(int total){
97 switch(getCriterion()){
99 flag = total >= getThreshold();
102 flag = total > getThreshold();
105 flag = total <= getThreshold();
108 flag = total < getThreshold();
111 flag = total == getThreshold();
114 flag = total != getThreshold();
123 public int getThreshold(){
127 public void setThreshold(int threshold){
129 throw new IllegalArgumentException("threshold must be positive value: " + threshold);
131 this.threshold = threshold;
134 public FilterTarget getTarget(){
138 public void setTarget(FilterTarget target){
139 this.target = target;
143 public String toString(){
144 StringBuilder sb = new StringBuilder();
146 case TARGET_1: sb.append("target1"); break;
147 case TARGET_2: sb.append("target2"); break;
148 case BOTH_TARGETS: sb.append("(target1&target2)"); break;
149 case ONE_OF_TARGETS: sb.append("(target1|target2)"); break;
151 sb.append(".element");
152 switch(getCriterion()){
153 case GREATER_EQUALS: sb.append(" >= "); break;
154 case GREATER_THAN: sb.append(" > "); break;
155 case LESS_EQUALS: sb.append(" <= "); break;
156 case LESS_THAN: sb.append(" < "); break;
157 case EQUALS_AS: sb.append(" == "); break;
158 case NOT_EQUALS_AS: sb.append(" != "); break;
160 sb.append(Integer.toString(getThreshold()));
162 return new String(sb);