1: import java.awt.BasicStroke;
2: import java.awt.Graphics2D;
3: import java.awt.Shape;
4: import java.awt.geom.GeneralPath;
5: import java.awt.geom.Line2D;
6: import java.awt.geom.Point2D;
7: import java.awt.geom.Rectangle2D;
9: /**
10: A class that supplies convenience implementations for
11: a number of methods in the Edge interface type.
12: */
13: public abstract class AbstractEdge implements Edge
14: {
15: public Object clone()
16: {
17: try
18: {
19: return super.clone();
20: }
21: catch (CloneNotSupportedException exception)
22: {
23: return null;
24: }
25: }
27: public void connect(Node s, Node e)
28: {
29: start = s;
30: end = e;
31: }
33: public Node getStart()
34: {
35: return start;
36: }
38: public Node getEnd()
39: {
40: return end;
41: }
43: public Rectangle2D getBounds(Graphics2D g2)
44: {
45: Line2D conn = getConnectionPoints();
46: Rectangle2D r = new Rectangle2D.Double();
47: r.setFrameFromDiagonal(conn.getX1(), conn.getY1(),
48: conn.getX2(), conn.getY2());
49: return r;
50: }
52: public Line2D getConnectionPoints()
53: {
54: Rectangle2D startBounds = start.getBounds();
55: Rectangle2D endBounds = end.getBounds();
56: Point2D startCenter = new Point2D.Double(
57: startBounds.getCenterX(), startBounds.getCenterY());
58: Point2D endCenter = new Point2D.Double(
59: endBounds.getCenterX(), endBounds.getCenterY());
60: return new Line2D.Double(
61: start.getConnectionPoint(endCenter),
62: end.getConnectionPoint(startCenter));
63: }
65: private Node start;
66: private Node end;
67: }