001: /*
002: * This file or a portion of this file is licensed under the terms of
003: * the Globus Toolkit Public License, found in file GTPL, or at
004: * http://www.globus.org/toolkit/download/license.html. This notice must
005: * appear in redistributions of this file, with or without modification.
006: *
007: * Redistributions of this Software, with or without modification, must
008: * reproduce the GTPL in: (1) the Software, or (2) the Documentation or
009: * some other similar material which is provided with the Software (if
010: * any).
011: *
012: * Copyright 1999-2004 University of Chicago and The University of
013: * Southern California. All rights reserved.
014: */
015:
016: package org.griphyn.cPlanner.partitioner.graph;
017:
018: import java.util.Iterator;
019: import java.util.List;
020:
021: /**
022: * The interface for the Graph Class. It implements the GraphNodeContent interface.
023: * This allows us to associate Graphs with the nodes in a Graph i.e. graph of
024: * graphs.
025: *
026: * @author Karan Vahi
027: * @version $Revision: 50 $
028: */
029:
030: public interface Graph extends GraphNodeContent { //allows us to have graphs as nodes of a graph
031:
032: /**
033: * The version number associated with this Graph API.
034: */
035: public static final String VERSION = "1.1";
036:
037: /**
038: * Adds a node to the Graph. It overwrites an already existing node with the
039: * same ID.
040: *
041: * @param node the node to be added to the Graph.
042: */
043: public void addNode(GraphNode node);
044:
045: /**
046: * Adds an edge between two already existing nodes in the graph.
047: *
048: * @param parent the parent node ID.
049: * @param child the child node ID.
050: */
051: public void addEdge(String parent, String child);
052:
053: /**
054: * A convenience method that allows for bulk addition of edges between
055: * already existing nodes in the graph.
056: *
057: * @param child the child node ID
058: * @param parents list of parent identifiers as <code>String</code>.
059: */
060: public void addEdges(String child, List parents);
061:
062: /**
063: * Returns the node matching the id passed.
064: *
065: * @param identifier the id of the node.
066: *
067: * @return the node matching the ID else null.
068: */
069: public GraphNode getNode(String identifier);
070:
071: /**
072: * Adds a single root node to the Graph. All the exisitng roots of the
073: * Graph become children of the root.
074: *
075: * @param root the <code>GraphNode</code> to be added as a root.
076: *
077: * @throws RuntimeException if a node with the same id already exists.
078: */
079: public void addRoot(GraphNode root);
080:
081: /**
082: * Removes a node from the Graph.
083: *
084: * @param identifier the id of the node to be removed.
085: *
086: * @return boolean indicating whether the node was removed or not.
087: */
088: public boolean remove(String identifier);
089:
090: /**
091: * Returns an iterator for the nodes in the Graph. These iterators are
092: * fail safe.
093: *
094: * @return Iterator
095: */
096: public Iterator nodeIterator();
097:
098: /**
099: * Returns an iterator that traverses through the graph using a graph
100: * traversal algorithm.
101: *
102: * @return Iterator through the nodes of the graph.
103: */
104: public Iterator iterator();
105:
106: /**
107: * Returns the root nodes of the Graph.
108: *
109: * @return a list containing <code>GraphNode</code> corressponding to the
110: * root nodes.
111: */
112: public List getRoots();
113:
114: /**
115: * Returns the leaf nodes of the Graph.
116: *
117: * @return a list containing <code>GraphNode</code> corressponding to the
118: * leaf nodes.
119: */
120: public List getLeaves();
121:
122: }
|