KickJava   Java API By Example, From Geeks To Geeks.

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


1 /* MultiConnector.java */
2
3 package org.quilt.graph;
4
5 /**
6  * A Connector holding a array of edges, where the array has at least
7  * one member. The first element of the array is preferred.
8  *
9  * @author <a HREF="jddixon@users.sourceforge.net">Jim Dixon</a>
10  */

11
12 public class MultiConnector extends Connector {
13
14     /** Fixed-size array of directed edges. */
15     private Edge [] edges = null;
16
17     /** Source of all edges in this connector. */
18     private Vertex source = null;
19     
20     /**
21      * Constructor for fixed-size array of edges. All edges in
22      * the new connector are copies of the seed edge.
23      */

24     public MultiConnector (Edge seed, int n) {
25         if ( seed == null || n < 1) {
26             throw new IllegalArgumentException JavaDoc(
27                     "constructor arguments null or not in range");
28         }
29         Vertex source = seed.getSource();
30         source = seed.getSource();
31         Vertex target = seed.getTarget();
32         edges = new Edge[n];
33
34         edges[0] = new Edge (seed); // copy it
35
for (int i = 1; i < n; i++) {
36             edges[i] = new Edge (source, target);
37         }
38     }
39     /**
40      * Constructor initialized from an existing UnaryConnector.
41      * The unary connector is destroyed after constructing the
42      * new connector.
43      */

44     public MultiConnector( Connector conn, int n) {
45         // will throw NPE if conn == null
46
this( conn.getEdge(), n);
47     }
48     // INTERFACE CONNECTOR //////////////////////////////////////////
49
public Edge getEdge () {
50         return edges[0];
51     }
52     public Vertex getTarget () {
53         return edges[0].getTarget();
54     }
55     public void setTarget (Vertex v) {
56         checkTarget(v);
57         edges[0].setTarget(v);
58     }
59     // OTHER METHODS ////////////////////////////////////////////////
60
private void checkTarget (final Vertex target) {
61         if (target == null) {
62             throw new IllegalArgumentException JavaDoc("target may not be null");
63         }
64         if ( target.getGraph() != source.getGraph() ) {
65             throw new IllegalArgumentException JavaDoc(
66                     "new target must be in same graph");
67         }
68     }
69     private void rangeCheck (int n) {
70         if ( n < 0 || n >= edges.length ) {
71             throw new IllegalArgumentException JavaDoc(
72                  "MultiConnector index out of range");
73         }
74     }
75     public Edge getEdge (int n) {
76         rangeCheck(n);
77         return edges[n];
78     }
79     public Vertex getTarget (int n) {
80         rangeCheck(n);
81         return edges[n].getTarget();
82     }
83     public void setTarget (Vertex v, int n) {
84         checkTarget(v);
85         rangeCheck(n);
86         edges[n].setTarget(v);
87     }
88
89     
90     /** @return The number of edges in the Connector. */
91     public int size () {
92         return edges.length;
93     }
94 }
95
Popular Tags