1 package jp.sourceforge.stigmata.filter;
7 import java.util.ArrayList;
8 import java.util.Iterator;
11 import jp.sourceforge.stigmata.BirthmarkContext;
12 import jp.sourceforge.stigmata.BirthmarkEnvironment;
13 import jp.sourceforge.stigmata.BirthmarkSet;
14 import jp.sourceforge.stigmata.ComparisonPair;
15 import jp.sourceforge.stigmata.ComparisonPairFilterSet;
16 import jp.sourceforge.stigmata.ComparisonResultSet;
19 * Filtering {@link ComparisonResultSet <code>ComparisonResultSet</code>}.
21 * @author Haruaki TAMADA
24 public class FilteredComparisonResultSet implements ComparisonResultSet{
25 private ComparisonResultSet resultset;
26 private List<ComparisonPairFilterSet> filters = new ArrayList<ComparisonPairFilterSet>();
31 * @param resultset filtering target
33 public FilteredComparisonResultSet(ComparisonResultSet resultset){
34 this.resultset = resultset;
39 * @param resultset filtering target
40 * @param filters filtering rule
42 public FilteredComparisonResultSet(ComparisonResultSet resultset, ComparisonPairFilterSet[] filters){
43 this.resultset = resultset;
44 for(int i = 0; i < filters.length; i++){
45 addFilterSet(filters[i]);
49 public void addFilterSet(ComparisonPairFilterSet filter){
53 public void removeFilterSet(ComparisonPairFilterSet filter){
54 filters.remove(filter);
58 public ComparisonPair getPairAt(int index){
60 for(Iterator<ComparisonPair> i = iterator(); i.hasNext(); ){
61 ComparisonPair pair = i.next();
62 if(currentIndex == index){
71 public ComparisonPair[] getPairs(){
72 List<ComparisonPair> list = new ArrayList<ComparisonPair>();
73 for(Iterator<ComparisonPair> i = iterator(); i.hasNext(); ){
76 return list.toArray(new ComparisonPair[list.size()]);
80 public int getPairCount(){
81 return resultset.getPairCount();
85 public BirthmarkContext getContext(){
86 return resultset.getContext();
90 public BirthmarkEnvironment getEnvironment(){
91 return resultset.getEnvironment();
95 public Iterator<ComparisonPair> iterator(){
96 return new FilteredIterator(resultset.iterator());
100 public synchronized BirthmarkSet[] getPairSources(){
101 List<BirthmarkSet> list = new ArrayList<BirthmarkSet>();
102 for(Iterator<BirthmarkSet> i = pairSources(); i.hasNext(); ){
105 return list.toArray(new BirthmarkSet[list.size()]);
109 public Iterator<BirthmarkSet> pairSources(){
110 return resultset.pairSources();
113 private class FilteredIterator implements Iterator<ComparisonPair>{
114 private Iterator<ComparisonPair> iterator;
115 private ComparisonPair next;
117 public FilteredIterator(Iterator<ComparisonPair> iterator){
118 this.iterator = iterator;
124 public boolean hasNext(){
129 public ComparisonPair next(){
130 ComparisonPair returnValue = next;
136 public void remove(){
137 throw new InternalError("not implemented");
140 private ComparisonPair findNext(){
141 boolean nowFinding = true;
142 while(nowFinding && iterator.hasNext()){
143 ComparisonPair nextPair = iterator.next();
144 // return the pair which the all filters is passed
145 if(isAllFilterPassed(nextPair)){
146 nowFinding = false; // found next value!
150 if(nowFinding && !iterator.hasNext()){
156 private boolean isAllFilterPassed(ComparisonPair pair){
158 for(Iterator<ComparisonPairFilterSet> i = filters.iterator(); i.hasNext(); ){
159 ComparisonPairFilterSet filter = i.next();
160 if(!filter.isFiltered(pair)){