package dgm.trees; import com.tinkerpop.blueprints.Direction; import com.tinkerpop.blueprints.Edge; import com.tinkerpop.blueprints.Vertex; import java.util.Iterator; /** Traverse a graph as if it is a tree */ public class GraphTreeViewer implements TreeViewer<Pair<Edge, Vertex>> { protected final Direction direction; public GraphTreeViewer(Direction direction) { this.direction = direction; } // iterator over all outgoing edges, returning a pair with the edge and it's other vertex class EIterator implements Iterator<Pair<Edge, Vertex>> { final Iterator<Edge> edge_iterator; public EIterator(Iterator<Edge> edge_iterator) { this.edge_iterator = edge_iterator; } @Override public boolean hasNext() { return edge_iterator.hasNext(); } @Override public Pair<Edge, Vertex> next() { final Edge edge = edge_iterator.next(); return new Pair<Edge,Vertex>(edge, edge.getVertex(direction.opposite())); } @Override public void remove() { throw new UnsupportedOperationException("remove not implemented"); } } @Override public Iterable<Pair<Edge, Vertex>> children(Pair<Edge, Vertex> node) { final Iterable<Edge> edges = node.b.getEdges(direction); return new Iterable<Pair<Edge, Vertex>>() { @Override public Iterator<Pair<Edge, Vertex>> iterator() { return new GraphTreeViewer.EIterator(edges.iterator()); } }; } }