Search in sources :

Example 91 with Cheese

use of org.drools.compiler.Cheese in project drools by kiegroup.

the class DynamicRulesTest method checkCollectWithDynamicRules.

private void checkCollectWithDynamicRules(String originalDrl) throws java.io.IOException, ClassNotFoundException {
    InternalKnowledgeBase kbase = (InternalKnowledgeBase) loadKnowledgeBase(originalDrl);
    KieSession session = createKnowledgeSession(kbase);
    List<?> list = new ArrayList<Object>();
    session.setGlobal("results", list);
    session.insert(new Cheese("stilton", 10));
    session.insert(new Cheese("brie", 10));
    session.insert(new Cheese("stilton", 10));
    session.insert(new Cheese("muzzarela", 10));
    kbase.addPackages(loadKnowledgePackages("test_CollectDynamicRules2.drl"));
    session.fireAllRules();
    kbase = SerializationHelper.serializeObject(kbase);
    // fire all rules is automatic
    assertEquals(1, list.size());
    assertEquals(2, ((List<?>) list.get(0)).size());
}
Also used : ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) Cheese(org.drools.compiler.Cheese) InternalKnowledgeBase(org.drools.core.impl.InternalKnowledgeBase)

Example 92 with Cheese

use of org.drools.compiler.Cheese in project drools by kiegroup.

the class MergePackageTest method testMergingDifferentPackages2.

@Test
public void testMergingDifferentPackages2() throws Exception {
    // using different builders
    try {
        final Collection<KiePackage> kpkgs1 = loadKnowledgePackages("test_RuleNameClashes1.drl");
        KiePackage kpkg1 = kpkgs1.stream().filter(pkg -> pkg.getName().equals("org.drools.package1")).findFirst().get();
        assertEquals(1, kpkg1.getRules().size());
        final Collection<KiePackage> kpkgs2 = loadKnowledgePackages("test_RuleNameClashes2.drl");
        KiePackage kpkg2 = kpkgs2.stream().filter(pkg -> pkg.getName().equals("org.drools.package2")).findFirst().get();
        assertEquals(1, kpkg2.getRules().size());
        InternalKnowledgeBase kbase = (InternalKnowledgeBase) loadKnowledgeBase();
        kbase.addPackages(kpkgs1);
        kbase.addPackages(kpkgs2);
        kbase = SerializationHelper.serializeObject(kbase);
        final KieSession ksession = createKnowledgeSession(kbase);
        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 KnowledgeBuilderImpl.PackageMergeException e) {
        fail("Should not raise exception when merging different packages into the same rulebase: " + e.getMessage());
    } catch (final Exception e) {
        e.printStackTrace();
        fail("unexpected exception: " + e.getMessage());
    }
}
Also used : KiePackage(org.kie.api.definition.KiePackage) KnowledgeBuilderImpl(org.drools.compiler.builder.impl.KnowledgeBuilderImpl) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) ArrayList(java.util.ArrayList) List(java.util.List) Cheese(org.drools.compiler.Cheese) InternalKnowledgeBase(org.drools.core.impl.InternalKnowledgeBase) Test(org.junit.Test)

Example 93 with Cheese

use of org.drools.compiler.Cheese in project drools by kiegroup.

the class MoreBatchExecutionTest method testFireAllRules.

@Test
public void testFireAllRules() throws Exception {
    KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
    kbuilder.add(ResourceFactory.newClassPathResource("org/drools/compiler/integrationtests/drl/test_ImportFunctions.drl"), ResourceType.DRL);
    if (kbuilder.hasErrors()) {
        fail(kbuilder.getErrors().toString());
    }
    InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
    kbase.addPackages(kbuilder.getKnowledgePackages());
    ksession = createKnowledgeSession(kbase);
    final Cheese cheese = new Cheese("stilton", 15);
    ksession.insert(cheese);
    List<?> list = new ArrayList();
    ksession.setGlobal("list", list);
    List<Command<?>> commands = new ArrayList<Command<?>>();
    commands.add(CommandFactory.newFireAllRules("fired"));
    Command<?> cmds = CommandFactory.newBatchExecution(commands);
    ExecutionResults result = (ExecutionResults) ksession.execute(cmds);
    assertNotNull("Batch execution result is null!", result);
    Object firedObject = result.getValue("fired");
    assertTrue("Retrieved object is null or incorrect!", firedObject != null && firedObject instanceof Integer);
    assertEquals(4, firedObject);
    list = (List<?>) ksession.getGlobal("list");
    assertEquals(4, list.size());
    assertEquals("rule1", list.get(0));
    assertEquals("rule2", list.get(1));
    assertEquals("rule3", list.get(2));
    assertEquals("rule4", list.get(3));
}
Also used : KnowledgeBuilder(org.kie.internal.builder.KnowledgeBuilder) Command(org.kie.api.command.Command) ExecutionResults(org.kie.api.runtime.ExecutionResults) ArrayList(java.util.ArrayList) Cheese(org.drools.compiler.Cheese) InternalKnowledgeBase(org.drools.core.impl.InternalKnowledgeBase) Test(org.junit.Test)

Example 94 with Cheese

use of org.drools.compiler.Cheese in project drools by kiegroup.

the class QueryBuilderTest method testQuery.

@Test
public void testQuery() throws Exception {
    final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl();
    final PackageDescr packageDescr = new PackageDescr("p1");
    final QueryDescr queryDescr = new QueryDescr("query1");
    queryDescr.addParameter("String", "$type");
    packageDescr.addRule(queryDescr);
    final AndDescr lhs = new AndDescr();
    queryDescr.setLhs(lhs);
    final PatternDescr pattern = new PatternDescr(Cheese.class.getName(), "stilton");
    lhs.addDescr(pattern);
    pattern.addConstraint(new ExprConstraintDescr("type == $type"));
    // Another query, no parameters
    QueryDescr queryDescr2 = new QueryDescr("query2");
    packageDescr.addRule(queryDescr2);
    AndDescr lhs2 = new AndDescr();
    queryDescr2.setLhs(lhs2);
    PatternDescr pattern2 = new PatternDescr(Cheese.class.getName());
    lhs2.addDescr(pattern2);
    builder.addPackage(packageDescr);
    assertLength(0, builder.getErrors().getErrors());
    InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
    kbase.addPackages(Arrays.asList(new KiePackage[] { builder.getPackage(packageDescr.getName()) }));
    final KieSession session = kbase.newKieSession();
    session.insert(new Cheese("stilton", 15));
    QueryResults results = session.getQueryResults("query1", "stilton");
    assertEquals(1, results.size());
    Object object = results.iterator().next().get("stilton");
    assertEquals(new Cheese("stilton", 15), object);
    results = session.getQueryResults("query1", new Object[] { "cheddar" });
    assertEquals(0, results.size());
    session.insert(new Cheese("dolcelatte", 20));
    results = session.getQueryResults("query2", new Object[] {});
    assertEquals(2, results.size());
}
Also used : QueryDescr(org.drools.compiler.lang.descr.QueryDescr) PatternDescr(org.drools.compiler.lang.descr.PatternDescr) KiePackage(org.kie.api.definition.KiePackage) KnowledgeBuilderImpl(org.drools.compiler.builder.impl.KnowledgeBuilderImpl) AndDescr(org.drools.compiler.lang.descr.AndDescr) Cheese(org.drools.compiler.Cheese) KieSession(org.kie.api.runtime.KieSession) PackageDescr(org.drools.compiler.lang.descr.PackageDescr) ExprConstraintDescr(org.drools.compiler.lang.descr.ExprConstraintDescr) InternalKnowledgeBase(org.drools.core.impl.InternalKnowledgeBase) QueryResults(org.kie.api.runtime.rule.QueryResults) Test(org.junit.Test)

Example 95 with Cheese

use of org.drools.compiler.Cheese in project drools by kiegroup.

the class AccumulateTest method testAccumulateReturningNull.

@Test(timeout = 10000)
public void testAccumulateReturningNull() throws Exception {
    // read in the source
    KieSession wm = getKieSessionFromResources("test_AccumulateReturningNull.drl");
    final List<?> results = new ArrayList<Object>();
    wm.setGlobal("results", results);
    wm.insert(new Cheese("stilton", 10));
}
Also used : ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) Cheese(org.drools.compiler.Cheese) Test(org.junit.Test)

Aggregations

Cheese (org.drools.compiler.Cheese)222 Test (org.junit.Test)204 KieSession (org.kie.api.runtime.KieSession)195 ArrayList (java.util.ArrayList)152 KieBase (org.kie.api.KieBase)138 List (java.util.List)100 Person (org.drools.compiler.Person)92 FactHandle (org.kie.api.runtime.rule.FactHandle)53 InternalKnowledgeBase (org.drools.core.impl.InternalKnowledgeBase)36 KiePackage (org.kie.api.definition.KiePackage)22 StatelessKieSession (org.kie.api.runtime.StatelessKieSession)21 InternalFactHandle (org.drools.core.common.InternalFactHandle)20 Cheesery (org.drools.compiler.Cheesery)14 IteratorToList (org.drools.compiler.integrationtests.IteratorToList)14 KnowledgeBuilder (org.kie.internal.builder.KnowledgeBuilder)13 HashMap (java.util.HashMap)10 Command (org.kie.api.command.Command)8 ExecutionResults (org.kie.api.runtime.ExecutionResults)8 KnowledgeBuilderImpl (org.drools.compiler.builder.impl.KnowledgeBuilderImpl)7 PackageDescr (org.drools.compiler.lang.descr.PackageDescr)7