Search in sources :

Example 36 with FactHandle

use of org.kie.api.runtime.rule.FactHandle in project drools by kiegroup.

the class TruthMaintenanceTest method testTMSWithLateUpdate.

@Test(timeout = 10000)
public void testTMSWithLateUpdate() {
    // JBRULES-3416
    String str = "" + "package org.drools.compiler.test;\n" + "\n" + "import org.drools.compiler.Father;\n" + "import org.drools.compiler.YoungestFather;\n" + "\n" + "rule \"findMarriedCouple\"\n" + "when\n" + "    $h: Father()\n" + "    not Father(father == $h)\n" + "then\n" + "    insertLogical(new YoungestFather($h));\n" + "end";
    KieBase kbase = loadKnowledgeBaseFromString(str);
    KieSession kSession = createKnowledgeSession(kbase);
    Father abraham = new Father("abraham");
    Father bart = new Father("bart");
    Collection<? extends Object> youngestFathers;
    bart.setFather(abraham);
    FactHandle abrahamHandle = kSession.insert(abraham);
    FactHandle bartHandle = kSession.insert(bart);
    kSession.fireAllRules();
    youngestFathers = kSession.getObjects(new ClassObjectFilter(YoungestFather.class));
    assertEquals(1, youngestFathers.size());
    assertEquals(bart, ((YoungestFather) youngestFathers.iterator().next()).getMan());
    Father homer = new Father("homer");
    FactHandle homerHandle = kSession.insert(homer);
    homer.setFather(abraham);
    // If we do kSession.update(homerHandle, homer) here instead of after bart.setFather(homer) it works
    // But in some use cases we cannot do this because fact fields are actually called
    // while the facts are in an invalid temporary state
    bart.setFather(homer);
    // Late update call for homer, after bart has been changed too, but before fireAllRules
    kSession.update(homerHandle, homer);
    kSession.update(bartHandle, bart);
    kSession.fireAllRules();
    youngestFathers = kSession.getObjects(new ClassObjectFilter(YoungestFather.class));
    assertEquals(1, youngestFathers.size());
    assertEquals(bart, ((YoungestFather) youngestFathers.iterator().next()).getMan());
// System.err.println(reportWMObjects(kSession));
}
Also used : ClassObjectFilter(org.drools.core.ClassObjectFilter) InternalFactHandle(org.drools.core.common.InternalFactHandle) FactHandle(org.kie.api.runtime.rule.FactHandle) DefaultFactHandle(org.drools.core.common.DefaultFactHandle) KieBase(org.kie.api.KieBase) KieSession(org.kie.api.runtime.KieSession) Father(org.drools.compiler.Father) YoungestFather(org.drools.compiler.YoungestFather) Test(org.junit.Test)

Example 37 with FactHandle

use of org.kie.api.runtime.rule.FactHandle in project drools by kiegroup.

the class BasicUpdateTest method updateTheOnlyFactTest.

@Test
public void updateTheOnlyFactTest() {
    final Person person = new Person("George", 18);
    final FactHandle factPerson = ksession.insert(person);
    assertThat(ksession.getObjects()).hasSize(1);
    assertThat(ksession.getObjects().iterator().next()).isInstanceOf(Person.class);
    Person personToBeVerified = (Person) ksession.getObjects().iterator().next();
    verifyPerson(person, personToBeVerified, 18, "George", true);
    ksession.update(factPerson, new Person("Henry", 21));
    verifyFactsPresentInSession(1, Person.class);
    personToBeVerified = (Person) ksession.getObjects().iterator().next();
    verifyPerson(person, personToBeVerified, 21, "Henry", false);
}
Also used : FactHandle(org.kie.api.runtime.rule.FactHandle) Person(org.drools.core.test.model.Person) Test(org.junit.Test)

Example 38 with FactHandle

use of org.kie.api.runtime.rule.FactHandle in project drools by kiegroup.

the class BasicUpdateTest method updateWithDifferentClassGetQueryResultsTest.

@Test
public void updateWithDifferentClassGetQueryResultsTest() {
    final Person person = new Person("George", 18);
    final FactHandle fact = ksession.insert(person);
    verifyFactsWithQuery(Person.class, "persons", person);
    final Cheese cheese = new Cheese("Camembert", 2);
    ksession.update(fact, cheese);
    verifyWithQueryNoPersonsPresentInFacts();
    verifyFactsPresentInSession(1, Cheese.class);
    Cheese cheeseToBeVerified = (Cheese) ksession.getObjects().iterator().next();
    verifyCheese(cheeseToBeVerified, 2, "Camembert");
    cheeseToBeVerified = verifyFactPresentInSession(fact, Cheese.class);
    verifyCheese(cheeseToBeVerified, 2, "Camembert");
}
Also used : FactHandle(org.kie.api.runtime.rule.FactHandle) Cheese(org.drools.core.test.model.Cheese) Person(org.drools.core.test.model.Person) Test(org.junit.Test)

Example 39 with FactHandle

use of org.kie.api.runtime.rule.FactHandle in project drools by kiegroup.

the class BasicUpdateTest method updateWithNullTest.

@Test(expected = NullPointerException.class)
public void updateWithNullTest() {
    final Person person = new Person("George", 18);
    final FactHandle factPerson = ksession.insert(person);
    verifyFactsPresentInSession(1, Person.class);
    ksession.update(factPerson, null);
}
Also used : FactHandle(org.kie.api.runtime.rule.FactHandle) Person(org.drools.core.test.model.Person) Test(org.junit.Test)

Example 40 with FactHandle

use of org.kie.api.runtime.rule.FactHandle in project drools by kiegroup.

the class BasicUpdateTest method updateFireRulesTest.

@Test
public void updateFireRulesTest() {
    final Person george = new Person("George", 17);
    final Person henry = new Person("Henry", 25);
    final FactHandle georgeFact = ksession.insert(george);
    ksession.insert(henry);
    verifyFactsWithQuery(Person.class, "persons", george, henry);
    final List<Person> drivers = new ArrayList<>();
    ksession.setGlobal("drivers", drivers);
    assertThat(ksession.fireAllRules()).isEqualTo(1);
    verifyList(drivers, george, henry);
    george.setAge(18);
    ksession.update(georgeFact, george);
    verifyFactsWithQuery(Person.class, "persons", george, henry);
    assertThat(ksession.fireAllRules()).isEqualTo(1);
    verifyList(drivers, null, george, henry);
}
Also used : FactHandle(org.kie.api.runtime.rule.FactHandle) ArrayList(java.util.ArrayList) Person(org.drools.core.test.model.Person) Test(org.junit.Test)

Aggregations

FactHandle (org.kie.api.runtime.rule.FactHandle)650 Test (org.junit.Test)547 KieSession (org.kie.api.runtime.KieSession)506 KieBase (org.kie.api.KieBase)304 ArrayList (java.util.ArrayList)298 InternalFactHandle (org.drools.core.common.InternalFactHandle)192 List (java.util.List)165 DefaultFactHandle (org.drools.core.common.DefaultFactHandle)119 StatelessKieSession (org.kie.api.runtime.StatelessKieSession)66 KieHelper (org.kie.internal.utils.KieHelper)50 Person (org.drools.modelcompiler.domain.Person)46 KnowledgeBuilder (org.kie.internal.builder.KnowledgeBuilder)43 HashMap (java.util.HashMap)41 Person (org.drools.compiler.Person)41 InternalWorkingMemory (org.drools.core.common.InternalWorkingMemory)39 InternalKnowledgeBase (org.drools.core.impl.InternalKnowledgeBase)39 Person (org.drools.mvel.compiler.Person)38 Ignore (org.junit.Ignore)36 Match (org.kie.api.runtime.rule.Match)36 Collection (java.util.Collection)34