View Javadoc
1   /*
2    * #%L
3    * wcm.io
4    * %%
5    * Copyright (C) 2025 wcm.io
6    * %%
7    * Licensed under the Apache License, Version 2.0 (the "License");
8    * you may not use this file except in compliance with the License.
9    * You may obtain a copy of the License at
10   *
11   *      http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   * #L%
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   * Wrapper for legacy PredicateProvider implementation that returns Commons Collection 3 Predicate.
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  }