1 package jp.sourceforge.stigmata.filter;
3 import java.util.ArrayList;
4 import java.util.Iterator;
7 import jp.sourceforge.stigmata.BirthmarkContext;
8 import jp.sourceforge.stigmata.BirthmarkEnvironment;
9 import jp.sourceforge.stigmata.BirthmarkSet;
10 import jp.sourceforge.stigmata.ComparisonPair;
11 import jp.sourceforge.stigmata.ComparisonPairFilterSet;
12 import jp.sourceforge.stigmata.ComparisonResultSet;
15 * Filtering {@link ComparisonResultSet <code>ComparisonResultSet</code>}.
17 * @author Haruaki TAMADA
19 public class FilteredComparisonResultSet implements ComparisonResultSet{
20 private ComparisonResultSet resultset;
21 private List<ComparisonPairFilterSet> filters = new ArrayList<ComparisonPairFilterSet>();
26 * @param resultset filtering target
28 public FilteredComparisonResultSet(ComparisonResultSet resultset){
29 this.resultset = resultset;
34 * @param resultset filtering target
35 * @param filters filtering rule
37 public FilteredComparisonResultSet(ComparisonResultSet resultset, ComparisonPairFilterSet[] filters){
38 this.resultset = resultset;
39 for(int i = 0; i < filters.length; i++){
40 addFilterSet(filters[i]);
44 public void addFilterSet(ComparisonPairFilterSet filter){
48 public void removeFilterSet(ComparisonPairFilterSet filter){
49 filters.remove(filter);
53 public ComparisonPair getPairAt(int index){
55 for(Iterator<ComparisonPair> i = iterator(); i.hasNext(); ){
56 ComparisonPair pair = i.next();
57 if(currentIndex == index){
66 public ComparisonPair[] getPairs(){
67 List<ComparisonPair> list = new ArrayList<ComparisonPair>();
68 for(Iterator<ComparisonPair> i = iterator(); i.hasNext(); ){
71 return list.toArray(new ComparisonPair[list.size()]);
75 public int getPairCount(){
76 return resultset.getPairCount();
80 public BirthmarkContext getContext(){
81 return resultset.getContext();
85 public BirthmarkEnvironment getEnvironment(){
86 return resultset.getEnvironment();
90 public Iterator<ComparisonPair> iterator(){
91 return new FilteredIterator(resultset.iterator());
95 public synchronized BirthmarkSet[] getPairSources(){
96 List<BirthmarkSet> list = new ArrayList<BirthmarkSet>();
97 for(Iterator<BirthmarkSet> i = pairSources(); i.hasNext(); ){
100 return list.toArray(new BirthmarkSet[list.size()]);
104 public Iterator<BirthmarkSet> pairSources(){
105 return resultset.pairSources();
108 private class FilteredIterator implements Iterator<ComparisonPair>{
109 private Iterator<ComparisonPair> iterator;
110 private ComparisonPair next;
112 public FilteredIterator(Iterator<ComparisonPair> iterator){
113 this.iterator = iterator;
119 public boolean hasNext(){
124 public ComparisonPair next(){
125 ComparisonPair returnValue = next;
131 public void remove(){
132 throw new InternalError("not implemented");
135 private ComparisonPair findNext(){
136 boolean nowFinding = true;
137 while(nowFinding && iterator.hasNext()){
138 ComparisonPair nextPair = iterator.next();
139 // return the pair which the all filters is passed
140 if(isAllFilterPassed(nextPair)){
141 nowFinding = false; // found next value!
145 if(nowFinding && !iterator.hasNext()){
151 private boolean isAllFilterPassed(ComparisonPair pair){
153 for(Iterator<ComparisonPairFilterSet> i = filters.iterator(); i.hasNext(); ){
154 ComparisonPairFilterSet filter = i.next();
155 if(!filter.isFiltered(pair)){