/******************************************************************************* * Copyright (c) 2004, 2006 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.registry; import java.util.HashMap; import java.util.Map; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.dynamichelpers.ExtensionTracker; import org.eclipse.core.runtime.dynamichelpers.IExtensionChangeHandler; import org.eclipse.core.runtime.dynamichelpers.IExtensionTracker; import org.eclipse.ui.PlatformUI; /** * Contains extensions defined on the <code>keywords</code> extension point. * * @since 3.1 */ public final class KeywordRegistry implements IExtensionChangeHandler { private static final String ATT_ID = "id"; //$NON-NLS-1$ private static final String ATT_LABEL = "label"; //$NON-NLS-1$ private static KeywordRegistry instance; private static final String TAG_KEYWORD = "keyword"; //$NON-NLS-1$ /** * Return the singleton instance of the <code>KeywordRegistry</code>. * * @return the singleton registry */ public static KeywordRegistry getInstance() { if (instance == null) { instance = new KeywordRegistry(); } return instance; } /** * Map of id->labels. */ private Map internalKeywordMap = new HashMap(); /** * Private constructor. */ private KeywordRegistry() { IExtensionTracker tracker = PlatformUI.getWorkbench().getExtensionTracker(); tracker.registerHandler(this, ExtensionTracker.createExtensionPointFilter(getExtensionPointFilter())); IExtension[] extensions = getExtensionPointFilter().getExtensions(); for (int i = 0; i < extensions.length; i++) { addExtension(PlatformUI.getWorkbench().getExtensionTracker(), extensions[i]); } } /* (non-Javadoc) * @see org.eclipse.core.runtime.dynamicHelpers.IExtensionChangeHandler#addExtension(org.eclipse.core.runtime.dynamicHelpers.IExtensionTracker, org.eclipse.core.runtime.IExtension) */ public void addExtension(IExtensionTracker tracker, IExtension extension) { IConfigurationElement[] elements = extension.getConfigurationElements(); for (int i = 0; i < elements.length; i++) { if (elements[i].getName().equals(TAG_KEYWORD)) { String name = elements[i].getAttribute(ATT_LABEL); String id = elements[i].getAttribute(ATT_ID); internalKeywordMap.put(id, name); PlatformUI.getWorkbench().getExtensionTracker().registerObject( extension, id, IExtensionTracker.REF_WEAK); } } } private IExtensionPoint getExtensionPointFilter() { return Platform.getExtensionRegistry().getExtensionPoint( PlatformUI.PLUGIN_ID, IWorkbenchRegistryConstants.PL_KEYWORDS); } /** * Return the label associated with the given keyword. * * @param id the keyword id * @return the label or <code>null</code> */ public String getKeywordLabel(String id) { return (String) internalKeywordMap.get(id); } /* (non-Javadoc) * @see org.eclipse.core.runtime.dynamicHelpers.IExtensionChangeHandler#removeExtension(org.eclipse.core.runtime.IExtension, java.lang.Object[]) */ public void removeExtension(IExtension extension, Object[] objects) { for (int i = 0; i < objects.length; i++) { if (objects[i] instanceof String) { internalKeywordMap.remove(objects[i]); } } } }