All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.amazonaws.codegen.JmesPathCodeGenVisitor Maven / Gradle / Ivy

/*
 * Copyright 2010-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 *  http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */

package com.amazonaws.codegen;

import com.amazonaws.jmespath.Comparator;
import com.amazonaws.jmespath.InvalidTypeException;
import com.amazonaws.jmespath.JmesPathAndExpression;
import com.amazonaws.jmespath.JmesPathField;
import com.amazonaws.jmespath.JmesPathFilter;
import com.amazonaws.jmespath.JmesPathFlatten;
import com.amazonaws.jmespath.JmesPathFunction;
import com.amazonaws.jmespath.JmesPathIdentity;
import com.amazonaws.jmespath.JmesPathLiteral;
import com.amazonaws.jmespath.JmesPathMultiSelectList;
import com.amazonaws.jmespath.JmesPathNotExpression;
import com.amazonaws.jmespath.JmesPathProjection;
import com.amazonaws.jmespath.JmesPathSubExpression;
import com.amazonaws.jmespath.JmesPathValueProjection;
import com.amazonaws.jmespath.JmesPathVisitor;

import org.apache.commons.lang3.StringEscapeUtils;

import java.util.stream.Collectors;

public class JmesPathCodeGenVisitor implements JmesPathVisitor {

    /**
     * Generates the code for a new JmesPathSubExpression.
     *
     * @param subExpression JmesPath subexpression type
     * @param aVoid         void
     * @return String that represents a call to
     * the new subexpression
     * @throws InvalidTypeException
     */
    @Override
    public String visit(final JmesPathSubExpression subExpression, final Void aVoid)
            throws InvalidTypeException {
        final String prefix = "new JmesPathSubExpression( ";
        return subExpression.getExpressions().stream()
                .map(a -> a.accept(this, aVoid))
                .collect(Collectors.joining(",", prefix, ")"));
    }

    /**
     * Generates the code for a new JmesPathField.
     *
     * @param fieldNode JmesPath field type
     * @param aVoid     void
     * @return String that represents a call to
     * the new fieldNode
     */
    @Override
    public String visit(final JmesPathField fieldNode, final Void aVoid) {
        return "new JmesPathField( \"" + fieldNode.getValue() + "\")";
    }

    /**
     * Generates the code for a new JmesPathProjection.
     *
     * @param jmesPathProjection JmesPath projection type
     * @param aVoid              void
     * @return String that represents a call to
     * the new list projection
     * @throws InvalidTypeException
     */
    @Override
    public String visit(final JmesPathProjection jmesPathProjection,
                        final Void aVoid) throws InvalidTypeException {
        return "new JmesPathProjection( " + jmesPathProjection.getLhsExpr()
                .accept(this, aVoid) + ", " + jmesPathProjection.getProjectionExpr()
                .accept(this, aVoid) + ")";
    }

    /**
     * Generates the code for a new JmesPathFlatten.
     *
     * @param flatten JmesPath flatten type
     * @param aVoid   void
     * @return String that represents a call to
     * the new flatten projection
     * @throws InvalidTypeException
     */
    @Override
    public String visit(final JmesPathFlatten flatten, final Void aVoid)
            throws InvalidTypeException {
        return "new JmesPathFlatten( " + flatten.getFlattenExpr()
                .accept(this, aVoid) + ")";
    }

    /**
     * Generates the code for a new JmesPathIdentity.
     *
     * @param jmesPathIdentity JmesPath identity type
     * @param aVoid            void
     * @return String that represents a call to
     * the new identity expression
     */
    @Override
    public String visit(final JmesPathIdentity jmesPathIdentity,
                        final Void aVoid) {
        return "new JmesPathIdentity()";
    }

    /**
     * Generates the code for a new JmesPathValueProjection.
     *
     * @param valueProjection JmesPath value projection type
     * @param aVoid           void
     * @return String that represents a call to
     * the new value projection
     * @throws InvalidTypeException
     */
    @Override
    public String visit(final JmesPathValueProjection valueProjection,
                        final Void aVoid) throws InvalidTypeException {
        return "new JmesPathValueProjection( " + valueProjection.getLhsExpr()
                .accept(this, aVoid) + ", " + valueProjection.getRhsExpr()
                .accept(this, aVoid) + ")";
    }

    /**
     * Generates the code for a new JmesPathLiteral.
     *
     * @param literal JmesPath literal type
     * @param aVoid   void
     * @return String that represents a call to
     * the new literal expression
     */
    @Override
    public String visit(final JmesPathLiteral literal, final Void aVoid) {
        return "new JmesPathLiteral(\"" + StringEscapeUtils
                .escapeJava(literal.getValue().toString()) + "\")";

    }

    /**
     * Generates the code for a new JmesPathFilter.
     *
     * @param filter JmesPath filter type
     * @param aVoid  void
     * @return String that represents a call to
     * the new filter expression
     * @throws InvalidTypeException
     */
    @Override
    public String visit(final JmesPathFilter filter,
                        final Void aVoid) throws InvalidTypeException {
        return "new JmesPathFilter( " + filter.getLhsExpr().accept(this, aVoid)
                + ", " + filter.getRhsExpr().accept(this, aVoid) + ", "
                + filter.getComparator().accept(this, aVoid) + ")";
    }

    /**
     * Generates the code for a new JmesPathFunction.
     *
     * @param function JmesPath function type
     * @param aVoid    void
     * @return String that represents a call to
     * the new function expression
     * @throws InvalidTypeException
     */
    @Override
    public String visit(final JmesPathFunction function,
                        final Void aVoid) throws InvalidTypeException {
        final String prefix = "new " + function.getClass()
                .getSimpleName() + "( ";
        return function.getExpressions().stream()
                .map(a -> a.accept(this, aVoid))
                .collect(Collectors.joining(",", prefix, ")"));
    }

    /**
     * Generates the code for a new Comparator.
     *
     * @param op    JmesPath comparison operator type
     * @param aVoid void
     * @return String that represents a call to
     * the new comparator expression
     * @throws InvalidTypeException
     */
    @Override
    public String visit(final Comparator op, final Void aVoid)
            throws InvalidTypeException {
        String lhs = op.getLhsExpr().accept(this, aVoid);
        String rhs = op.getRhsExpr().accept(this, aVoid);

        return String.format("new %s(%s, %s)", op.getClass()
                .getSimpleName(), lhs, rhs);
    }

    /**
     * Generates the code for a new JmesPathNotExpression.
     *
     * @param notExpression JmesPath not-expression type
     * @param aVoid         void
     * @return String that represents a call to
     * the new not-expression
     * @throws InvalidTypeException
     */
    @Override
    public String visit(final JmesPathNotExpression notExpression,
                        final Void aVoid) throws InvalidTypeException {
        return "new JmesPathNotExpression( " + notExpression.getExpr()
                .accept(this, aVoid) + " )";
    }

    /**
     * Generates the code for a new JmesPathAndExpression.
     *
     * @param andExpression JmesPath and-expression type
     * @param aVoid         void
     * @return String that represents a call to
     * the new and-expression
     * @throws InvalidTypeException
     */
    @Override
    public String visit(final JmesPathAndExpression andExpression,
                        final Void aVoid) throws InvalidTypeException {
        return "new JmesPathAndExpression( " + andExpression.getLhsExpr()
                .accept(this, aVoid) + ", " + andExpression.getRhsExpr()
                .accept(this, aVoid) + " )";
    }

    /**
     * Generates the code for a new JmesPathMultiSelectList.
     *
     * @param multiSelectList JmesPath multiSelectList type
     * @param aVoid           void
     * @return String that represents a call to
     * the new multiSelectList
     * @throws InvalidTypeException
     */
    @Override
    public String visit(final JmesPathMultiSelectList multiSelectList,
                        final Void aVoid) throws InvalidTypeException {
        final String prefix = "new JmesPathMultiSelectList( ";
        return multiSelectList.getExpressions().stream()
                .map(a -> a.accept(this, aVoid))
                .collect(Collectors.joining(",", prefix, ")"));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy