/***************************************************************************** * Copyright (c) 2014-15 CEA LIST, Montages AG 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: * Michael Golubev (Montages) - Initial API and implementation * *****************************************************************************/ package org.eclipse.gmf.tooling.runtime.linklf.editparts; import org.eclipse.draw2d.ConnectionAnchor; import org.eclipse.gef.Request; import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart; import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure; import org.eclipse.gmf.runtime.notation.View; /** * Extends {@link ShapeNodeEditPart} with ability to delegate anchor handling * and creation to specific {@link ConnectionAnchorDelegate}. * <p/> * By default LinkLF mode is switched off, but may be enabled by setting * {@link LinkLFShapeNodeEditPart} delegate instance. * * @since 3.3 * @see LinkLFBorderedShapeEditPart */ public abstract class LinkLFShapeNodeEditPart extends ShapeNodeEditPart implements LinkLFAnchorsDelegatingEditPart { /** * This is default delegate that just delegates to the super implementation * in {@link ShapeNodeEditPart} */ private final ConnectionAnchorDelegate DELEGATE_TO_SUPER = new ConnectionAnchorDelegate() { @Override public ConnectionAnchor getTargetConnectionAnchor(Request request) { return LinkLFShapeNodeEditPart.super .getTargetConnectionAnchor(request); } @Override public ConnectionAnchor getSourceConnectionAnchor(Request request) { return LinkLFShapeNodeEditPart.super .getSourceConnectionAnchor(request); } }; private ConnectionAnchorDelegate myAnchorDelegate = DELEGATE_TO_SUPER; public LinkLFShapeNodeEditPart(View view) { super(view); } @Override public ConnectionAnchor getSourceConnectionAnchor(Request request) { return myAnchorDelegate.getSourceConnectionAnchor(request); } @Override public ConnectionAnchor getTargetConnectionAnchor(Request request) { return myAnchorDelegate.getTargetConnectionAnchor(request); } /** * Allows to externally change {@link ConnectionAnchorDelegate} and thus * enable or disable LinkLF mode. * * @param anchorDelegate * delegate or <code>null</code> to reset to default GMF Runtime * implementation */ @Override public void setAnchorDelegate(ConnectionAnchorDelegate anchorDelegate) { myAnchorDelegate = anchorDelegate; if (myAnchorDelegate == null) { myAnchorDelegate = DELEGATE_TO_SUPER; } } @Override public NodeFigure getNodeFigure() { return super.getNodeFigure(); } }