use of org.kie.api.event.rule.ObjectDeletedEvent in project drools by kiegroup.
the class ConsequenceTest method testMVELConsequenceWithoutSemiColon1.
@Test
public void testMVELConsequenceWithoutSemiColon1() throws Exception {
String drl = "";
drl += "package test\n";
drl += "import org.drools.compiler.Person\n";
drl += "import org.drools.compiler.Pet\n";
drl += "rule test dialect 'mvel'\n";
drl += "when\n";
drl += " $person:Person()\n";
drl += " $pet:Pet()\n";
drl += "then\n";
drl += " delete($person) // some comment\n";
drl += " delete($pet) // another comment\n";
drl += "end\n";
final KieBase kbase = loadKnowledgeBaseFromString(drl);
final KieSession ksession = createKnowledgeSession(kbase);
// create working memory mock listener
final RuleRuntimeEventListener wml = Mockito.mock(RuleRuntimeEventListener.class);
ksession.addEventListener(wml);
final FactHandle personFH = ksession.insert(new Person("Toni"));
final FactHandle petFH = ksession.insert(new Pet("Toni"));
final int fired = ksession.fireAllRules();
assertEquals(1, fired);
// capture the arguments and check that the retracts happened
final ArgumentCaptor<ObjectDeletedEvent> retracts = ArgumentCaptor.forClass(ObjectDeletedEvent.class);
verify(wml, times(2)).objectDeleted(retracts.capture());
final List<ObjectDeletedEvent> values = retracts.getAllValues();
assertThat(values.get(0).getFactHandle(), is(personFH));
assertThat(values.get(1).getFactHandle(), is(petFH));
}
use of org.kie.api.event.rule.ObjectDeletedEvent in project drools by kiegroup.
the class RuleRuntimeEventTest method testEventModel.
@Test
public void testEventModel() throws Exception {
final KieBase kbase = SerializationHelper.serializeObject(loadKnowledgeBase("test_EventModel.drl"));
final KieSession wm = createKnowledgeSession(kbase);
final RuleRuntimeEventListener wmel = mock(RuleRuntimeEventListener.class);
wm.addEventListener(wmel);
final Cheese stilton = new Cheese("stilton", 15);
final FactHandle stiltonHandle = wm.insert(stilton);
final ArgumentCaptor<ObjectInsertedEvent> oic = ArgumentCaptor.forClass(org.kie.api.event.rule.ObjectInsertedEvent.class);
verify(wmel).objectInserted(oic.capture());
assertSame(stiltonHandle, oic.getValue().getFactHandle());
wm.update(stiltonHandle, stilton);
final ArgumentCaptor<org.kie.api.event.rule.ObjectUpdatedEvent> ouc = ArgumentCaptor.forClass(org.kie.api.event.rule.ObjectUpdatedEvent.class);
verify(wmel).objectUpdated(ouc.capture());
assertSame(stiltonHandle, ouc.getValue().getFactHandle());
wm.delete(stiltonHandle);
final ArgumentCaptor<ObjectDeletedEvent> orc = ArgumentCaptor.forClass(ObjectDeletedEvent.class);
verify(wmel).objectDeleted(orc.capture());
assertSame(stiltonHandle, orc.getValue().getFactHandle());
}
use of org.kie.api.event.rule.ObjectDeletedEvent in project drools by kiegroup.
the class OOPathTest method testListIteratorRemove.
@Test
public void testListIteratorRemove() {
final String drl = "import org.drools.compiler.oopath.model.*;\n" + "\n" + "rule R2 when\n" + " TMDirectory( $id: name, $p: /files[size >= 100] )\n" + "then\n" + " insertLogical( $id + \".\" + $p.getName() );\n" + "end\n";
final KieSession ksession = new KieHelper().addContent(drl, ResourceType.DRL).build().newKieSession();
ksession.addEventListener(new DefaultRuleRuntimeEventListener() {
@Override
public void objectDeleted(ObjectDeletedEvent event) {
System.out.println(event.getOldObject() + " -> " + "_");
}
@Override
public void objectInserted(ObjectInsertedEvent event) {
System.out.println("_" + " -> " + event.getObject());
}
@Override
public void objectUpdated(ObjectUpdatedEvent event) {
System.out.println(event.getOldObject() + " -> " + event.getObject());
}
});
final TMDirectory x = new TMDirectory("X");
final TMDirectory y = new TMDirectory("Y");
final TMFile file0 = new TMFile("File0", 999);
final TMFile file1 = new TMFile("File1", 999);
final TMFile file2 = new TMFile("File2", 999);
x.getFiles().addAll(Arrays.asList(file0, file1, file2));
y.getFiles().addAll(Arrays.asList(file0, file1, file2));
ksession.insert(x);
ksession.insert(y);
ksession.fireAllRules();
assertTrue(factsCollection(ksession).contains("X.File0"));
assertTrue(factsCollection(ksession).contains("X.File1"));
assertTrue(factsCollection(ksession).contains("X.File2"));
assertTrue(factsCollection(ksession).contains("Y.File0"));
assertTrue(factsCollection(ksession).contains("Y.File1"));
assertTrue(factsCollection(ksession).contains("Y.File2"));
final ListIterator<TMFile> xIterator = x.getFiles().listIterator(1);
final ListIterator<TMFile> yIterator = y.getFiles().listIterator();
xIterator.next();
xIterator.remove();
yIterator.next();
yIterator.next();
yIterator.next();
yIterator.remove();
ksession.fireAllRules();
assertTrue(factsCollection(ksession).contains("X.File0"));
assertFalse(factsCollection(ksession).contains("X.File1"));
assertTrue(factsCollection(ksession).contains("X.File2"));
assertTrue(factsCollection(ksession).contains("Y.File0"));
assertTrue(factsCollection(ksession).contains("Y.File1"));
assertFalse(factsCollection(ksession).contains("Y.File2"));
assertTrue(xIterator.hasNext());
assertTrue(xIterator.hasPrevious());
assertFalse(yIterator.hasNext());
assertTrue(yIterator.hasPrevious());
xIterator.next();
xIterator.remove();
yIterator.previous();
yIterator.remove();
ksession.fireAllRules();
assertTrue(factsCollection(ksession).contains("X.File0"));
assertFalse(factsCollection(ksession).contains("X.File1"));
assertFalse(factsCollection(ksession).contains("X.File2"));
assertTrue(factsCollection(ksession).contains("Y.File0"));
assertFalse(factsCollection(ksession).contains("Y.File1"));
assertFalse(factsCollection(ksession).contains("Y.File2"));
assertFalse(xIterator.hasNext());
assertTrue(xIterator.hasPrevious());
assertFalse(yIterator.hasNext());
assertTrue(yIterator.hasPrevious());
xIterator.previous();
xIterator.remove();
yIterator.previous();
yIterator.remove();
ksession.fireAllRules();
assertFalse(factsCollection(ksession).contains("X.File0"));
assertFalse(factsCollection(ksession).contains("X.File1"));
assertFalse(factsCollection(ksession).contains("X.File2"));
assertFalse(factsCollection(ksession).contains("Y.File0"));
assertFalse(factsCollection(ksession).contains("Y.File1"));
assertFalse(factsCollection(ksession).contains("Y.File2"));
assertFalse(xIterator.hasNext());
assertFalse(xIterator.hasPrevious());
assertFalse(yIterator.hasNext());
assertFalse(yIterator.hasPrevious());
}
use of org.kie.api.event.rule.ObjectDeletedEvent in project drools by kiegroup.
the class RuleRuntimeEventSupportTest method testRuleRuntimeEventListener.
@Test
public void testRuleRuntimeEventListener() {
final KieBase rb = KnowledgeBaseFactory.newKnowledgeBase();
final KieSession wm = rb.newKieSession();
final List wmList = new ArrayList();
final RuleRuntimeEventListener workingMemoryListener = new RuleRuntimeEventListener() {
public void objectInserted(ObjectInsertedEvent event) {
wmList.add(event);
}
public void objectUpdated(ObjectUpdatedEvent event) {
wmList.add(event);
}
public void objectDeleted(ObjectDeletedEvent event) {
wmList.add(event);
}
};
wm.addEventListener(workingMemoryListener);
assertEquals(1, wm.getRuleRuntimeEventListeners().size());
final Cheese stilton = new Cheese("stilton", 15);
final Cheese cheddar = new Cheese("cheddar", 17);
final FactHandle stiltonHandle = wm.insert(stilton);
ObjectInsertedEvent oae = (ObjectInsertedEvent) wmList.get(0);
assertSame(stiltonHandle, oae.getFactHandle());
wm.update(stiltonHandle, cheddar);
final ObjectUpdatedEvent ome = (ObjectUpdatedEvent) wmList.get(1);
assertSame(stiltonHandle, ome.getFactHandle());
assertEquals(cheddar, ome.getObject());
assertEquals(stilton, ome.getOldObject());
wm.retract(stiltonHandle);
final ObjectDeletedEvent ore = (ObjectDeletedEvent) wmList.get(2);
assertSame(stiltonHandle, ore.getFactHandle());
final FactHandle cheddarHandle = wm.insert(cheddar);
oae = (ObjectInsertedEvent) wmList.get(3);
assertSame(cheddarHandle, oae.getFactHandle());
}
use of org.kie.api.event.rule.ObjectDeletedEvent in project drools by kiegroup.
the class RuleRuntimeEventSupportTest method testAddRuleRuntimeEventListener.
@Test
public void testAddRuleRuntimeEventListener() {
KieBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
KieSession ksession = kbase.newKieSession();
final List wmList = new ArrayList();
final RuleRuntimeEventListener eventListener = new RuleRuntimeEventListener() {
public void objectInserted(ObjectInsertedEvent event) {
wmList.add(event);
}
public void objectUpdated(ObjectUpdatedEvent event) {
wmList.add(event);
}
public void objectDeleted(ObjectDeletedEvent event) {
wmList.add(event);
}
};
ksession.addEventListener(eventListener);
final Cheese stilton = new Cheese("stilton", 15);
final Cheese cheddar = new Cheese("cheddar", 17);
final FactHandle stiltonHandle = ksession.insert(stilton);
final ObjectInsertedEvent oae = (ObjectInsertedEvent) wmList.get(0);
assertSame(stiltonHandle, oae.getFactHandle());
ksession.update(stiltonHandle, stilton);
final ObjectUpdatedEvent ome = (ObjectUpdatedEvent) wmList.get(1);
assertSame(stiltonHandle, ome.getFactHandle());
ksession.retract(stiltonHandle);
final ObjectDeletedEvent ore = (ObjectDeletedEvent) wmList.get(2);
assertSame(stiltonHandle, ore.getFactHandle());
ksession.insert(cheddar);
}
Aggregations