/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.diagram.ui.connection;
import org.eclipse.draw2d.AbstractConnectionAnchor;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
/**
* NodeConnectionAnchor
*
* @since 8.0
*/
public class NodeConnectionAnchor extends AbstractConnectionAnchor {
public static final boolean IS_SOURCE = true;
public static final boolean IS_TARGET = false;
private boolean leftToRight = true;
private int offsetH;
private int offsetV;
private boolean topDown = true;
private int direction;
private boolean isSourceAnchor = true;
public NodeConnectionAnchor(IFigure iOwner) {
super(iOwner);
}
public NodeConnectionAnchor(IFigure iOwner, boolean isSource) {
super(iOwner);
this.isSourceAnchor = isSource;
}
/**
* This method is taken from FixedConnectionAnchor in Logical Diagram Editor
* example.
**/
@Override
public Point getLocation(Point iReference) {
Rectangle r = getOwner().getBounds();
int x, y;
if (topDown)
y = r.y + offsetV;
else
y = r.y + r.height - offsetV;
if (leftToRight)
x = r.x + offsetH;
else
x = r.x + r.width - offsetH;
Point p = new Point(x, y);
getOwner().translateToAbsolute(p);
return p;
}
public void setHOffset(int newHOffset) {
this.offsetH = newHOffset;
}
public void setAsSource(boolean isSource) {
this.isSourceAnchor = isSource;
}
public boolean isSource() {
return isSourceAnchor;
}
/**
* @return
*/
public int getOffsetH() {
return offsetH;
}
/**
* @return
*/
public int getOffsetV() {
return offsetV;
}
/**
* @return
*/
public boolean isTopDown() {
return topDown;
}
/**
* @param i
*/
public void setOffsetH(int i) {
offsetH = i;
}
/**
* @param i
*/
public void setOffsetV(int i) {
offsetV = i;
}
/**
* @param b
*/
public void setTopDown(boolean b) {
topDown = b;
}
/**
* @return
*/
public int getDirection() {
return direction;
}
/**
* @param i
*/
public void setDirection(int i) {
direction = i;
}
@Override
public boolean equals( Object oNodeConnectionAnchor ) {
if ( oNodeConnectionAnchor instanceof NodeConnectionAnchor ) {
NodeConnectionAnchor ncaTarget = (NodeConnectionAnchor)oNodeConnectionAnchor;
if ( this.getOffsetH() == ncaTarget.getOffsetH()
&& this.getOffsetV() == ncaTarget.getOffsetV()
&& this.getDirection() == ncaTarget.getDirection()
&& this.isTopDown() == ncaTarget.isTopDown()
&& this.isSource() == ncaTarget.isSource()
) {
return true;
}
}
return false;
}
}