Search in sources :

Example 1 with Foo

use of org.drools.compiler.Foo in project drools by kiegroup.

the class TimerAndCalendarTest method testIntervalTimerExpressionWithOr.

@Test(timeout = 10000)
public void testIntervalTimerExpressionWithOr() throws Exception {
    String text = "package org.kie.test\n" + "global java.util.List list\n" + "import " + FactA.class.getCanonicalName() + "\n" + "import " + Foo.class.getCanonicalName() + "\n" + "import " + Pet.class.getCanonicalName() + "\n" + "rule r1 timer (expr: f1.field2, f1.field2; repeat-limit=3)\n" + "when\n" + "    foo: Foo()\n" + "    ( Pet()  and f1 : FactA( field1 == 'f1') ) or \n" + "    f1 : FactA(field1 == 'f2') \n" + "then\n" + "    list.add( f1 );\n" + "    foo.setId( 'xxx' );\n" + "end\n" + "\n";
    KieSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
    conf.setOption(ClockTypeOption.get("pseudo"));
    KieBase kbase = loadKnowledgeBaseFromString(text);
    KieSession ksession = createKnowledgeSession(kbase, conf);
    PseudoClockScheduler timeService = (PseudoClockScheduler) ksession.<SessionClock>getSessionClock();
    timeService.advanceTime(new Date().getTime(), TimeUnit.MILLISECONDS);
    List list = new ArrayList();
    ksession.setGlobal("list", list);
    ksession.insert(new Foo(null, null));
    ksession.insert(new Pet(null));
    FactA fact1 = new FactA();
    fact1.setField1("f1");
    fact1.setField2(250);
    FactA fact3 = new FactA();
    fact3.setField1("f2");
    fact3.setField2(1000);
    ksession.insert(fact1);
    ksession.insert(fact3);
    ksession.fireAllRules();
    assertEquals(0, list.size());
    timeService.advanceTime(300, TimeUnit.MILLISECONDS);
    ksession.fireAllRules();
    assertEquals(1, list.size());
    assertEquals(fact1, list.get(0));
    timeService.advanceTime(300, TimeUnit.MILLISECONDS);
    ksession.fireAllRules();
    assertEquals(2, list.size());
    assertEquals(fact1, list.get(1));
    timeService.advanceTime(300, TimeUnit.MILLISECONDS);
    ksession.fireAllRules();
    // did not change, repeat-limit kicked in
    assertEquals(2, list.size());
    timeService.advanceTime(300, TimeUnit.MILLISECONDS);
    ksession.fireAllRules();
    assertEquals(3, list.size());
    assertEquals(fact3, list.get(2));
    timeService.advanceTime(1000, TimeUnit.MILLISECONDS);
    ksession.fireAllRules();
    assertEquals(4, list.size());
    assertEquals(fact3, list.get(3));
    timeService.advanceTime(1000, TimeUnit.MILLISECONDS);
    ksession.fireAllRules();
    // did not change, repeat-limit kicked in
    assertEquals(4, list.size());
}
Also used : KieBase(org.kie.api.KieBase) Foo(org.drools.compiler.Foo) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) ArrayList(java.util.ArrayList) Arrays.asList(java.util.Arrays.asList) List(java.util.List) FactA(org.drools.compiler.FactA) KieSessionConfiguration(org.kie.api.runtime.KieSessionConfiguration) PseudoClockScheduler(org.drools.core.time.impl.PseudoClockScheduler) Date(java.util.Date) Pet(org.drools.compiler.Pet) Test(org.junit.Test)

Example 2 with Foo

use of org.drools.compiler.Foo in project drools by kiegroup.

the class JBRULESTest method testJBRULES3323.

@Test
public void testJBRULES3323() throws Exception {
    // adding rules. it is important to add both since they reciprocate
    final StringBuilder rule = new StringBuilder();
    rule.append("package de.orbitx.accumulatetesettest;\n");
    rule.append("import java.util.Set;\n");
    rule.append("import java.util.HashSet;\n");
    rule.append("import org.drools.compiler.Foo;\n");
    rule.append("import org.drools.compiler.Bar;\n");
    rule.append("rule \"Sub optimal foo parallelism - this rule is causing NPE upon reverse\"\n");
    rule.append("when\n");
    rule.append("$foo : Foo($leftId : id, $leftBar : bar != null)\n");
    rule.append("$fooSet : Set()\n");
    rule.append("from accumulate ( Foo(id > $leftId, bar != null && != $leftBar, $bar : bar),\n");
    rule.append("collectSet( $bar ) )\n");
    rule.append("then\n");
    rule.append("//System.out.println(\"ok\");\n");
    rule.append("end\n");
    // building stuff
    final KieBase kbase = loadKnowledgeBaseFromString(rule.toString());
    final KieSession ksession = createKnowledgeSession(kbase);
    // adding test data
    final Bar[] barList = new Bar[3];
    for (int i = 0; i < barList.length; i++) {
        barList[i] = new Bar(String.valueOf(i));
    }
    final Foo[] fooList = new Foo[4];
    for (int i = 0; i < fooList.length; i++) {
        fooList[i] = new Foo(String.valueOf(i), i == 3 ? barList[2] : barList[i]);
    }
    for (final Foo foo : fooList) {
        ksession.insert(foo);
    }
    // the NPE is caused by exactly this sequence. of course there are more sequences but this
    // appears to be the most short one
    final int[] magicFoos = new int[] { 3, 3, 1, 1, 0, 0, 2, 2, 1, 1, 0, 0, 3, 3, 2, 2, 3, 1, 1 };
    final int[] magicBars = new int[] { 1, 2, 0, 1, 1, 0, 1, 2, 2, 1, 2, 0, 0, 2, 0, 2, 0, 0, 1 };
    // upon final rule firing an NPE will be thrown in org.drools.core.rule.Accumulate
    for (int i = 0; i < magicFoos.length; i++) {
        final Foo tehFoo = fooList[magicFoos[i]];
        final FactHandle fooFactHandle = ksession.getFactHandle(tehFoo);
        tehFoo.setBar(barList[magicBars[i]]);
        ksession.update(fooFactHandle, tehFoo);
        ksession.fireAllRules();
    }
    ksession.dispose();
}
Also used : Bar(org.drools.compiler.Bar) FactHandle(org.kie.api.runtime.rule.FactHandle) KieBase(org.kie.api.KieBase) Foo(org.drools.compiler.Foo) KieSession(org.kie.api.runtime.KieSession) Test(org.junit.Test)

Example 3 with Foo

use of org.drools.compiler.Foo in project drools by kiegroup.

the class ExecutionFlowControlTest method testSalienceExpressionWithOr.

@Test
public void testSalienceExpressionWithOr() throws Exception {
    String text = "package org.kie.test\n" + "global java.util.List list\n" + "import " + FactA.class.getCanonicalName() + "\n" + "import " + Foo.class.getCanonicalName() + "\n" + "import " + Pet.class.getCanonicalName() + "\n" + "rule r1 salience (f1.field2)\n" + "when\n" + "    foo: Foo()\n" + "    ( Pet()  and f1 : FactA( field1 == 'f1') ) or \n" + "    f1 : FactA(field1 == 'f2') \n" + "then\n" + "    list.add( f1 );\n" + "    foo.setId( 'xxx' );\n" + "end\n" + "\n";
    KieBase kbase = loadKnowledgeBaseFromString(text);
    KieSession ksession = kbase.newKieSession();
    List list = new ArrayList();
    ksession.setGlobal("list", list);
    ksession.insert(new Foo(null, null));
    ksession.insert(new Pet(null));
    FactA fact1 = new FactA();
    fact1.setField1("f1");
    fact1.setField2(10);
    FactA fact2 = new FactA();
    fact2.setField1("f1");
    fact2.setField2(30);
    FactA fact3 = new FactA();
    fact3.setField1("f2");
    fact3.setField2(20);
    ksession.insert(fact1);
    ksession.insert(fact2);
    ksession.insert(fact3);
    ksession.fireAllRules();
    System.out.println(list);
    assertEquals(3, list.size());
    assertEquals(fact2, list.get(0));
    assertEquals(fact3, list.get(1));
    assertEquals(fact1, list.get(2));
}
Also used : KieBase(org.kie.api.KieBase) Foo(org.drools.compiler.Foo) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) ArrayList(java.util.ArrayList) List(java.util.List) FactA(org.drools.compiler.FactA) Pet(org.drools.compiler.Pet) Test(org.junit.Test)

Example 4 with Foo

use of org.drools.compiler.Foo in project drools by kiegroup.

the class MatchTest method testGetObjectsAccumulate.

@Test
public void testGetObjectsAccumulate() {
    // DROOLS-1470
    String str = "import org.drools.compiler.Foo\n" + "import org.drools.compiler.Bar\n" + "global java.util.List list\n" + "rule R when\n" + "  $b : Bar(id == \"roadster\")\n" + "  accumulate(\n" + "    $f : Foo(bar == $b);\n" + "    $t : count($f)\n" + "  )\n" + "then\n" + "  list.addAll(((org.drools.core.spi.Activation)kcontext.getMatch()).getObjectsDeep());\n" + "end\n";
    KieSession ksession = new KieHelper().addContent(str, ResourceType.DRL).build().newKieSession();
    List<Object> list = new ArrayList<>();
    ksession.setGlobal("list", list);
    Bar roadsterType = new Bar("roadster");
    ksession.insert(roadsterType);
    Foo bmwZ4 = new Foo("BMW Z4", roadsterType);
    ksession.insert(bmwZ4);
    Foo lotusElise = new Foo("Lotus Elise", roadsterType);
    ksession.insert(lotusElise);
    Foo mazdaMx5 = new Foo("Mazda MX-5", roadsterType);
    ksession.insert(mazdaMx5);
    Bar miniVanType = new Bar("minivan");
    ksession.insert(miniVanType);
    Foo kieCarnival = new Foo("Kia Carnival", miniVanType);
    ksession.insert(kieCarnival);
    Foo renaultEspace = new Foo("Renault Espace", miniVanType);
    ksession.insert(renaultEspace);
    ksession.fireAllRules();
    assertTrue(list.contains(roadsterType));
    assertTrue(list.contains(bmwZ4));
    assertTrue(list.contains(lotusElise));
    assertTrue(list.contains(mazdaMx5));
    ksession.dispose();
}
Also used : Bar(org.drools.compiler.Bar) Foo(org.drools.compiler.Foo) ArrayList(java.util.ArrayList) KieHelper(org.kie.internal.utils.KieHelper) KieSession(org.kie.api.runtime.KieSession) Test(org.junit.Test)

Example 5 with Foo

use of org.drools.compiler.Foo in project drools by kiegroup.

the class MatchTest method testGetObjectsOnePattern.

@Test
public void testGetObjectsOnePattern() {
    // DROOLS-1470
    String str = "import org.drools.compiler.Foo\n" + "import org.drools.compiler.Bar\n" + "global java.util.List list\n" + "rule R when\n" + "  Foo(id == \"Lotus Elise\")\n" + "then\n" + "  list.addAll(kcontext.getMatch().getObjects());\n" + "end\n";
    KieSession ksession = new KieHelper().addContent(str, ResourceType.DRL).build().newKieSession();
    List<Object> list = new ArrayList<>();
    ksession.setGlobal("list", list);
    Bar roadsterType = new Bar("roadster");
    ksession.insert(roadsterType);
    Foo bmwZ4 = new Foo("BMW Z4", roadsterType);
    ksession.insert(bmwZ4);
    Foo lotusElise = new Foo("Lotus Elise", roadsterType);
    ksession.insert(lotusElise);
    Foo mazdaMx5 = new Foo("Mazda MX-5", roadsterType);
    ksession.insert(mazdaMx5);
    Bar miniVanType = new Bar("minivan");
    ksession.insert(miniVanType);
    Foo kieCarnival = new Foo("Kia Carnival", miniVanType);
    ksession.insert(kieCarnival);
    Foo renaultEspace = new Foo("Renault Espace", miniVanType);
    ksession.insert(renaultEspace);
    ksession.fireAllRules();
    assertEquals(1, list.size());
    assertTrue(list.contains(lotusElise));
    ksession.dispose();
}
Also used : Bar(org.drools.compiler.Bar) Foo(org.drools.compiler.Foo) ArrayList(java.util.ArrayList) KieHelper(org.kie.internal.utils.KieHelper) KieSession(org.kie.api.runtime.KieSession) Test(org.junit.Test)

Aggregations

Foo (org.drools.compiler.Foo)10 Test (org.junit.Test)10 KieSession (org.kie.api.runtime.KieSession)10 ArrayList (java.util.ArrayList)8 Bar (org.drools.compiler.Bar)6 KieHelper (org.kie.internal.utils.KieHelper)5 KieBase (org.kie.api.KieBase)4 List (java.util.List)3 FactA (org.drools.compiler.FactA)3 Pet (org.drools.compiler.Pet)3 Arrays.asList (java.util.Arrays.asList)1 Date (java.util.Date)1 PseudoClockScheduler (org.drools.core.time.impl.PseudoClockScheduler)1 KieServices (org.kie.api.KieServices)1 KieModule (org.kie.api.builder.KieModule)1 ReleaseId (org.kie.api.builder.ReleaseId)1 AfterMatchFiredEvent (org.kie.api.event.rule.AfterMatchFiredEvent)1 AgendaEventListener (org.kie.api.event.rule.AgendaEventListener)1 KieContainer (org.kie.api.runtime.KieContainer)1 KieSessionConfiguration (org.kie.api.runtime.KieSessionConfiguration)1