Search in sources :

Example 11 with Woman

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

the class OOPathReactiveTest method testReactiveSet.

@Test
public void testReactiveSet() {
    final String drl = "import org.drools.mvel.compiler.oopath.model.*;\n" + "global java.util.List list\n" + "\n" + "rule R when\n" + "  Man( $disease: /wife/children[age > 10]/diseases )\n" + "then\n" + "  list.add( $disease.getName() );\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);
    final Child debbie = new Child("Debbie", 10);
    alice.addChild(charlie);
    alice.addChild(debbie);
    charlie.addDisease(new Disease("flu"));
    charlie.addDisease(new Disease("asthma"));
    debbie.addDisease(new Disease("diabetes"));
    ksession.insert(bob);
    ksession.fireAllRules();
    Assertions.assertThat(list).containsExactlyInAnyOrder("flu", "asthma");
    list.clear();
    charlie.addDisease(new Disease("epilepsy"));
    ksession.fireAllRules();
    Assertions.assertThat(list).containsExactlyInAnyOrder("epilepsy");
}
Also used : Disease(org.drools.mvel.compiler.oopath.model.Disease) 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) Test(org.junit.Test)

Example 12 with Woman

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

the class OOPathReactiveTest method testReactiveDeleteOnLia.

@Test
public void testReactiveDeleteOnLia() {
    final String drl = "import org.drools.mvel.compiler.oopath.model.*;\n" + "global java.util.List list\n" + "\n" + "rule R when\n" + "  Man( $toy: /wife/children[age > 10]/toys )\n" + "then\n" + "  list.add( $toy.getName() );\n" + "end\n";
    KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("test", kieBaseTestConfiguration, drl);
    KieSession ksession = kbase.newKieSession();
    final EntryPointNode epn = ((InternalKnowledgeBase) ksession.getKieBase()).getRete().getEntryPointNodes().values().iterator().next();
    final ObjectTypeNode otn = epn.getObjectTypeNodes().get(new ClassObjectType(Man.class));
    final LeftInputAdapterNode lian = (LeftInputAdapterNode) otn.getObjectSinkPropagator().getSinks()[0];
    final ReactiveFromNode from1 = (ReactiveFromNode) lian.getSinkPropagator().getSinks()[0];
    final ReactiveFromNode from2 = (ReactiveFromNode) from1.getSinkPropagator().getSinks()[0];
    final ReactiveFromNode from3 = (ReactiveFromNode) from2.getSinkPropagator().getSinks()[0];
    final BetaMemory betaMemory = ((InternalWorkingMemory) ksession).getNodeMemory(from3).getBetaMemory();
    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);
    final Child debbie = new Child("Debbie", 11);
    alice.addChild(charlie);
    alice.addChild(debbie);
    charlie.addToy(new Toy("car"));
    charlie.addToy(new Toy("ball"));
    debbie.addToy(new Toy("doll"));
    ksession.insert(bob);
    ksession.fireAllRules();
    Assertions.assertThat(list).containsExactlyInAnyOrder("car", "ball", "doll");
    final TupleMemory tupleMemory = betaMemory.getLeftTupleMemory();
    Assertions.assertThat(betaMemory.getLeftTupleMemory().size()).isEqualTo(2);
    Iterator<LeftTuple> it = tupleMemory.iterator();
    for (LeftTuple next = it.next(); next != null; next = it.next()) {
        final Object obj = next.getFactHandle().getObject();
        Assertions.assertThat(obj == charlie || obj == debbie).isTrue();
    }
    list.clear();
    debbie.setAge(10);
    ksession.fireAllRules();
    Assertions.assertThat(list).hasSize(0);
    ;
    Assertions.assertThat(betaMemory.getLeftTupleMemory().size()).isEqualTo(1);
    it = tupleMemory.iterator();
    for (LeftTuple next = it.next(); next != null; next = it.next()) {
        final Object obj = next.getFactHandle().getObject();
        Assertions.assertThat(obj == charlie).isTrue();
    }
}
Also used : ClassObjectType(org.drools.core.base.ClassObjectType) ObjectTypeNode(org.drools.core.reteoo.ObjectTypeNode) ArrayList(java.util.ArrayList) ReactiveFromNode(org.drools.core.reteoo.ReactiveFromNode) BetaMemory(org.drools.core.reteoo.BetaMemory) LeftTuple(org.drools.core.reteoo.LeftTuple) TupleMemory(org.drools.core.reteoo.TupleMemory) EntryPointNode(org.drools.core.reteoo.EntryPointNode) KieBase(org.kie.api.KieBase) 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) InternalKnowledgeBase(org.drools.kiesession.rulebase.InternalKnowledgeBase) LeftInputAdapterNode(org.drools.core.reteoo.LeftInputAdapterNode) Toy(org.drools.mvel.compiler.oopath.model.Toy) Test(org.junit.Test)

Example 13 with Woman

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

the class OOPathReactiveTest method testNonReactivePart.

@Test
public void testNonReactivePart() {
    final String drl = "import org.drools.mvel.compiler.oopath.model.*;\n" + "global java.util.List list\n" + "\n" + "rule R when\n" + "  Man( $toy: /wife/children[age > 10]?/toys )\n" + "then\n" + "  list.add( $toy.getName() );\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);
    final Child debbie = new Child("Debbie", 10);
    alice.addChild(charlie);
    alice.addChild(debbie);
    charlie.addToy(new Toy("car"));
    charlie.addToy(new Toy("ball"));
    debbie.addToy(new Toy("doll"));
    ksession.insert(bob);
    ksession.fireAllRules();
    Assertions.assertThat(list).containsExactlyInAnyOrder("car", "ball");
    list.clear();
    charlie.addToy(new Toy("robot"));
    ksession.fireAllRules();
    Assertions.assertThat(list).isEmpty();
}
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 14 with Woman

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

the class OOPathReactiveTest method testReactivitySettingAttributeInDrl.

@Test
public void testReactivitySettingAttributeInDrl() {
    final String drl = "import org.drools.mvel.compiler.oopath.model.*;\n" + "\n" + "rule R when\n" + "  Man( $child: /wife/children[age >= 10] )\n" + "then\n" + "end\n" + "rule R2 when\n" + "  Man( $child: /wife/children[age < 10] )\n" + "then\n" + "$child.setAge(12);" + "end\n";
    KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("test", kieBaseTestConfiguration, drl);
    KieSession ksession = kbase.newKieSession();
    final Man bob = new Man("Bob", 40);
    final Woman alice = new Woman("Alice", 38);
    final Child charlie = new Child("Charles", 9);
    final Child debbie = new Child("Debbie", 8);
    bob.setWife(alice);
    alice.addChild(charlie);
    alice.addChild(debbie);
    ksession.insert(bob);
    Assertions.assertThat(ksession.fireAllRules()).isEqualTo(4);
}
Also used : KieBase(org.kie.api.KieBase) 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) Test(org.junit.Test)

Example 15 with Woman

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

the class OOPathReactiveTest method testReactive2Rules.

@Test
public void testReactive2Rules() {
    final String drl = "import org.drools.mvel.compiler.oopath.model.*;\n" + "global java.util.List toyList\n" + "global java.util.List teenagers\n" + "\n" + "rule R1 when\n" + "  $i : Integer()\n" + "  Man( $toy: /wife/children[age >= $i]/toys )\n" + "then\n" + "  toyList.add( $toy.getName() );\n" + "end\n" + "rule R2 when\n" + "  School( $child: /children[age >= 13] )\n" + "then\n" + "  teenagers.add( $child.getName() );\n" + "end\n";
    KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("test", kieBaseTestConfiguration, drl);
    KieSession ksession = kbase.newKieSession();
    final List<String> toyList = new ArrayList<>();
    ksession.setGlobal("toyList", toyList);
    final List<String> teenagers = new ArrayList<>();
    ksession.setGlobal("teenagers", teenagers);
    final Woman alice = new Woman("Alice", 38);
    final Man bob = new Man("Bob", 40);
    bob.setWife(alice);
    final Child charlie = new Child("Charles", 15);
    final Child debbie = new Child("Debbie", 12);
    alice.addChild(charlie);
    alice.addChild(debbie);
    charlie.addToy(new Toy("car"));
    charlie.addToy(new Toy("ball"));
    debbie.addToy(new Toy("doll"));
    final School school = new School("Da Vinci");
    school.addChild(charlie);
    school.addChild(debbie);
    ksession.insert(13);
    ksession.insert(bob);
    ksession.insert(school);
    ksession.fireAllRules();
    Assertions.assertThat(toyList).containsExactlyInAnyOrder("car", "ball");
    Assertions.assertThat(teenagers).containsExactlyInAnyOrder("Charles");
    toyList.clear();
    debbie.setAge(13);
    ksession.fireAllRules();
    Assertions.assertThat(toyList).containsExactlyInAnyOrder("doll");
    Assertions.assertThat(teenagers).containsExactlyInAnyOrder("Charles", "Debbie");
}
Also used : School(org.drools.mvel.compiler.oopath.model.School) 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)

Aggregations

Man (org.drools.mvel.compiler.oopath.model.Man)24 Woman (org.drools.mvel.compiler.oopath.model.Woman)24 ArrayList (java.util.ArrayList)23 KieBase (org.kie.api.KieBase)23 KieSession (org.kie.api.runtime.KieSession)23 Test (org.junit.Test)21 Child (org.drools.mvel.compiler.oopath.model.Child)18 Toy (org.drools.mvel.compiler.oopath.model.Toy)17 BabyBoy (org.drools.mvel.compiler.oopath.model.BabyBoy)2 BabyGirl (org.drools.mvel.compiler.oopath.model.BabyGirl)2 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 InternalKnowledgeBase (org.drools.kiesession.rulebase.InternalKnowledgeBase)1 Disease (org.drools.mvel.compiler.oopath.model.Disease)1