/* *************************************************************************************** * 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.client.soda; import java.io.StringWriter; import java.util.ArrayList; import java.util.List; /** * Base expression. */ public abstract class ExpressionBase implements Expression { private static final long serialVersionUID = 0L; private String treeObjectName; private List<Expression> children; public String getTreeObjectName() { return treeObjectName; } public void setTreeObjectName(String treeObjectName) { this.treeObjectName = treeObjectName; } /** * Ctor. */ public ExpressionBase() { children = new ArrayList<Expression>(); } /** * Returns the list of sub-expressions to the current expression. * * @return list of child expressions */ public List<Expression> getChildren() { return children; } /** * Adds a new child expression to the current expression. * * @param expression to add */ public void addChild(Expression expression) { children.add(expression); } public void setChildren(List<Expression> children) { this.children = children; } public final void toEPL(StringWriter writer, ExpressionPrecedenceEnum parentPrecedence) { if (this.getPrecedence().getLevel() < parentPrecedence.getLevel()) { writer.write("("); toPrecedenceFreeEPL(writer); writer.write(")"); } else { toPrecedenceFreeEPL(writer); } } /** * Renders child expression of a function in a comma-separated list. * * @param functionName function name * @param children child nodes * @param writer writer */ protected static void toPrecedenceFreeEPL(String functionName, List<Expression> children, StringWriter writer) { writer.write(functionName); writer.write("("); toPrecedenceFreeEPL(children, writer); writer.write(')'); } /** * Render expression list * * @param children expressions to render * @param writer writer to render to */ public static void toPrecedenceFreeEPL(List<Expression> children, StringWriter writer) { String delimiter = ""; for (Expression expr : children) { writer.write(delimiter); expr.toEPL(writer, ExpressionPrecedenceEnum.MINIMUM); delimiter = ","; } } /** * Render an aggregation function with distinct and parameter expressions * * @param writer to render to * @param name function name * @param distinct distinct flag * @param children parameters to render */ protected static void renderAggregation(StringWriter writer, String name, boolean distinct, List<Expression> children) { writer.write(name); writer.write("("); if (distinct) { writer.write("distinct "); } String delimiter = ""; for (Expression param : children) { writer.write(delimiter); delimiter = ","; param.toEPL(writer, ExpressionPrecedenceEnum.MINIMUM); } writer.write(")"); } /** * Renders the expressions and all it's child expression, in full tree depth, as a string in * language syntax. * * @param writer is the output to use */ public abstract void toPrecedenceFreeEPL(StringWriter writer); }