01: package org.geotools.data.store;
02:
03: import java.util.Iterator;
04:
05: import org.geotools.feature.Feature;
06: import org.opengis.filter.Filter;
07:
08: /**
09: * Decorates a {@link org.geotools.feature.Feature} iterator with one that
10: * filters content.
11: *
12: * @author Justin Deoliveira, The Open Planning Project
13: *
14: */
15: public class FilteringIterator implements Iterator {
16:
17: /**
18: * Delegate iterator
19: */
20: Iterator delegate;
21: /**
22: * The Filter
23: */
24: Filter filter;
25: /**
26: * Next feature
27: */
28: Feature next;
29:
30: public FilteringIterator(Iterator delegate, Filter filter) {
31: this .delegate = delegate;
32: this .filter = filter;
33: }
34:
35: public Iterator getDelegate() {
36: return delegate;
37: }
38:
39: public void remove() {
40: delegate.remove();
41: }
42:
43: public boolean hasNext() {
44: if (next != null) {
45: return true;
46: }
47:
48: while (delegate.hasNext()) {
49: Feature peek = (Feature) delegate.next();
50: if (filter.evaluate(peek)) {
51: next = peek;
52: break;
53: }
54: }
55:
56: return next != null;
57: }
58:
59: public Object next() {
60: Feature f = next;
61: next = null;
62: return f;
63: }
64:
65: }
|