KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > quilt > graph > Vertex


1 /* Vertex.java */
2
3 package org.quilt.graph;
4
5 /**
6  * A vertex in a directed graph.
7  *
8  * @author < a HREF="jddixon@users.sourceforge.net">Jim Dixon</a>
9  */

10 public class Vertex {
11
12     /** Unique non-negative assigned to the Vertex; -1 means 'unassigned' */
13     protected int index = -1;
14     /** The graph this vertex belongs to. */
15     protected Directed graph = null;
16     /** Connects this vertex to one or more other vertices. */
17     protected Connector connector = null;
18     /** Optional label. */
19     protected String JavaDoc label_ = null;
20     
21     /** Creates a vertex without an index and belonging to no graph. */
22     protected Vertex () {
23     }
24     /**
25      * Creates a vertex belonging to a graph, assigns an index unique
26      * within this graph.
27      * @param g The graph the vertex belongs to.
28      */

29     public Vertex (Directed g) {
30         checkForNull(g, "graph");
31         graph = g;
32         index = g.anotherVertex(this);
33     }
34     // ACCESSOR METHODS /////////////////////////////////////////////
35
public Connector getConnector () {
36         return connector;
37     }
38     public void setConnector (Connector c) {
39         checkForNull (c, "connector");
40         connector = c;
41     }
42     public Edge getEdge () {
43         if (connector == null) {
44             return null;
45         } else {
46             return connector.getEdge();
47         }
48     }
49     public Vertex getTarget() {
50         if (connector == null) {
51             return null;
52         } else {
53             return connector.getTarget();
54         }
55     }
56     /** Get the graph this vertex is in. */
57     public Directed getGraph() {
58         return graph;
59     }
60
61     /** @return Vertex index, a non-negative integer. */
62     public int getIndex() {
63         return index;
64     }
65     /** @return String label or null */
66     public String JavaDoc getLabel() {
67         return label_;
68     }
69     /** Assign a label to the Vertex. */
70     public void setLabel (String JavaDoc s) {
71         label_ = s;
72     }
73     // CONNECTOR CONVERTERS //////////////////////////////////////////
74
/**
75      * Convert the existing connector to a BinaryConnector.
76      *
77      * @return The 'other' edge created.
78      */

79     public Edge makeBinary() {
80         Edge otherEdge = new Edge(this, graph.getExit());
81         connector = new BinaryConnector( connector, otherEdge );
82         return otherEdge;
83     }
84     /**
85      * Convert the exiting connector to a ComplexConnector, using the
86      * existing Edge as seed.
87      */

88     public ComplexConnector makeComplex(int n) {
89         // rely on range check in constructor;
90
connector = new ComplexConnector ( connector, n);
91         return (ComplexConnector) connector;
92     }
93
94     /**
95      * Convert the exiting connector to a MultiConnector, using the
96      * existing Edge as seed.
97      */

98     public MultiConnector makeMulti(int n) {
99         // rely on range check in constructor;
100
connector = new MultiConnector ( connector, n);
101         return (MultiConnector) connector;
102     }
103
104     // UTILITY FUNCTIONS ////////////////////////////////////////////
105

106     /**
107      * Is the graph a parent, grandparent of this vertex?
108      *
109      * @param g Candidate progenitor.
110      * @return True if match is found.
111      */

112     public boolean above (final Directed g) {
113         // DEBUG
114
System.out.println("above: checking whether graph " + g.getIndex()
115             + " is above vertex " + toString ()
116             + " whose parent is graph " + getGraph().getParent().getIndex()
117         );
118         // END
119
if (g == null || g == graph) {
120             return false;
121         }
122         
123         // search upward through parent graphs
124
for ( Directed pop = graph.getParent(); pop != null;
125                                                 pop = pop.getParent() ) {
126             // DEBUG
127
System.out.println(" checking whether graph " + g.getIndex()
128                 + " is the same as graph " + pop.getIndex());
129             // END
130
if ( pop == g ) {
131                 return true;
132             }
133         }
134         return false;
135     }
136     /**
137      * Throw an exception if the argument is null.
138      *
139      * @param o Argument being checked
140      * @param what What it is - for error message.
141      */

142     public static void checkForNull( Object JavaDoc o, String JavaDoc what) {
143         if (o == null) {
144             throw new IllegalArgumentException JavaDoc ("null " + what);
145         }
146     }
147     /**
148      * @return A String in parent-index:my-index form.
149      */

150     public String JavaDoc toString () {
151         StringBuffer JavaDoc sb = new StringBuffer JavaDoc()
152                             .append(graph.getIndex())
153                             .append(":")
154                             .append(index);
155         return sb.toString();
156     }
157 }
158
Popular Tags