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.wrapper;
35
36 import info.magnolia.jcr.iterator.FilteringPropertyIterator;
37 import info.magnolia.jcr.predicate.AbstractPredicate;
38
39 import javax.jcr.Node;
40 import javax.jcr.PathNotFoundException;
41 import javax.jcr.Property;
42 import javax.jcr.PropertyIterator;
43 import javax.jcr.RepositoryException;
44
45
46
47
48
49
50
51 public class PropertyFilteringNodeWrapper extends ChildWrappingNodeWrapper {
52
53 private final AbstractPredicate<Property> predicate;
54
55 public PropertyFilteringNodeWrapper(Node wrapped, AbstractPredicate<Property> predicate) {
56 super(wrapped);
57 this.predicate = predicate;
58 }
59
60 @Override
61 public PropertyIterator getProperties() throws RepositoryException {
62 return new FilteringPropertyIterator(super.getProperties(), predicate);
63 }
64
65 @Override
66 public PropertyIterator getProperties(String namePattern) throws RepositoryException {
67 return new FilteringPropertyIterator(super.getProperties(namePattern), predicate);
68 }
69
70 @Override
71 public PropertyIterator getProperties(String[] nameGlobs) throws RepositoryException {
72 return new FilteringPropertyIterator(super.getProperties(nameGlobs), predicate);
73 }
74
75 @Override
76 public Property getProperty(String relPath) throws PathNotFoundException, RepositoryException {
77 Property property = super.getProperty(relPath);
78 if (!predicate.evaluate(property)) {
79 throw new PathNotFoundException("Property " + relPath + " is not accessible via this wrapper.");
80 }
81 return property;
82 }
83 }