Search in sources :

Example 26 with Child

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

the class OOPathMultilevelTest method testClassTwoLevelPath.

@Test
public void testClassTwoLevelPath() {
    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/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", 8);
    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");
}
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 27 with Child

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

the class OOPathReactiveTest method testReactiveList.

@Test
public void testReactiveList() {
    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("gun"));
    ksession.fireAllRules();
    Assertions.assertThat(list).containsExactlyInAnyOrder("gun");
}
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 28 with Child

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

the class OOPathReactiveTest method testRemoveFromAndAddToReactiveSet.

@Test
public void testRemoveFromAndAddToReactiveSet() {
    final String drl = "import org.drools.mvel.compiler.oopath.model.*;\n" + "\n" + "rule R when\n" + "  School( $disease: /children/diseases )\n" + "then\n" + "  insertLogical( $disease );\n" + "end\n";
    KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("test", kieBaseTestConfiguration, drl);
    KieSession ksession = kbase.newKieSession();
    final Disease flu = new Disease("flu");
    final Disease asthma = new Disease("asthma");
    final Disease diabetes = new Disease("diabetes");
    final Child charlie = new Child("Charles", 15);
    charlie.addDisease(flu);
    charlie.addDisease(asthma);
    final Child debbie = new Child("Debbie", 19);
    debbie.addDisease(diabetes);
    final School school = new School("Da Vinci");
    school.addChild(charlie);
    school.addChild(debbie);
    ksession.insert(school);
    ksession.fireAllRules();
    assertTrue(ksession.getObjects().contains(flu));
    assertTrue(ksession.getObjects().contains(asthma));
    assertTrue(ksession.getObjects().contains(diabetes));
    charlie.getDiseases().remove(flu);
    ksession.fireAllRules();
    assertFalse(ksession.getObjects().contains(flu));
    assertTrue(ksession.getObjects().contains(asthma));
    assertTrue(ksession.getObjects().contains(diabetes));
    charlie.getDiseases().remove(asthma);
    ksession.fireAllRules();
    assertFalse(ksession.getObjects().contains(flu));
    assertFalse(ksession.getObjects().contains(asthma));
    assertTrue(ksession.getObjects().contains(diabetes));
    debbie.getDiseases().remove(diabetes);
    ksession.fireAllRules();
    assertFalse(ksession.getObjects().contains(flu));
    assertFalse(ksession.getObjects().contains(asthma));
    assertFalse(ksession.getObjects().contains(diabetes));
    charlie.addDisease(flu);
    ksession.fireAllRules();
    assertTrue(ksession.getObjects().contains(flu));
    assertFalse(ksession.getObjects().contains(asthma));
    assertFalse(ksession.getObjects().contains(diabetes));
    charlie.addDisease(asthma);
    debbie.addDisease(diabetes);
    ksession.fireAllRules();
    assertTrue(ksession.getObjects().contains(flu));
    assertTrue(ksession.getObjects().contains(asthma));
    assertTrue(ksession.getObjects().contains(diabetes));
}
Also used : School(org.drools.mvel.compiler.oopath.model.School) Disease(org.drools.mvel.compiler.oopath.model.Disease) KieBase(org.kie.api.KieBase) KieSession(org.kie.api.runtime.KieSession) Child(org.drools.mvel.compiler.oopath.model.Child) Test(org.junit.Test)

Example 29 with Child

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

the class OOPathReactiveTest method testSingleFireOnReactiveChange.

@Test
public void testSingleFireOnReactiveChange() {
    // DROOLS-1302
    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 );\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);
    ksession.insert(bob);
    ksession.fireAllRules();
    list.clear();
    final Child eleonor = new Child("Eleonor", 10);
    alice.addChild(eleonor);
    final Toy toy = new Toy("eleonor toy 1");
    eleonor.addToy(toy);
    eleonor.setAge(11);
    ksession.fireAllRules();
    Assertions.assertThat(list).hasSize(1);
    list.clear();
    toy.setName("eleonor toy 2");
    ksession.fireAllRules();
    Assertions.assertThat(list).hasSize(1);
}
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)

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