1
2
3
4 package baseCode.dataStructure.graph;
5
6 import java.util.Iterator;
7 import java.util.LinkedHashMap;
8 import java.util.Map;
9 import java.util.Set;
10
11 import baseCode.common.Visitable;
12
13 /***
14 * <p>
15 * Copyright (c) Columbia University
16 *
17 * @author Paul Pavlidis
18 * @version $Id: AbstractGraph.java,v 1.8 2004/07/29 08:38:49 pavlidis Exp $
19 */
20 public abstract class AbstractGraph implements Graph {
21 protected Map items;
22
23 public AbstractGraph() {
24 items = new LinkedHashMap();
25 }
26
27 /***
28 * Create a new graph from a set of nodes. This allows us to easily make subtrees.
29 *
30 * @param nodes Set of AbstractGraphNodes.
31 */
32 public AbstractGraph( Set nodes ) {
33 items = new LinkedHashMap();
34 for ( Iterator it = nodes.iterator(); it.hasNext(); ) {
35 GraphNode n = ( GraphNode ) it.next();
36 this.addNode( n.getKey(), n.getItem() );
37 }
38 }
39
40 /***
41 * @param node GraphNode
42 */
43 public void addNode( GraphNode node ) {
44 node.setGraph( this );
45 items.put( node.getKey(), node );
46 }
47
48 /***
49 * Retrieve a node by key. To get the contents of a node use getNodeContents(key)
50 *
51 * @param key Object
52 * @see #getNodeContents(Object)
53 * @return AbstractGraphNode referenced by the key.
54 */
55 public GraphNode get( Object key ) {
56 return ( GraphNode ) items.get( key );
57 }
58
59 /***
60 * @return Map
61 */
62 public Map getItems() {
63 return items;
64 }
65
66 /***
67 * Retrieve the contents of a node by key.
68 *
69 * @see #get
70 * @param key Object
71 * @return The object contained by a node, not the node itself.
72 */
73 public Object getNodeContents( Object key ) {
74 return ( ( GraphNode ) items.get( key ) ).getItem();
75 }
76
77 /***
78 * @param key Object
79 * @return true if the graph contains an item referenced by key, false otherwise.
80 */
81 public boolean containsKey( Object key ) {
82 return items.containsKey( key );
83 }
84
85 /***
86 * Reset the 'visited' marks of the graph to false.
87 */
88 public void unmarkAll() {
89 for ( Iterator it = items.keySet().iterator(); it.hasNext(); ) {
90 ( ( Visitable ) it.next() ).unMark();
91 }
92 }
93 }