Package com.espertech.esper.epl.parse

Source Code of com.espertech.esper.epl.parse.ASTLibHelper

/*
* *************************************************************************************
*  Copyright (C) 2008 EsperTech, Inc. All rights reserved.                            *
*  http://esper.codehaus.org                                                          *
*  http://www.espertech.com                                                           *
*  ---------------------------------------------------------------------------------- *
*  The software in this package is published under the terms of the GPL license       *
*  a copy of which has been included with this distribution in the license.txt file.  *
* *************************************************************************************
*/

package com.espertech.esper.epl.parse;

import com.espertech.esper.epl.enummethod.dot.ExprLambdaGoesNode;
import com.espertech.esper.epl.expression.ExprChainedSpec;
import com.espertech.esper.epl.expression.ExprNode;
import com.espertech.esper.epl.generated.EsperEPL2Ast;
import org.antlr.runtime.tree.Tree;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class ASTLibHelper {
    public static ExprChainedSpec getLibFunctionChainSpec(Tree libFunctionParent, Map<Tree, ExprNode> astExprNodeMap) {
        if (libFunctionParent.getType() != EsperEPL2Ast.LIB_FUNCTION) {
            throw new IllegalArgumentException("Not a LIB_FUNCTION parent");
        }

        int count = 0;
        if (libFunctionParent.getChild(0).getType() == EsperEPL2Ast.CLASS_IDENT) {
            count++;
        }

        String methodName = ASTConstantHelper.removeTicks(libFunctionParent.getChild(count).getText());
        count++;

        List<ExprNode> parameters = getExprNodesLibFunc(count, libFunctionParent, astExprNodeMap);
        boolean isProperty = libFunctionParent.getChildCount() > 0 && libFunctionParent.getChild(libFunctionParent.getChildCount() - 1).getType() != EsperEPL2Ast.LPAREN;
        return new ExprChainedSpec(methodName, parameters, isProperty);
    }

    public static List<ExprNode> getExprNodesLibFunc(int start, Tree parent, Map<Tree, ExprNode> astExprNodeMap) {
        List<ExprNode> parameters = new ArrayList<ExprNode>();
        int exprNum = start;
        while (exprNum < parent.getChildCount()) {
            if (parent.getChild(exprNum).getType() == EsperEPL2Ast.GOES) {
                ExprLambdaGoesNode goes = getLambdaGoes(parent.getChild(exprNum));
                ExprNode lambdaExpr = astExprNodeMap.remove(parent.getChild(++exprNum));
                goes.addChildNode(lambdaExpr);
                parameters.add(goes);
            }
            else {
                ExprNode parameter = astExprNodeMap.remove(parent.getChild(exprNum));
                if (parameter != null) {
                    parameters.add(parameter);
                }
            }
            exprNum++;
        }
        return parameters;
    }

    private static ExprLambdaGoesNode getLambdaGoes(Tree child) {
        List<String> parameters = new ArrayList<String>();
        if (child.getChild(0).getType() == EsperEPL2Ast.IDENT) {
            parameters.add(child.getChild(0).getText());
        }
        else {
            parameters = getIdentList(child.getChild(0));
        }
        return new ExprLambdaGoesNode(parameters);
    }

    public static List<String> getIdentList(Tree node) {
        return getTextList(node, EsperEPL2Ast.IDENT);
    }

    public static List<String> getTextList(Tree node, int nodeType) {
        List<String> columsList = new ArrayList<String>();
        for (int i = 0; i < node.getChildCount(); i++)
        {
            if (node.getChild(i).getType() == nodeType)
            {
                columsList.add(node.getChild(i).getText());
            }
        }
        return columsList;
    }

    public static List<String> getTextListChild(Tree node, int nodeType) {
        List<String> columsList = new ArrayList<String>();
        for (int i = 0; i < node.getChildCount(); i++)
        {
            if (node.getChild(i).getType() == nodeType)
            {
                columsList.add(node.getChild(i).getChild(0).getText());
            }
        }
        return columsList;
    }
}
TOP

Related Classes of com.espertech.esper.epl.parse.ASTLibHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.