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.util.impl;
21
22 import java.lang.reflect.InvocationTargetException;
23 import java.lang.reflect.Method;
24
25 import org.apache.commons.collections4.Predicate;
26 import org.apache.sling.api.resource.Resource;
27 import org.jetbrains.annotations.NotNull;
28 import org.jetbrains.annotations.Nullable;
29 import org.osgi.framework.BundleContext;
30 import org.osgi.framework.ServiceReference;
31
32
33
34
35 class LegacyPredicateProviderWrapper extends AbstractPredicateProviderWrapper {
36
37 LegacyPredicateProviderWrapper(ServiceReference<?> serviceReference, BundleContext bundleContext) {
38 super(serviceReference, bundleContext);
39 }
40
41 @Override
42 public @Nullable Predicate<Resource> getPredicate(@NotNull String name) {
43 Object predicate = getPredicateInternal(name);
44 if (predicate != null) {
45 Method evaluateMethod;
46 try {
47 evaluateMethod = predicate.getClass().getMethod("evaluate", Object.class);
48 return resource -> {
49 try {
50 return Boolean.TRUE.equals(evaluateMethod.invoke(predicate, resource));
51 }
52 catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
53 log.warn("Error calling 'getPredicate(String)' on legacy PredicateProvider service.", ex);
54 return false;
55 }
56 };
57 }
58 catch (NoSuchMethodException | SecurityException ex) {
59 log.warn("Legacy Predicate does not implement expected method 'evaluate(Object)'.", ex);
60 }
61 }
62 return null;
63 }
64
65 }