/*******************************************************************************
* 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;
import org.eclipse.draw2d.ConnectionAnchor;
/**
* A specialized <code>GraphicalEditPart</code> that supports both <i>target</i> and
* <i>source</i> <code>ConnectionEditParts</code>. This <em>optional</em> interface is
* used by the default {@link ConnectionEditPart} implementation and supporting classes
* to obtain the correct {@link ConnectionAnchor ConnectionAnchors} for the {@link
* org.eclipse.draw2d.Connection} Figure. This interface offers a single access point for
* obtaining ConnectionAnchors at different times. The classes which rely on this
* interface are:
* <UL>
* <LI>{@link org.eclipse.gef.editparts.AbstractConnectionEditPart} - during refresh(),
* this interface is used to obtain the appropriate ConnectionAnchors for the figure.
* <LI>{@link org.eclipse.gef.editpolicies.GraphicalNodeEditPolicy} - during creation of
* a new connection, there is no ConnectionEditPart. Therefore, the source node
* EditPart is responsible for display <i>feedback</i>.
* <LI>{@link org.eclipse.gef.editpolicies.ConnectionEndpointEditPolicy} - when
* disconnecting the end of a connection and reattaching it to a new node,
* ConnectionEndpointEditPolicy uses this interface to obtain the proper anchors for
* diaplaying <i>feedback</i>.
* </UL>
*/
public interface NodeEditPart
extends GraphicalEditPart
{
/**
* Returns the <code>ConnectionAnchor</code> for the specified <i>source</i> connection.
* This NodeEditPart is the {@link ConnectionEditPart#getSource() source} EditPart for the
* given connection.
* <P>
* The anchor may be a function of the connection's model, the node's model, a combination
* of both, or it may not depend on anything all.
* @param connection the ConnectionEditPart
* @return the ConnectionAnchor for the given ConnectionEditPart
*/
ConnectionAnchor getSourceConnectionAnchor(ConnectionEditPart connection);
/**
* Returns the <code>ConnectionAnchor</code> for the specified <i>target</i> connection.
* This NodeEditPart is the {@link ConnectionEditPart#getTarget() target} EditPart for the
* given connection.
* <P>
* The anchor may be a function of the connection's model, the node's model, a
* combination of both, or it may not depend on anything all.
* @param connection the ConnectionEditPart
* @return the ConnectionAnchor for the given ConnectionEditPart
*/
ConnectionAnchor getTargetConnectionAnchor(ConnectionEditPart connection);
/**
* Returns the <i>source</i> <code>ConnectionAnchor</code> for the specified Request. The
* returned ConnectionAnchor is used only when displaying <i>feedback</i>. The Request
* is usually a {@link org.eclipse.gef.requests.LocationRequest}, which provides the
* current mouse location.
* @param request a Request describing the current interaction
* @return the ConnectionAnchor to use during feedback
*/
ConnectionAnchor getSourceConnectionAnchor(Request request);
/**
* Returns the <i>target</i> <code>ConnectionAnchor</code> for the specified Request. The
* returned ConnectionAnchor is used only when displaying <i>feedback</i>. The Request
* is usually a {@link org.eclipse.gef.requests.LocationRequest}, which provides the
* current mouse location.
* @param request a Request describing the current interaction
* @return the ConnectionAnchor to use during feedback
*/
ConnectionAnchor getTargetConnectionAnchor(Request request);
}