Search in sources :

Example 1 with Sink

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);
            }
        }
    }
}
Also used : Sink(org.drools.core.reteoo.Sink) ObjectSink(org.drools.core.reteoo.ObjectSink) BaseNode(org.drools.core.common.BaseNode)

Example 2 with 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;
}
Also used : EntryPointNode(org.drools.core.reteoo.EntryPointNode) LeftTupleSource(org.drools.core.reteoo.LeftTupleSource) Sink(org.drools.core.reteoo.Sink) ObjectTypeNode(org.drools.core.reteoo.ObjectTypeNode) ObjectSource(org.drools.core.reteoo.ObjectSource)

Example 3 with Sink

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);
            }
        }
    }
}
Also used : Sink(org.drools.core.reteoo.Sink) BaseNode(org.drools.core.common.BaseNode)

Example 4 with Sink

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();
    }
}
Also used : ClassObjectType(org.drools.core.base.ClassObjectType) FactHandle(org.kie.api.runtime.rule.FactHandle) ObjectTypeNode(org.drools.core.reteoo.ObjectTypeNode) ArrayList(java.util.ArrayList) Cheese(org.drools.testcoverage.common.model.Cheese) Cheesery(org.drools.testcoverage.common.model.Cheesery) FromNode(org.drools.core.reteoo.FromNode) EntryPointNode(org.drools.core.reteoo.EntryPointNode) LeftTupleSink(org.drools.core.reteoo.LeftTupleSink) Sink(org.drools.core.reteoo.Sink) KieBase(org.kie.api.KieBase) KieSession(org.kie.api.runtime.KieSession) LeftInputAdapterNode(org.drools.core.reteoo.LeftInputAdapterNode) Test(org.junit.Test)

Example 5 with Sink

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);
            }
        }
    }
}
Also used : ObjectSink(org.drools.core.reteoo.ObjectSink) Sink(org.drools.core.reteoo.Sink) BaseNode(org.drools.core.common.BaseNode)

Aggregations

Sink (org.drools.core.reteoo.Sink)9 BaseNode (org.drools.core.common.BaseNode)4 EntryPointNode (org.drools.core.reteoo.EntryPointNode)4 ObjectTypeNode (org.drools.core.reteoo.ObjectTypeNode)4 LeftTupleSource (org.drools.core.reteoo.LeftTupleSource)3 ObjectSource (org.drools.core.reteoo.ObjectSource)3 ObjectSink (org.drools.core.reteoo.ObjectSink)2 CompilationUnit (com.github.javaparser.ast.CompilationUnit)1 PackageDeclaration (com.github.javaparser.ast.PackageDeclaration)1 ClassOrInterfaceDeclaration (com.github.javaparser.ast.body.ClassOrInterfaceDeclaration)1 MethodDeclaration (com.github.javaparser.ast.body.MethodDeclaration)1 Expression (com.github.javaparser.ast.expr.Expression)1 BlockStmt (com.github.javaparser.ast.stmt.BlockStmt)1 ReturnStmt (com.github.javaparser.ast.stmt.ReturnStmt)1 ClassOrInterfaceType (com.github.javaparser.ast.type.ClassOrInterfaceType)1 ArrayList (java.util.ArrayList)1 ClassObjectType (org.drools.core.base.ClassObjectType)1 NetworkNode (org.drools.core.common.NetworkNode)1 AlphaNode (org.drools.core.reteoo.AlphaNode)1 FromNode (org.drools.core.reteoo.FromNode)1