Search in sources :

Example 1 with WindowDeclarationDescr

use of org.drools.compiler.lang.descr.WindowDeclarationDescr in project drools by kiegroup.

the class KnowledgeBuilderImpl method processWindowDeclarations.

private void processWindowDeclarations(PackageRegistry pkgRegistry, PackageDescr packageDescr) {
    for (WindowDeclarationDescr wd : packageDescr.getWindowDeclarations()) {
        WindowDeclaration window = new WindowDeclaration(wd.getName(), packageDescr.getName());
        // TODO: process annotations
        // process pattern
        InternalKnowledgePackage pkg = pkgRegistry.getPackage();
        DialectCompiletimeRegistry ctr = pkgRegistry.getDialectCompiletimeRegistry();
        RuleDescr dummy = new RuleDescr(wd.getName() + " Window Declaration");
        dummy.setResource(packageDescr.getResource());
        dummy.addAttribute(new AttributeDescr("dialect", "java"));
        RuleBuildContext context = new RuleBuildContext(this, dummy, ctr, pkg, ctr.getDialect(pkgRegistry.getDialect()));
        final RuleConditionBuilder builder = (RuleConditionBuilder) context.getDialect().getBuilder(wd.getPattern().getClass());
        if (builder != null) {
            final Pattern pattern = (Pattern) builder.build(context, wd.getPattern(), null);
            if (pattern.getXpathConstraint() != null) {
                context.addError(new DescrBuildError(wd, context.getParentDescr(), null, "OOpath expression " + pattern.getXpathConstraint() + " not allowed in window declaration\n"));
            }
            window.setPattern(pattern);
        } else {
            throw new RuntimeException("BUG: assembler not found for descriptor class " + wd.getPattern().getClass());
        }
        if (!context.getErrors().isEmpty()) {
            for (DroolsError error : context.getErrors()) {
                addBuilderResult(error);
            }
        } else {
            pkgRegistry.getPackage().addWindowDeclaration(window);
        }
    }
}
Also used : Pattern(org.drools.core.rule.Pattern) DroolsError(org.drools.compiler.compiler.DroolsError) DescrBuildError(org.drools.compiler.compiler.DescrBuildError) RuleBuildContext(org.drools.compiler.rule.builder.RuleBuildContext) DialectCompiletimeRegistry(org.drools.compiler.compiler.DialectCompiletimeRegistry) WindowDeclaration(org.drools.core.rule.WindowDeclaration) RuleDescr(org.drools.compiler.lang.descr.RuleDescr) RuleConditionBuilder(org.drools.compiler.rule.builder.RuleConditionBuilder) WindowDeclarationDescr(org.drools.compiler.lang.descr.WindowDeclarationDescr) AttributeDescr(org.drools.compiler.lang.descr.AttributeDescr) InternalKnowledgePackage(org.drools.core.definitions.InternalKnowledgePackage)

Example 2 with WindowDeclarationDescr

use of org.drools.compiler.lang.descr.WindowDeclarationDescr in project drools by kiegroup.

the class RuleParserTest method testWindowDeclaration.

@Test
public void testWindowDeclaration() throws Exception {
    final String text = "package org.drools\n" + "declare window Ticks\n" + "    @doc(\"last 10 stock ticks\")\n" + "    $s : StockTick( source == \"NYSE\" )\n" + "        over window:length( 10, $s.symbol )\n" + "        from entry-point stStream\n" + "end";
    PackageDescr pkg = (PackageDescr) parse("compilationUnit", text);
    assertEquals("org.drools", pkg.getName());
    assertEquals(1, pkg.getWindowDeclarations().size());
    WindowDeclarationDescr wdd = pkg.getWindowDeclarations().iterator().next();
    assertEquals("Ticks", wdd.getName());
    assertEquals(1, wdd.getAnnotations().size());
    assertEquals("\"last 10 stock ticks\"", wdd.getAnnotation("doc").getValue());
    PatternDescr pd = wdd.getPattern();
    assertNotNull(pd);
    assertEquals("$s", pd.getIdentifier());
    assertEquals("StockTick", pd.getObjectType());
    assertEquals("stStream", pd.getSource().getText());
    assertEquals(1, pd.getBehaviors().size());
    BehaviorDescr bd = pd.getBehaviors().get(0);
    assertEquals("window", bd.getType());
    assertEquals("length", bd.getSubType());
    assertEquals(2, bd.getParameters().size());
    assertEquals("10", bd.getParameters().get(0));
    assertEquals("$s.symbol", bd.getParameters().get(1));
}
Also used : PatternDescr(org.drools.compiler.lang.descr.PatternDescr) BehaviorDescr(org.drools.compiler.lang.descr.BehaviorDescr) PackageDescr(org.drools.compiler.lang.descr.PackageDescr) WindowDeclarationDescr(org.drools.compiler.lang.descr.WindowDeclarationDescr) Test(org.junit.Test)

Aggregations

WindowDeclarationDescr (org.drools.compiler.lang.descr.WindowDeclarationDescr)2 DescrBuildError (org.drools.compiler.compiler.DescrBuildError)1 DialectCompiletimeRegistry (org.drools.compiler.compiler.DialectCompiletimeRegistry)1 DroolsError (org.drools.compiler.compiler.DroolsError)1 AttributeDescr (org.drools.compiler.lang.descr.AttributeDescr)1 BehaviorDescr (org.drools.compiler.lang.descr.BehaviorDescr)1 PackageDescr (org.drools.compiler.lang.descr.PackageDescr)1 PatternDescr (org.drools.compiler.lang.descr.PatternDescr)1 RuleDescr (org.drools.compiler.lang.descr.RuleDescr)1 RuleBuildContext (org.drools.compiler.rule.builder.RuleBuildContext)1 RuleConditionBuilder (org.drools.compiler.rule.builder.RuleConditionBuilder)1 InternalKnowledgePackage (org.drools.core.definitions.InternalKnowledgePackage)1 Pattern (org.drools.core.rule.Pattern)1 WindowDeclaration (org.drools.core.rule.WindowDeclaration)1 Test (org.junit.Test)1