package org.aksw.jena_sparql_api.util.sparql.syntax.path; import org.apache.jena.sparql.path.P_Alt; import org.apache.jena.sparql.path.P_Distinct; import org.apache.jena.sparql.path.P_FixedLength; import org.apache.jena.sparql.path.P_Inverse; import org.apache.jena.sparql.path.P_Link; import org.apache.jena.sparql.path.P_Mod; import org.apache.jena.sparql.path.P_Multi; import org.apache.jena.sparql.path.P_NegPropSet; import org.apache.jena.sparql.path.P_OneOrMore1; import org.apache.jena.sparql.path.P_OneOrMoreN; import org.apache.jena.sparql.path.P_ReverseLink; import org.apache.jena.sparql.path.P_Seq; import org.apache.jena.sparql.path.P_Shortest; import org.apache.jena.sparql.path.P_ZeroOrMore1; import org.apache.jena.sparql.path.P_ZeroOrMoreN; import org.apache.jena.sparql.path.P_ZeroOrOne; import org.apache.jena.sparql.path.Path; import org.apache.jena.sparql.path.PathVisitor; public class PathVisitorWalker implements PathVisitor { protected final PathVisitor proc ; protected final PathVisitor beforeVisitor ; protected final PathVisitor afterVisitor ; protected PathVisitorWalker(PathVisitor visitor, PathVisitor beforeVisitor, PathVisitor afterVisitor) { proc = visitor ; this.beforeVisitor= beforeVisitor ; this.afterVisitor = afterVisitor ; } private void before(Path path) { if ( beforeVisitor != null ) path.visit(beforeVisitor) ; } private void after(Path path) { if ( afterVisitor != null ) path.visit(afterVisitor) ; } @Override public void visit(P_Link path) { before(path); proc.visit(path); after(path); } @Override public void visit(P_ReverseLink path) { before(path); proc.visit(path); after(path); } @Override public void visit(P_NegPropSet path) { before(path); proc.visit(path); after(path); } @Override public void visit(P_Inverse path) { before(path); if (path.getSubPath() != null) { path.getSubPath().visit(this); } proc.visit(path); after(path); } @Override public void visit(P_Mod path) { before(path); if (path.getSubPath() != null) { path.getSubPath().visit(this); } proc.visit(path); after(path); } @Override public void visit(P_FixedLength path) { before(path); if (path.getSubPath() != null) { path.getSubPath().visit(this); } proc.visit(path); after(path); } @Override public void visit(P_Distinct path) { before(path); if (path.getSubPath() != null) { path.getSubPath().visit(this); } proc.visit(path); after(path); } @Override public void visit(P_Multi path) { before(path); if (path.getSubPath() != null) { path.getSubPath().visit(this); } proc.visit(path); after(path); } @Override public void visit(P_Shortest path) { before(path); if (path.getSubPath() != null) { path.getSubPath().visit(this); } proc.visit(path); after(path); } @Override public void visit(P_ZeroOrOne path) { before(path); if (path.getSubPath() != null) { path.getSubPath().visit(this); } proc.visit(path); after(path); } @Override public void visit(P_ZeroOrMore1 path) { before(path); if (path.getSubPath() != null) { path.getSubPath().visit(this); } proc.visit(path); after(path); } @Override public void visit(P_ZeroOrMoreN path) { before(path); if (path.getSubPath() != null) { path.getSubPath().visit(this); } proc.visit(path); after(path); } @Override public void visit(P_OneOrMore1 path) { before(path); if (path.getSubPath() != null) { path.getSubPath().visit(this); } proc.visit(path); after(path); } @Override public void visit(P_OneOrMoreN path) { before(path); if (path.getSubPath() != null) { path.getSubPath().visit(this); } proc.visit(path); after(path); } @Override public void visit(P_Alt path) { before(path); if (path.getLeft() != null) { path.getLeft().visit(this); } if (path.getRight() != null) { path.getRight().visit(this); } proc.visit(path); after(path); } @Override public void visit(P_Seq path) { before(path); if (path.getLeft() != null) { path.getLeft().visit(this); } if (path.getRight() != null) { path.getRight().visit(this); } proc.visit(path); after(path); } }