use of org.drools.core.reteoo.Sink in project drools by kiegroup.
the class NodesPartitioningTest method traverse.
private void traverse(BaseNode node) {
checkNode(node);
Sink[] sinks = node.getSinks();
if (sinks != null) {
for (Sink sink : sinks) {
if (sink instanceof BaseNode) {
traverse((BaseNode) sink);
}
}
}
}
use of org.drools.core.reteoo.Sink in project drools by kiegroup.
the class ReteDumper method getSinks.
public static Sink[] getSinks(BaseNode node) {
Sink[] sinks = null;
if (node instanceof EntryPointNode) {
EntryPointNode source = (EntryPointNode) node;
Collection<ObjectTypeNode> otns = source.getObjectTypeNodes().values();
sinks = otns.toArray(new Sink[otns.size()]);
} else if (node instanceof ObjectSource) {
ObjectSource source = (ObjectSource) node;
sinks = source.getObjectSinkPropagator().getSinks();
} else if (node instanceof LeftTupleSource) {
LeftTupleSource source = (LeftTupleSource) node;
sinks = source.getSinkPropagator().getSinks();
}
return sinks;
}
use of org.drools.core.reteoo.Sink in project drools by kiegroup.
the class ReteDumper method visitNode.
private static void visitNode(BaseNode node, String ident, Set<BaseNode> visitedNodes, BiConsumer<String, BaseNode> consumer) {
consumer.accept(ident, node);
if (!visitedNodes.add(node)) {
return;
}
Sink[] sinks = getSinks(node);
if (sinks != null) {
for (Sink sink : sinks) {
if (sink instanceof BaseNode) {
visitNode((BaseNode) sink, ident + " ", visitedNodes, consumer);
}
}
}
}
use of org.drools.core.reteoo.Sink in project drools by kiegroup.
the class FromTest method testFromSharingWithAccumulate.
@Test
public void testFromSharingWithAccumulate() {
final String drl = "package org.drools.compiler.integrationtests.operators;\n" + "\n" + "import java.util.List;\n" + "import java.util.ArrayList;\n" + "import " + Cheesery.class.getCanonicalName() + " ;\n" + "import " + Cheese.class.getCanonicalName() + " ;\n" + "\n" + "global java.util.List output1;\n" + "global java.util.List output2;\n" + "\n" + "rule R1\n" + " when\n" + " $cheesery : Cheesery()\n" + " $list : List( ) from accumulate( $cheese : Cheese( ) from $cheesery.getCheeses(),\n" + " init( List l = new ArrayList(); ),\n" + " action( l.add( $cheese ); )\n" + " result( l ) )\n" + " then\n" + " output1.add( $list );\n" + "end\n" + "rule R2\n" + " when\n" + " $cheesery : Cheesery()\n" + " $list : List( ) from accumulate( $cheese : Cheese( ) from $cheesery.getCheeses(),\n" + " init( List l = new ArrayList(); ),\n" + " action( l.add( $cheese ); )\n" + " result( l ) )\n" + " then\n" + " output2.add( $list );\n" + "end\n";
final KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("from-test", kieBaseTestConfiguration, drl);
EntryPointNode epn = ((InternalKnowledgeBase) kbase).getRete().getEntryPointNode(EntryPointId.DEFAULT);
ObjectTypeNode otn = epn.getObjectTypeNodes().get(new ClassObjectType(Cheesery.class));
Sink[] otnSinks = otn.getSinks();
assertEquals(1, otnSinks.length);
LeftInputAdapterNode lia = (LeftInputAdapterNode) otnSinks[0];
Sink[] liaSinks = lia.getSinks();
// there must be only 1 shared from node
assertEquals(1, Stream.of(liaSinks).filter(sink -> sink instanceof FromNode).count());
final KieSession ksession = kbase.newKieSession();
try {
final List<?> output1 = new ArrayList<>();
ksession.setGlobal("output1", output1);
final List<?> output2 = new ArrayList<>();
ksession.setGlobal("output2", output2);
final Cheesery cheesery = new Cheesery();
cheesery.addCheese(new Cheese("stilton", 8));
cheesery.addCheese(new Cheese("provolone", 8));
final FactHandle cheeseryHandle = ksession.insert(cheesery);
ksession.fireAllRules();
assertEquals(1, output1.size());
assertEquals(2, ((List) output1.get(0)).size());
assertEquals(1, output2.size());
assertEquals(2, ((List) output2.get(0)).size());
output1.clear();
output2.clear();
ksession.update(cheeseryHandle, cheesery);
ksession.fireAllRules();
assertEquals(1, output1.size());
assertEquals(2, ((List) output1.get(0)).size());
assertEquals(1, output2.size());
assertEquals(2, ((List) output2.get(0)).size());
} finally {
ksession.dispose();
}
}
use of org.drools.core.reteoo.Sink in project drools by kiegroup.
the class NodesPartitioningTest method traverse.
private void traverse(BaseNode node) {
checkNode(node);
Sink[] sinks = node.getSinks();
if (sinks != null) {
for (Sink sink : sinks) {
if (sink instanceof BaseNode) {
traverse((BaseNode) sink);
}
}
}
}
Aggregations