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