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());
}
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();
}
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));
}
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();
}
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();
}
Aggregations