/* *************************************************************************************** * Copyright (C) 2006 EsperTech, Inc. All rights reserved. * * http://www.espertech.com/esper * * 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.expression.visitor; import com.espertech.esper.epl.expression.baseagg.ExprAggregateNode; import com.espertech.esper.epl.expression.core.ExprIdentNode; import com.espertech.esper.epl.expression.core.ExprNode; import com.espertech.esper.epl.expression.core.ExprStreamUnderlyingNode; import com.espertech.esper.epl.expression.prev.ExprPreviousNode; import com.espertech.esper.epl.expression.prior.ExprPriorNode; import com.espertech.esper.epl.expression.subquery.ExprSubselectNode; /** * Visitor for compiling usage informaton of special expressions within an expression tree. */ public class ExprNodeSummaryVisitor implements ExprNodeVisitor { private boolean hasProperties; private boolean hasAggregation; private boolean hasSubselect; private boolean hasStreamSelect; private boolean hasPreviousPrior; public boolean isVisit(ExprNode exprNode) { return true; } public void visit(ExprNode exprNode) { if (exprNode instanceof ExprIdentNode) { hasProperties = true; } else if (exprNode instanceof ExprSubselectNode) { hasSubselect = true; } else if (exprNode instanceof ExprAggregateNode) { hasAggregation = true; } else if (exprNode instanceof ExprStreamUnderlyingNode) { hasStreamSelect = true; } else if ((exprNode instanceof ExprPriorNode) || (exprNode instanceof ExprPreviousNode)) { hasPreviousPrior = true; } } /** * Returns true if the expression is a plain-value expression, without any of the following: * properties, aggregation, subselect, stream select, previous or prior * * @return true for plain */ public boolean isPlain() { return !(hasProperties | hasAggregation | hasSubselect | hasStreamSelect | hasPreviousPrior); } public boolean isHasProperties() { return hasProperties; } public boolean isHasAggregation() { return hasAggregation; } public boolean isHasSubselect() { return hasSubselect; } public boolean isHasStreamSelect() { return hasStreamSelect; } public boolean isHasPreviousPrior() { return hasPreviousPrior; } /** * Returns a message if the expression contains special-instruction expressions. * * @return message */ public String getMessage() { if (hasProperties) { return "event properties"; } else if (hasAggregation) { return "aggregation functions"; } else if (hasSubselect) { return "sub-selects"; } else if (hasStreamSelect) { return "stream selects or event instance methods"; } else if (hasPreviousPrior) { return "previous or prior functions"; } return null; } }