use of org.kie.api.runtime.rule.FactHandle in project drools by kiegroup.
the class FromTest method testFromSharing.
@Test
public void testFromSharing() {
// Keeping original test as non-property reactive by default, just allowed.
String drl = "import " + ListsContainer.class.getCanonicalName() + "\n" + "global java.util.List output1;\n" + "global java.util.List output2;\n" + "rule R1 when\n" + " ListsContainer( $list : list1 )\n" + " $s : String( length == 2 ) from $list\n" + "then\n" + " output1.add($s);\n" + "end\n" + "rule R2 when\n" + " ListsContainer( $list : list2 )\n" + " $s : String( length == 2 ) from $list\n" + "then\n" + " output2.add($s);\n" + "end\n" + "rule R3 when\n" + " ListsContainer( $list : list2 )\n" + " $s : String( length == 2 ) from $list\n" + "then\n" + " output2.add($s);\n" + "end\n";
KieBase kbase = new KieHelper(PropertySpecificOption.ALLOWED).addContent(drl, ResourceType.DRL).build();
KieSession ksession = kbase.newKieSession();
ReteDumper.dumpRete(kbase);
List<String> output1 = new ArrayList<String>();
ksession.setGlobal("output1", output1);
List<String> output2 = new ArrayList<String>();
ksession.setGlobal("output2", output2);
FactHandle fh = ksession.insert(new ListsContainer());
ksession.fireAllRules();
assertEquals("bb", output1.get(0));
assertEquals("22", output2.get(0));
assertEquals("22", output2.get(1));
EntryPointNode epn = ((InternalKnowledgeBase) kbase).getRete().getEntryPointNodes().values().iterator().next();
ObjectTypeNode otn = epn.getObjectTypeNodes().get(new ClassObjectType(ListsContainer.class));
// There is only 1 LIA
assertEquals(1, otn.getObjectSinkPropagator().size());
LeftInputAdapterNode lian = (LeftInputAdapterNode) otn.getObjectSinkPropagator().getSinks()[0];
// There are only 2 FromNodes since R2 and R3 are sharing the second From
LeftTupleSink[] sinks = lian.getSinkPropagator().getSinks();
assertEquals(2, sinks.length);
// The first from has R1 has sink
assertEquals(1, sinks[0].getSinkPropagator().size());
// The second from has both R2 and R3 as sinks
assertEquals(2, sinks[1].getSinkPropagator().size());
}
use of org.kie.api.runtime.rule.FactHandle in project drools by kiegroup.
the class QueryTest method testQuery.
@Test
public void testQuery() throws Exception {
KieBase kbase = SerializationHelper.serializeObject(loadKnowledgeBase("simple_query_test.drl"));
KieSession session = createKieSession(kbase);
final Cheese stilton = new Cheese("stinky", 5);
FactHandle factHandle = session.insert(stilton);
session = SerializationHelper.getSerialisedStatefulKnowledgeSession(session, true);
String queryName = "simple query";
org.kie.api.runtime.rule.QueryResults results = getQueryResults(session, queryName);
assertEquals(1, results.size());
QueryResultsRow row = results.iterator().next();
if (row instanceof FlatQueryResultRow) {
FlatQueryResultRow flatRow = (FlatQueryResultRow) row;
assertEquals(0, flatRow.getIdentifiers().size());
} else if (row instanceof QueryResultsRowImpl) {
QueryResultsRowImpl rowImpl = (QueryResultsRowImpl) row;
assertEquals(0, rowImpl.getDeclarations().size());
}
}
use of org.kie.api.runtime.rule.FactHandle in project drools by kiegroup.
the class QueryTest method testDoubleQueryWithExists.
@Test
public void testDoubleQueryWithExists() throws Exception {
KieBase kbase = SerializationHelper.serializeObject(loadKnowledgeBase("test_DoubleQueryWithExists.drl"));
KieSession session = createKieSession(kbase);
final Person p1 = new Person("p1", "stilton", 20);
p1.setStatus("europe");
final FactHandle c1FactHandle = session.insert(p1);
final Person p2 = new Person("p2", "stilton", 30);
p2.setStatus("europe");
final FactHandle c2FactHandle = session.insert(p2);
final Person p3 = new Person("p3", "stilton", 40);
p3.setStatus("europe");
final FactHandle c3FactHandle = session.insert(p3);
session.fireAllRules();
QueryResults results = session.getQueryResults("2 persons with the same status");
assertEquals(2, results.size());
// europe=[ 1, 2 ], america=[ 3 ]
p3.setStatus("america");
session.update(c3FactHandle, p3);
session.fireAllRules();
results = session.getQueryResults("2 persons with the same status");
assertEquals(1, results.size());
// europe=[ 1 ], america=[ 2, 3 ]
p2.setStatus("america");
session.update(c2FactHandle, p2);
session.fireAllRules();
results = session.getQueryResults("2 persons with the same status");
assertEquals(1, results.size());
// europe=[ ], america=[ 1, 2, 3 ]
p1.setStatus("america");
session.update(c1FactHandle, p1);
session.fireAllRules();
results = getQueryResults(session, "2 persons with the same status");
assertEquals(2, results.size());
// europe=[ 2 ], america=[ 1, 3 ]
p2.setStatus("europe");
session.update(c2FactHandle, p2);
session.fireAllRules();
results = getQueryResults(session, "2 persons with the same status");
assertEquals(1, results.size());
// europe=[ 1, 2 ], america=[ 3 ]
p1.setStatus("europe");
session.update(c1FactHandle, p1);
session.fireAllRules();
results = session.getQueryResults("2 persons with the same status");
assertEquals(1, results.size());
// europe=[ 1, 2, 3 ], america=[ ]
p3.setStatus("europe");
session.update(c3FactHandle, p3);
session.fireAllRules();
results = session.getQueryResults("2 persons with the same status");
assertEquals(2, results.size());
}
use of org.kie.api.runtime.rule.FactHandle in project drools by kiegroup.
the class QueryTest3 method doIt.
private void doIt(Object o1, Object o2, String query, int expected, boolean doUpdate, boolean doRetract) {
KieSession knowledgeSession = knowledgeBase.newKieSession();
try {
knowledgeSession.insert(o1);
FactHandle handle2 = knowledgeSession.insert(o2);
if (doUpdate) {
knowledgeSession.update(handle2, o2);
} else if (doRetract) {
knowledgeSession.retract(handle2);
handle2 = knowledgeSession.insert(o2);
}
QueryResults queryResults = knowledgeSession.getQueryResults(query);
assertEquals(expected, queryResults.size());
} finally {
knowledgeSession.dispose();
}
}
use of org.kie.api.runtime.rule.FactHandle in project drools by kiegroup.
the class RuleExecutionTest method testOnDeleteMatchConsequence.
@Test
public void testOnDeleteMatchConsequence() throws Exception {
String str = "import " + Person.class.getCanonicalName() + ";\n" + "rule R1 when\n" + " $p : Person( age > 30 )\n" + "then\n" + " $p.setStatus(\"in\");\n" + "then[$onDeleteMatch$]\n" + " $p.setStatus(\"out\");\n" + "end\n";
KieSession ksession = new KieHelper().addContent(str, ResourceType.DRL).build().newKieSession();
Person mario = new Person("Mario", 40);
FactHandle fact = ksession.insert(mario);
ksession.fireAllRules();
assertEquals("in", mario.getStatus());
ksession.delete(fact);
ksession.fireAllRules();
assertEquals("out", mario.getStatus());
}
Aggregations