| /****************************************************************************** |
| * Copyright (c) 2002, 2006 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.emf.ecore.EObject; |
| import org.eclipse.emf.edit.domain.EditingDomain; |
| import org.eclipse.emf.edit.domain.IEditingDomainProvider; |
| import org.eclipse.emf.transaction.TransactionalEditingDomain; |
| import org.eclipse.gef.Request; |
| import org.eclipse.ui.IWorkbenchPage; |
| import org.eclipse.ui.IWorkbenchPart; |
| |
| import org.eclipse.gmf.runtime.diagram.ui.requests.EditCommandRequestWrapper; |
| import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest; |
| |
| /** |
| * Abstract action to be subclassed for various delete from actions. |
| * This Action is used to send a request that will destroy a semantic |
| * element. |
| * |
| * @author schafe |
| */ |
| public abstract class AbstractDeleteFromAction |
| extends DiagramAction { |
| |
| /** |
| * Creates an <code>AbstractDeleteFromAction</code> with a default label. |
| * |
| * @param part The part this action will be associated with. |
| */ |
| public AbstractDeleteFromAction(IWorkbenchPart part) { |
| super(part); |
| |
| |
| } |
| |
| /** |
| * Constructor |
| * @param workbenchPage The workbench page associated with this action |
| */ |
| public AbstractDeleteFromAction(IWorkbenchPage workbenchPage) { |
| super(workbenchPage); |
| |
| } |
| |
| /** |
| * Return the semantic request to destroy the element |
| * @see org.eclipse.gmf.runtime.diagram.ui.actions.DiagramAction#createTargetRequest() |
| */ |
| protected Request createTargetRequest() { |
| return new EditCommandRequestWrapper(new DestroyElementRequest(getEditingDomain(), false)); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.gmf.runtime.common.ui.action.AbstractActionHandler#isSelectionListener() |
| */ |
| protected boolean isSelectionListener() { |
| return true; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.gmf.runtime.diagram.ui.actions.DiagramAction#updateTargetRequest() |
| */ |
| protected void updateTargetRequest() { |
| |
| super.updateTargetRequest(); |
| |
| DestroyElementRequest deleteReq = getDestroyElementRequest(); |
| |
| // Reset the element to null |
| deleteReq.setElementToDestroy((EObject)null); |
| |
| // ensure that any parameters are cleared, as well |
| deleteReq.getParameters().clear(); |
| |
| deleteReq.setEditingDomain(getEditingDomain()); |
| } |
| |
| /** |
| * Helper method for getting the <code>DestroyElementRequest</code> |
| * @return the DestroyElementRequest |
| */ |
| protected DestroyElementRequest getDestroyElementRequest() { |
| |
| EditCommandRequestWrapper theWrapper = (EditCommandRequestWrapper) getTargetRequest(); |
| |
| DestroyElementRequest theRequest = (DestroyElementRequest) theWrapper |
| .getEditCommandRequest(); |
| |
| return theRequest; |
| } |
| |
| /** |
| * Gets my editing domain from my workbench part. |
| * |
| * @return my editing domain |
| */ |
| protected TransactionalEditingDomain getEditingDomain() { |
| |
| // try adapting the workbench part |
| IWorkbenchPart part = getWorkbenchPart(); |
| |
| if (part != null) { |
| IEditingDomainProvider edProvider = (IEditingDomainProvider) part |
| .getAdapter(IEditingDomainProvider.class); |
| |
| if (edProvider != null) { |
| EditingDomain domain = edProvider.getEditingDomain(); |
| |
| if (domain instanceof TransactionalEditingDomain) { |
| return (TransactionalEditingDomain) domain; |
| } |
| } |
| } |
| return null; |
| } |
| |
| } |