1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package groovy.util.slurpersupport;
19
20 import java.util.Iterator;
21 import java.util.Map;
22
23 import groovy.lang.Closure;
24
25 /***
26 * @author John Wilson
27 *
28 */
29
30 public class FilteredNodeChildren extends NodeChildren {
31 private final Closure closure;
32
33 public FilteredNodeChildren(final GPathResult parent, final Closure closure, final Map namespaceTagHints) {
34 super(parent, parent.name, namespaceTagHints);
35 this.closure = closure;
36 }
37
38
39
40
41 public Iterator nodeIterator() {
42 return new NodeIterator(this.parent.iterator()) {
43
44
45
46 protected Object getNextNode(final Iterator iter) {
47 while (iter.hasNext()) {
48 final Object node = iter.next();
49 final Boolean result = (Boolean)FilteredNodeChildren.this.closure.call(new Object[]{node});
50
51 if (result != null && result.booleanValue()) {
52 return node;
53 }
54 }
55
56 return null;
57 }
58 };
59 }
60
61 }