package org.aksw.jena_sparql_api.concept_cache.op;
import java.util.List;
import org.jgrapht.experimental.dag.DirectedAcyclicGraph;
import org.jgrapht.experimental.dag.DirectedAcyclicGraph.CycleFoundException;
import org.jgrapht.graph.DefaultEdge;
import org.apache.jena.sparql.algebra.Op;
public class OpToDirectedGraph {
public static DirectedAcyclicGraph<Op, DefaultEdge> convert(Op op) {
DirectedAcyclicGraph<Op, DefaultEdge> result = new DirectedAcyclicGraph<Op, DefaultEdge>(DefaultEdge.class);
result.addVertex(op);
convert(op, result);
return result;
}
// Note: op is assumed to already be a vertex in the graph
public static void convert(Op op, DirectedAcyclicGraph<Op, DefaultEdge> result)
{
List<Op> children = OpUtils.getSubOps(op);
for(Op child : children) {
try {
result.addVertex(child);
result.addDagEdge(op, child);
} catch (CycleFoundException e) {
throw new RuntimeException(e);
}
convert(child, result);
}
}
}