package org.aksw.jena_sparql_api.concept_cache.core; import java.util.function.Predicate; import org.apache.jena.graph.Node; import org.apache.jena.sparql.algebra.Op; import org.apache.jena.sparql.algebra.TransformCopy; import org.apache.jena.sparql.algebra.op.OpGraph; import org.apache.jena.sparql.algebra.op.OpQuadBlock; import org.apache.jena.sparql.algebra.op.OpQuadPattern; import org.apache.jena.sparql.core.Var; public class TransformRemoveGraph extends TransformCopy { // protected Stack<ExprList> stack = new Stack<>(); //protected Set<Var> userVars; /Varhese vari protected Predicate<Var> preventRemoval; // graphs making use of such variables are NOT removed public TransformRemoveGraph(Predicate<Var> preventRemoval) { super(); this.preventRemoval = preventRemoval; } // @Override // public Op transform(OpFilter op, Op subOp) { // ExprList exprs = op.getExprs(); // stack.push(exprs); // // Op newSubOp = Transformer.transform(this, subOp); // // Op result = newSubOp == subOp ?op : OpFilter.filter(exprs, newSubOp); // stack.pop(); // // return result; // } @Override public Op transform(OpQuadPattern opQuadPattern) { throw new RuntimeException("Transformation on quad form not supported"); } @Override public Op transform(OpQuadBlock opQuadPattern) { throw new RuntimeException("Transformation on quad form not supported"); } @Override public Op transform(OpGraph op, Op subOp) { // If the variable of the graph Node node = op.getNode(); boolean remove = node.isVariable() && !preventRemoval.test((Var)node); Op result = remove ? subOp : new OpGraph(node, subOp) ; return result; } // // public static void transform() { // ElementTransform elementTransform = ElementTransformDatasetDescription.create(graphs, element, dd); // ElementVisitor beforeVisitor = new ElementVisitorBase() { // @Override // public void visit(ElementNamedGraph el) { // graphs.push(el.getGraphNameNode()); // //System.out.println("push " + el.getGraphNameNode()); // } // }; // ElementVisitor afterVisitor = new ElementVisitorBase() { // @Override // public void visit(ElementNamedGraph el) { // graphs.pop(); // //System.out.println("pop " + el.getGraphNameNode()); // } // }; // // Element result = ElementTransformer.transform(element, elementTransform, exprTransform, beforeVisitor, afterVisitor); // // } }