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 org.codehaus.groovy.runtime.InvokerHelper;
24
25 import groovy.lang.Closure;
26
27 /***
28 * @author John Wilson
29 *
30 */
31
32 public class FilteredNodeChildren extends NodeChildren {
33 private final Closure closure;
34
35 public FilteredNodeChildren(final GPathResult parent, final Closure closure, final Map namespaceTagHints) {
36 super(parent, parent.name, namespaceTagHints);
37 this.closure = closure;
38 }
39
40
41
42
43 public Iterator nodeIterator() {
44 return new NodeIterator(this.parent.iterator()) {
45
46
47
48 protected Object getNextNode(final Iterator iter) {
49 while (iter.hasNext()) {
50 final Object node = iter.next();
51
52 if (InvokerHelper.asBool(FilteredNodeChildren.this.closure.call(new Object[]{node}))) {
53 return node;
54 }
55 }
56
57 return null;
58 }
59 };
60 }
61
62 }