edu.isi.pegasus.planner.partitioner.graph

## Interface Graph

All Superinterfaces:
  GraphNodeContent

All Known Implementing Classes:
  ADag, AggregatedJob, MapGraph

    public interface Graph
    extends GraphNodeContent

The interface for the Graph Class. It implements the GraphNodeContent interface. This allows us to associate Graphs with the nodes in a Graph i.e. graph of graphs.

Version:
  $Revision$
Author:
  Karan Vahi

### Field Summary

Fields
`static java.lang.String` `VERSION` The version number associated with this Graph API.

### Method Summary

All Methods Instance Methods Abstract Methods
`void` `addEdge(GraphNode parent, GraphNode child)` Adds an edge between two already existing nodes in the graph.
`void` `addEdge(java.lang.String parent, java.lang.String child)` Adds an edge between two already existing nodes in the graph.
`void` `addEdges(java.lang.String child, java.util.List<java.lang.String> parents)` A convenience method that allows for bulk addition of edges between already existing nodes in the graph.
`void` `addNode(GraphNode node)` Adds a node to the Graph.
`void` `addRoot(GraphNode root)` Adds a single root node to the Graph.
`java.util.Iterator<GraphNode>` `bottomUpIterator()` Returns an iterator that traverses the graph bottom up from the leaves.
`java.util.List<GraphNode>` `getLeaves()` Returns the leaf nodes of the Graph.
`GraphNode` `getNode(java.lang.String identifier)` Returns the node matching the id passed.
`java.util.List<GraphNode>` `getRoots()` Returns the root nodes of the Graph.
`boolean` `isEmpty()` Returns a boolean if there are no nodes in the graph.
`java.util.Iterator<GraphNode>` `iterator()` Returns an iterator that traverses through the graph using a graph traversal algorithm.
`java.util.Iterator<GraphNode>` `nodeIterator()` Returns an iterator for the nodes in the Graph.
`boolean` `remove(java.lang.String identifier)` Removes a node from the Graph.
`void` `resetEdges()` Resets all the dependencies in the Graph, while preserving the nodes.
`int` `size()` Returns the number of nodes in the graph.
`java.util.Iterator<GraphNode>` `topologicalSortIterator()` Returns an iterator for the graph that traverses in topological sort order.

### Field Detail

#### VERSION

    static final java.lang.String VERSION

The version number associated with this Graph API.

See Also:
  Constant Field Values

### Method Detail

#### addNode

    void addNode(GraphNode node)

Adds a node to the Graph. It overwrites an already existing node with the same ID.

Parameters:
  `node` - the node to be added to the Graph.

#### addEdge

    void addEdge(java.lang.String parent,
                 java.lang.String child)

Adds an edge between two already existing nodes in the graph.

Parameters:
  `parent` - the parent node ID.
  `child` - the child node ID.

#### addEdge

    void addEdge(GraphNode parent,
                 GraphNode child)

Adds an edge between two already existing nodes in the graph.

Parameters:
  `parent` - the parent node .
  `child` - the child node .

#### addEdges

    void addEdges(java.lang.String child,
                  java.util.List<java.lang.String> parents)

A convenience method that allows for bulk addition of edges between already existing nodes in the graph.

Parameters:
  `child` - the child node ID
  `parents` - list of parent identifiers as `String`.

#### resetEdges

    void resetEdges()

Resets all the dependencies in the Graph, while preserving the nodes. The resulting Graph is a graph of independent nodes.

#### getNode

    GraphNode getNode(java.lang.String identifier)

Returns the node matching the id passed.

Parameters:
  `identifier` - the id of the node.
Returns:
  the node matching the ID else null.

#### addRoot

    void addRoot(GraphNode root)

Adds a single root node to the Graph. All the exisitng roots of the Graph become children of the root.

Parameters:
  `root` - the `GraphNode` to be added as a root.
Throws:
  `java.lang.RuntimeException` - if a node with the same id already exists.

#### remove

    boolean remove(java.lang.String identifier)

Removes a node from the Graph.

Parameters:
  `identifier` - the id of the node to be removed.
Returns:
  boolean indicating whether the node was removed or not.

#### nodeIterator

    java.util.Iterator<GraphNode> nodeIterator()

Returns an iterator for the nodes in the Graph. These iterators are fail safe.

Returns:
  Iterator

#### iterator

    java.util.Iterator<GraphNode> iterator()

Returns an iterator that traverses through the graph using a graph traversal algorithm.

Returns:
  Iterator through the nodes of the graph.

#### topologicalSortIterator

    java.util.Iterator<GraphNode> topologicalSortIterator()

Returns an iterator for the graph that traverses in topological sort order.

Returns:
  Iterator through the nodes of the graph.

#### bottomUpIterator

    java.util.Iterator<GraphNode> bottomUpIterator()

Returns an iterator that traverses the graph bottom up from the leaves. At any one time, only one iterator can iterate through the graph.

Returns:
  Iterator through the nodes of the graph.

#### size

    int size()

Returns the number of nodes in the graph.

#### getRoots

    java.util.List<GraphNode> getRoots()

Returns the root nodes of the Graph.

Returns:
  a list containing `GraphNode` corressponding to the root nodes.

#### getLeaves

    java.util.List<GraphNode> getLeaves()

Returns the leaf nodes of the Graph.

Returns:
  a list containing `GraphNode` corressponding to the leaf nodes.

#### isEmpty

    boolean isEmpty()

Returns a boolean if there are no nodes in the graph.

Returns:
  boolean