KickJava   Java API By Example, From Geeks To Geeks.

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


1 /* ComplexConnector.java */
2
3 package org.quilt.graph;
4
5 /**
6  * A Connector holding a single edge plus a fixed size array of edges.
7  * This is a combination of the UnaryConnector and MultiConnector.
8  *
9  * @author <a HREF="jddixon@users.sourceforge.net">Jim Dixon</a>
10  */

11 public class ComplexConnector extends Connector {
12
13     /** The single edge */
14     private Edge edge;
15
16     /** The array of edges. */
17     private Edge[] edges = null;
18
19     /** Source of all edges in this connector. */
20     private Vertex source = null;
21
22     /**
23      * Constructor for a Connector with a single edge plus a fixed-size
24      * array of edges. The source of the single edge becomes the source
25      * of the array of edges. All edges in the array are set to point
26      * to the graph exit.
27      *
28      * @param e Becomes preferred edge of the connector.
29      * @param n Number of edges in the array
30      * @param graph Graph this appears in.
31      */

32     public ComplexConnector (final Edge e, int n
33                                                 //, final Exit exit
34
) {
35         if ( e == null || n < 1
36                                 // || exit == null
37
) {
38             throw new IllegalArgumentException JavaDoc (
39                 "constructor arguments must be in range and not null");
40         }
41         edge = new Edge (e); // the preferred edge
42
edges = new Edge[n]; // fixed-size array of edges
43
source = edge.getSource();
44         Vertex target = edge.getTarget();
45         for (int i = 0; i < n; i++) {
46             edges[i] = new Edge (source, target);
47         }
48     }
49     public ComplexConnector (Connector conn, int n
50                                 //, final Exit exit
51
) {
52         // will throw NPE if conn is null
53
this(conn.getEdge(), n
54                                 // , exit
55
);
56     }
57     // INTERFACE CONNECTOR //////////////////////////////////////////
58
/** Get the single edge. */
59     public Edge getEdge() {
60         return edge;
61     }
62     /** Get the target of the single edge. */
63     public Vertex getTarget() {
64         return edge.getTarget();
65     }
66     /** Change the target of the single edge. */
67     public void setTarget(Vertex v) {
68         checkTarget(v);
69         edge.setTarget(v);
70     }
71     // OTHER METHODS ////////////////////////////////////////////////
72
private void checkTarget (final Vertex target) {
73         if (target == null) {
74             throw new IllegalArgumentException JavaDoc(
75                 "target may not be null");
76         }
77         if ( source.getGraph() != target.getGraph() ) {
78             throw new IllegalArgumentException JavaDoc(
79                 "ComplexConnector's target must be in the same graph");
80         }
81     }
82     private void rangeCheck(int n) {
83         if ( n < 0 || n >=edges.length) {
84             throw new IllegalArgumentException JavaDoc (
85                 "ComplexConnector index " + n
86                     + " out of range 0.." + (edges.length - 1) );
87         }
88     }
89
90     /** Get the Nth edge from the array. */
91     public Edge getEdge(int n) {
92         rangeCheck(n);
93         return edges[n];
94     }
95     /** Get the target of the Nth edge. */
96     public Vertex getTarget(int n) {
97         rangeCheck(n);
98         return edges[n].getTarget();
99     }
100     /** Change the target of the Nth edge. */
101     public void setTarget(Vertex v, int n) {
102         checkTarget(v);
103         rangeCheck(n);
104         edges[n].setTarget(v);
105     }
106
107     
108     /**
109      * Returns the number of edges in the connector EXCLUDING the
110      * preferred edge. This is the same number used in the
111      * constructor as the size of the connector.
112      *
113      * @return Total number of edges in the multiway part of the connector.
114      */

115     public int size () {
116         return edges.length;
117     }
118 }
119
Popular Tags