2
* TouchGraph LLC. Apache-Style Software License
5
* Copyright (c) 2001-2002 Alexander Shapiro. All rights reserved.
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
11
* 1. Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
14
* 2. Redistributions in binary form must reproduce the above copyright
15
* notice, this list of conditions and the following disclaimer in
16
* the documentation and/or other materials provided with the
19
* 3. The end-user documentation included with the redistribution,
20
* if any, must include the following acknowledgment:
21
* "This product includes software developed by
22
* TouchGraph LLC (http://www.touchgraph.com/)."
23
* Alternately, this acknowledgment may appear in the software itself,
24
* if and wherever such third-party acknowledgments normally appear.
26
* 4. The names "TouchGraph" or "TouchGraph LLC" must not be used to endorse
27
* or promote products derived from this software without prior written
28
* permission. For written permission, please contact
31
* 5. Products derived from this software may not be called "TouchGraph",
32
* nor may "TouchGraph" appear in their name, without prior written
33
* permission of alex@touchgraph.com.
35
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
36
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38
* DISCLAIMED. IN NO EVENT SHALL TOUCHGRAPH OR ITS CONTRIBUTORS BE
39
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
40
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
41
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
42
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
43
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
44
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
45
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
46
* ====================================================================
50
package com.touchgraph.graphlayout.graphelements;
52
import com.touchgraph.graphlayout.Node;
53
import com.touchgraph.graphlayout.Edge;
54
import com.touchgraph.graphlayout.TGException;
56
import java.util.Vector;
58
/** Locality: A way of representing a subset of a larger set of nodes.
59
* Allows for both manipulation of the subset, and manipulation of the
60
* larger set. For instance, one can call removeNode to delete it from
61
* the subset, or deleteNode to remove it from the larger set.
63
* Locality is used in conjunction with LocalityUtils, which handle
64
* locality shift animations.
66
* More synchronization will almost definitely be required.
68
* @author Alexander Shapiro
69
* @version 1.22-jre1.1 $Id: Locality.java,v 1.1 2002/09/19 15:58:32 ldornbusch Exp $
71
public class Locality extends GraphEltSet {
73
protected GraphEltSet completeEltSet;
77
/** Constructor with GraphEltSet <tt>ges</tt>.
79
public Locality(GraphEltSet ges) {
84
public GraphEltSet getCompleteEltSet() {
85
return completeEltSet;
88
public synchronized void addNode( Node n ) throws TGException {
91
//If a new Node is created, and then added to Locality, then add the new edge
92
//to completeEltSet as well.
93
if (!completeEltSet.contains(n)) completeEltSet.addNode(n);
97
public void addEdge( Edge e ) {
100
//If a new Edge is created, and then added to Locality, then add the new edge
101
//to completeEltSet as well.
102
if (!completeEltSet.contains(e)) completeEltSet.addEdge(e);
106
public synchronized void addNodeWithEdges( Node n ) throws TGException {
108
for (int i = 0 ; i < n.edgeCount(); i++) {
110
if(contains(e.getOtherEndpt(n))) addEdge(e);
115
public synchronized void addAll() throws TGException {
116
synchronized (completeEltSet) {
117
for (int i = 0 ; i<completeEltSet.nodeCount(); i++) {
118
addNode(completeEltSet.nodeAt(i));
120
for (int i = 0 ; i<completeEltSet.edgeCount(); i++) {
121
addEdge(completeEltSet.edgeAt(i));
126
public Edge findEdge( Node from, Node to ) {
127
Edge foundEdge=super.findEdge(from,to);
128
if (foundEdge!=null && edges.contains(foundEdge)) return foundEdge;
132
public boolean deleteEdge( Edge e ) {
133
if (e == null) return false;
136
return completeEltSet.deleteEdge(e);
140
public synchronized void deleteEdges( Vector edgesToDelete ) {
141
removeEdges(edgesToDelete);
142
completeEltSet.deleteEdges(edgesToDelete);
145
public boolean removeEdge( Edge e ) {
146
if (e == null) return false;
148
if(edges.removeElement(e)) {
155
public synchronized void removeEdges( Vector edgesToRemove ) {
156
for (int i=0;i<edgesToRemove.size();i++) {
157
removeEdge((Edge) edgesToRemove.elementAt(i));
161
public boolean deleteNode( Node node ) {
162
if ( node == null ) return false;
165
return completeEltSet.deleteNode(node);
169
public synchronized void deleteNodes( Vector nodesToDelete ) {
170
removeNodes(nodesToDelete);
171
completeEltSet.deleteNodes(nodesToDelete);
174
public boolean removeNode( Node node ) {
175
if (node == null) return false;
176
if (!nodes.removeElement(node)) return false;
178
String id = node.getID();
179
if ( id != null ) nodeIDRegistry.remove(id); // remove from registry
181
for (int i = 0 ; i < node.edgeCount(); i++) {
182
removeEdge(node.edgeAt(i));
188
public synchronized void removeNodes( Vector nodesToRemove ) {
189
for (int i=0;i<nodesToRemove.size();i++) {
190
removeNode((Node) nodesToRemove.elementAt(i));
194
public synchronized void removeAll() {
198
public synchronized void clearAll() {
200
completeEltSet.clearAll();
203
} // end com.touchgraph.graphlayout.graphelements.Locality