use of org.drools.compiler.lang.descr.BehaviorDescr in project drools by kiegroup.
the class RuleParserTest method testSlidingWindow.
@Test
public void testSlidingWindow() throws Exception {
final String text = "rule X when StockTick( symbol==\"ACME\") over window:length(10) then end";
PackageDescr pkg = (PackageDescr) parse("compilationUnit", text);
assertFalse(parser.getErrors().toString(), parser.hasErrors());
RuleDescr rule = pkg.getRules().get(0);
PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
assertEquals(1, pattern.getDescrs().size());
ExprConstraintDescr fcd = (ExprConstraintDescr) pattern.getDescrs().get(0);
assertEquals("symbol==\"ACME\"", fcd.getExpression());
List<BehaviorDescr> behaviors = pattern.getBehaviors();
assertNotNull(behaviors);
assertEquals(1, behaviors.size());
BehaviorDescr descr = behaviors.get(0);
assertEquals("window", descr.getType());
assertEquals("length", descr.getSubType());
assertEquals("10", descr.getParameters().get(0));
}
use of org.drools.compiler.lang.descr.BehaviorDescr in project drools by kiegroup.
the class PatternBuilder method processBehaviors.
private void processBehaviors(RuleBuildContext context, PatternDescr patternDescr, Pattern pattern) {
for (BehaviorDescr behaviorDescr : patternDescr.getBehaviors()) {
if (pattern.getObjectType().isEvent()) {
Behavior window = createWindow(behaviorDescr);
if (window != null) {
pattern.addBehavior(window);
context.setNeedStreamMode();
} else {
registerDescrBuildError(context, patternDescr, "Unknown window type '" + behaviorDescr.getSubType() + "'");
}
} else {
// Some behaviors can only be assigned to patterns declared as events
registerDescrBuildError(context, patternDescr, "A Sliding Window can only be assigned to types declared with @role( event ). The type '" + pattern.getObjectType() + "' in '" + context.getRule().getName() + "' is not declared as an Event.");
}
}
}
use of org.drools.compiler.lang.descr.BehaviorDescr in project drools by kiegroup.
the class RuleModelDRLPersistenceImpl method getFactPattern.
private FactPattern getFactPattern(final RuleModel m, final PatternDescr pattern, final boolean isJavaDialect, final Map<String, String> boundParams, final PackageDataModelOracle dmo) {
String type = pattern.getObjectType();
FactPattern factPattern = new FactPattern(getSimpleFactType(type, dmo));
if (pattern.getIdentifier() != null) {
String identifier = pattern.getIdentifier();
factPattern.setBoundName(identifier);
boundParams.put(identifier, type);
}
parseConstraint(m, factPattern, pattern.getConstraint(), isJavaDialect, boundParams, dmo);
for (BehaviorDescr behavior : pattern.getBehaviors()) {
if (behavior.getText().equals("window")) {
CEPWindow window = new CEPWindow();
window.setOperator("over window:" + behavior.getSubType());
window.setParameter("org.drools.workbench.models.commons.backend.rule.operatorParameterGenerator", "org.drools.workbench.models.commons.backend.rule.CEPWindowOperatorParameterDRLBuilder");
List<String> params = behavior.getParameters();
if (params != null) {
int i = 1;
for (String param : params) {
window.setParameter("" + i++, param);
}
}
factPattern.setWindow(window);
}
}
return factPattern;
}
use of org.drools.compiler.lang.descr.BehaviorDescr in project drools by kiegroup.
the class KnowledgeBuilderTest method testTimeWindowBehavior.
@Test
public void testTimeWindowBehavior() throws Exception {
final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl();
final PackageDescr packageDescr = new PackageDescr("p1");
final TypeDeclarationDescr typeDeclDescr = new TypeDeclarationDescr(StockTick.class.getName());
typeDeclDescr.addAnnotation("role", "event");
packageDescr.addTypeDeclaration(typeDeclDescr);
final RuleDescr ruleDescr = new RuleDescr("rule-1");
packageDescr.addRule(ruleDescr);
final AndDescr lhs = new AndDescr();
ruleDescr.setLhs(lhs);
final PatternDescr patternDescr = new PatternDescr(StockTick.class.getName(), "$tick");
final BehaviorDescr windowDescr = new BehaviorDescr("window");
windowDescr.setSubType("time");
windowDescr.setParameters(Collections.singletonList("60000"));
patternDescr.addBehavior(windowDescr);
lhs.addDescr(patternDescr);
ruleDescr.setConsequence("System.out.println( $tick );");
builder.addPackage(packageDescr);
assertLength(0, builder.getErrors().getErrors());
InternalKnowledgePackage pkg = builder.getPackageRegistry().get("p1").getPackage();
final RuleImpl rule = pkg.getRule("rule-1");
assertNotNull(rule);
final Pattern pattern = (Pattern) rule.getLhs().getChildren().get(0);
assertEquals(StockTick.class.getName(), ((ClassObjectType) pattern.getObjectType()).getClassType().getName());
final Behavior window = pattern.getBehaviors().get(0);
assertEquals(Behavior.BehaviorType.TIME_WINDOW, window.getType());
assertEquals(60000, ((SlidingTimeWindow) window).getSize());
}
use of org.drools.compiler.lang.descr.BehaviorDescr in project drools by kiegroup.
the class ModelGenerator method addVariable.
private static void addVariable(KnowledgeBuilderImpl kbuilder, BlockStmt ruleBlock, DeclarationSpec decl) {
if (decl.getDeclarationClass() == null) {
kbuilder.addBuilderResult(new UnknownDeclarationError(decl.getBindingId()));
return;
}
Type declType = classToReferenceType(decl.getDeclarationClass());
ClassOrInterfaceType varType = JavaParser.parseClassOrInterfaceType(Variable.class.getCanonicalName());
varType.setTypeArguments(declType);
VariableDeclarationExpr var_ = new VariableDeclarationExpr(varType, toVar(decl.getBindingId()), Modifier.FINAL);
MethodCallExpr declarationOfCall = new MethodCallExpr(null, DECLARATION_OF_CALL);
declarationOfCall.addArgument(new ClassExpr(decl.getType()));
declarationOfCall.addArgument(new StringLiteralExpr(decl.getVariableName().orElse(decl.getBindingId())));
decl.getDeclarationSource().ifPresent(declarationOfCall::addArgument);
decl.getEntryPoint().ifPresent(ep -> {
MethodCallExpr entryPointCall = new MethodCallExpr(null, "entryPoint");
entryPointCall.addArgument(new StringLiteralExpr(ep));
declarationOfCall.addArgument(entryPointCall);
});
for (BehaviorDescr behaviorDescr : decl.getBehaviors()) {
MethodCallExpr windowCall = new MethodCallExpr(null, "window");
if (Behavior.BehaviorType.TIME_WINDOW.matches(behaviorDescr.getSubType())) {
windowCall.addArgument("Window.Type.TIME");
windowCall.addArgument("" + TimeUtils.parseTimeString(behaviorDescr.getParameters().get(0)));
}
if (Behavior.BehaviorType.LENGTH_WINDOW.matches(behaviorDescr.getSubType())) {
windowCall.addArgument("Window.Type.LENGTH");
windowCall.addArgument("" + Integer.valueOf(behaviorDescr.getParameters().get(0)));
}
declarationOfCall.addArgument(windowCall);
}
AssignExpr var_assign = new AssignExpr(var_, declarationOfCall, AssignExpr.Operator.ASSIGN);
ruleBlock.addStatement(var_assign);
}
Aggregations