public Expression visit()

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;
    }