Search in sources :

Example 56 with Cheese

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());
}
Also used : KieBase(org.kie.api.KieBase) StatelessKieSession(org.kie.api.runtime.StatelessKieSession) KieSession(org.kie.api.runtime.KieSession) Cheese(org.drools.mvel.compiler.Cheese) Test(org.junit.Test)

Example 57 with Cheese

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());
    }
}
Also used : KiePackage(org.kie.api.definition.KiePackage) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) ArrayList(java.util.ArrayList) List(java.util.List) Cheese(org.drools.mvel.compiler.Cheese) InternalKnowledgeBase(org.drools.kiesession.rulebase.InternalKnowledgeBase) Test(org.junit.Test)

Example 58 with Cheese

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());
}
Also used : ViewChangedEventListener(org.kie.api.runtime.rule.ViewChangedEventListener) InternalFactHandle(org.drools.core.common.InternalFactHandle) FactHandle(org.kie.api.runtime.rule.FactHandle) KieBase(org.kie.api.KieBase) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) Cheese(org.drools.mvel.compiler.Cheese) DomainObject(org.drools.mvel.compiler.DomainObject) InsertedObject(org.drools.mvel.compiler.InsertedObject) Row(org.kie.api.runtime.rule.Row) QueryResultsRow(org.kie.api.runtime.rule.QueryResultsRow) LiveQuery(org.kie.api.runtime.rule.LiveQuery) Test(org.junit.Test)

Example 59 with Cheese

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);
}
Also used : Set(java.util.Set) TreeSet(java.util.TreeSet) HashSet(java.util.HashSet) QueryResultsRow(org.kie.api.runtime.rule.QueryResultsRow) ArrayList(java.util.ArrayList) Cheese(org.drools.mvel.compiler.Cheese) QueryResults(org.kie.api.runtime.rule.QueryResults) KieBase(org.kie.api.KieBase) KieSession(org.kie.api.runtime.KieSession) List(java.util.List) ArrayList(java.util.ArrayList) FlatQueryResults(org.drools.core.runtime.rule.impl.FlatQueryResults) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 60 with Cheese

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));
}
Also used : MVELCompileable(org.drools.mvel.expr.MVELCompileable) PatternDescr(org.drools.drl.ast.descr.PatternDescr) KnowledgeBuilderConfigurationImpl(org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl) AccumulateNode(org.drools.core.reteoo.AccumulateNode) MockLeftTupleSink(org.drools.core.reteoo.MockLeftTupleSink) Cheese(org.drools.mvel.compiler.Cheese) AccumulateDescr(org.drools.drl.ast.descr.AccumulateDescr) LeftTuple(org.drools.core.reteoo.LeftTuple) FromNodeLeftTuple(org.drools.core.reteoo.FromNodeLeftTuple) Accumulate(org.drools.core.rule.Accumulate) MVELAccumulateBuilder(org.drools.mvel.builder.MVELAccumulateBuilder) FromNodeLeftTuple(org.drools.core.reteoo.FromNodeLeftTuple) MockTupleSource(org.drools.core.reteoo.MockTupleSource) LeftTupleImpl(org.drools.core.reteoo.LeftTupleImpl) PackageDescr(org.drools.drl.ast.descr.PackageDescr) InternalFactHandle(org.drools.core.common.InternalFactHandle) InternalKnowledgeBase(org.drools.kiesession.rulebase.InternalKnowledgeBase) RuleBuildContext(org.drools.compiler.rule.builder.RuleBuildContext) DialectCompiletimeRegistry(org.drools.compiler.compiler.DialectCompiletimeRegistry) MVELDialect(org.drools.mvel.builder.MVELDialect) InitialFactImpl(org.drools.core.reteoo.InitialFactImpl) BuildContext(org.drools.core.reteoo.builder.BuildContext) RuleBuildContext(org.drools.compiler.rule.builder.RuleBuildContext) KnowledgeBuilderImpl(org.drools.compiler.builder.impl.KnowledgeBuilderImpl) StatefulKnowledgeSessionImpl(org.drools.kiesession.session.StatefulKnowledgeSessionImpl) RuleDescr(org.drools.drl.ast.descr.RuleDescr) InternalKnowledgePackage(org.drools.core.definitions.InternalKnowledgePackage) Test(org.junit.Test)

Aggregations

Cheese (org.drools.mvel.compiler.Cheese)136 Test (org.junit.Test)129 KieSession (org.kie.api.runtime.KieSession)112 KieBase (org.kie.api.KieBase)96 ArrayList (java.util.ArrayList)90 List (java.util.List)65 Person (org.drools.mvel.compiler.Person)47 FactHandle (org.kie.api.runtime.rule.FactHandle)29 InternalKnowledgeBase (org.drools.kiesession.rulebase.InternalKnowledgeBase)24 KiePackage (org.kie.api.definition.KiePackage)23 InternalFactHandle (org.drools.core.common.InternalFactHandle)20 StatelessKieSession (org.kie.api.runtime.StatelessKieSession)20 IteratorToList (org.drools.mvel.integrationtests.IteratorToList)14 Command (org.kie.api.command.Command)10 ExecutionResults (org.kie.api.runtime.ExecutionResults)10 PackageDescr (org.drools.drl.ast.descr.PackageDescr)7 KnowledgeBuilderImpl (org.drools.compiler.builder.impl.KnowledgeBuilderImpl)6 Cheesery (org.drools.mvel.compiler.Cheesery)6 ClassObjectFilter (org.drools.core.ClassObjectFilter)5 ClassObjectType (org.drools.core.base.ClassObjectType)5