org.codehaus.plexus.util.dag

## Class DAG

- java.lang.Object
- - org.codehaus.plexus.util.dag.DAG

All Implemented Interfaces:
  Serializable, Cloneable

    public class DAG
    extends Object
    implements Cloneable, Serializable

DAG = Directed Acyclic Graph

Version:
  $Id: DAG.java 8010 2009-01-07 12:59:50Z vsiveton $
Author:
  Michal Maczka
See Also:
  Serialized Form

### Constructor Summary

Constructors
Constructor and Description
`DAG()`

### Method Summary

Methods
`void` `addEdge(String from, String to)`
`void` `addEdge(Vertex from, Vertex to)`
`Vertex` `addVertex(String label)` Adds vertex to DAG.
`Object` `clone()`
`List` `getChildLabels(String label)`
`Set` `getLabels()`
`List` `getParentLabels(String label)`
`List` `getSuccessorLabels(String label)` Return the list of labels of successor in order decided by topological sort
`Vertex` `getVertex(String label)`
`List` `getVerticies()`
`boolean` `hasEdge(String label1, String label2)`
`boolean` `isConnected(String label)` Indicates if there is at least one edge leading to or from vertex of given label
`void` `removeEdge(String from, String to)`
`void` `removeEdge(Vertex from, Vertex to)`

### Methods inherited from class java.lang.Object

`equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### DAG

    public DAG()

### Method Detail

#### getVerticies

    public List getVerticies()

Returns:

#### getLabels

    public Set getLabels()

#### addVertex

    public Vertex addVertex(String label)

Adds vertex to DAG. If vertex of given label alredy exist in DAG no vertex is added

Parameters:
  `label` - The lable of the Vertex
Returns:
  New vertex if vertext of given label was not presenst in the DAG or exising vertex if vertex of given labale was alredy added to DAG

#### addEdge

    public void addEdge(String from,
               String to)
                 throws CycleDetectedException

Throws:
  `CycleDetectedException`

#### addEdge

    public void addEdge(Vertex from,
               Vertex to)
                 throws CycleDetectedException

Throws:
  `CycleDetectedException`

#### removeEdge

    public void removeEdge(String from,
                  String to)

#### removeEdge

    public void removeEdge(Vertex from,
                  Vertex to)

#### getVertex

    public Vertex getVertex(String label)

#### hasEdge

    public boolean hasEdge(String label1,
                  String label2)

#### getChildLabels

    public List getChildLabels(String label)

Parameters:
  `label` -
Returns:

#### getParentLabels

    public List getParentLabels(String label)

Parameters:
  `label` -
Returns:

#### clone

    public Object clone()
                 throws CloneNotSupportedException

Overrides:
  `clone` in class `Object`
Throws:
  `CloneNotSupportedException`
See Also:
  `Object.clone()`

#### isConnected

    public boolean isConnected(String label)

Indicates if there is at least one edge leading to or from vertex of given label

Returns:
  `true</true> if this vertex is connected with other vertex,`false` otherwise`

#### getSuccessorLabels

    public List getSuccessorLabels(String label)

Return the list of labels of successor in order decided by topological sort

Parameters:
  `label` - The label of the vertex whose predessors are serched
Returns:
  The list of labels. Returned list contains also the label passed as parameter to this method. This label should always be the last item in the list.