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.jcr.decoration;
35
36 import info.magnolia.jcr.RuntimeRepositoryException;
37 import info.magnolia.jcr.predicate.AbstractPredicate;
38
39 import javax.jcr.Node;
40 import javax.jcr.Property;
41 import javax.jcr.RepositoryException;
42
43
44
45
46
47
48 public class NodePredicateContentDecorator extends AbstractContentDecorator {
49
50 private AbstractPredicate<Node> nodePredicate = new TruePredicate<>();
51 private AbstractPredicate<Property> propertyPredicate = new TruePredicate<>();
52
53 public NodePredicateContentDecorator() {
54 }
55
56 public NodePredicateContentDecorator(AbstractPredicate<Node> nodePredicate) {
57 this.nodePredicate = nodePredicate;
58 }
59
60 @Override
61 public boolean evaluateNode(Node node) {
62 try {
63 while (node.getDepth() != 0) {
64 if (!nodePredicate.evaluate(node)) {
65 return false;
66 }
67 node = node.getParent();
68 }
69 return true;
70 } catch (RepositoryException e) {
71 throw new RuntimeRepositoryException(e);
72 }
73 }
74
75 @Override
76 public boolean evaluateProperty(Property property) {
77 try {
78 return evaluateNode(property.getParent()) && propertyPredicate.evaluate(property);
79 } catch (RepositoryException e) {
80 throw new RuntimeRepositoryException(e);
81 }
82 }
83
84 @Override
85 public boolean isMultipleWrapEnabled() {
86 return true;
87 }
88
89 public AbstractPredicate<Node> getNodePredicate() {
90 return nodePredicate;
91 }
92
93 public void setNodePredicate(AbstractPredicate<Node> nodePredicate) {
94 this.nodePredicate = nodePredicate;
95 }
96
97 public AbstractPredicate<Property> getPropertyPredicate() {
98 return propertyPredicate;
99 }
100
101 public void setPropertyPredicate(AbstractPredicate<Property> propertyPredicate) {
102 this.propertyPredicate = propertyPredicate;
103 }
104
105 private static class TruePredicate<T> extends AbstractPredicate<T> {
106 @Override
107 public boolean evaluateTyped(T node) {
108 return true;
109 }
110 }
111 }