use of org.drools.mvel.compiler.Cheese in project drools by kiegroup.
the class MVELTest method testMVELSoundex.
@Test
public void testMVELSoundex() throws Exception {
// read in the source
KieBase kbase = KieBaseUtil.getKieBaseFromClasspathResources(getClass(), kieBaseTestConfiguration, "MVEL_soundex.drl");
KieSession ksession = kbase.newKieSession();
ksession = SerializationHelper.getSerialisedStatefulKnowledgeSession(ksession, true);
final Cheese c = new Cheese("fubar", 2);
ksession.insert(c);
ksession.fireAllRules();
assertEquals(42, c.getPrice());
}
use of org.drools.mvel.compiler.Cheese in project drools by kiegroup.
the class MergePackageTest method testMergingDifferentPackages2.
@Test
public void testMergingDifferentPackages2() throws Exception {
// using different builders
try {
Collection<KiePackage> kpkgs1 = KieBaseUtil.getKieBaseFromClasspathResources("tmp", getClass(), kieBaseTestConfiguration, "test_RuleNameClashes1.drl").getKiePackages();
KiePackage kpkg1 = kpkgs1.stream().filter(pkg -> pkg.getName().equals("org.drools.package1")).findFirst().get();
assertEquals(1, kpkg1.getRules().size());
Collection<KiePackage> kpkgs2 = KieBaseUtil.getKieBaseFromClasspathResources("tmp", getClass(), kieBaseTestConfiguration, "test_RuleNameClashes2.drl").getKiePackages();
KiePackage kpkg2 = kpkgs2.stream().filter(pkg -> pkg.getName().equals("org.drools.package2")).findFirst().get();
assertEquals(1, kpkg2.getRules().size());
InternalKnowledgeBase kbase = (InternalKnowledgeBase) KieBaseUtil.getKieBaseFromKieModuleFromDrl("test", kieBaseTestConfiguration);
kbase.addPackages(kpkgs1);
kbase.addPackages(kpkgs2);
KieSession ksession = kbase.newKieSession();
final List results = new ArrayList();
ksession.setGlobal("results", results);
ksession.insert(new Cheese("stilton", 10));
ksession.insert(new Cheese("brie", 5));
ksession.fireAllRules();
assertEquals(results.toString(), 2, results.size());
assertTrue(results.contains("p1.r1"));
assertTrue(results.contains("p2.r1"));
} catch (final Exception e) {
e.printStackTrace();
fail("unexpected exception: " + e.getMessage());
}
}
use of org.drools.mvel.compiler.Cheese in project drools by kiegroup.
the class QueryTest method testOpenQueryNoParams.
@Test
public void testOpenQueryNoParams() throws Exception {
// RHDM-717
String str = "";
str += "package org.drools.mvel.compiler.test \n";
str += "import org.drools.mvel.compiler.Cheese \n";
str += "query cheeses \n";
str += " stilton : Cheese(type == 'stilton') \n";
str += " cheddar : Cheese(type == 'cheddar', 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[2];
array[0] = row.get("stilton");
array[1] = row.get("cheddar");
updated.add(array);
}
public void rowDeleted(Row row) {
Object[] array = new Object[2];
array[0] = row.get("stilton");
array[1] = row.get("cheddar");
removed.add(array);
}
public void rowInserted(Row row) {
Object[] array = new Object[2];
array[0] = row.get("stilton");
array[1] = row.get("cheddar");
added.add(array);
}
};
// Open the LiveQuery
LiveQuery query = ksession.openLiveQuery("cheeses", null, listener);
ksession.fireAllRules();
// Assert that on opening we have three rows added
assertEquals(3, added.size());
assertEquals(0, removed.size());
assertEquals(0, updated.size());
// 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());
// 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());
// 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());
// Check a standard retract
ksession.retract(s1Fh);
ksession.fireAllRules();
assertEquals(4, added.size());
assertEquals(2, removed.size());
assertEquals(1, updated.size());
// 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());
// 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 testQueryWithMultipleResultsOnKnowledgeApi.
@Test
public void testQueryWithMultipleResultsOnKnowledgeApi() throws Exception {
String str = "";
str += "package org.drools.mvel.compiler.test \n";
str += "import org.drools.mvel.compiler.Cheese \n";
str += "query cheeses \n";
str += " stilton : Cheese(type == 'stilton') \n";
str += " cheddar : Cheese(type == 'cheddar', price == stilton.price) \n";
str += "end\n";
KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("test", kieBaseTestConfiguration, str);
KieSession session = 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);
Set set = new HashSet();
List list = new ArrayList();
list.add(stilton1);
list.add(cheddar1);
set.add(list);
list = new ArrayList();
list.add(stilton2);
list.add(cheddar2);
set.add(list);
list = new ArrayList();
list.add(stilton3);
list.add(cheddar3);
set.add(list);
session.insert(stilton1);
session.insert(stilton2);
session.insert(stilton3);
session.insert(cheddar1);
session.insert(cheddar2);
session.insert(cheddar3);
org.kie.api.runtime.rule.QueryResults results = getQueryResults(session, "cheeses");
assertEquals(3, results.size());
assertEquals(2, results.getIdentifiers().length);
Set newSet = new HashSet();
for (org.kie.api.runtime.rule.QueryResultsRow result : results) {
list = new ArrayList();
list.add(result.get("stilton"));
list.add(result.get("cheddar"));
newSet.add(list);
}
assertEquals(set, newSet);
FlatQueryResults flatResults = new FlatQueryResults(((StatefulKnowledgeSessionImpl) session).getQueryResults("cheeses"));
newSet = new HashSet();
for (org.kie.api.runtime.rule.QueryResultsRow result : flatResults) {
list = new ArrayList();
list.add(result.get("stilton"));
list.add(result.get("cheddar"));
newSet.add(list);
}
assertEquals(set, newSet);
}
use of org.drools.mvel.compiler.Cheese in project drools by kiegroup.
the class MVELAccumulateBuilderTest method testSimpleExpression.
@Test
public void testSimpleExpression() {
KnowledgeBuilderImpl pkgBuilder = new KnowledgeBuilderImpl();
pkgBuilder.addPackage(new PackageDescr("pkg1"));
InternalKnowledgePackage pkg = pkgBuilder.getPackage("pkg1");
final RuleDescr ruleDescr = new RuleDescr("rule 1");
final KnowledgeBuilderConfigurationImpl conf = pkgBuilder.getBuilderConfiguration();
DialectCompiletimeRegistry dialectRegistry = pkgBuilder.getPackageRegistry(pkg.getName()).getDialectCompiletimeRegistry();
MVELDialect mvelDialect = (MVELDialect) dialectRegistry.getDialect("mvel");
final RuleBuildContext context = new RuleBuildContext(pkgBuilder, ruleDescr, dialectRegistry, pkg, mvelDialect);
final AccumulateDescr accDescr = new AccumulateDescr();
final PatternDescr inputPattern = new PatternDescr("org.drools.mvel.compiler.Cheese", "$cheese");
accDescr.setInputPattern(inputPattern);
accDescr.setInitCode("total = 0;");
accDescr.setActionCode("total += $cheese.price;");
accDescr.setReverseCode("total -= $cheese.price;");
accDescr.setResultCode("new Integer(total)");
final MVELAccumulateBuilder builder = new MVELAccumulateBuilder();
final Accumulate acc = (Accumulate) builder.build(context, accDescr);
((MVELCompileable) acc.getAccumulators()[0]).compile((MVELDialectRuntimeData) pkgBuilder.getPackageRegistry(pkg.getName()).getDialectRuntimeRegistry().getDialectData("mvel"));
InternalKnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase();
StatefulKnowledgeSessionImpl ksession = (StatefulKnowledgeSessionImpl) kBase.newKieSession();
BuildContext buildContext = new BuildContext(kBase, Collections.emptyList());
MockLeftTupleSink sink = new MockLeftTupleSink(buildContext);
MockTupleSource source = new MockTupleSource(1, buildContext);
source.setObjectCount(1);
sink.setLeftTupleSource(source);
final Cheese cheddar1 = new Cheese("cheddar", 10);
final Cheese cheddar2 = new Cheese("cheddar", 8);
final InternalFactHandle f0 = (InternalFactHandle) ksession.insert(new InitialFactImpl());
final InternalFactHandle f1 = (InternalFactHandle) ksession.insert(cheddar1);
final InternalFactHandle f2 = (InternalFactHandle) ksession.insert(cheddar2);
final LeftTupleImpl tuple = new LeftTupleImpl(f0, sink, true);
Object wmContext = acc.createWorkingMemoryContext();
AccumulateNode.AccumulateContext accContext = new AccumulateNode.AccumulateContext();
Object funcContext = acc.createFunctionContext();
funcContext = acc.init(wmContext, accContext, funcContext, tuple, ksession);
accContext.setFunctionContext(funcContext);
Object value1 = acc.accumulate(wmContext, accContext, tuple, f1, ksession);
acc.accumulate(wmContext, accContext, tuple, f2, ksession);
assertEquals(new Integer(18), acc.getResult(wmContext, accContext, tuple, ksession));
LeftTuple match = new FromNodeLeftTuple();
match.setContextObject(value1);
acc.tryReverse(wmContext, accContext, tuple, f1, null, match, ksession);
assertEquals(new Integer(8), acc.getResult(wmContext, accContext, tuple, ksession));
}
Aggregations