package org.jenkinsci.plugins.ghprb.extensions; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.commons.collections.Predicate; import org.apache.commons.collections.PredicateUtils; import org.apache.commons.collections.functors.InstanceofPredicate; import jenkins.model.Jenkins; import hudson.DescriptorExtensionList; import hudson.model.Descriptor; @SuppressWarnings("unchecked") public abstract class GhprbExtensionDescriptor extends Descriptor<GhprbExtension> { public boolean isApplicable(Class<?> type) { return true; } public static List<GhprbExtensionDescriptor> getExtensions(Class<? extends GhprbExtensionType>... types) { List<GhprbExtensionDescriptor> list = getExtensions(); filterExtensions(list, types); return list; } private static void filterExtensions(List<GhprbExtensionDescriptor> descriptors, Class<? extends GhprbExtensionType>... types) { List<Predicate> predicates = new ArrayList<Predicate>(types.length); for (Class<? extends GhprbExtensionType> type : types) { predicates.add(InstanceofPredicate.getInstance(type)); } Predicate anyPredicate = PredicateUtils.anyPredicate(predicates); Iterator<GhprbExtensionDescriptor> iter = descriptors.iterator(); while (iter.hasNext()) { GhprbExtensionDescriptor descriptor = iter.next(); if (!anyPredicate.evaluate(descriptor)) { iter.remove(); } } } private static DescriptorExtensionList<GhprbExtension, GhprbExtensionDescriptor> getExtensionList() { return Jenkins.getInstance().getDescriptorList(GhprbExtension.class); } /** * Don't mutate the list from Jenkins, they will persist; * @return list of extensions */ private static List<GhprbExtensionDescriptor> getExtensions() { List<GhprbExtensionDescriptor> list = new ArrayList<GhprbExtensionDescriptor>(); list.addAll(getExtensionList()); return list; } public static List<GhprbExtensionDescriptor> allProject() { List<GhprbExtensionDescriptor> list = getExtensions(); filterExtensions(list, GhprbProjectExtension.class); return list; } public static List<GhprbExtensionDescriptor> allGlobal() { List<GhprbExtensionDescriptor> list = getExtensions(); filterExtensions(list, GhprbGlobalExtension.class); return list; } }