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));
}
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);
}
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");
}
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);
}
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);
}
Aggregations