in asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/rewrite/visitor/ElementSubstitutionVisitor.java [69:100]
public Expression visit(PathPatternExpr pathPatternExpr, ILangExpression arg) throws CompilationException {
if (replacementElementExpression instanceof VertexPatternExpr) {
ListIterator<VertexPatternExpr> vertexExprIterator = pathPatternExpr.getVertexExpressions().listIterator();
while (vertexExprIterator.hasNext()) {
VertexPatternExpr workingVertexExpression = vertexExprIterator.next();
if (workingVertexExpression.equals(originalElementExpression)) {
vertexExprIterator.set((VertexPatternExpr) replacementElementExpression);
break;
}
}
List<EdgePatternExpr> edgeExpressions = pathPatternExpr.getEdgeExpressions();
for (EdgePatternExpr workingEdgeExpression : edgeExpressions) {
if (workingEdgeExpression.getLeftVertex().equals(originalElementExpression)) {
workingEdgeExpression.setLeftVertex((VertexPatternExpr) replacementElementExpression);
}
if (workingEdgeExpression.getRightVertex().equals(originalElementExpression)) {
workingEdgeExpression.setRightVertex((VertexPatternExpr) replacementElementExpression);
}
}
} else { // replacementElementExpression instanceof EdgePatternExpr
ListIterator<EdgePatternExpr> edgeExprIterator = pathPatternExpr.getEdgeExpressions().listIterator();
while (edgeExprIterator.hasNext()) {
EdgePatternExpr workingEdgeExpression = edgeExprIterator.next();
if (workingEdgeExpression.equals(originalElementExpression)) {
edgeExprIterator.set((EdgePatternExpr) replacementElementExpression);
break;
}
}
}
return pathPatternExpr;
}