/*****************************************************************************
* Copyright (c) 2012 CEA LIST.
*
*
* 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:
* CEA LIST - Initial API and implementation
*
*****************************************************************************/
package org.eclipse.papyrus.uml.diagram.common.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.gmf.runtime.diagram.ui.providers.DiagramGlobalActionHandler;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IWorkbenchPart;
/**
* this is the provider is charge to give the handler in order to have the
* functionnality cut copy paste
*
*/
public class PapyrusGlobalActionHandlerProvider extends AbstractGlobalActionHandlerProvider {
/**
* List that contains all the IGlobalActionHandlers mapped to the
* IWorkbenchParts
*/
@SuppressWarnings("rawtypes")
private Hashtable handlerList = new Hashtable();
/**
* Constructor for DiagramGlobalActionHandlerProvider.
*/
public PapyrusGlobalActionHandlerProvider() {
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)
*/
@SuppressWarnings("unchecked")
public IGlobalActionHandler getGlobalActionHandler(final IGlobalActionHandlerContext context) {
/* create the handler */
if(!getHandlerList().containsKey(context.getActivePart())) {
getHandlerList().put(context.getActivePart(), new PapyrusDiagramGlobalActionHandler());
/*
* 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
*/
@SuppressWarnings("rawtypes")
private Hashtable getHandlerList() {
return handlerList;
}
}