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 SimilarityComparisonPairFilter extends AbstractComparisonPairFilter{
14 private static final double EQUALS_THRESHOLD = 5E-5;
16 private static List<Criterion> CRITERIA = new ArrayList<Criterion>();
18 CRITERIA.add(Criterion.GREATER_EQUALS);
19 CRITERIA.add(Criterion.GREATER_THAN);
20 CRITERIA.add(Criterion.LESS_EQUALS);
21 CRITERIA.add(Criterion.LESS_THAN);
22 CRITERIA.add(Criterion.EQUALS_AS);
23 CRITERIA.add(Criterion.NOT_EQUALS_AS);
26 private double threshold;
28 public SimilarityComparisonPairFilter(ComparisonPairFilterService service){
34 public boolean isFiltered(ComparisonPair pair){
35 double similarity = pair.calculateSimilarity();
37 switch(getCriterion()){
39 flag = similarity >= getThreshold();
42 flag = similarity > getThreshold();
45 flag = similarity <= getThreshold();
48 flag = similarity < getThreshold();
51 flag = (similarity - getThreshold()) <= EQUALS_THRESHOLD;
54 flag = (similarity - getThreshold()) > EQUALS_THRESHOLD;
63 public static Criterion[] getValidCriteria(){
64 return CRITERIA.toArray(new Criterion[CRITERIA.size()]);
68 public Criterion[] getAcceptableCriteria(){
69 return getValidCriteria();
72 public double getThreshold(){
76 public void setThreshold(double threshold){
77 if(threshold < 0d || threshold >= 1.0d){
78 throw new IllegalArgumentException("threshold must be 0.0-1.0");
80 this.threshold = threshold;
84 public String toString(){
85 StringBuffer sb = new StringBuffer();
86 sb.append("similarity");
87 switch(getCriterion()){
88 case GREATER_EQUALS: sb.append(" >= "); break;
89 case GREATER_THAN: sb.append(" > "); break;
90 case LESS_EQUALS: sb.append(" <= "); break;
91 case LESS_THAN: sb.append(" < "); break;
92 case EQUALS_AS: sb.append(" == "); break;
93 case NOT_EQUALS_AS: sb.append(" != "); break;
95 sb.append(getThreshold());
96 return new String(sb);