View Javadoc
1   package com.atlassian.plugin.predicate;
2   
3   import com.atlassian.plugin.ModuleDescriptor;
4   
5   import java.util.Arrays;
6   import java.util.Collection;
7   import java.util.Collections;
8   import java.util.function.Predicate;
9   
10  import static com.atlassian.plugin.util.Assertions.notNull;
11  
12  /**
13   * A {@link Predicate} that matches modules for which their descriptor is an instance of one of the given {@link Class}.
14   */
15  public class ModuleDescriptorOfClassPredicate<T> implements Predicate<ModuleDescriptor<T>> {
16      private final Collection<Class<? extends ModuleDescriptor<? extends T>>> moduleDescriptorClasses;
17  
18      public ModuleDescriptorOfClassPredicate(final Class<? extends ModuleDescriptor<? extends T>> moduleDescriptorClass) {
19          moduleDescriptorClasses = Collections.singleton(moduleDescriptorClass);
20      }
21  
22      /**
23       * @throws IllegalArgumentException if the moduleDescriptorClasses is <code>null</code>
24       */
25      public ModuleDescriptorOfClassPredicate(final Class<? extends ModuleDescriptor<? extends T>>[] moduleDescriptorClasses) {
26          notNull("moduleDescriptorClasses", moduleDescriptorClasses);
27          this.moduleDescriptorClasses = Arrays.asList(moduleDescriptorClasses);
28      }
29  
30      public boolean test(final ModuleDescriptor<T> moduleDescriptor) {
31          return moduleDescriptor != null && moduleDescriptorClasses != null &&
32                  moduleDescriptorClasses.stream().anyMatch(descriptorClass -> descriptorClass != null && descriptorClass.isInstance(moduleDescriptor));
33      }
34  }