package GPL;
import java.util.LinkedList;
import java.util.Iterator;
import java.util.Collections;
import java.util.Comparator;
// *************************************************************************
public class Graph {
private LinkedList vertices;
private LinkedList edges;
public static final boolean isDirected = true;
public Graph() {
vertices = new LinkedList();
edges = new LinkedList();
}
// Fall back method that stops the execution of programs
public void run( Vertex s ) {}
public void sortEdges(Comparator c) {
Collections.sort(edges, c);
}
public void sortVertices(Comparator c) {
Collections.sort(vertices, c);
}
// Adds an edge without weights if Weighted layer is not present
public EdgeIfc addEdge(Vertex start, Vertex end) {
Edge theEdge = new Edge();
theEdge.EdgeConstructor( start, end );
edges.add( theEdge );
start.addNeighbor( new Neighbor( end, theEdge ) );
//end.addNeighbor( new Neighbor( start, theEdge ) );
return theEdge;
}
protected void addVertex( Vertex v ) {
vertices.add( v );
}
// Finds a vertex given its name in the vertices list
public Vertex findsVertex( String theName )
{
Vertex theVertex = null;
// if we are dealing with the root
if ( theName==null )
return null;
for(VertexIter vxiter = getVertices(); vxiter.hasNext(); )
{
theVertex = vxiter.next();
if ( theName.equals( theVertex.getName() ) )
return theVertex;
}
return theVertex;
}
public VertexIter getVertices() {
return new VertexIter() {
private Iterator iter = vertices.iterator();
public Vertex next() { return (Vertex)iter.next(); }
public boolean hasNext() { return iter.hasNext(); }
};
}
public EdgeIter getEdges() {
return new EdgeIter() {
private Iterator iter = edges.iterator();
public EdgeIfc next() { return (EdgeIfc)iter.next(); }
public boolean hasNext() { return iter.hasNext(); }
};
}
public void display() {
int i;
System.out.println( "******************************************" );
System.out.println( "Vertices " );
for ( VertexIter vxiter = getVertices(); vxiter.hasNext() ; )
vxiter.next().display();
System.out.println( "******************************************" );
System.out.println( "Edges " );
for ( EdgeIter edgeiter = getEdges(); edgeiter.hasNext(); )
edgeiter.next().display();
System.out.println( "******************************************" );
}
}