This is an automated email from the ASF dual-hosted git repository. riemer pushed a commit to branch dev in repository https://gitbox.apache.org/repos/asf/incubator-streampipes.git
commit 563a3a73a1f00fdc2e8df4f2c2405b71b102df48 Author: Dominik Riemer <[email protected]> AuthorDate: Mon Oct 26 21:55:24 2020 +0100 [STREAMPIPES-250] Extend Siddhi object model --- .../commons/exceptions/SpException.java | 2 +- .../sdk/extractor/AbstractParameterExtractor.java | 39 +++++++ .../wrapper/siddhi/constants/SiddhiConstants.java | 14 ++- .../wrapper/siddhi/query/FromClause.java | 29 ++++- .../EqualsExpression.java} | 8 +- .../siddhi/query/expression/Expression.java | 18 +++- .../siddhi/query/expression/Expressions.java | 117 ++++++++++++++++++++- .../GreaterEqualsExpression.java} | 8 +- .../GreaterThanExpression.java} | 8 +- .../LesserEqualsExpression.java} | 8 +- .../LesserThanExpression.java} | 8 +- .../query/expression/PropertyExpression.java | 2 +- .../PropertyExpressionBase.java} | 6 +- .../query/expression/PropertyRenameExpression.java | 10 +- .../RelationalOperator.java} | 22 +++- ...sion.java => RelationalOperatorExpression.java} | 26 +++-- ...nameExpression.java => SequenceExpression.java} | 20 ++-- .../SiddhiTimeUnit.java} | 18 +++- ...RenameExpression.java => StreamExpression.java} | 39 +++++-- .../query/expression/StreamFilterExpression.java | 57 ++++++++++ ...RenameExpression.java => WithinExpression.java} | 21 ++-- .../CollectListExpression.java} | 19 ++-- .../ContainsListExpression.java} | 31 ++++-- .../math/MathAddExpression.java} | 10 +- .../math/MathDivideExpression.java} | 10 +- .../MathExpression.java} | 25 +++-- .../math/MathMultiplyExpression.java} | 10 +- .../math/MathOperator.java} | 19 +++- .../math/MathSubtractExpression.java} | 10 +- .../EveryExpression.java} | 18 ++-- .../expression/pattern/PatternCountExpression.java | 54 ++++++++++ .../pattern/PatternCountOperator.java} | 9 +- .../expression/pattern/PatternExpression.java | 60 +++++++++++ .../window/BatchWindowExpression.java} | 15 ++- .../TimeWindowExpression.java} | 21 ++-- .../WindowExpression.java} | 30 +++--- .../wrapper/siddhi/utils/SiddhiUtils.java | 1 + 37 files changed, 671 insertions(+), 151 deletions(-) diff --git a/streampipes-commons/src/main/java/org/apache/streampipes/commons/exceptions/SpException.java b/streampipes-commons/src/main/java/org/apache/streampipes/commons/exceptions/SpException.java index f058d9b..5c877d0 100644 --- a/streampipes-commons/src/main/java/org/apache/streampipes/commons/exceptions/SpException.java +++ b/streampipes-commons/src/main/java/org/apache/streampipes/commons/exceptions/SpException.java @@ -18,7 +18,7 @@ package org.apache.streampipes.commons.exceptions; -public class SpException extends Exception { +public class SpException extends RuntimeException { private static final long serialVersionUID = 193141189399279147L; diff --git a/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/extractor/AbstractParameterExtractor.java b/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/extractor/AbstractParameterExtractor.java index f8069c0..cce79bc 100644 --- a/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/extractor/AbstractParameterExtractor.java +++ b/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/extractor/AbstractParameterExtractor.java @@ -27,6 +27,7 @@ import org.apache.streampipes.model.base.InvocableStreamPipesEntity; import org.apache.streampipes.model.constants.PropertySelectorConstants; import org.apache.streampipes.model.schema.*; import org.apache.streampipes.model.staticproperty.*; +import org.apache.streampipes.sdk.utils.Datatypes; import java.io.IOException; import java.io.InputStream; @@ -68,6 +69,22 @@ public abstract class AbstractParameterExtractor<T extends InvocableStreamPipesE .getActualTopicName(); } + public Object singleValueParameter(EventPropertyPrimitive targetType, String internalName) { + String value = singleValueParameter(internalName, String.class); + + if (comparePropertyRuntimeType(targetType, Datatypes.Integer)) { + return typeParser.parse(value, Integer.class); + } else if (comparePropertyRuntimeType(targetType, Datatypes.Float)) { + return typeParser.parse(value, Float.class); + } else if (comparePropertyRuntimeType(targetType, Datatypes.Double)) { + return typeParser.parse(value, Double.class); + } else if (comparePropertyRuntimeType(targetType, Datatypes.Boolean)) { + return typeParser.parse(value, Boolean.class); + } else { + return value; + } + } + public <V> V singleValueParameter(String internalName, Class<V> targetClass) { return typeParser.parse(getStaticPropertyByName(internalName, FreeTextStaticProperty.class) .getValue(), targetClass); @@ -162,6 +179,28 @@ public abstract class AbstractParameterExtractor<T extends InvocableStreamPipesE .collect(Collectors.toList()); } + public Boolean comparePropertyRuntimeType(EventProperty eventProperty, + Datatypes datatype) { + return comparePropertyRuntimeType(eventProperty, datatype, false); + } + + public Boolean comparePropertyRuntimeType(EventProperty eventProperty, + Datatypes datatype, + boolean ignoreListElements) { + EventPropertyPrimitive testProperty = null; + if (eventProperty instanceof EventPropertyList && !ignoreListElements) { + testProperty = (EventPropertyPrimitive) ((EventPropertyList) eventProperty).getEventProperty(); + } else if (eventProperty instanceof EventPropertyPrimitive) { + testProperty = (EventPropertyPrimitive) eventProperty; + } + + if (testProperty != null) { + return testProperty.getRuntimeType().equals(datatype.toString()); + } else { + return false; + } + } + public StaticProperty extractGroupMember(String internalName, StaticPropertyGroup group) { return getStaticPropertyByName(group.getStaticProperties(), internalName); } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/constants/SiddhiConstants.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/constants/SiddhiConstants.java index 0decddd..adb15f5 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/constants/SiddhiConstants.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/constants/SiddhiConstants.java @@ -21,13 +21,25 @@ public class SiddhiConstants { public static final String SELECT = "select"; public static final String INSERT = "insert"; + public static final String FROM = "from"; public static final String WHITESPACE = " "; - public static final String COMMA = ", "; + public static final String COMMA = ","; + public static final String COLON = ":"; + public static final String DOT = "."; public static final String EMPTY = ""; + public static final String HASH = "#"; public static final String PARENTHESIS_OPEN = "("; public static final String PARENTHESIS_CLOSE = ")"; + public static final String SQUARE_BRACKET_OPEN = "["; + public static final String SQUARE_BRACKED_CLOSE = "]"; + public static final String ANGLE_BRACKET_OPEN = "<"; + public static final String ANGLE_BRACKET_CLOSE = ">"; public static final String AS = "as"; + public static final String EQUALS = "="; + public static final String EVERY = "every"; + public static final String SEQUENCE = "->"; + public static final String WITHIN = "within"; public static final String ASTERISK = "*"; diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java index 6667e89..36c3018 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java @@ -17,5 +17,32 @@ */ package org.apache.streampipes.wrapper.siddhi.query; -public class FromClause extends AbstractQueryGenerator { +import org.apache.streampipes.wrapper.siddhi.constants.SiddhiConstants; +import org.apache.streampipes.wrapper.siddhi.query.expression.Expression; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class FromClause extends Expression { + + private List<Expression> fromExpressions; + + private FromClause() { + this.fromExpressions = new ArrayList<>(); + } + + public static FromClause create() { + return new FromClause(); + } + + public void add(Expression expression) { + this.fromExpressions.add(expression); + } + + @Override + public String toSiddhiEpl() { + List<String> fromExpressions = this.fromExpressions.stream().map(Expression::toSiddhiEpl).collect(Collectors.toList()); + return join(SiddhiConstants.WHITESPACE, SiddhiConstants.FROM, join(SiddhiConstants.COMMA, fromExpressions)); + } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/EqualsExpression.java similarity index 74% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/EqualsExpression.java index 6667e89..43eabbd 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/EqualsExpression.java @@ -15,7 +15,11 @@ * limitations under the License. * */ -package org.apache.streampipes.wrapper.siddhi.query; +package org.apache.streampipes.wrapper.siddhi.query.expression; -public class FromClause extends AbstractQueryGenerator { +public class EqualsExpression extends RelationalOperatorExpression { + + public EqualsExpression(PropertyExpressionBase exp1, PropertyExpressionBase exp2) { + super(RelationalOperator.EQUALS, exp1, exp2); + } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/Expression.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/Expression.java index df93f57..ffec13e 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/Expression.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/Expression.java @@ -30,12 +30,28 @@ public abstract class Expression { } protected String joinWithParenthesis(String delimiter, String... substrings) { - return join(SiddhiConstants.EMPTY, + return joinWithParenthesis(delimiter, Arrays.asList(substrings)); + } + + protected String joinWithParenthesis(String delimiter, List<String> substrings) { + return join(delimiter, SiddhiConstants.PARENTHESIS_OPEN, join(delimiter, substrings), SiddhiConstants.PARENTHESIS_CLOSE); } + protected String joinWithSquareBracket(String delimiter, String... substrings) { + return joinWithSquareBracket(delimiter, Arrays.asList(substrings)); + } + + protected String joinWithSquareBracket(String delimiter, List<String> substrings) { + return join(delimiter, + SiddhiConstants.SQUARE_BRACKET_OPEN, + join(delimiter, substrings), + SiddhiConstants.SQUARE_BRACKED_CLOSE); + } + + protected String join(String delimiter, List<String> substrings) { StringJoiner joiner = new StringJoiner(delimiter); substrings.forEach(joiner::add); diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/Expressions.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/Expressions.java index 4d52445..c2f63c7 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/Expressions.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/Expressions.java @@ -19,9 +19,84 @@ package org.apache.streampipes.wrapper.siddhi.query.expression; import org.apache.streampipes.wrapper.siddhi.constants.SiddhiStreamSelector; import org.apache.streampipes.wrapper.siddhi.model.EventPropertyDef; +import org.apache.streampipes.wrapper.siddhi.query.expression.list.CollectListExpression; +import org.apache.streampipes.wrapper.siddhi.query.expression.list.ContainsListExpression; +import org.apache.streampipes.wrapper.siddhi.query.expression.math.MathDivideExpression; +import org.apache.streampipes.wrapper.siddhi.query.expression.math.MathMultiplyExpression; +import org.apache.streampipes.wrapper.siddhi.query.expression.pattern.EveryExpression; +import org.apache.streampipes.wrapper.siddhi.query.expression.pattern.PatternCountExpression; +import org.apache.streampipes.wrapper.siddhi.query.expression.pattern.PatternCountOperator; +import org.apache.streampipes.wrapper.siddhi.query.expression.window.BatchWindowExpression; +import org.apache.streampipes.wrapper.siddhi.query.expression.window.WindowExpression; + +import java.util.Arrays; public class Expressions { + public static Expression as(PropertyExpressionBase property, String targetName) { + return new PropertyRenameExpression(property, targetName); + } + + public static WindowExpression batchWindow(Integer windowSize) { + return new BatchWindowExpression(windowSize); + } + + public static PropertyExpressionBase collectList(PropertyExpression propertyExp) { + return new CollectListExpression(propertyExp); + } + + public static PropertyExpressionBase containsListItem(PropertyExpression listProperty, Object value) { + return new ContainsListExpression(listProperty, value); + } + + public static PropertyExpressionBase divide(PropertyExpressionBase op1, PropertyExpressionBase op2) { + return new MathDivideExpression(op1, op2); + } + + public static StreamExpression every(StreamExpression streamExpression) { + return new EveryExpression(streamExpression); + } + + public static RelationalOperatorExpression eq(PropertyExpressionBase exp1, PropertyExpressionBase exp2) { + return new EqualsExpression(exp1, exp2); + } + + public static StreamFilterExpression filter(StreamExpression streamExpression, Expression... filterExpressions) { + return new StreamFilterExpression(streamExpression, Arrays.asList(filterExpressions)); + } + + public static StreamFilterExpression filter(StreamExpression streamExpression, + PatternCountExpression patternCountExpression, + Expression... filterExpressions) { + return new StreamFilterExpression(streamExpression, + Arrays.asList(filterExpressions), + patternCountExpression); + } + + public static RelationalOperatorExpression ge(PropertyExpressionBase exp1, PropertyExpressionBase exp2) { + return new GreaterEqualsExpression(exp1, exp2); + } + + public static RelationalOperatorExpression gt(PropertyExpressionBase exp1, PropertyExpressionBase exp2) { + return new GreaterThanExpression(exp1, exp2); + } + + public static RelationalOperatorExpression le(PropertyExpressionBase exp1, PropertyExpressionBase exp2) { + return new LesserEqualsExpression(exp1, exp2); + } + + public static RelationalOperatorExpression lt(PropertyExpressionBase exp1, PropertyExpressionBase exp2) { + return new LesserThanExpression(exp1, exp2); + } + + public static PropertyExpressionBase multiply(PropertyExpressionBase op1, PropertyExpressionBase op2) { + return new MathMultiplyExpression(op1, op2); + } + + public static PatternCountExpression patternCount(Integer value, PatternCountOperator op) { + return new PatternCountExpression(value, op); + } + public static PropertyExpression property(String streamName, String propertyName) { return new PropertyExpression(streamName, propertyName); } @@ -38,7 +113,45 @@ public class Expressions { return new PropertyExpression(propertyDef); } - public static Expression as(PropertyExpression property, String targetName) { - return null; + public static Expression sequence(StreamExpression expression1, StreamExpression expression2) { + return new SequenceExpression(Arrays.asList(expression1, expression2)); + } + + public static Expression sequence(StreamExpression expression1, + StreamExpression expression2, + WithinExpression withinExpression) { + return new SequenceExpression(Arrays.asList(expression1, expression2), withinExpression); + } + + public static PropertyExpression staticValue(Number staticValue) { + return new PropertyExpression(String.valueOf(staticValue)); + } + + public static PropertyRenameExpression staticValue(Number staticValue, String propertyName) { + return new PropertyRenameExpression(Expressions.property(String.valueOf(staticValue)), propertyName); + } + + public static PropertyRenameExpression staticValue(String staticValue, String propertyName) { + return new PropertyRenameExpression(Expressions.property(makeStaticString(staticValue)), propertyName); + } + + public static StreamExpression stream(String streamName) { + return new StreamExpression(streamName); + } + + public static StreamExpression stream(String streamName, WindowExpression windowExpression) { + return new StreamExpression(streamName, windowExpression); + } + + public static StreamExpression stream(String streamName, String streamAlias) { + return new StreamExpression(streamName, streamAlias); + } + + private static String makeStaticString(String staticValue) { + return "'" + staticValue + "'"; + } + + public static WithinExpression within(int duration, SiddhiTimeUnit timeUnit) { + return new WithinExpression(duration, timeUnit); } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/GreaterEqualsExpression.java similarity index 73% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/GreaterEqualsExpression.java index 6667e89..9fc95f1 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/GreaterEqualsExpression.java @@ -15,7 +15,11 @@ * limitations under the License. * */ -package org.apache.streampipes.wrapper.siddhi.query; +package org.apache.streampipes.wrapper.siddhi.query.expression; -public class FromClause extends AbstractQueryGenerator { +public class GreaterEqualsExpression extends RelationalOperatorExpression { + + public GreaterEqualsExpression(PropertyExpressionBase exp1, PropertyExpressionBase exp2) { + super(RelationalOperator.GREATER_EQUALS, exp1, exp2); + } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/GreaterThanExpression.java similarity index 73% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/GreaterThanExpression.java index 6667e89..0edcc44 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/GreaterThanExpression.java @@ -15,7 +15,11 @@ * limitations under the License. * */ -package org.apache.streampipes.wrapper.siddhi.query; +package org.apache.streampipes.wrapper.siddhi.query.expression; -public class FromClause extends AbstractQueryGenerator { +public class GreaterThanExpression extends RelationalOperatorExpression { + + public GreaterThanExpression(PropertyExpressionBase exp1, PropertyExpressionBase exp2) { + super(RelationalOperator.GREATER_THAN, exp1, exp2); + } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/LesserEqualsExpression.java similarity index 73% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/LesserEqualsExpression.java index 6667e89..09053b4 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/LesserEqualsExpression.java @@ -15,7 +15,11 @@ * limitations under the License. * */ -package org.apache.streampipes.wrapper.siddhi.query; +package org.apache.streampipes.wrapper.siddhi.query.expression; -public class FromClause extends AbstractQueryGenerator { +public class LesserEqualsExpression extends RelationalOperatorExpression { + + public LesserEqualsExpression(PropertyExpressionBase exp1, PropertyExpressionBase exp2) { + super(RelationalOperator.LESSER_EQUALS, exp1, exp2); + } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/LesserThanExpression.java similarity index 73% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/LesserThanExpression.java index 6667e89..426c20f 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/LesserThanExpression.java @@ -15,7 +15,11 @@ * limitations under the License. * */ -package org.apache.streampipes.wrapper.siddhi.query; +package org.apache.streampipes.wrapper.siddhi.query.expression; -public class FromClause extends AbstractQueryGenerator { +public class LesserThanExpression extends RelationalOperatorExpression { + + public LesserThanExpression(PropertyExpressionBase exp1, PropertyExpressionBase exp2) { + super(RelationalOperator.LESSER_THAN, exp1, exp2); + } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyExpression.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyExpression.java index 2c2fab8..81f0ee9 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyExpression.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyExpression.java @@ -21,7 +21,7 @@ import org.apache.streampipes.wrapper.siddhi.constants.SiddhiStreamSelector; import org.apache.streampipes.wrapper.siddhi.model.EventPropertyDef; import org.apache.streampipes.wrapper.siddhi.utils.SiddhiUtils; -public class PropertyExpression extends Expression { +public class PropertyExpression extends PropertyExpressionBase { private String siddhiPropertyName; diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyExpressionBase.java similarity index 85% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyExpressionBase.java index 6667e89..85fe269 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyExpressionBase.java @@ -15,7 +15,9 @@ * limitations under the License. * */ -package org.apache.streampipes.wrapper.siddhi.query; +package org.apache.streampipes.wrapper.siddhi.query.expression; + +public abstract class PropertyExpressionBase extends Expression { + -public class FromClause extends AbstractQueryGenerator { } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java index 1739a91..6ac1bbc 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java @@ -19,21 +19,23 @@ package org.apache.streampipes.wrapper.siddhi.query.expression; import org.apache.streampipes.wrapper.siddhi.constants.SiddhiConstants; +import static org.apache.streampipes.wrapper.siddhi.utils.SiddhiUtils.prepareProperty; + public class PropertyRenameExpression extends Expression { - private PropertyExpression propertyExpression; + private PropertyExpressionBase propertyExpression; private String newPropertyName; - public PropertyRenameExpression(PropertyExpression property, String newPropertyName) { + public PropertyRenameExpression(PropertyExpressionBase property, String newPropertyName) { this.propertyExpression = property; this.newPropertyName = newPropertyName; } @Override public String toSiddhiEpl() { - return joinWithParenthesis(SiddhiConstants.WHITESPACE, + return join(SiddhiConstants.WHITESPACE, propertyExpression.toSiddhiEpl(), SiddhiConstants.AS, - newPropertyName); + prepareProperty(newPropertyName)); } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/RelationalOperator.java similarity index 67% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/RelationalOperator.java index 6667e89..16e38e3 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/RelationalOperator.java @@ -15,7 +15,25 @@ * limitations under the License. * */ -package org.apache.streampipes.wrapper.siddhi.query; +package org.apache.streampipes.wrapper.siddhi.query.expression; + +public enum RelationalOperator { + + EQUALS("="), + GREATER_THAN(">"), + GREATER_EQUALS(">="), + LESSER_THAN("<"), + LESSER_EQUALS("<="), + NOT_EQUALS("!="); + + private String operator; + + RelationalOperator(String operator) { + this.operator = operator; + } + + public String toOperatorString() { + return operator; + } -public class FromClause extends AbstractQueryGenerator { } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/RelationalOperatorExpression.java similarity index 61% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/RelationalOperatorExpression.java index 1739a91..848c43b 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/RelationalOperatorExpression.java @@ -19,21 +19,27 @@ package org.apache.streampipes.wrapper.siddhi.query.expression; import org.apache.streampipes.wrapper.siddhi.constants.SiddhiConstants; -public class PropertyRenameExpression extends Expression { +public class RelationalOperatorExpression extends Expression { - private PropertyExpression propertyExpression; - private String newPropertyName; + private PropertyExpressionBase exp1; + private PropertyExpressionBase exp2; - public PropertyRenameExpression(PropertyExpression property, String newPropertyName) { - this.propertyExpression = property; - this.newPropertyName = newPropertyName; + private RelationalOperator operator; + + public RelationalOperatorExpression(RelationalOperator operator, + PropertyExpressionBase exp1, + PropertyExpressionBase exp2) { + this.operator = operator; + this.exp1 = exp1; + this.exp2 = exp2; } + @Override public String toSiddhiEpl() { - return joinWithParenthesis(SiddhiConstants.WHITESPACE, - propertyExpression.toSiddhiEpl(), - SiddhiConstants.AS, - newPropertyName); + return joinWithParenthesis(SiddhiConstants.EMPTY, + exp1.toSiddhiEpl(), + operator.toOperatorString(), + exp2.toSiddhiEpl()); } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/SequenceExpression.java similarity index 64% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/SequenceExpression.java index 1739a91..3700d12 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/SequenceExpression.java @@ -18,22 +18,18 @@ package org.apache.streampipes.wrapper.siddhi.query.expression; import org.apache.streampipes.wrapper.siddhi.constants.SiddhiConstants; +import org.apache.streampipes.wrapper.siddhi.query.expression.pattern.PatternExpression; -public class PropertyRenameExpression extends Expression { +import java.util.List; - private PropertyExpression propertyExpression; - private String newPropertyName; +public class SequenceExpression extends PatternExpression { - public PropertyRenameExpression(PropertyExpression property, String newPropertyName) { - this.propertyExpression = property; - this.newPropertyName = newPropertyName; + public SequenceExpression(List<StreamExpression> streamExpressions) { + super(SiddhiConstants.SEQUENCE, streamExpressions); } - @Override - public String toSiddhiEpl() { - return joinWithParenthesis(SiddhiConstants.WHITESPACE, - propertyExpression.toSiddhiEpl(), - SiddhiConstants.AS, - newPropertyName); + public SequenceExpression(List<StreamExpression> streamExpressions, WithinExpression withinExpression) { + super(SiddhiConstants.SEQUENCE, streamExpressions, withinExpression); } + } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/SiddhiTimeUnit.java similarity index 70% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/SiddhiTimeUnit.java index 6667e89..388c819 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/SiddhiTimeUnit.java @@ -15,7 +15,21 @@ * limitations under the License. * */ -package org.apache.streampipes.wrapper.siddhi.query; +package org.apache.streampipes.wrapper.siddhi.query.expression; -public class FromClause extends AbstractQueryGenerator { +public enum SiddhiTimeUnit { + + SECONDS("sec"), + MINUTES("minute"), + HOURS("hour"); + + String timeUnitString; + + SiddhiTimeUnit(String timeUnitString) { + this.timeUnitString = timeUnitString; + } + + public String toTimeUnitString() { + return this.timeUnitString; + } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/StreamExpression.java similarity index 50% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/StreamExpression.java index 1739a91..3178452 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/StreamExpression.java @@ -18,22 +18,41 @@ package org.apache.streampipes.wrapper.siddhi.query.expression; import org.apache.streampipes.wrapper.siddhi.constants.SiddhiConstants; +import org.apache.streampipes.wrapper.siddhi.query.expression.window.WindowExpression; -public class PropertyRenameExpression extends Expression { +public class StreamExpression extends Expression { - private PropertyExpression propertyExpression; - private String newPropertyName; + private String streamName; + private String streamAlias; + private WindowExpression windowExpression; - public PropertyRenameExpression(PropertyExpression property, String newPropertyName) { - this.propertyExpression = property; - this.newPropertyName = newPropertyName; + public StreamExpression() { + + } + + public StreamExpression(String streamName) { + this.streamName = streamName; + } + + public StreamExpression(String streamName, WindowExpression windowExpression) { + this.streamName = streamName; + this.windowExpression = windowExpression; + } + + public StreamExpression(String streamAlias, String streamName) { + this(streamName); + this.streamAlias = streamAlias; } @Override public String toSiddhiEpl() { - return joinWithParenthesis(SiddhiConstants.WHITESPACE, - propertyExpression.toSiddhiEpl(), - SiddhiConstants.AS, - newPropertyName); + String streamName = this.streamAlias == null ? this.streamName : + join(SiddhiConstants.EMPTY, this.streamAlias, SiddhiConstants.EQUALS, this.streamName); + + if (this.windowExpression != null) { + streamName = join(SiddhiConstants.EMPTY, streamName, this.windowExpression.toSiddhiEpl()); + } + + return streamName; } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/StreamFilterExpression.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/StreamFilterExpression.java new file mode 100644 index 0000000..27e0556 --- /dev/null +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/StreamFilterExpression.java @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.streampipes.wrapper.siddhi.query.expression; + +import org.apache.streampipes.wrapper.siddhi.constants.SiddhiConstants; +import org.apache.streampipes.wrapper.siddhi.query.expression.pattern.PatternCountExpression; + +import java.util.List; +import java.util.stream.Collectors; + +public class StreamFilterExpression extends StreamExpression { + + private StreamExpression streamExpression; + private List<Expression> filterExpressions; + private PatternCountExpression patternCountExpression; + + public StreamFilterExpression(StreamExpression streamExpression, + List<Expression> filterExpressions) { + this.streamExpression = streamExpression; + this.filterExpressions = filterExpressions; + } + + public StreamFilterExpression(StreamExpression streamExpression, + List<Expression> filterExpressions, + PatternCountExpression patternCountExpression) { + this(streamExpression, filterExpressions); + this.patternCountExpression = patternCountExpression; + } + + @Override + public String toSiddhiEpl() { + String filterExpressions = join(SiddhiConstants.COMMA, this.filterExpressions.stream().map(Expression::toSiddhiEpl).collect(Collectors.toList())); + + filterExpressions = join(SiddhiConstants.EMPTY, this.streamExpression.toSiddhiEpl(), joinWithSquareBracket(SiddhiConstants.EMPTY, filterExpressions)); + + if (this.patternCountExpression != null) { + filterExpressions = join(SiddhiConstants.WHITESPACE, filterExpressions, this.patternCountExpression.toSiddhiEpl()); + } + + return filterExpressions; + } +} diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/WithinExpression.java similarity index 67% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/WithinExpression.java index 1739a91..6cf2691 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/WithinExpression.java @@ -19,21 +19,22 @@ package org.apache.streampipes.wrapper.siddhi.query.expression; import org.apache.streampipes.wrapper.siddhi.constants.SiddhiConstants; -public class PropertyRenameExpression extends Expression { +public class WithinExpression extends Expression { - private PropertyExpression propertyExpression; - private String newPropertyName; + private SiddhiTimeUnit timeUnit; + private Integer duration; - public PropertyRenameExpression(PropertyExpression property, String newPropertyName) { - this.propertyExpression = property; - this.newPropertyName = newPropertyName; + public WithinExpression(Integer duration, SiddhiTimeUnit timeUnit) { + this.duration = duration; + this.timeUnit = timeUnit; } @Override public String toSiddhiEpl() { - return joinWithParenthesis(SiddhiConstants.WHITESPACE, - propertyExpression.toSiddhiEpl(), - SiddhiConstants.AS, - newPropertyName); + return join(SiddhiConstants.WHITESPACE, + SiddhiConstants.WITHIN, + String.valueOf(this.duration), + this.timeUnit.toTimeUnitString()); } + } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/list/CollectListExpression.java similarity index 64% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/list/CollectListExpression.java index 1739a91..51c7521 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/list/CollectListExpression.java @@ -15,25 +15,26 @@ * limitations under the License. * */ -package org.apache.streampipes.wrapper.siddhi.query.expression; +package org.apache.streampipes.wrapper.siddhi.query.expression.list; import org.apache.streampipes.wrapper.siddhi.constants.SiddhiConstants; +import org.apache.streampipes.wrapper.siddhi.query.expression.PropertyExpression; +import org.apache.streampipes.wrapper.siddhi.query.expression.PropertyExpressionBase; -public class PropertyRenameExpression extends Expression { +public class CollectListExpression extends PropertyExpressionBase { private PropertyExpression propertyExpression; - private String newPropertyName; - public PropertyRenameExpression(PropertyExpression property, String newPropertyName) { - this.propertyExpression = property; - this.newPropertyName = newPropertyName; + public CollectListExpression(PropertyExpression propertyExp) { + this.propertyExpression = propertyExp; } @Override public String toSiddhiEpl() { - return joinWithParenthesis(SiddhiConstants.WHITESPACE, + return join(SiddhiConstants.EMPTY, + "list:collect", + SiddhiConstants.PARENTHESIS_OPEN, propertyExpression.toSiddhiEpl(), - SiddhiConstants.AS, - newPropertyName); + SiddhiConstants.PARENTHESIS_CLOSE); } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/list/ContainsListExpression.java similarity index 53% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/list/ContainsListExpression.java index 1739a91..840f8c9 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/list/ContainsListExpression.java @@ -15,25 +15,38 @@ * limitations under the License. * */ -package org.apache.streampipes.wrapper.siddhi.query.expression; +package org.apache.streampipes.wrapper.siddhi.query.expression.list; import org.apache.streampipes.wrapper.siddhi.constants.SiddhiConstants; +import org.apache.streampipes.wrapper.siddhi.query.expression.PropertyExpression; +import org.apache.streampipes.wrapper.siddhi.query.expression.PropertyExpressionBase; -public class PropertyRenameExpression extends Expression { +public class ContainsListExpression extends PropertyExpressionBase { + private Object value; private PropertyExpression propertyExpression; - private String newPropertyName; - public PropertyRenameExpression(PropertyExpression property, String newPropertyName) { - this.propertyExpression = property; - this.newPropertyName = newPropertyName; + public ContainsListExpression(PropertyExpression propertyExp, Object value) { + this.propertyExpression = propertyExp; + this.value = value; } @Override public String toSiddhiEpl() { - return joinWithParenthesis(SiddhiConstants.WHITESPACE, + return join(SiddhiConstants.EMPTY, + "list:contains", + SiddhiConstants.PARENTHESIS_OPEN, propertyExpression.toSiddhiEpl(), - SiddhiConstants.AS, - newPropertyName); + SiddhiConstants.COMMA, + prepare(value), + SiddhiConstants.PARENTHESIS_CLOSE); + } + + public String prepare(Object value) { + if (value instanceof String) { + return join(SiddhiConstants.EMPTY, "'", value.toString(), "'"); + } else { + return String.valueOf(value); + } } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/math/MathAddExpression.java similarity index 70% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/math/MathAddExpression.java index 6667e89..d7b6e91 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/math/MathAddExpression.java @@ -15,7 +15,13 @@ * limitations under the License. * */ -package org.apache.streampipes.wrapper.siddhi.query; +package org.apache.streampipes.wrapper.siddhi.query.expression.math; -public class FromClause extends AbstractQueryGenerator { +import org.apache.streampipes.wrapper.siddhi.query.expression.PropertyExpressionBase; + +public class MathAddExpression extends MathExpression { + + public MathAddExpression(PropertyExpressionBase op1, PropertyExpressionBase op2) { + super(MathOperator.ADD, op1, op2); + } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/math/MathDivideExpression.java similarity index 69% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/math/MathDivideExpression.java index 6667e89..01df696 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/math/MathDivideExpression.java @@ -15,7 +15,13 @@ * limitations under the License. * */ -package org.apache.streampipes.wrapper.siddhi.query; +package org.apache.streampipes.wrapper.siddhi.query.expression.math; -public class FromClause extends AbstractQueryGenerator { +import org.apache.streampipes.wrapper.siddhi.query.expression.PropertyExpressionBase; + +public class MathDivideExpression extends MathExpression { + + public MathDivideExpression(PropertyExpressionBase op1, PropertyExpressionBase op2) { + super(MathOperator.DIVIDE, op1, op2); + } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/math/MathExpression.java similarity index 60% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/math/MathExpression.java index 1739a91..7a2b5cd 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/math/MathExpression.java @@ -15,25 +15,30 @@ * limitations under the License. * */ -package org.apache.streampipes.wrapper.siddhi.query.expression; +package org.apache.streampipes.wrapper.siddhi.query.expression.math; import org.apache.streampipes.wrapper.siddhi.constants.SiddhiConstants; +import org.apache.streampipes.wrapper.siddhi.query.expression.PropertyExpressionBase; -public class PropertyRenameExpression extends Expression { +public class MathExpression extends PropertyExpressionBase { - private PropertyExpression propertyExpression; - private String newPropertyName; + private MathOperator operator; + private PropertyExpressionBase op1; + private PropertyExpressionBase op2; - public PropertyRenameExpression(PropertyExpression property, String newPropertyName) { - this.propertyExpression = property; - this.newPropertyName = newPropertyName; + public MathExpression(MathOperator operator, + PropertyExpressionBase op1, + PropertyExpressionBase op2) { + this.operator = operator; + this.op1 = op1; + this.op2 = op2; } @Override public String toSiddhiEpl() { return joinWithParenthesis(SiddhiConstants.WHITESPACE, - propertyExpression.toSiddhiEpl(), - SiddhiConstants.AS, - newPropertyName); + op1.toSiddhiEpl(), + operator.toOperatorString(), + op2.toSiddhiEpl()); } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/math/MathMultiplyExpression.java similarity index 69% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/math/MathMultiplyExpression.java index 6667e89..0e61f5c 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/math/MathMultiplyExpression.java @@ -15,7 +15,13 @@ * limitations under the License. * */ -package org.apache.streampipes.wrapper.siddhi.query; +package org.apache.streampipes.wrapper.siddhi.query.expression.math; -public class FromClause extends AbstractQueryGenerator { +import org.apache.streampipes.wrapper.siddhi.query.expression.PropertyExpressionBase; + +public class MathMultiplyExpression extends MathExpression { + + public MathMultiplyExpression(PropertyExpressionBase op1, PropertyExpressionBase op2) { + super(MathOperator.MULTIPLY, op1, op2); + } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/math/MathOperator.java similarity index 71% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/math/MathOperator.java index 6667e89..3547c6b 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/math/MathOperator.java @@ -15,7 +15,22 @@ * limitations under the License. * */ -package org.apache.streampipes.wrapper.siddhi.query; +package org.apache.streampipes.wrapper.siddhi.query.expression.math; -public class FromClause extends AbstractQueryGenerator { +public enum MathOperator { + + ADD("+"), + SUBTRACT("-"), + MULTIPLY("*"), + DIVIDE("/"); + + private String operator; + + MathOperator(String operator) { + this.operator = operator; + } + + public String toOperatorString() { + return operator; + } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/math/MathSubtractExpression.java similarity index 69% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/math/MathSubtractExpression.java index 6667e89..42022e0 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/math/MathSubtractExpression.java @@ -15,7 +15,13 @@ * limitations under the License. * */ -package org.apache.streampipes.wrapper.siddhi.query; +package org.apache.streampipes.wrapper.siddhi.query.expression.math; -public class FromClause extends AbstractQueryGenerator { +import org.apache.streampipes.wrapper.siddhi.query.expression.PropertyExpressionBase; + +public class MathSubtractExpression extends MathExpression { + + public MathSubtractExpression(PropertyExpressionBase op1, PropertyExpressionBase op2) { + super(MathOperator.SUBTRACT, op1, op2); + } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/pattern/EveryExpression.java similarity index 63% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/pattern/EveryExpression.java index 1739a91..48accbb 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/pattern/EveryExpression.java @@ -15,25 +15,21 @@ * limitations under the License. * */ -package org.apache.streampipes.wrapper.siddhi.query.expression; +package org.apache.streampipes.wrapper.siddhi.query.expression.pattern; import org.apache.streampipes.wrapper.siddhi.constants.SiddhiConstants; +import org.apache.streampipes.wrapper.siddhi.query.expression.StreamExpression; -public class PropertyRenameExpression extends Expression { +public class EveryExpression extends StreamExpression { - private PropertyExpression propertyExpression; - private String newPropertyName; + private StreamExpression streamExpression; - public PropertyRenameExpression(PropertyExpression property, String newPropertyName) { - this.propertyExpression = property; - this.newPropertyName = newPropertyName; + public EveryExpression(StreamExpression streamExpression) { + this.streamExpression = streamExpression; } @Override public String toSiddhiEpl() { - return joinWithParenthesis(SiddhiConstants.WHITESPACE, - propertyExpression.toSiddhiEpl(), - SiddhiConstants.AS, - newPropertyName); + return joinWithParenthesis(SiddhiConstants.WHITESPACE, SiddhiConstants.EVERY, streamExpression.toSiddhiEpl()); } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/pattern/PatternCountExpression.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/pattern/PatternCountExpression.java new file mode 100644 index 0000000..b6aebb0 --- /dev/null +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/pattern/PatternCountExpression.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.streampipes.wrapper.siddhi.query.expression.pattern; + +import org.apache.streampipes.wrapper.siddhi.constants.SiddhiConstants; +import org.apache.streampipes.wrapper.siddhi.query.expression.Expression; + +public class PatternCountExpression extends Expression { + + private String countString; + + public PatternCountExpression(Integer count, PatternCountOperator operator) { + String countValue = ""; + if (operator == PatternCountOperator.EXACTLY_N) { + countValue = String.valueOf(count); + } else if (operator == PatternCountOperator.MIN_N) { + countValue = count + SiddhiConstants.COLON; + } else if (operator == PatternCountOperator.MAX_N) { + countValue = SiddhiConstants.COLON + count; + } + + this.countString = SiddhiConstants.ANGLE_BRACKET_OPEN + + countValue + + SiddhiConstants.ANGLE_BRACKET_CLOSE; + } + + public PatternCountExpression(Integer minCount, Integer maxCount) { + this.countString = SiddhiConstants.ANGLE_BRACKET_OPEN + + minCount + + SiddhiConstants.COLON + + maxCount + + SiddhiConstants.ANGLE_BRACKET_CLOSE; + } + + @Override + public String toSiddhiEpl() { + return this.countString; + } +} diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/pattern/PatternCountOperator.java similarity index 85% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/pattern/PatternCountOperator.java index 6667e89..60d2d04 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/pattern/PatternCountOperator.java @@ -15,7 +15,12 @@ * limitations under the License. * */ -package org.apache.streampipes.wrapper.siddhi.query; +package org.apache.streampipes.wrapper.siddhi.query.expression.pattern; + +public enum PatternCountOperator { + + MIN_N, + MAX_N, + EXACTLY_N; -public class FromClause extends AbstractQueryGenerator { } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/pattern/PatternExpression.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/pattern/PatternExpression.java new file mode 100644 index 0000000..9993a64 --- /dev/null +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/pattern/PatternExpression.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.streampipes.wrapper.siddhi.query.expression.pattern; + +import org.apache.streampipes.wrapper.siddhi.constants.SiddhiConstants; +import org.apache.streampipes.wrapper.siddhi.query.expression.Expression; +import org.apache.streampipes.wrapper.siddhi.query.expression.StreamExpression; +import org.apache.streampipes.wrapper.siddhi.query.expression.WithinExpression; + +import java.util.List; +import java.util.stream.Collectors; + +public abstract class PatternExpression extends Expression { + + private String pattern; + private List<StreamExpression> streamExpressions; + private WithinExpression withinExpression; + + public PatternExpression(String pattern, List<StreamExpression> streamExpressions) { + this.pattern = pattern; + this.streamExpressions = streamExpressions; + } + + public PatternExpression(String pattern, + List<StreamExpression> streamExpressions, + WithinExpression withinExpression) { + this(pattern, streamExpressions); + this.withinExpression = withinExpression; + } + + @Override + public String toSiddhiEpl() { + String patternExpression = joinWithParenthesis(SiddhiConstants.EMPTY, join(pattern, streamExpressions + .stream() + .map(StreamExpression::toSiddhiEpl) + .collect(Collectors.toList()))); + + if (this.withinExpression != null) { + patternExpression = join(SiddhiConstants.EMPTY, patternExpression, this.withinExpression.toSiddhiEpl()); + } + + return patternExpression; + + } +} diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/window/BatchWindowExpression.java similarity index 64% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/window/BatchWindowExpression.java index 6667e89..feb4c30 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/FromClause.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/window/BatchWindowExpression.java @@ -15,7 +15,18 @@ * limitations under the License. * */ -package org.apache.streampipes.wrapper.siddhi.query; +package org.apache.streampipes.wrapper.siddhi.query.expression.window; -public class FromClause extends AbstractQueryGenerator { +import org.apache.streampipes.wrapper.siddhi.constants.SiddhiConstants; + +public class BatchWindowExpression extends WindowExpression { + + public BatchWindowExpression(Integer batchSize) { + super(batchSize); + } + + @Override + public String toSiddhiEpl() { + return join(SiddhiConstants.EMPTY, windowExpression(), "length", windowValue(String.valueOf(windowValue))); + } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/window/TimeWindowExpression.java similarity index 62% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/window/TimeWindowExpression.java index 1739a91..198b366 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/PropertyRenameExpression.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/window/TimeWindowExpression.java @@ -15,25 +15,24 @@ * limitations under the License. * */ -package org.apache.streampipes.wrapper.siddhi.query.expression; +package org.apache.streampipes.wrapper.siddhi.query.expression.window; import org.apache.streampipes.wrapper.siddhi.constants.SiddhiConstants; +import org.apache.streampipes.wrapper.siddhi.query.expression.SiddhiTimeUnit; -public class PropertyRenameExpression extends Expression { +public class TimeWindowExpression extends WindowExpression { - private PropertyExpression propertyExpression; - private String newPropertyName; + private SiddhiTimeUnit timeUnit; - public PropertyRenameExpression(PropertyExpression property, String newPropertyName) { - this.propertyExpression = property; - this.newPropertyName = newPropertyName; + public TimeWindowExpression(Integer timeWindowSize, SiddhiTimeUnit timeUnit) { + super(timeWindowSize); + this.timeUnit = timeUnit; } @Override public String toSiddhiEpl() { - return joinWithParenthesis(SiddhiConstants.WHITESPACE, - propertyExpression.toSiddhiEpl(), - SiddhiConstants.AS, - newPropertyName); + return join(SiddhiConstants.EMPTY, + windowExpression(), + windowValue(windowValue + SiddhiConstants.WHITESPACE + timeUnit.toTimeUnitString())); } } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/Expression.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/window/WindowExpression.java similarity index 61% copy from streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/Expression.java copy to streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/window/WindowExpression.java index df93f57..32edbae 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/Expression.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/query/expression/window/WindowExpression.java @@ -15,33 +15,27 @@ * limitations under the License. * */ -package org.apache.streampipes.wrapper.siddhi.query.expression; +package org.apache.streampipes.wrapper.siddhi.query.expression.window; import org.apache.streampipes.wrapper.siddhi.constants.SiddhiConstants; +import org.apache.streampipes.wrapper.siddhi.query.expression.Expression; -import java.util.Arrays; -import java.util.List; -import java.util.StringJoiner; +public abstract class WindowExpression extends Expression { -public abstract class Expression { + protected Integer windowValue; - protected String join(String delimiter, String... substrings) { - return join(delimiter, Arrays.asList(substrings)); + public WindowExpression(Integer windowValue) { + this.windowValue = windowValue; } - protected String joinWithParenthesis(String delimiter, String... substrings) { + protected String windowExpression() { + return join(SiddhiConstants.EMPTY, SiddhiConstants.HASH, "window", SiddhiConstants.DOT); + } + + protected String windowValue(String value) { return join(SiddhiConstants.EMPTY, SiddhiConstants.PARENTHESIS_OPEN, - join(delimiter, substrings), + value, SiddhiConstants.PARENTHESIS_CLOSE); } - - protected String join(String delimiter, List<String> substrings) { - StringJoiner joiner = new StringJoiner(delimiter); - substrings.forEach(joiner::add); - - return joiner.toString(); - } - - public abstract String toSiddhiEpl(); } diff --git a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/utils/SiddhiUtils.java b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/utils/SiddhiUtils.java index fb98d38..6607fc1 100644 --- a/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/utils/SiddhiUtils.java +++ b/streampipes-wrapper-siddhi/src/main/java/org/apache/streampipes/wrapper/siddhi/utils/SiddhiUtils.java @@ -81,4 +81,5 @@ public class SiddhiUtils { public static String prepareProperty(String propertyName) { return propertyName.replaceAll("::", ""); } + }
