/*
***************************************************************************************
* 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;
/**
* A stream of events that is generated by pattern matches.
* <p>
* Patterns matches are events that match pattern expressions. Pattern expressions are built using
* {@link Patterns}.
*/
public class PatternStream extends ProjectedStream {
private PatternExpr expression;
private AnnotationPart[] annotations;
private static final long serialVersionUID = -8321367637970657123L;
/**
* Ctor.
*/
public PatternStream() {
}
/**
* Creates a pattern stream from a pattern expression.
*
* @param expression pattern expression
* @return stream
*/
public static PatternStream create(PatternExpr expression) {
return new PatternStream(expression);
}
/**
* Creates a named pattern stream from a pattern expression.
*
* @param expression pattern expression
* @param optStreamName is the pattern stream name (as-name)
* @return stream
*/
public static PatternStream create(PatternExpr expression, String optStreamName) {
return new PatternStream(expression, optStreamName);
}
/**
* Ctor.
*
* @param expression pattern expression
*/
public PatternStream(PatternExpr expression) {
this(expression, null);
}
/**
* Ctor.
*
* @param expression pattern expression
* @param optStreamName is the pattern stream name (as-name)
*/
public PatternStream(PatternExpr expression, String optStreamName) {
super(new ArrayList<View>(), optStreamName);
this.expression = expression;
}
/**
* Ctor.
*
* @param expression pattern expression
* @param optStreamName is the pattern stream name (as-name)
* @param annotations annotations on pattern-level, if any
*/
public PatternStream(PatternExpr expression, String optStreamName, AnnotationPart[] annotations) {
super(new ArrayList<View>(), optStreamName);
this.expression = expression;
this.annotations = annotations;
}
/**
* Returns the pattern expression providing events to the stream.
*
* @return pattern expression
*/
public PatternExpr getExpression() {
return expression;
}
/**
* Sets the pattern expression providing events to the stream.
*
* @param expression is the pattern expression
*/
public void setExpression(PatternExpr expression) {
this.expression = expression;
}
/**
* Returns the pattern-level annotations, if any
*
* @return pattern-level annotations
*/
public AnnotationPart[] getAnnotations() {
return annotations;
}
/**
* Sets the pattern-level annotations, if any
*
* @param annotations pattern-level annotations
*/
public void setAnnotations(AnnotationPart[] annotations) {
this.annotations = annotations;
}
public void toEPLProjectedStream(StringWriter writer, EPStatementFormatter formatter) {
writer.write("pattern");
if (annotations != null) {
for (AnnotationPart part : annotations) {
writer.write(' ');
part.toEPL(writer);
}
}
writer.write(" [");
if (expression != null) {
expression.toEPL(writer, PatternExprPrecedenceEnum.MINIMUM, formatter);
}
writer.write(']');
}
public void toEPLProjectedStreamType(StringWriter writer) {
writer.write("pattern");
}
}