Search in sources :

Example 26 with Child

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

the class OOPathReactiveTests method testReactive2Rules.

@Test
public void testReactive2Rules() {
    final String drl = "import org.drools.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";
    final KieSession ksession = new KieHelper().addContent(drl, ResourceType.DRL).build().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.compiler.oopath.model.School) ArrayList(java.util.ArrayList) KieHelper(org.kie.internal.utils.KieHelper) KieSession(org.kie.api.runtime.KieSession) Man(org.drools.compiler.oopath.model.Man) Woman(org.drools.compiler.oopath.model.Woman) Child(org.drools.compiler.oopath.model.Child) Toy(org.drools.compiler.oopath.model.Toy) Test(org.junit.Test)

Example 27 with Child

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

the class OOPathReactiveTests method testReactivitySettingAttributeInDrl.

@Test
public void testReactivitySettingAttributeInDrl() {
    final String drl = "import org.drools.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";
    final KieSession ksession = new KieHelper().addContent(drl, ResourceType.DRL).build().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 : KieHelper(org.kie.internal.utils.KieHelper) KieSession(org.kie.api.runtime.KieSession) Man(org.drools.compiler.oopath.model.Man) Woman(org.drools.compiler.oopath.model.Woman) Child(org.drools.compiler.oopath.model.Child) Test(org.junit.Test)

Example 28 with Child

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

the class OOPathReactiveTests method testAllNonReactiveAfterNonReactivePart.

@Test
public void testAllNonReactiveAfterNonReactivePart() {
    final String drl = "import org.drools.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";
    final KieSession ksession = new KieHelper().addContent(drl, ResourceType.DRL).build().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 : ArrayList(java.util.ArrayList) KieHelper(org.kie.internal.utils.KieHelper) KieSession(org.kie.api.runtime.KieSession) Man(org.drools.compiler.oopath.model.Man) Woman(org.drools.compiler.oopath.model.Woman) Child(org.drools.compiler.oopath.model.Child) Toy(org.drools.compiler.oopath.model.Toy) Test(org.junit.Test)

Example 29 with Child

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

the class OOPathReactiveTests method testRemoveFromAndAddToReactiveSet.

@Test
public void testRemoveFromAndAddToReactiveSet() {
    final String drl = "import org.drools.compiler.oopath.model.*;\n" + "\n" + "rule R when\n" + "  School( $disease: /children/diseases )\n" + "then\n" + "  insertLogical( $disease );\n" + "end\n";
    final KieSession ksession = new KieHelper().addContent(drl, ResourceType.DRL).build().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.compiler.oopath.model.School) Disease(org.drools.compiler.oopath.model.Disease) KieHelper(org.kie.internal.utils.KieHelper) KieSession(org.kie.api.runtime.KieSession) Child(org.drools.compiler.oopath.model.Child) Test(org.junit.Test)

Aggregations

Child (org.drools.compiler.oopath.model.Child)29 Man (org.drools.compiler.oopath.model.Man)27 KieSession (org.kie.api.runtime.KieSession)27 ArrayList (java.util.ArrayList)24 KieHelper (org.kie.internal.utils.KieHelper)24 Test (org.junit.Test)21 Woman (org.drools.compiler.oopath.model.Woman)18 Toy (org.drools.compiler.oopath.model.Toy)17 School (org.drools.compiler.oopath.model.School)3 InternalFactHandle (org.drools.core.common.InternalFactHandle)3 Disease (org.drools.compiler.oopath.model.Disease)2 KieBase (org.kie.api.KieBase)2 Collection (java.util.Collection)1 InternalKnowledgeBase (org.drools.core.impl.InternalKnowledgeBase)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