/******************************************************************************* * Copyright (c) 2005, 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.activities.ws; import java.util.HashMap; import java.util.Set; 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; import org.eclipse.ui.activities.ITriggerPoint; import org.eclipse.ui.activities.ITriggerPointManager; import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants; /** * Workbench implementation of the trigger point manager. * * @since 3.1 */ public class TriggerPointManager implements ITriggerPointManager, IExtensionChangeHandler { private HashMap triggerMap = new HashMap(); /** * */ public TriggerPointManager() { super(); triggerMap.put(ITriggerPointManager.UNKNOWN_TRIGGER_POINT_ID, new AbstractTriggerPoint() { /* * (non-Javadoc) * * @see org.eclipse.ui.activities.ITriggerPoint#getId() */ public String getId() { return ITriggerPointManager.UNKNOWN_TRIGGER_POINT_ID; } /* * (non-Javadoc) * * @see org.eclipse.ui.activities.ITriggerPoint#getStringHint(java.lang.String) */ public String getStringHint(String key) { if (ITriggerPoint.HINT_INTERACTIVE.equals(key)) { // TODO: change to false when we have mapped our // trigger points return Boolean.TRUE.toString(); } return null; } /* * (non-Javadoc) * * @see org.eclipse.ui.activities.ITriggerPoint#getBooleanHint(java.lang.String) */ public boolean getBooleanHint(String key) { if (ITriggerPoint.HINT_INTERACTIVE.equals(key)) { // TODO: change to false when we have mapped our // trigger points return true; } return false; } }); IExtensionTracker tracker = PlatformUI.getWorkbench().getExtensionTracker(); tracker.registerHandler(this, ExtensionTracker.createExtensionPointFilter(getExtensionPointFilter())); IExtensionPoint point = getExtensionPointFilter(); IExtension[] extensions = point.getExtensions(); for (int i = 0; i < extensions.length; i++) { addExtension(tracker, extensions[i]); } } /* * (non-Javadoc) * * @see org.eclipse.ui.activities.ITriggerPointManager#getTriggerPoint(java.lang.String) */ public ITriggerPoint getTriggerPoint(String id) { return (ITriggerPoint) triggerMap.get(id); } /* * (non-Javadoc) * * @see org.eclipse.ui.activities.ITriggerPointManager#getDefinedTriggerPointIds() */ public Set getDefinedTriggerPointIds() { return triggerMap.entrySet(); } /* * (non-Javadoc) * * @see org.eclipse.core.runtime.dynamicHelpers.IExtensionRemovalHandler#removeInstance(org.eclipse.core.runtime.IExtension, * java.lang.Object[]) */ public void removeExtension(IExtension extension, Object[] objects) { for (int i = 0; i < objects.length; i++) { Object object = objects[i]; if (object instanceof RegistryTriggerPoint) { triggerMap.remove(((RegistryTriggerPoint) object).getId()); } } } /* * (non-Javadoc) * * @see org.eclipse.core.runtime.dynamicHelpers.IExtensionAdditionHandler#addInstance(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++) { IConfigurationElement element = elements[i]; if (element.getName().equals( IWorkbenchRegistryConstants.TAG_TRIGGERPOINT)) { String id = element .getAttribute(IWorkbenchRegistryConstants.ATT_ID); if (id == null) { continue; } RegistryTriggerPoint triggerPoint = new RegistryTriggerPoint( id, element); triggerMap.put(id, triggerPoint); tracker.registerObject(extension, triggerPoint, IExtensionTracker.REF_WEAK); } } } private IExtensionPoint getExtensionPointFilter() { return Platform.getExtensionRegistry().getExtensionPoint( PlatformUI.PLUGIN_ID, IWorkbenchRegistryConstants.PL_ACTIVITYSUPPORT); } }