/******************************************************************************
* Copyright (c) 2004, 2 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.actions;
import org.eclipse.gmf.runtime.common.core.command.ICommand;
import org.eclipse.gmf.runtime.common.ui.services.action.global.AbstractGlobalActionHandler;
import org.eclipse.gmf.runtime.common.ui.services.action.global.IGlobalActionContext;
/**
* Proxy that instantiates the diagram action when necessary and destroys it
* after use.
*
* @author wdiu, Wayne Diu
*/
abstract public class AbstractDiagramGlobalActionProxy
extends AbstractGlobalActionHandler {
/**
* Instantiate the DiagramAction. You should call dispose() on the action
* when done with it. This is particularly important when the action is a
* selection listener.
*
* Subclasses should return an instance of the DiagramAction
*
* @param context
* the <code>IGlobalActionContext</code> holding nevessary
* context information for the action
* @return DiagramAction the newly instantiated action
*/
abstract protected DiagramAction instantiateAction(
IGlobalActionContext context);
/*
* (non-Javadoc)
*
* @see org.eclipse.gmf.runtime.common.ui.services.action.global.IGlobalActionHandler#getCommand(org.eclipse.gmf.runtime.common.ui.services.action.global.IGlobalActionContext)
*/
public ICommand getCommand(IGlobalActionContext cntxt) {
DiagramAction action = instantiateAction(cntxt);
action.init();
action.refresh();
action.run();
action.dispose();
return null;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gmf.runtime.common.ui.services.action.global.IGlobalActionHandler#canHandle(org.eclipse.gmf.runtime.common.ui.services.action.global.IGlobalActionContext)
*/
public boolean canHandle(IGlobalActionContext cntxt) {
DiagramAction action = instantiateAction(cntxt);
action.init();
action.refresh();
boolean isEnabled = action.isEnabled();
action.dispose();
return isEnabled;
}
}