1 package jp.naist.se.stigmata;
\r
8 import java.util.Arrays;
\r
9 import java.util.HashMap;
\r
10 import java.util.Iterator;
\r
11 import java.util.List;
\r
12 import java.util.Map;
\r
15 * Concrete class for ComparisonResultSet. This instance compare class files by round robin.
\r
17 * @author Haruaki TAMADA
\r
18 * @version $Revision$ $Date$
\r
20 public class RoundRobinComparisonResultSet implements ComparisonResultSet{
\r
21 private List<BirthmarkSet> holders1;
\r
22 private List<BirthmarkSet> holders2;
\r
23 private BirthmarkEnvironment environment;
\r
25 private int compareCount;
\r
26 private boolean tablePair = true;
\r
27 private boolean samePair = false;
\r
30 * constructor. if user gives { a, b, c, } as holders1, then
\r
31 * the instance (created by this constructor) compares { a<->b, a<->c,
\r
34 public RoundRobinComparisonResultSet(BirthmarkSet[] holders1, BirthmarkEnvironment environment){
\r
35 this(holders1, environment, false);
\r
39 * constructor. if user gives { a, b, c, } as holders1, then the
\r
40 * instance (created by this constructor when samePair is true)
\r
41 * compares { a<->a, b<->a, b<->b, c<->a, c<->b, c<->c, }.
\r
42 * Otherwise, the instance compares { a<->b, a<->c, b<->c, } when
\r
43 * samePair is false.
\r
45 public RoundRobinComparisonResultSet(BirthmarkSet[] holders1, BirthmarkEnvironment environment,
\r
47 this.holders1 = Arrays.asList(holders1);
\r
48 this.holders2 = Arrays.asList(holders1);
\r
49 this.environment = environment;
\r
52 setCompareSamePair(samePair);
\r
56 * constructor. if user gives { a, b, c, } as holders1 and { x,
\r
57 * y, z, } as holders2, then the instance compares { a<->x, a<->y,
\r
58 * a<->z, b<->x, b<->y, b<->z, c<->x, c<->y, c<->z, }.
\r
60 public RoundRobinComparisonResultSet(final BirthmarkSet[] holders1, final BirthmarkSet[] holders2,
\r
61 BirthmarkEnvironment environment){
\r
62 this.holders1 = Arrays.asList(holders1);
\r
63 this.holders2 = Arrays.asList(holders2);
\r
64 this.environment = environment;
\r
67 this.compareCount = holders1.length * holders2.length;
\r
71 * @return environment
\r
73 public BirthmarkEnvironment getEnvironment(){
\r
78 * update same pair comparing flag unless two birthmark array is setted.
\r
80 public void setCompareSamePair(boolean flag){
\r
83 compareCount = holders1.size() * (holders1.size() + 1) / 2;
\r
86 compareCount = holders1.size() * (holders1.size() - 1) / 2;
\r
90 public boolean isCompareSamePair(){
\r
95 * returns the compare count of birthmark sets.
\r
97 public int getComparisonCount(){
\r
98 return compareCount;
\r
102 * return a iterator of whole comparison.
\r
104 public Iterator<ComparisonPair> iterator(){
\r
105 return new ComparisonIterator();
\r
108 public BirthmarkSet[] getComparisonSources(){
\r
109 Map<URL, BirthmarkSet> map = new HashMap<URL, BirthmarkSet>();
\r
110 for(BirthmarkSet set: holders1){
\r
111 map.put(set.getLocation(), set);
\r
113 for(BirthmarkSet set: holders2){
\r
114 map.put(set.getLocation(), set);
\r
117 BirthmarkSet[] entries = new BirthmarkSet[map.size()];
\r
119 for(Map.Entry<URL, BirthmarkSet> entry: map.entrySet()){
\r
120 entries[index] = entry.getValue();
\r
130 private class ComparisonIterator implements Iterator<ComparisonPair>{
\r
133 private int count = 0;
\r
135 public boolean hasNext(){
\r
136 return count < getComparisonCount();
\r
139 public ComparisonPair next(){
\r
140 if((tablePair && i == holders1.size()) ||
\r
141 (!tablePair && !samePair && i == j) ||
\r
142 (!tablePair && samePair && i > j)){
\r
146 ComparisonPair pair = new ComparisonPair(holders1.get(i), holders2.get(j), environment);
\r
152 public void remove(){
\r