/******************************************************************************* * * Copyright (c) 2004-2010 Oracle Corporation. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * * *******************************************************************************/ package hudson.model; import hudson.ExtensionList; import hudson.ExtensionPoint; import hudson.scm.SCMDescriptor; import java.util.ArrayList; import java.util.List; /** * Hides {@link Descriptor}s from users. * * @author Kohsuke Kawaguchi * @since 1.393 */ public abstract class DescriptorVisibilityFilter implements ExtensionPoint { /** * Decides if the given descriptor should be visible to the user. * * @param context The object that indicates where the visibility of a * descriptor is evaluated. For example, if Hudson is deciding whether a * {@link FreeStyleProject} should gets a {@link SCMDescriptor}, the context * object will be the {@link FreeStyleProject}. The caller can pass in null * if there's no context. * @param descriptor Descriptor whose visibility is evaluated. Never null. * * @return true to allow the descriptor to be visible. false to hide it. If * any of the installed {@link DescriptorVisibilityFilter} returns false, * the descriptor is not shown. */ public abstract boolean filter(Object context, Descriptor descriptor); public static ExtensionList<DescriptorVisibilityFilter> all() { return Hudson.getInstance().getExtensionList(DescriptorVisibilityFilter.class); } public static <T extends Descriptor> List<T> apply(Object context, Iterable<T> source) { ExtensionList<DescriptorVisibilityFilter> filters = all(); List<T> r = new ArrayList<T>(); OUTER: for (T d : source) { for (DescriptorVisibilityFilter f : filters) { if (!f.filter(context, d)) { continue OUTER; // veto-ed. not shown } } r.add(d); } return r; } }