package statechart.diagram.providers; import java.util.Hashtable; import org.eclipse.gmf.runtime.common.core.service.AbstractProvider; import org.eclipse.gmf.runtime.common.core.service.IOperation; 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.common.ui.services.action.global.IGlobalActionHandlerProvider; import org.eclipse.ui.IPartListener; import org.eclipse.ui.IWorkbenchPart; public class StateChartActionProvider extends AbstractProvider implements IGlobalActionHandlerProvider { public StateChartActionProvider() { // TODO Auto-generated constructor stub } private Hashtable handlerList = new Hashtable(); @Override public boolean provides(IOperation operation) { // TODO Auto-generated method stub return false; } @Override public IGlobalActionHandler getGlobalActionHandler( final IGlobalActionHandlerContext context) { if (!getHandlerList().containsKey(context.getActivePart())) { getHandlerList().put(context.getActivePart(), new StateChartClipboardSupportGlobalActionHandler()); /* * 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 (StateChartClipboardSupportGlobalActionHandler) getHandlerList().get( context.getActivePart()); } private Hashtable getHandlerList() { return handlerList; } }