/******************************************************************************* * Copyright (c) 2000, 2010 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); } }