1 package jp.sourceforge.stigmata.filter;
7 import java.util.ArrayList;
10 import jp.sourceforge.stigmata.ComparisonPair;
11 import jp.sourceforge.stigmata.spi.ComparisonPairFilterSpi;
15 * @author Haruaki TAMADA
18 public class SimilarityComparisonPairFilter extends AbstractComparisonPairFilter{
19 private static final double EQUALS_THRESHOLD = 5E-5;
21 private static List<Criterion> CRITERIA = new ArrayList<Criterion>();
23 CRITERIA.add(Criterion.GREATER_EQUALS);
24 CRITERIA.add(Criterion.GREATER_THAN);
25 CRITERIA.add(Criterion.LESS_EQUALS);
26 CRITERIA.add(Criterion.LESS_THAN);
27 CRITERIA.add(Criterion.EQUALS_AS);
28 CRITERIA.add(Criterion.NOT_EQUALS_AS);
31 private double threshold;
33 public SimilarityComparisonPairFilter(ComparisonPairFilterSpi service){
39 public boolean isFiltered(ComparisonPair pair){
40 double similarity = pair.calculateSimilarity();
42 switch(getCriterion()){
44 flag = similarity >= getThreshold();
47 flag = similarity > getThreshold();
50 flag = similarity <= getThreshold();
53 flag = similarity < getThreshold();
56 flag = (similarity - getThreshold()) <= EQUALS_THRESHOLD;
59 flag = (similarity - getThreshold()) > EQUALS_THRESHOLD;
68 public static Criterion[] getValidCriteria(){
69 return CRITERIA.toArray(new Criterion[CRITERIA.size()]);
73 public Criterion[] getAcceptableCriteria(){
74 return getValidCriteria();
77 public double getThreshold(){
81 public void setThreshold(double threshold){
82 if(threshold < 0d || threshold >= 1.0d){
83 throw new IllegalArgumentException("threshold must be 0.0-1.0");
85 this.threshold = threshold;
89 public String toString(){
90 StringBuffer sb = new StringBuffer();
91 sb.append("similarity");
92 switch(getCriterion()){
93 case GREATER_EQUALS: sb.append(" >= "); break;
94 case GREATER_THAN: sb.append(" > "); break;
95 case LESS_EQUALS: sb.append(" <= "); break;
96 case LESS_THAN: sb.append(" < "); break;
97 case EQUALS_AS: sb.append(" == "); break;
98 case NOT_EQUALS_AS: sb.append(" != "); break;
100 sb.append(getThreshold());
101 return new String(sb);