1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package io.wcm.wcm.ui.granite.pathfield.impl.util;
21
22 import java.util.Iterator;
23
24 import org.apache.commons.collections4.Predicate;
25 import org.apache.commons.collections4.iterators.FilterIterator;
26 import org.apache.commons.collections4.iterators.TransformIterator;
27 import org.apache.sling.api.resource.Resource;
28 import org.apache.sling.api.resource.ResourceWrapper;
29 import org.jetbrains.annotations.NotNull;
30
31
32
33
34 public class PredicatedResourceWrapper extends ResourceWrapper {
35
36 private final Predicate<Resource> predicate;
37
38
39
40
41
42 public PredicatedResourceWrapper(Resource resource, Predicate<Resource> predicate) {
43 super(resource);
44 this.predicate = predicate;
45 }
46
47 @Override
48 public Resource getChild(@NotNull String relPath) {
49 Resource child = super.getChild(relPath);
50 if (child == null || !predicate.evaluate(child)) {
51 return null;
52 }
53 return new PredicatedResourceWrapper(child, predicate);
54 }
55
56 @Override
57 @SuppressWarnings("null")
58 public Iterator<Resource> listChildren() {
59 return new TransformIterator<>(new FilterIterator<>(super.listChildren(), predicate),
60 obj -> new PredicatedResourceWrapper(obj, predicate));
61 }
62
63 @Override
64 public boolean hasChildren() {
65 if (!super.hasChildren()) {
66 return false;
67 }
68 return listChildren().hasNext();
69 }
70
71 }