@Override public TraversalGraph<V, E> reconstructTraversalGraph() { if (currentStartNode == null) { throw new IllegalStateException("You must call #calculate before " + "reconstructing the traversal graph."); } TraversalGraph<V, E> traversalGraph = new TraversalGraph<V, E>( graph.getEdgeFactory(), currentStartNode); for (V v : graph.vertexSet()) { Set<E> predEdges = (Set<E>) v.getPredecessorEdges(); for (E e : predEdges) { V source = graph.getEdgeSource(e); V target = graph.getEdgeTarget(e); traversalGraph.addVertex(source); traversalGraph.addVertex(target); if (v.equals(source)) { traversalGraph.addEdge(target, source).setBaseGraphEdge(e); } else if (v.equals(target)) { traversalGraph.addEdge(source, target).setBaseGraphEdge(e); } else { throw new IllegalStateException("A vertex has a predecessor " + "edge not ending on itself."); } } } return traversalGraph; }