blob: 05e4d02ebdc8feae74a734ec756ea590883c6710 [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 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 implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.authoring.gef.commands;
import org.eclipse.draw2d.AbsoluteBendpoint;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.epf.authoring.gef.util.Validation;
import org.eclipse.epf.authoring.ui.AuthoringUIResources;
import org.eclipse.epf.diagram.model.Link;
import org.eclipse.epf.diagram.model.Node;
import org.eclipse.gef.commands.Command;
/**
* @author Phong Nguyen Le
* @since 1.0
*/
public class CreateLinkCommand extends Command {
private Link link;
private Node source, target;
private Point targetEndPoint;
private Point sourceEndPoint;
private static final String LABEL = AuthoringUIResources.gef_createLinkCommand_label;
public CreateLinkCommand(Link newObj, Node src) {
super(LABEL);
link = newObj;
source = src;
}
public boolean canExecute() {
boolean result = source != null && target != null && link != null;
if (!result)
return result;
String msg = Validation.checkConnect(source, target, link);
if (msg != null) {
return false;
}
return true;
}
public void execute() {
if (source == target) {
link.getBendpoints().add(
new AbsoluteBendpoint(source.getLocation().getTranslated(
-10, 10)));
link.getBendpoints().add(
new AbsoluteBendpoint(source.getLocation().getTranslated(
-10, -10)));
link.getBendpoints().add(
new AbsoluteBendpoint(source.getLocation().getTranslated(
10, -10)));
}
link.setTargetEndPoint(targetEndPoint);
link.setSourceEndPoint(sourceEndPoint);
link.setSource(source);
link.setTarget(target);
}
public void setTarget(Node target) {
this.target = target;
}
public void setTargetEndPoint(Point p) {
targetEndPoint = p;
}
public void setSourceEndPoint(Point p) {
sourceEndPoint = p;
}
public Point getTargetEndPoint() {
return targetEndPoint;
}
/**
* @return Returns the sourceEndPoint.
*/
public Point getSourceEndPoint() {
return sourceEndPoint;
}
public void undo() {
link.setSourceEndPoint(null);
link.setTargetEndPoint(null);
link.setSource(null);
link.setTarget(null);
if (source == target) {
link.getBendpoints().clear();
}
}
}