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