/******************************************************************************* * Copyright (c) 2003, 2015 IBM Corporation and others. * 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.ui.internal.navigator.extensions; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.SafeRunner; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.internal.navigator.NavigatorPlugin; import org.eclipse.ui.internal.navigator.NavigatorSafeRunnable; import org.eclipse.ui.navigator.INavigatorContentService; /** * @since 3.2 * */ public class LinkHelperManager { private static final LinkHelperManager instance = new LinkHelperManager(); private static final LinkHelperDescriptor[] NO_DESCRIPTORS = new LinkHelperDescriptor[0]; private List<LinkHelperDescriptor> descriptors; /** * @return the singleton instance. */ public static LinkHelperManager getInstance() { return instance; } private LinkHelperManager() { new LinkHelperRegistry().readRegistry(); } /** * Return the link helper descriptors for a given selection and content * service. * * @param anObject * An object from the viewer. * @param aContentService * The content service to use for visibility filtering. Link * Helpers are filtered by contentExtension elements in * viewerContentBindings. * @return An array of <i>visible</i> and <i>enabled</i> Link Helpers or * an empty array. */ public LinkHelperDescriptor[] getLinkHelpersFor( Object anObject, INavigatorContentService aContentService) { List<LinkHelperDescriptor> helpersList = new ArrayList<LinkHelperDescriptor>(); LinkHelperDescriptor descriptor = null; for (Iterator<LinkHelperDescriptor> itr = getDescriptors().iterator(); itr.hasNext();) { descriptor = itr.next(); if (aContentService.isVisible(descriptor.getId()) && descriptor.isEnabledFor(anObject)) { helpersList.add(descriptor); } } if (helpersList.size() == 0) { return NO_DESCRIPTORS; } return helpersList .toArray(new LinkHelperDescriptor[helpersList.size()]); } /** * Return the link helper descriptors for a given selection and content * service. * * @param anInput * The input of the active viewer. * @param aContentService * The content service to use for visibility filtering. Link * Helpers are filtered by contentExtension elements in * viewerContentBindings. * @return An array of <i>visible</i> and <i>enabled</i> Link Helpers or * an empty array. */ public LinkHelperDescriptor[] getLinkHelpersFor(IEditorInput anInput, INavigatorContentService aContentService) { List<LinkHelperDescriptor> helpersList = new ArrayList<LinkHelperDescriptor>(); LinkHelperDescriptor descriptor = null; for (Iterator<LinkHelperDescriptor> itr = getDescriptors().iterator(); itr.hasNext();) { descriptor = itr.next(); if (aContentService.isVisible(descriptor.getId()) && descriptor.isEnabledFor(anInput)) { helpersList.add(descriptor); } } if (helpersList.size() == 0) { return NO_DESCRIPTORS; } return helpersList .toArray(new LinkHelperDescriptor[helpersList.size()]); } protected List<LinkHelperDescriptor> getDescriptors() { if (descriptors == null) { descriptors = new ArrayList<LinkHelperDescriptor>(); } return descriptors; } private class LinkHelperRegistry extends RegistryReader implements ILinkHelperExtPtConstants { private LinkHelperRegistry() { super(NavigatorPlugin.PLUGIN_ID, LINK_HELPER); } @Override public boolean readElement(final IConfigurationElement element) { if (LINK_HELPER.equals(element.getName())) { final boolean retValue[] = new boolean[1]; SafeRunner.run(new NavigatorSafeRunnable(element) { @Override public void run() throws Exception { getDescriptors().add(new LinkHelperDescriptor(element)); retValue[0] = true; } }); return retValue[0]; } return false; } } }