use of org.kie.api.runtime.rule.FactHandle in project drools by kiegroup.
the class Misc2Test method testReuseAgendaAfterException.
@Test
public void testReuseAgendaAfterException() throws Exception {
// JBRULES-3677
String str = "import org.drools.compiler.Person;\n" + "global java.util.List results;" + "rule R1\n" + "ruleflow-group \"test\"\n" + "when\n" + " Person( $age : age ) \n" + "then\n" + " if ($age > 40) throw new RuntimeException(\"Too old\");\n" + " results.add(\"OK\");" + "end";
KieBase kbase = loadKnowledgeBaseFromString(str);
final KieSession ksession = kbase.newKieSession();
List<String> res = new ArrayList<String>();
ksession.setGlobal("results", res);
AgendaEventListener agendaEventListener = new AgendaEventListener() {
public void matchCreated(org.kie.api.event.rule.MatchCreatedEvent event) {
}
public void matchCancelled(org.kie.api.event.rule.MatchCancelledEvent event) {
}
public void beforeMatchFired(org.kie.api.event.rule.BeforeMatchFiredEvent event) {
}
public void afterMatchFired(org.kie.api.event.rule.AfterMatchFiredEvent event) {
}
public void agendaGroupPopped(org.kie.api.event.rule.AgendaGroupPoppedEvent event) {
}
public void agendaGroupPushed(org.kie.api.event.rule.AgendaGroupPushedEvent event) {
}
public void beforeRuleFlowGroupActivated(org.kie.api.event.rule.RuleFlowGroupActivatedEvent event) {
}
public void afterRuleFlowGroupActivated(org.kie.api.event.rule.RuleFlowGroupActivatedEvent event) {
ksession.fireAllRules();
}
public void beforeRuleFlowGroupDeactivated(org.kie.api.event.rule.RuleFlowGroupDeactivatedEvent event) {
}
public void afterRuleFlowGroupDeactivated(org.kie.api.event.rule.RuleFlowGroupDeactivatedEvent event) {
}
};
ksession.addEventListener(agendaEventListener);
FactHandle fact1 = ksession.insert(new Person("Mario", 38));
((InternalAgenda) ksession.getAgenda()).activateRuleFlowGroup("test");
ksession.fireAllRules();
assertEquals(1, res.size());
res.clear();
ksession.delete(fact1);
FactHandle fact2 = ksession.insert(new Person("Mario", 48));
try {
((InternalAgenda) ksession.getAgenda()).activateRuleFlowGroup("test");
ksession.fireAllRules();
fail("should throw an Exception");
} catch (Exception e) {
}
ksession.delete(fact2);
assertEquals(0, res.size());
// try to reuse the ksession after the Exception
FactHandle fact3 = ksession.insert(new Person("Mario", 38));
((InternalAgenda) ksession.getAgenda()).activateRuleFlowGroup("test");
ksession.fireAllRules();
assertEquals(1, res.size());
ksession.delete(fact3);
ksession.dispose();
}
use of org.kie.api.runtime.rule.FactHandle in project drools by kiegroup.
the class Misc2Test method testPhreakInnerJoinNot.
@Test
public void testPhreakInnerJoinNot() {
// DROOLS-7
String str = "import org.drools.compiler.integrationtests.Misc2Test.Lecture\n" + "global java.util.List list;\n" + "rule \"curriculumCompactness\"\n" + " when\n" + " $lecture : Lecture(\n" + " $day : day, $index : index\n" + " )\n" + " not Lecture(\n" + " day == $day, index == ($index + 1)\n" + " )\n" + " then\n" + " list.add($lecture.getId());\n" + "end\n";
KieBase kbase = loadKnowledgeBaseFromString(str);
KieSession ksession = kbase.newKieSession();
ArrayList list = new ArrayList();
ksession.setGlobal("list", list);
Lecture lA = new Lecture("A", 0, 4);
Lecture lB = new Lecture("B", 2, 2);
Lecture lC = new Lecture("C", 2, 1);
FactHandle fhA = ksession.insert(lA);
FactHandle fhB = ksession.insert(lB);
FactHandle fhC = ksession.insert(lC);
// C gets blocked by B
ksession.fireAllRules();
assertEquals(2, list.size());
assertTrue(list.containsAll(asList("A", "B")));
list.clear();
ksession.update(fhB, lB.setDay(0).setIndex(4));
ksession.update(fhC, lC.setDay(0).setIndex(3));
// B is still a valid blocker for C
ksession.fireAllRules();
assertEquals(1, list.size());
assertTrue(list.contains("B"));
list.clear();
ksession.update(fhB, lB.setDay(2).setIndex(2));
// C doesn't find A as blocker
ksession.fireAllRules();
assertEquals(1, list.size());
assertTrue(list.contains("B"));
}
use of org.kie.api.runtime.rule.FactHandle in project drools by kiegroup.
the class Misc2Test method testPhreakWith2Nots.
@Test
public void testPhreakWith2Nots() {
// DROOLS-7
String str = "import org.drools.compiler.Person\n" + "global java.util.List list;\n" + "rule R when\n" + " Person( $age : age, $name : name )\n" + " not Person( name == $name, age == $age + 1 )\n" + " not Person( name == $name, age == $age - 1 )\n" + "then\n" + " list.add($age);\n" + "end\n";
KieBase kbase = loadKnowledgeBaseFromString(str);
KieSession ksession = kbase.newKieSession();
List<Integer> list = new ArrayList<Integer>();
ksession.setGlobal("list", list);
Person p1 = new Person("AAA", 31);
Person p2 = new Person("AAA", 34);
Person p3 = new Person("AAA", 33);
FactHandle fh1 = ksession.insert(p1);
FactHandle fh3 = ksession.insert(p3);
FactHandle fh2 = ksession.insert(p2);
ksession.fireAllRules();
assertEquals(1, list.size());
assertEquals(31, (int) list.get(0));
list.clear();
p1.setAge(35);
ksession.update(fh1, p1);
p3.setAge(31);
ksession.update(fh3, p3);
ksession.fireAllRules();
assertEquals(1, list.size());
assertEquals(31, (int) list.get(0));
}
use of org.kie.api.runtime.rule.FactHandle in project drools by kiegroup.
the class Misc2Test method testDeletedRightTupleInChangedBucket.
@Test
public void testDeletedRightTupleInChangedBucket() {
// PLANNER-488
String drl = "import " + Person.class.getCanonicalName() + "\n" + "rule R when\n" + " Person( $name: name, $age: age )\n" + " not Person( happy, name == $name, age == $age-1 )\n" + "then\n" + "end";
KieSession kieSession = new KieHelper().addContent(drl, ResourceType.DRL).build().newKieSession();
Person p1 = new Person("C", 1, true);
Person p2 = new Person("B", 1, true);
Person p3 = new Person("B", 2, true);
Person p4 = new Person("A", 2);
FactHandle fh1 = kieSession.insert(p1);
FactHandle fh2 = kieSession.insert(p2);
FactHandle fh3 = kieSession.insert(p3);
FactHandle fh4 = kieSession.insert(p4);
kieSession.fireAllRules();
p4.setName("B");
p4.setHappy(true);
kieSession.update(fh4, p4);
kieSession.fireAllRules();
p3.setName("A");
p3.setHappy(false);
kieSession.update(fh3, p3);
p1.setName("B");
kieSession.update(fh1, p1);
p2.setName("C");
kieSession.update(fh2, p2);
kieSession.fireAllRules();
}
use of org.kie.api.runtime.rule.FactHandle in project drools by kiegroup.
the class Misc2Test method testNotNodeUpdateBlocker.
@Test
public void testNotNodeUpdateBlocker() {
String str = "import org.drools.compiler.integrationtests.Misc2Test.Conversation;\n" + "global java.util.List list;" + "\n" + "rule \"familyEnd\" when\n" + " $conversation : Conversation(\n" + " family != null, $family: family, \n" + " $timeslot: timeslot)\n" + "\n" + " not Conversation(\n" + " family == $family, \n" + " timeslot > $timeslot);\n" + "then\n" + " list.add($conversation);\n" + "end\n";
KieBase kbase = loadKnowledgeBaseFromString(str);
KieSession ksession = kbase.newKieSession();
List<Conversation> conversations = new ArrayList<Conversation>();
ksession.setGlobal("list", conversations);
Conversation c0 = new Conversation(0, "Fusco", 2);
Conversation c1 = new Conversation(1, "Fusco", 3);
Conversation c2 = new Conversation(2, "Fusco", 4);
FactHandle fh0 = ksession.insert(c0);
FactHandle fh1 = ksession.insert(c1);
FactHandle fh2 = ksession.insert(c2);
ksession.fireAllRules();
assertEquals(1, conversations.size());
conversations.clear();
c2.setTimeslot(0);
ksession.update(fh2, c2);
ksession.fireAllRules();
c2.setTimeslot(4);
ksession.update(fh2, c2);
ksession.fireAllRules();
conversations.clear();
c0.setTimeslot(3);
ksession.update(fh0, c0);
ksession.fireAllRules();
c0.setTimeslot(2);
ksession.update(fh0, c0);
ksession.fireAllRules();
conversations.clear();
c2.setTimeslot(1);
ksession.update(fh2, c2);
ksession.fireAllRules();
assertEquals(1, conversations.size());
}
Aggregations