/
WireListenerTest.java
99 lines (80 loc) · 3.57 KB
/
WireListenerTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package org.kie.builder;
import org.junit.Test;
import org.kie.KieServices;
import org.kie.builder.model.KieModuleModel;
import org.kie.builder.model.KieSessionModel;
import org.kie.builder.model.ListenerModel;
import org.kie.event.rule.ObjectDeletedEvent;
import org.kie.event.rule.ObjectInsertedEvent;
import org.kie.event.rule.ObjectUpdatedEvent;
import org.kie.event.rule.WorkingMemoryEventListener;
import org.kie.runtime.KieContainer;
import org.kie.runtime.KieSession;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.kie.builder.impl.KieBuilderImpl.generatePomXml;
public class WireListenerTest {
private static final List<ObjectInsertedEvent> insertEvents = new ArrayList<ObjectInsertedEvent>();
private static final List<ObjectUpdatedEvent> updateEvents = new ArrayList<ObjectUpdatedEvent>();
private static final List<ObjectDeletedEvent> retractEvents = new ArrayList<ObjectDeletedEvent>();
@Test
public void testWireListener() throws Exception {
KieServices ks = KieServices.Factory.get();
ReleaseId releaseId = ks.newReleaseId("org.kie", "listener-test", "1.0-SNAPSHOT");
build(ks, releaseId);
KieContainer kieContainer = ks.newKieContainer(releaseId);
KieSession ksession = kieContainer.newKieSession();
ksession.fireAllRules();
assertEquals(1, insertEvents.size());
assertEquals(1, updateEvents.size());
assertEquals(1, retractEvents.size());
}
private void build(KieServices ks, ReleaseId releaseId) throws IOException {
KieModuleModel kproj = ks.newKieModuleModel();
KieSessionModel ksession1 = kproj.newKieBaseModel("KBase1").newKieSessionModel("KSession1").setDefault(true);
ksession1.newListenerModel(RecordingWorkingMemoryEventListener.class.getName(), ListenerModel.Kind.WORKING_MEMORY_EVENT_LISTENER);
KieFileSystem kfs = ks.newKieFileSystem();
kfs.writeKModuleXML(kproj.toXML())
.writePomXML( generatePomXml(releaseId) )
.write("src/main/resources/KBase1/rules.drl", createDRL());
KieBuilder kieBuilder = ks.newKieBuilder(kfs);
assertTrue(kieBuilder.buildAll().getResults().getMessages().isEmpty());
}
private String createDRL() {
return "package org.kie.test\n" +
"declare Account\n" +
" balance : int\n" +
"end\n" +
"rule OpenAccount when\n" +
"then\n" +
" insert( new Account(100) );\n" +
"end\n" +
"rule PayTaxes when\n" +
" $account : Account( $balance : balance > 0 ) \n" +
"then\n" +
" modify( $account ) { setBalance( $balance - 200 ) }\n" +
"end\n" +
"rule CloseAccountWithNegeativeBalance when\n" +
" $account : Account( balance < 0 ) \n" +
"then\n" +
" retract( $account );\n" +
"end\n";
}
public static class RecordingWorkingMemoryEventListener implements WorkingMemoryEventListener {
@Override
public void objectInserted(ObjectInsertedEvent event) {
insertEvents.add(event);
}
@Override
public void objectUpdated(ObjectUpdatedEvent event) {
updateEvents.add(event);
}
@Override
public void objectDeleted(ObjectDeletedEvent event) {
retractEvents.add(event);
}
}
}