1 /* Edge.java */
2 package org.quilt.graph;
3
4 import org.quilt.exception.QuiltException;
5
6 /***
7 * An edge in a Quilt graph. This is seen as a source/target pair,
8 * XXX but in fact the source field may be unnecessary.
9 *
10 * @author < a href="jddixon@users.sourceforge.net">Jim Dixon</a>
11 */
12
13 public class Edge {
14
15 protected Vertex source_;
16 protected Vertex target_;
17
18 /***
19 * An edge in a directed graph.
20 */
21 public Edge(final Vertex s, final Vertex t) {
22 if ( s == null || t == null ) {
23 throw new IllegalArgumentException("null source or target");
24 }
25 if (s.getGraph() != t.getGraph()
26 && ! (s instanceof Exit || t instanceof Entry ) ) {
27 throw new IllegalArgumentException("source " + s
28 + " and target " + t +
29 " of edge constructor are not in the same graph");
30 }
31 source_ = s;
32 target_ = t;
33 }
34
35 /*** Copy constructor. */
36 public Edge ( final Edge e ) {
37 checkForNull (e, "edge");
38 source_ = e.getSource();
39 target_ = e.getTarget();
40 }
41 // ACCESSOR METHODS /////////////////////////////////////////////
42 public Vertex getSource() {
43 return source_;
44 }
45 public void setSource (Vertex v) {
46 checkForNull(v, "source");
47 if (target_ != null && v.getGraph() != source_.getGraph()) {
48 throw new IllegalArgumentException(
49 "source and target must be in same graph");
50 }
51 source_ = v;
52 }
53 public Vertex getTarget() {
54 return target_;
55 }
56 /***
57 * Change the target of this edge. XXX Wasn't public before;
58 * made it so to allow cl.SortedBlocks to retarget to existing
59 * vertex.
60 */
61 public void setTarget (Vertex v) {
62 checkForNull(v, "target");
63 if ( !(source_ instanceof Exit || v instanceof Entry)
64 && (v.getGraph() != source_.getGraph())) {
65 /////////////////////////////////////////////////////////
66 // DEBUG -- this is a real problem but needs some thought.
67 // Fix it and put the exception back.
68 // //////////////////////////////////////////////////////
69 System.out.println("* WARNING * Edge {" + toString()
70 + "}\n being retargeted to vertex " + v);
71 // END
72 //throw new IllegalArgumentException ("target in different graph");
73 }
74 target_ = v;
75 }
76 // OTHER METHODS ////////////////////////////////////////////////
77 public static void checkForNull(Object o, String what) {
78 if (o == null) {
79 throw new IllegalArgumentException ("null " + what);
80 }
81 }
82 /***
83 * @return the graph that this edge is in.
84 */
85 public Directed getGraph() {
86 return source_.getGraph();
87 }
88 /***
89 * Insert a vertex with a UnaryConnector into an edge.
90 *
91 * @param v The Vertex being inserted.
92 */
93 public void insert (Vertex v) {
94 checkForNull (v, "vertex");
95 if ( ! (source_.getGraph() == v.getGraph()) ) {
96 throw new IllegalArgumentException (
97 "vertex is in another graph");
98 }
99 Connector vConn = v.getConnector();
100 if (vConn == null) {
101 throw new IllegalArgumentException(
102 "internal error: vertex has null connector");
103 }
104 Vertex oldTarget = target_;
105 target_ = v; // retarget this edge to v
106 vConn.setTarget(oldTarget);
107 }
108
109 /*** @return A String description of the edge, NOT newline-terminated. */
110 public String toString () {
111 String s = source_.toString() + " ---> " + target_;
112 return s;
113 }
114 }
This page was automatically generated by Maven