1 /*
2 /*
3 * Copyright 2005 John G. Wilson
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
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 /* (non-Javadoc)
40 * @see org.codehaus.groovy.sandbox.util.slurpersupport.NodeChildren#iterator()
41 */
42 public Iterator nodeIterator() {
43 return new NodeIterator(this.parent.iterator()) {
44 /* (non-Javadoc)
45 * @see org.codehaus.groovy.sandbox.util.slurpersupport.NodeIterator#getNextNode(java.util.Iterator)
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 }