01: import java.awt.BasicStroke;
02: import java.awt.Graphics2D;
03: import java.awt.Shape;
04: import java.awt.geom.GeneralPath;
05: import java.awt.geom.Line2D;
06: import java.awt.geom.Point2D;
07: import java.awt.geom.Rectangle2D;
08: 
09: /**
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:    }
26: 
27:    public void connect(Node s, Node e)
28:    {  
29:       start = s;
30:       end = e;
31:    }
32: 
33:    public Node getStart()
34:    {
35:       return start;
36:    }
37: 
38:    public Node getEnd()
39:    {
40:       return end;
41:    }
42: 
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:    }
51: 
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:    }
64: 
65:    private Node start;
66:    private Node end;
67: }