/******************************************************************************* * Copyright (c) 2000, 2005 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.gef.editpolicies; import org.eclipse.gef.Request; import org.eclipse.gef.commands.Command; import org.eclipse.gef.requests.GroupRequest; /** * A model-based EditPolicy for <i>components within a </i>container</i>. A model-based * EditPolicy only knows about the host's model and the basic operations it supports. A * <i>component</i> is anything that is inside a container. By default, * ComponentEditPolicy understands being DELETEd from its container, and being ORPHANed * from its container. Subclasses can add support to handle additional behavior specific * to the model. * <P>ORPHAN is forwarded to the <i>parent</i> EditPart for it to handle. * <P>DELETE is also forwarded to the <i>parent</i> EditPart, but subclasses may also * contribute to the delete by overriding {@link #createDeleteCommand(GroupRequest)}. * <P> * This EditPolicy is not a {@link org.eclipse.gef.editpolicies.GraphicalEditPolicy}, and * should not be used to show feedback or interact with the host's visuals in any way. * <P> * This EditPolicy should not be used with {@link org.eclipse.gef.ConnectionEditPart}. * Connections do not really have a parent; use {@link ConnectionEditPolicy}. * @since 2.0 */ public abstract class ComponentEditPolicy extends AbstractEditPolicy { /** * Override to contribute to the component's being deleted. * @param deleteRequest the DeleteRequest * @return Command <code>null</code> or a contribution to the delete */ protected Command createDeleteCommand(GroupRequest deleteRequest) { return null; } /** * Factors the incoming Request into ORPHANs and DELETEs. * @see org.eclipse.gef.EditPolicy#getCommand(Request) */ public Command getCommand(Request request) { if (REQ_ORPHAN.equals(request.getType())) return getOrphanCommand(); if (REQ_DELETE.equals(request.getType())) return getDeleteCommand((GroupRequest)request); return null; } /** * Calls and returns {@link #createDeleteCommand(GroupRequest)}. This method is here for * historical reasons and used to perform additional function. * @param request the DeleteRequest * @return a delete command */ protected Command getDeleteCommand(GroupRequest request) { return createDeleteCommand(request); } /** * Returns the command contribution for orphaning this component from its container. By * default, ORPHAN is redispatched to the host's parent as an ORPHAN_CHILDREN Request. The * parents contribution is then returned. * @return the contribution obtained from the host's parent. */ protected Command getOrphanCommand() { GroupRequest req = new GroupRequest(REQ_ORPHAN_CHILDREN); req.setEditParts(getHost()); return getHost().getParent().getCommand(req); } }