blob: 9787083ece8258113cff07bab17fad4034ea87ea [file] [log] [blame]
/*******************************************************************************
* <copyright>
*
* Copyright (c) 2005, 2010 SAP AG.
* 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:
* SAP AG - initial API, implementation and documentation
*
* </copyright>
*
*******************************************************************************/
package org.eclipse.graphiti.testtool.sketch.features;
import java.util.Collection;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.context.IMoveShapeContext;
import org.eclipse.graphiti.features.impl.DefaultMoveShapeFeature;
import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm;
import org.eclipse.graphiti.mm.algorithms.Polyline;
import org.eclipse.graphiti.mm.pictograms.Anchor;
import org.eclipse.graphiti.mm.pictograms.Connection;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.mm.pictograms.Shape;
import org.eclipse.graphiti.services.Graphiti;
import org.eclipse.graphiti.testtool.sketch.SketchUtil;
/**
* The Class SketchMoveShapeFeature.
*/
public class SketchMoveShapeFeature extends DefaultMoveShapeFeature {
/**
* Instantiates a new sketch move shape feature.
*
* @param fp
* the fp
*/
public SketchMoveShapeFeature(IFeatureProvider fp) {
super(fp);
}
@Override
public boolean canMoveShape(IMoveShapeContext context) {
PictogramElement pe = context.getPictogramElement();
Connection targetConnection = context.getTargetConnection();
if (targetConnection!=null && !SketchUtil.isConnectionPoint(pe)) {
if(targetConnection.getStart().getParent().equals(pe)){
return false;
}
if(targetConnection.getEnd().getParent().equals(pe)){
return false;
}
}
return true;
}
@Override
protected void internalMove(IMoveShapeContext context) {
super.internalMove(context);
Connection targetConnection = context.getTargetConnection();
if (targetConnection != null) {
if (context.getSourceContainer().equals(context.getTargetContainer())) {
Shape shape = context.getShape();
GraphicsAlgorithm ga = shape.getGraphicsAlgorithm();
Graphiti.getGaService().setLocation(ga, context.getX() - (ga.getWidth() / 2), context.getY() - (ga.getHeight() / 2));
Collection<Anchor> anchors = shape.getAnchors();
if (anchors.size() > 0) {
Anchor newAnchor = anchors.iterator().next();
Anchor oldEndAnchor = targetConnection.getEnd();
targetConnection.setEnd(newAnchor);
Connection connection = Graphiti.getPeCreateService().createFreeFormConnection(getDiagram());
Polyline p = Graphiti.getGaCreateService().createPolyline(connection);
GraphicsAlgorithm targetConnectionGraphicsAlgorithm = targetConnection.getGraphicsAlgorithm();
p.setLineWidth(targetConnectionGraphicsAlgorithm.getLineWidth());
p.setForeground(targetConnectionGraphicsAlgorithm.getForeground());
p.setLineStyle(targetConnectionGraphicsAlgorithm.getLineStyle());
connection.setStart(newAnchor);
connection.setEnd(oldEndAnchor);
}
}
}
}
}