Search in sources :

Example 81 with Cheese

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();
    }
}
Also used : KnowledgeBuilder(org.kie.internal.builder.KnowledgeBuilder) KiePackage(org.kie.api.definition.KiePackage) InternalFactHandle(org.drools.core.common.InternalFactHandle) FactHandle(org.kie.api.runtime.rule.FactHandle) 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 82 with Cheese

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();
    }
}
Also used : KnowledgeBuilder(org.kie.internal.builder.KnowledgeBuilder) ClassObjectFilter(org.drools.core.ClassObjectFilter) KiePackage(org.kie.api.definition.KiePackage) InternalFactHandle(org.drools.core.common.InternalFactHandle) FactHandle(org.kie.api.runtime.rule.FactHandle) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) Cheese(org.drools.mvel.compiler.Cheese) ArrayList(java.util.ArrayList) List(java.util.List) Person(org.drools.mvel.compiler.Person) InternalKnowledgeBase(org.drools.kiesession.rulebase.InternalKnowledgeBase) Test(org.junit.Test)

Example 83 with Cheese

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());
}
Also used : Command(org.kie.api.command.Command) KieBase(org.kie.api.KieBase) ExecutionResults(org.kie.api.runtime.ExecutionResults) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) Cheese(org.drools.mvel.compiler.Cheese) QueryResults(org.kie.api.runtime.rule.QueryResults) Test(org.junit.Test)

Example 84 with Cheese

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());
}
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 85 with Cheese

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

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