View Javadoc

1   package com.atlassian.plugin.predicate;
2   
3   import com.atlassian.plugin.ModuleDescriptor;
4   
5   import org.apache.commons.collections.CollectionUtils;
6   import org.apache.commons.collections.Predicate;
7   
8   import java.util.Arrays;
9   import java.util.Collection;
10  import java.util.Collections;
11  
12  /**
13   * A {@link ModuleDescriptorPredicate} that matches modules for which their descriptor is an instance of one of the given {@link Class}.
14   */
15  public class ModuleDescriptorOfClassPredicate<T> implements ModuleDescriptorPredicate<T>
16  {
17      private final Collection<Class<? extends ModuleDescriptor<? extends T>>> moduleDescriptorClasses;
18  
19      public ModuleDescriptorOfClassPredicate(final Class<? extends ModuleDescriptor<? extends T>> moduleDescriptorClass)
20      {
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      {
29          if (moduleDescriptorClasses == null)
30          {
31              throw new IllegalArgumentException("Module descriptor classes array should not be null when constructing ModuleOfClassPredicate!");
32          }
33          this.moduleDescriptorClasses = Arrays.asList(moduleDescriptorClasses);
34      }
35  
36      public boolean matches(final ModuleDescriptor<? extends T> moduleDescriptor)
37      {
38          return (moduleDescriptor != null) && CollectionUtils.exists(moduleDescriptorClasses, new Predicate()
39          {
40              public boolean evaluate(final Object object)
41              {
42                  return (object != null) && ((Class<?>) object).isInstance(moduleDescriptor);
43              }
44          });
45      }
46  }