/****************************************************************************** * Copyright (c) 2002, 2005 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.gmf.runtime.diagram.ui.providers; import java.util.Hashtable; import org.eclipse.gmf.runtime.common.ui.services.action.global.AbstractGlobalActionHandlerProvider; import org.eclipse.gmf.runtime.common.ui.services.action.global.IGlobalActionHandler; import org.eclipse.gmf.runtime.common.ui.services.action.global.IGlobalActionHandlerContext; import org.eclipse.ui.IPartListener; import org.eclipse.ui.IWorkbenchPart; /** * Concrete class that implements the <code>IGlobalActionHandlerProvider</code>. * * @author Vishy Ramaswamy */ public final class DiagramGlobalActionHandlerProvider extends AbstractGlobalActionHandlerProvider { /** * List that contains all the IGlobalActionHandlers mapped to the * IWorkbenchParts */ private Hashtable handlerList = new Hashtable(); /** * Constructor for DiagramGlobalActionHandlerProvider. */ public DiagramGlobalActionHandlerProvider() { super(); } /* * (non-Javadoc) * * @see org.eclipse.gmf.runtime.common.ui.services.action.global.IGlobalActionHandlerProvider#getGlobalActionHandler(org.eclipse.gmf.runtime.common.ui.services.action.global.IGlobalActionHandlerContext) */ public IGlobalActionHandler getGlobalActionHandler( final IGlobalActionHandlerContext context) { /* create the handler */ if (!getHandlerList().containsKey(context.getActivePart())) { getHandlerList().put(context.getActivePart(), new DiagramGlobalActionHandler()); /* * register as a part listener so that the cache can be cleared when * the part is disposed */ context.getActivePart().getSite().getPage().addPartListener( new IPartListener() { private IWorkbenchPart localPart = context.getActivePart(); /** * @see org.eclipse.ui.IPartListener#partActivated(IWorkbenchPart) */ public void partActivated(IWorkbenchPart part) { // NULL implementation } /** * @see org.eclipse.ui.IPartListener#partBroughtToTop(IWorkbenchPart) */ public void partBroughtToTop(IWorkbenchPart part) { // NULL implementation } /** * @see org.eclipse.ui.IPartListener#partClosed(IWorkbenchPart) */ public void partClosed(IWorkbenchPart part) { /* remove the cache associated with the part */ if (part != null && part == localPart && getHandlerList().containsKey(part)) { getHandlerList().remove(part); localPart.getSite().getPage().removePartListener( this); localPart = null; } } /** * @see org.eclipse.ui.IPartListener#partDeactivated(IWorkbenchPart) */ public void partDeactivated(IWorkbenchPart part) { // NULL implementation } /** * @see org.eclipse.ui.IPartListener#partOpened(IWorkbenchPart) */ public void partOpened(IWorkbenchPart part) { // NULL implementation } }); } return (DiagramGlobalActionHandler) getHandlerList().get( context.getActivePart()); } /** * Returns the handlerList. * * @return Hashtable */ private Hashtable getHandlerList() { return handlerList; } }