/***************************************************************************
* Copyright (c) 2007 Conselleria de Infraestructuras y Transporte,
* Generalitat de la Comunitat Valenciana . 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: Mario Cervera Ubeda (Integranova)
*
******************************************************************************/
package org.eclipse.papyrus.uml.diagram.common.actions.handlers;
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;
// TODO: Auto-generated Javadoc
/**
* The Class ClipboardActionHandlerProvider.
*/
public class ClipboardActionHandlerProvider extends AbstractGlobalActionHandlerProvider {
/** List for handlers. */
private Hashtable handlerList = new Hashtable();
/**
* Returns a global action handler that supports operations (cut, copy, and
* paste).
*
* @param context
* the context
*
* @return the global action handler
*/
@Override
public IGlobalActionHandler getGlobalActionHandler(final IGlobalActionHandlerContext context) {
/* Create the handler */
if(!getHandlerList().containsKey(context.getActivePart())) {
getHandlerList().put(context.getActivePart(), getClipboardActionHandler());
/*
* 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) {
// Do nothing
}
/**
* @see org.eclipse.ui.IPartListener#partBroughtToTop(IWorkbenchPart)
*/
public void partBroughtToTop(IWorkbenchPart part) {
// Do nothing
}
/**
* @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) {
// Do nothing
}
/**
* @see org.eclipse.ui.IPartListener#partOpened(IWorkbenchPart)
*/
public void partOpened(IWorkbenchPart part) {
// Do nothing
}
});
}
return (ClipboardActionHandler)getHandlerList().get(context.getActivePart());
}
/**
* Returns the handlerList.
*
* @return Hashtable
*/
private Hashtable getHandlerList() {
return handlerList;
}
protected ClipboardActionHandler getClipboardActionHandler() {
return new ClipboardActionHandler();
}
}