use of org.drools.mvel.compiler.Cheese in project drools by kiegroup.
the class TruthMaintenanceTest method testLogicalInsertions.
@Test(timeout = 10000)
public void testLogicalInsertions() throws Exception {
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("test_LogicalInsertions.drl", getClass()), ResourceType.DRL);
Collection<KiePackage> kpkgs = kbuilder.getKnowledgePackages();
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addPackages(kpkgs);
KieSession session = createKnowledgeSession(kbase);
try {
final List list = new ArrayList();
session.setGlobal("list", list);
final Cheese brie = new Cheese("brie", 12);
FactHandle brieHandle = session.insert(brie);
final Cheese provolone = new Cheese("provolone", 12);
FactHandle provoloneHandle = session.insert(provolone);
session.fireAllRules();
session = getSerialisedStatefulKnowledgeSession(session, true);
System.out.println(list);
assertEquals(3, list.size());
assertEquals(3, session.getObjects().size());
brieHandle = getFactHandle(brieHandle, session);
session.delete(brieHandle);
session = getSerialisedStatefulKnowledgeSession(session, true);
assertEquals(2, session.getObjects().size());
provoloneHandle = getFactHandle(provoloneHandle, session);
session.delete(provoloneHandle);
session.fireAllRules();
assertEquals(0, session.getObjects().size());
} finally {
session.dispose();
}
}
use of org.drools.mvel.compiler.Cheese in project drools by kiegroup.
the class TruthMaintenanceTest method testLogicalInsertionsDynamicRule.
@Test
public void testLogicalInsertionsDynamicRule() throws Exception {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("test_LogicalInsertionsDynamicRule.drl", getClass()), ResourceType.DRL);
if (kbuilder.hasErrors()) {
fail(kbuilder.getErrors().toString());
}
Collection<KiePackage> kpkgs = kbuilder.getKnowledgePackages();
InternalKnowledgeBase kbase = (InternalKnowledgeBase) getKnowledgeBase();
kbase.addPackages(kpkgs);
KieSession ksession = createKnowledgeSession(kbase);
try {
final Cheese c1 = new Cheese("a", 1);
final Cheese c2 = new Cheese("b", 2);
final Cheese c3 = new Cheese("c", 3);
List list;
ksession.insert(c1);
FactHandle h = ksession.insert(c2);
ksession.insert(c3);
ksession.fireAllRules();
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
// Check logical Insertions where made for c2 and c3
list = new ArrayList(ksession.getObjects(new ClassObjectFilter(Person.class)));
assertEquals(2, list.size());
assertFalse(list.contains(new Person(c1.getType())));
assertTrue(list.contains(new Person(c2.getType())));
assertTrue(list.contains(new Person(c3.getType())));
// this rule will make a logical assertion for c1 too
kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("test_LogicalInsertionsDynamicRule2.drl", getClass()), ResourceType.DRL);
if (kbuilder.hasErrors()) {
fail(kbuilder.getErrors().toString());
}
Collection<KiePackage> kpkgs2 = kbuilder.getKnowledgePackages();
kbase.addPackages(kpkgs2);
ksession.fireAllRules();
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
kbase = (InternalKnowledgeBase) ksession.getKieBase();
// check all now have just one logical assertion each
list = new ArrayList(ksession.getObjects(new ClassObjectFilter(Person.class)));
assertEquals(3, list.size());
assertTrue(list.contains(new Person(c1.getType())));
assertTrue(list.contains(new Person(c2.getType())));
assertTrue(list.contains(new Person(c3.getType())));
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
// check the packages are correctly populated
assertEquals(3, kbase.getKiePackages().size());
KiePackage test = null, test2 = null;
// different JVMs return the package list in different order
for (KiePackage kpkg : kbase.getKiePackages()) {
if (kpkg.getName().equals("org.drools.compiler.test")) {
test = kpkg;
} else if (kpkg.getName().equals("org.drools.compiler.test2")) {
test2 = kpkg;
}
}
assertNotNull(test);
assertNotNull(test2);
assertEquals("rule1", test.getRules().iterator().next().getName());
assertEquals("rule2", test2.getRules().iterator().next().getName());
// now remove the first rule
kbase.removeRule(test.getName(), test.getRules().iterator().next().getName());
// different JVMs return the package list in different order
for (KiePackage kpkg : kbase.getKiePackages()) {
if (kpkg.getName().equals("org.drools.compiler.test")) {
test = kpkg;
} else if (kpkg.getName().equals("org.drools.compiler.test2")) {
test2 = kpkg;
}
}
assertNotNull(test);
assertNotNull(test2);
// Check the rule was correctly remove
assertEquals(0, test.getRules().size());
assertEquals(1, test2.getRules().size());
assertEquals("rule2", test2.getRules().iterator().next().getName());
list = new ArrayList(ksession.getObjects(new ClassObjectFilter(Person.class)));
assertEquals("removal of the rule should result in retraction of c3's logical assertion", 2, list.size());
assertTrue("c1's logical assertion should not be deleted", list.contains(new Person(c1.getType())));
assertTrue("c2's logical assertion should not be deleted", list.contains(new Person(c2.getType())));
assertFalse("c3's logical assertion should be deleted", list.contains(new Person(c3.getType())));
c2.setPrice(3);
h = getFactHandle(h, ksession);
ksession.update(h, c2);
ksession.fireAllRules();
ksession = getSerialisedStatefulKnowledgeSession(ksession, true);
list = new ArrayList(ksession.getObjects(new ClassObjectFilter(Person.class)));
assertEquals("c2 now has a higher price, its logical assertion should be cancelled", 1, list.size());
assertFalse("The logical assertion cor c2 should have been deleted", list.contains(new Person(c2.getType())));
assertTrue("The logical assertion for c1 should exist", list.contains(new Person(c1.getType())));
// different JVMs return the package list in different order
for (KiePackage kpkg : kbase.getKiePackages()) {
if (kpkg.getName().equals("org.drools.compiler.test")) {
test = kpkg;
} else if (kpkg.getName().equals("org.drools.compiler.test2")) {
test2 = kpkg;
}
}
assertNotNull(test);
assertNotNull(test2);
kbase.removeRule(test2.getName(), test2.getRules().iterator().next().getName());
// different JVMs return the package list in different order
for (KiePackage kpkg : kbase.getKiePackages()) {
if (kpkg.getName().equals("org.drools.compiler.test")) {
test = kpkg;
} else if (kpkg.getName().equals("org.drools.compiler.test2")) {
test2 = kpkg;
}
}
assertNotNull(test);
assertNotNull(test2);
assertEquals(0, test.getRules().size());
assertEquals(0, test2.getRules().size());
list = new ArrayList(ksession.getObjects(new ClassObjectFilter(Person.class)));
assertEquals(0, list.size());
} finally {
ksession.dispose();
}
}
use of org.drools.mvel.compiler.Cheese in project drools by kiegroup.
the class MoreBatchExecutionTest method testQuery.
@Test
public void testQuery() {
KieBase kbase = KieBaseUtil.getKieBaseFromClasspathResources(this.getClass(), kieBaseTestConfiguration, "org/drools/mvel/integrationtests/simple_query_test.drl");
KieSession ksession = kbase.newKieSession();
ksession.insert(new Cheese("stinky", 5));
ksession.insert(new Cheese("smelly", 7));
List<Command<?>> commands = new ArrayList<Command<?>>();
commands.add(CommandFactory.newQuery("numStinkyCheeses", "simple query"));
Command<?> cmds = CommandFactory.newBatchExecution(commands);
ExecutionResults result = (ExecutionResults) ksession.execute(cmds);
assertNotNull("Batch execution result is null!", result);
Object queryResultsObject = result.getValue("numStinkyCheeses");
assertTrue("Retrieved object is null or incorrect!", queryResultsObject != null && queryResultsObject instanceof QueryResults);
assertEquals(1, ((QueryResults) queryResultsObject).size());
}
use of org.drools.mvel.compiler.Cheese in project drools by kiegroup.
the class QueryTest method testOpenQuery.
@Test
public void testOpenQuery() throws Exception {
String str = "";
str += "package org.drools.mvel.compiler.test \n";
str += "import org.drools.mvel.compiler.Cheese \n";
str += "query cheeses(String $type1, String $type2) \n";
str += " stilton : Cheese(type == $type1, $sprice : price) \n";
str += " cheddar : Cheese(type == $type2, $cprice : price == stilton.price) \n";
str += "end\n";
KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("test", kieBaseTestConfiguration, str);
KieSession ksession = kbase.newKieSession();
Cheese stilton1 = new Cheese("stilton", 1);
Cheese cheddar1 = new Cheese("cheddar", 1);
Cheese stilton2 = new Cheese("stilton", 2);
Cheese cheddar2 = new Cheese("cheddar", 2);
Cheese stilton3 = new Cheese("stilton", 3);
Cheese cheddar3 = new Cheese("cheddar", 3);
FactHandle s1Fh = ksession.insert(stilton1);
ksession.insert(stilton2);
ksession.insert(stilton3);
ksession.insert(cheddar1);
ksession.insert(cheddar2);
FactHandle c3Fh = ksession.insert(cheddar3);
final List<Object[]> updated = new ArrayList<Object[]>();
final List<Object[]> removed = new ArrayList<Object[]>();
final List<Object[]> added = new ArrayList<Object[]>();
ViewChangedEventListener listener = new ViewChangedEventListener() {
public void rowUpdated(Row row) {
Object[] array = new Object[6];
array[0] = row.get("stilton");
array[1] = row.get("cheddar");
array[2] = row.get("$sprice");
array[3] = row.get("$cprice");
array[4] = row.get("$type1");
array[5] = row.get("$type2");
updated.add(array);
}
public void rowDeleted(Row row) {
Object[] array = new Object[6];
array[0] = row.get("stilton");
array[1] = row.get("cheddar");
array[2] = row.get("$sprice");
array[3] = row.get("$cprice");
array[4] = row.get("$type1");
array[5] = row.get("$type2");
removed.add(array);
}
public void rowInserted(Row row) {
Object[] array = new Object[6];
array[0] = row.get("stilton");
array[1] = row.get("cheddar");
array[2] = row.get("$sprice");
array[3] = row.get("$cprice");
array[4] = row.get("$type1");
array[5] = row.get("$type2");
added.add(array);
}
};
// Open the LiveQuery
LiveQuery query = ksession.openLiveQuery("cheeses", new Object[] { "stilton", "cheddar" }, listener);
ksession.fireAllRules();
// Assert that on opening we have three rows added
assertEquals(3, added.size());
assertEquals(0, removed.size());
assertEquals(0, updated.size());
// Assert that the identifiers where retrievable
assertSame(stilton1, added.get(2)[0]);
assertSame(cheddar1, added.get(2)[1]);
assertEquals(1, added.get(2)[2]);
assertEquals(1, added.get(2)[3]);
assertEquals("stilton", added.get(2)[4]);
assertEquals("cheddar", added.get(2)[5]);
// And that we have correct values from those rows
assertEquals(3, added.get(0)[3]);
assertEquals(2, added.get(1)[3]);
assertEquals(1, added.get(2)[3]);
// Do an update that causes a match to become untrue, thus triggering a removed
cheddar3.setPrice(4);
ksession.update(c3Fh, cheddar3);
ksession.fireAllRules();
assertEquals(3, added.size());
assertEquals(1, removed.size());
assertEquals(0, updated.size());
assertEquals(4, removed.get(0)[3]);
// Now make that partial true again, and thus another added
cheddar3.setPrice(3);
ksession.update(c3Fh, cheddar3);
ksession.fireAllRules();
assertEquals(4, added.size());
assertEquals(1, removed.size());
assertEquals(0, updated.size());
assertEquals(3, added.get(3)[3]);
// check a standard update
cheddar3.setOldPrice(0);
ksession.update(c3Fh, cheddar3);
ksession.fireAllRules();
assertEquals(4, added.size());
assertEquals(1, removed.size());
assertEquals(1, updated.size());
assertEquals(3, updated.get(0)[3]);
// Check a standard retract
ksession.retract(s1Fh);
ksession.fireAllRules();
assertEquals(4, added.size());
assertEquals(2, removed.size());
assertEquals(1, updated.size());
assertEquals(1, removed.get(1)[3]);
// Close the query, we should get removed events for each row
query.close();
ksession.fireAllRules();
assertEquals(4, added.size());
assertEquals(4, removed.size());
assertEquals(1, updated.size());
assertEquals(2, removed.get(3)[3]);
assertEquals(3, removed.get(2)[3]);
// Check that updates no longer have any impact.
ksession.update(c3Fh, cheddar3);
assertEquals(4, added.size());
assertEquals(4, removed.size());
assertEquals(1, updated.size());
}
use of org.drools.mvel.compiler.Cheese in project drools by kiegroup.
the class QueryTest method runQueryListenerTest.
public void runQueryListenerTest(QueryListenerOption option) throws IOException, ClassNotFoundException {
String str = "";
str += "package org.drools.mvel.integrationtests\n";
str += "import " + Cheese.class.getCanonicalName() + " \n";
str += "query cheeses(String $type) \n";
str += " $cheese : Cheese(type == $type) \n";
str += "end\n";
KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("test", kieBaseTestConfiguration, str);
KieSession ksession = kbase.newKieSession();
// insert some data into the session
for (int i = 0; i < 10000; i++) {
ksession.insert(new Cheese(i % 2 == 0 ? "stilton" : "brie"));
}
// query the session
List<Cheese> cheeses;
for (int i = 0; i < 100; i++) {
org.kie.api.runtime.rule.QueryResults queryResults = ksession.getQueryResults("cheeses", new Object[] { "stilton" });
cheeses = new ArrayList<Cheese>();
for (QueryResultsRow row : queryResults) {
cheeses.add((Cheese) row.get("$cheese"));
}
assertEquals(5000, cheeses.size());
}
}
Aggregations