/*
***************************************************************************************
* 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 com.espertech.esper.pattern.guard.GuardEnum;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Guard is the where timer-within pattern object for use in pattern expressions.
*/
public class PatternGuardExpr extends EPBaseNamedObject implements PatternExpr {
private static final long serialVersionUID = 0L;
private String treeObjectName;
private List<PatternExpr> guarded;
/**
* Ctor - for use to create a pattern expression tree, without pattern child expression.
*
* @param namespace is the guard object namespace
* @param name is the guard object name
* @param parameters is guard object parameters
*/
public PatternGuardExpr(String namespace, String name, List<Expression> parameters) {
super(namespace, name, parameters);
this.guarded = new ArrayList<PatternExpr>();
}
/**
* Ctor - for use to create a pattern expression tree, without pattern child expression.
*
* @param namespace is the guard object namespace
* @param name is the guard object name
* @param parameters is guard object parameters
* @param guarded is the guarded pattern expression
*/
public PatternGuardExpr(String namespace, String name, Expression[] parameters, PatternExpr guarded) {
this(namespace, name, Arrays.asList(parameters), guarded);
}
/**
* Ctor - for use to create a pattern expression tree, without pattern child expression.
*
* @param namespace is the guard object namespace
* @param name is the guard object name
* @param parameters is guard object parameters
* @param guardedPattern is the guarded pattern expression
*/
public PatternGuardExpr(String namespace, String name, List<Expression> parameters, PatternExpr guardedPattern) {
super(namespace, name, parameters);
this.guarded = new ArrayList<PatternExpr>();
guarded.add(guardedPattern);
}
public List<PatternExpr> getChildren() {
return guarded;
}
/**
* Set sub pattern.
*
* @param guarded sub expression
*/
public void setGuarded(List<PatternExpr> guarded) {
this.guarded = guarded;
}
/**
* Get sub expression
*
* @return sub pattern
*/
public List<PatternExpr> getGuarded() {
return guarded;
}
public String getTreeObjectName() {
return treeObjectName;
}
public void setTreeObjectName(String treeObjectName) {
this.treeObjectName = treeObjectName;
}
public PatternExprPrecedenceEnum getPrecedence() {
return PatternExprPrecedenceEnum.GUARD;
}
public final void toEPL(StringWriter writer, PatternExprPrecedenceEnum parentPrecedence, EPStatementFormatter formatter) {
if (this.getPrecedence().getLevel() < parentPrecedence.getLevel()) {
writer.write("(");
toPrecedenceFreeEPL(writer, formatter);
writer.write(")");
} else {
toPrecedenceFreeEPL(writer, formatter);
}
}
/**
* 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
* @param formatter for newline-whitespace formatting
*/
public void toPrecedenceFreeEPL(StringWriter writer, EPStatementFormatter formatter) {
guarded.get(0).toEPL(writer, getPrecedence(), formatter);
if (GuardEnum.isWhile(this.getNamespace(), this.getName())) {
writer.write(" while (");
this.getParameters().get(0).toEPL(writer, ExpressionPrecedenceEnum.MINIMUM);
writer.write(")");
} else {
writer.write(" where ");
super.toEPL(writer);
}
}
public void setChildren(List<PatternExpr> children) {
guarded = children;
}
}