Search in sources :

Example 6 with Child

use of org.drools.mvel.compiler.oopath.model.Child in project drools by kiegroup.

the class OOPathAccumulateTest method testAccumulate.

private void testAccumulate(final String accumulateFunction, final Number expectedResult) {
    // DROOLS-1265
    final String drl = "import org.drools.mvel.compiler.oopath.model.*;\n" + "global java.lang.Object globalVar\n" + "\n" + "rule R when\n" + "  accumulate ( Adult( $child: /children ) ; $accumulateResult: " + accumulateFunction + "($child.getAge()) )\n" + "then\n" + "  kcontext.getKieRuntime().setGlobal(\"globalVar\", $accumulateResult);\n" + "end\n";
    KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("test", kieBaseTestConfiguration, drl);
    KieSession ksession = kbase.newKieSession();
    final Man bob = new Man("Bob", 40);
    bob.addChild(new Child("Charles", 12));
    bob.addChild(new Child("Debbie", 8));
    ksession.insert(bob);
    ksession.fireAllRules();
    final Number result = (Number) ksession.getGlobal("globalVar");
    if (result instanceof Double) {
        Assertions.assertThat(expectedResult.doubleValue()).isEqualTo(result.doubleValue());
    } else {
        Assertions.assertThat(expectedResult.longValue()).isEqualTo(result.longValue());
    }
}
Also used : KieBase(org.kie.api.KieBase) KieSession(org.kie.api.runtime.KieSession) Man(org.drools.mvel.compiler.oopath.model.Man) Child(org.drools.mvel.compiler.oopath.model.Child)

Example 7 with Child

use of org.drools.mvel.compiler.oopath.model.Child in project drools by kiegroup.

the class OOPathAccumulateTest method testAccumulateCollection.

private void testAccumulateCollection(final String accumulateFunction, final Integer... expectedResults) {
    final String drl = "import org.drools.mvel.compiler.oopath.model.*;\n" + "global java.util.Collection<Integer> globalVar\n" + "\n" + "rule R when\n" + "  accumulate ( Adult( $child: /children ) ; $accumulateResult: " + accumulateFunction + "($child.getAge()) )\n" + "then\n" + "  kcontext.getKieRuntime().setGlobal(\"globalVar\", $accumulateResult);\n" + "end\n";
    KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("test", kieBaseTestConfiguration, drl);
    KieSession ksession = kbase.newKieSession();
    final Man bob = new Man("Bob", 40);
    bob.addChild(new Child("Charles", 12));
    bob.addChild(new Child("Debbie", 8));
    ksession.insert(bob);
    ksession.fireAllRules();
    final Collection<Integer> result = (Collection<Integer>) ksession.getGlobal("globalVar");
    Assertions.assertThat(result).containsExactlyInAnyOrder(expectedResults);
}
Also used : KieBase(org.kie.api.KieBase) Collection(java.util.Collection) KieSession(org.kie.api.runtime.KieSession) Man(org.drools.mvel.compiler.oopath.model.Man) Child(org.drools.mvel.compiler.oopath.model.Child)

Example 8 with Child

use of org.drools.mvel.compiler.oopath.model.Child in project drools by kiegroup.

the class OOPathMultilevelTest method testClassThreeLevelPath.

@Test
public void testClassThreeLevelPath() {
    final String drl = "import org.drools.mvel.compiler.oopath.model.*;\n" + "global java.util.List list\n" + "\n" + "rule R when\n" + "  Man( $toyName: /wife/children/toys/name )\n" + "then\n" + "  list.add( $toyName );\n" + "end\n";
    KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("test", kieBaseTestConfiguration, drl);
    KieSession ksession = kbase.newKieSession();
    final List<String> list = new ArrayList<>();
    ksession.setGlobal("list", list);
    final Woman alice = new Woman("Alice", 38);
    final Man bob = new Man("Bob", 40);
    bob.setWife(alice);
    final Child charlie = new Child("Charles", 12);
    alice.addChild(charlie);
    charlie.addToy(new Toy("car"));
    charlie.addToy(new Toy("ball"));
    ksession.insert(bob);
    ksession.fireAllRules();
    Assertions.assertThat(list).containsExactlyInAnyOrder("car", "ball");
}
Also used : KieBase(org.kie.api.KieBase) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) Man(org.drools.mvel.compiler.oopath.model.Man) Woman(org.drools.mvel.compiler.oopath.model.Woman) Child(org.drools.mvel.compiler.oopath.model.Child) Toy(org.drools.mvel.compiler.oopath.model.Toy) Test(org.junit.Test)

Example 9 with Child

use of org.drools.mvel.compiler.oopath.model.Child in project drools by kiegroup.

the class OOPathBenchmarkTest method insertFullModel.

private static List<InternalFactHandle> insertFullModel(KieSession ksession, List<Man> model) {
    final List<InternalFactHandle> toBeModified = new ArrayList<InternalFactHandle>();
    for (Man man : model) {
        ksession.insert(man);
        ksession.insert(man.getWife());
        for (Child child : man.getWife().getChildren()) {
            final InternalFactHandle fh = (InternalFactHandle) ksession.insert(child);
            if (child.getAge() == 10) {
                toBeModified.add(fh);
            }
            for (Toy toy : child.getToys()) {
                ksession.insert(toy);
            }
        }
    }
    return toBeModified;
}
Also used : ArrayList(java.util.ArrayList) Man(org.drools.mvel.compiler.oopath.model.Man) InternalFactHandle(org.drools.core.common.InternalFactHandle) Child(org.drools.mvel.compiler.oopath.model.Child) Toy(org.drools.mvel.compiler.oopath.model.Toy)

Example 10 with Child

use of org.drools.mvel.compiler.oopath.model.Child in project drools by kiegroup.

the class OOPathBenchmarkTest method testRelational.

public static long[] testRelational(KieBase kbase, int n) {
    final long[] result = new long[2];
    final KieSession ksession = kbase.newKieSession();
    final List<String> list = new ArrayList<String>();
    ksession.setGlobal("list", list);
    final List<Man> model = generateModel(n);
    final List<Child> toBeModified = getChildToBeModified(model);
    long start = System.nanoTime();
    final List<InternalFactHandle> fhs = insertFullModel(ksession, model);
    ksession.fireAllRules();
    result[0] = System.nanoTime() - start;
    list.clear();
    start = System.nanoTime();
    for (Child child : toBeModified) {
        child.setAge(11);
    }
    for (InternalFactHandle fh : fhs) {
        ksession.update(fh, fh.getObject());
    }
    ksession.fireAllRules();
    result[1] = System.nanoTime() - start;
    Assertions.assertThat(n).isEqualTo(list.size());
    ksession.dispose();
    return result;
}
Also used : ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) Man(org.drools.mvel.compiler.oopath.model.Man) InternalFactHandle(org.drools.core.common.InternalFactHandle) Child(org.drools.mvel.compiler.oopath.model.Child)

Aggregations

Child (org.drools.mvel.compiler.oopath.model.Child)29 Man (org.drools.mvel.compiler.oopath.model.Man)27 KieSession (org.kie.api.runtime.KieSession)27 ArrayList (java.util.ArrayList)24 KieBase (org.kie.api.KieBase)24 Test (org.junit.Test)21 Toy (org.drools.mvel.compiler.oopath.model.Toy)18 Woman (org.drools.mvel.compiler.oopath.model.Woman)18 InternalFactHandle (org.drools.core.common.InternalFactHandle)3 School (org.drools.mvel.compiler.oopath.model.School)3 Disease (org.drools.mvel.compiler.oopath.model.Disease)2 Collection (java.util.Collection)1 ClassObjectType (org.drools.core.base.ClassObjectType)1 BetaMemory (org.drools.core.reteoo.BetaMemory)1 EntryPointNode (org.drools.core.reteoo.EntryPointNode)1 LeftInputAdapterNode (org.drools.core.reteoo.LeftInputAdapterNode)1 LeftTuple (org.drools.core.reteoo.LeftTuple)1 ObjectTypeNode (org.drools.core.reteoo.ObjectTypeNode)1 ReactiveFromNode (org.drools.core.reteoo.ReactiveFromNode)1 TupleMemory (org.drools.core.reteoo.TupleMemory)1