1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.rest.delivery.jcr.filter;
35
36 import info.magnolia.jcr.iterator.FilteringRangeIterator;
37 import info.magnolia.jcr.wrapper.ChildFilteringContentDecorator;
38
39 import java.util.Collection;
40
41 import javax.jcr.Node;
42 import javax.jcr.NodeIterator;
43
44
45
46
47 public class ChildNodeTypesFilteringNodeIterator extends FilteringRangeIterator<Node> implements NodeIterator {
48
49 private final Collection<String> primaryNodeTypes;
50 private final boolean evaluateSupertypes;
51
52 public ChildNodeTypesFilteringNodeIterator(NodeIterator nodeIterator, Collection<String> primaryNodeTypes) {
53 this (nodeIterator, primaryNodeTypes, true);
54 }
55
56 public ChildNodeTypesFilteringNodeIterator(NodeIterator nodeIterator, Collection<String> primaryNodeTypes, boolean evaluateSupertypes) {
57 super(nodeIterator);
58 this.primaryNodeTypes = primaryNodeTypes;
59 this.evaluateSupertypes = evaluateSupertypes;
60 }
61
62 @Override
63 public Node next() {
64 return wrapNode(super.next());
65 }
66
67 @Override
68 public Node nextNode() {
69 return wrapNode(super.next());
70 }
71
72 @Override
73 protected boolean evaluate(Node node) {
74 return true;
75 }
76
77 protected Node wrapNode(Node node) {
78 ChildFilteringContentDecorator depthDecorator = new ChildFilteringContentDecorator(new NodeTypesPredicate(primaryNodeTypes, evaluateSupertypes), true);
79 return depthDecorator.wrapNode(node);
80 }
81 }