Search in sources :

Example 11 with Rule

use of org.kie.api.definition.rule.Rule in project drools by kiegroup.

the class Misc2Test method testCustomDynamicSalience.

@Test
public void testCustomDynamicSalience() {
    String drl = "package org.drools.test; " + "import " + Person.class.getName() + "; " + "global java.util.List list; " + "rule A " + "when " + "     $person : Person( name == 'a' ) " + "then" + "     list.add( $person.getAge() ); " + "end " + "rule B " + "when " + "     $person : Person( name == 'b' ) " + "then" + "     list.add( $person.getAge() ); " + "end " + "";
    KieHelper helper = new KieHelper();
    helper.addContent(drl, ResourceType.DRL);
    KieSession session = helper.build().newKieSession();
    List<Integer> list = new ArrayList<Integer>();
    session.setGlobal("list", list);
    for (Rule r : session.getKieBase().getKiePackage("org.drools.test").getRules()) {
        ((RuleImpl) r).setSalience(new Salience() {

            @Override
            public int getValue(KnowledgeHelper khelper, Rule rule, WorkingMemory workingMemory) {
                if (khelper == null) {
                    return 0;
                }
                InternalFactHandle h = (InternalFactHandle) khelper.getMatch().getFactHandles().get(0);
                return ((Person) h.getObject()).getAge();
            }

            @Override
            public int getValue() {
                throw new IllegalStateException("Should not have been called...");
            }

            @Override
            public boolean isDynamic() {
                return true;
            }
        });
    }
    session.insert(new Person("a", 1));
    session.insert(new Person("a", 5));
    session.insert(new Person("a", 3));
    session.insert(new Person("b", 4));
    session.insert(new Person("b", 2));
    session.insert(new Person("b", 6));
    session.fireAllRules();
    assertEquals(Arrays.asList(6, 5, 4, 3, 2, 1), list);
}
Also used : WorkingMemory(org.drools.core.WorkingMemory) InternalWorkingMemory(org.drools.core.common.InternalWorkingMemory) ArrayList(java.util.ArrayList) KieHelper(org.kie.internal.utils.KieHelper) RuleImpl(org.drools.core.definitions.rule.impl.RuleImpl) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Salience(org.drools.core.spi.Salience) KieSession(org.kie.api.runtime.KieSession) StatelessKieSession(org.kie.api.runtime.StatelessKieSession) KnowledgeHelper(org.drools.core.spi.KnowledgeHelper) Rule(org.kie.api.definition.rule.Rule) InternalFactHandle(org.drools.core.common.InternalFactHandle) Person(org.drools.compiler.Person) Test(org.junit.Test)

Example 12 with Rule

use of org.kie.api.definition.rule.Rule in project drools by kiegroup.

the class ActivationIteratorTest method testFilteredEagerEvaluation.

@Test(timeout = 10000)
public void testFilteredEagerEvaluation() throws Exception {
    String str = "package org.simple \n" + "rule xxx @Propagation(EAGER) \n" + "when \n" + "  $s : String()\n" + "then \n" + "end  \n" + "rule yyy @Propagation(EAGER) \n" + "when \n" + "  $s : String()\n" + "then \n" + "end  \n";
    KieSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
    conf.setOption(new ForceEagerActivationOption.FILTERED(new ForceEagerActivationFilter() {

        @Override
        public boolean accept(Rule rule) {
            return rule.getName().equals("xxx");
        }
    }));
    KieBase kbase = loadKnowledgeBaseFromString(str);
    KieSession ksession = createKnowledgeSession(kbase, conf);
    final List list = new ArrayList();
    AgendaEventListener agendaEventListener = new DefaultAgendaEventListener() {

        public void matchCreated(org.kie.api.event.rule.MatchCreatedEvent event) {
            list.add("activated");
        }
    };
    ksession.addEventListener(agendaEventListener);
    ksession.insert("test");
    ((InternalWorkingMemory) ksession).flushPropagations();
    assertEquals(1, list.size());
}
Also used : ForceEagerActivationOption(org.kie.internal.runtime.conf.ForceEagerActivationOption) ArrayList(java.util.ArrayList) DefaultAgendaEventListener(org.kie.api.event.rule.DefaultAgendaEventListener) InternalWorkingMemory(org.drools.core.common.InternalWorkingMemory) ForceEagerActivationFilter(org.kie.internal.runtime.conf.ForceEagerActivationFilter) KieBase(org.kie.api.KieBase) AgendaEventListener(org.kie.api.event.rule.AgendaEventListener) DefaultAgendaEventListener(org.kie.api.event.rule.DefaultAgendaEventListener) KieSession(org.kie.api.runtime.KieSession) ArrayList(java.util.ArrayList) List(java.util.List) Rule(org.kie.api.definition.rule.Rule) KieSessionConfiguration(org.kie.api.runtime.KieSessionConfiguration) Test(org.junit.Test)

Example 13 with Rule

use of org.kie.api.definition.rule.Rule in project drools by kiegroup.

the class ActivateAndDeleteOnListenerTest method testOneLazyAndOneImmediateSubPath.

@Test
public void testOneLazyAndOneImmediateSubPath() throws Exception {
    String str = "package org.simple \n" + "rule xxx \n" + "when \n" + "  $s : String()\n" + "  exists( Integer() or Long() )\n" + "then \n" + "end  \n" + "rule yyy \n" + "when \n" + "  $s : String()\n" + "  exists( Integer() or Long() )\n" + "then \n" + "end  \n";
    KieServices ks = KieServices.Factory.get();
    KieSessionConfiguration conf = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
    conf.setOption(new ForceEagerActivationOption.FILTERED(new ForceEagerActivationFilter() {

        @Override
        public boolean accept(Rule rule) {
            return rule.getName().equals("yyy");
        }
    }));
    KieSession ksession = new KieHelper().addContent(str, ResourceType.DRL).build().newKieSession(conf, null);
    final List list = new ArrayList();
    AgendaEventListener agendaEventListener = new org.kie.api.event.rule.DefaultAgendaEventListener() {

        public void matchCreated(org.kie.api.event.rule.MatchCreatedEvent event) {
            list.add(event.getMatch().getRule().getName());
        }
    };
    ksession.addEventListener(agendaEventListener);
    ksession.insert("test");
    assertEquals(0, list.size());
    ksession.insert(1);
    assertEquals(1, list.size());
    assertEquals("yyy", list.get(0));
}
Also used : ForceEagerActivationOption(org.kie.internal.runtime.conf.ForceEagerActivationOption) ArrayList(java.util.ArrayList) KieHelper(org.kie.internal.utils.KieHelper) DefaultAgendaEventListener(org.drools.core.event.DefaultAgendaEventListener) KieServices(org.kie.api.KieServices) ForceEagerActivationFilter(org.kie.internal.runtime.conf.ForceEagerActivationFilter) DefaultAgendaEventListener(org.drools.core.event.DefaultAgendaEventListener) AgendaEventListener(org.kie.api.event.rule.AgendaEventListener) KieSession(org.kie.api.runtime.KieSession) ArrayList(java.util.ArrayList) Arrays.asList(java.util.Arrays.asList) List(java.util.List) Rule(org.kie.api.definition.rule.Rule) MatchCreatedEvent(org.kie.api.event.rule.MatchCreatedEvent) KieSessionConfiguration(org.kie.api.runtime.KieSessionConfiguration) Test(org.junit.Test)

Example 14 with Rule

use of org.kie.api.definition.rule.Rule in project drools by kiegroup.

the class AnnotationsTest method testRuleAnnotations.

@Test
public void testRuleAnnotations() {
    String drl = "package org.drools.test; " + "import " + Inner.class.getName().replace("$", ".") + "; " + "rule Foo " + "@Inner( text=\"a\", test=\"b\" ) " + "when " + "then " + "end ";
    KieHelper helper = new KieHelper();
    helper.addContent(drl, ResourceType.DRL);
    Rule rule = helper.build().getRule("org.drools.test", "Foo");
    assertTrue(rule.getMetaData().containsKey(Inner.class.getName().replace("$", ".")));
    Object obj = rule.getMetaData().get(Inner.class.getName().replace("$", "."));
    assertNotNull(obj);
    assertTrue(obj instanceof Map);
    assertEquals("b", ((Map) obj).get("test"));
    assertEquals("a", ((Map) obj).get("text"));
}
Also used : KieHelper(org.kie.internal.utils.KieHelper) Rule(org.kie.api.definition.rule.Rule) Map(java.util.Map) Test(org.junit.Test)

Example 15 with Rule

use of org.kie.api.definition.rule.Rule in project drools by kiegroup.

the class AnnotationsTest method testRuleAnnotation2.

@Test
public void testRuleAnnotation2() {
    String drl = "package org.drools.compiler.integrationtests\n" + "import " + Person.class.getCanonicalName() + "; \n" + "rule X\n" + "    @alt(\" \\\"<- these are supposed to be the only quotes ->\\\" \")\n" + "when\n" + "    Person()\n" + "then\n" + "end";
    KieBaseConfiguration conf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
    conf.setOption(EventProcessingOption.STREAM);
    conf.setOption(MBeansOption.ENABLED);
    KieBase kbase = loadKnowledgeBase("kb1", drl, conf);
    Rule rule = kbase.getRule("org.drools.compiler.integrationtests", "X");
    assertEquals(" \"<- these are supposed to be the only quotes ->\" ", rule.getMetaData().get("alt"));
}
Also used : KieBaseConfiguration(org.kie.api.KieBaseConfiguration) KieBase(org.kie.api.KieBase) Rule(org.kie.api.definition.rule.Rule) Test(org.junit.Test)

Aggregations

Rule (org.kie.api.definition.rule.Rule)30 Test (org.junit.Test)23 ArrayList (java.util.ArrayList)13 KieSession (org.kie.api.runtime.KieSession)11 List (java.util.List)10 InternalFactHandle (org.drools.core.common.InternalFactHandle)8 StatelessKieSession (org.kie.api.runtime.StatelessKieSession)8 KieBase (org.kie.api.KieBase)7 KiePackage (org.kie.api.definition.KiePackage)7 Map (java.util.Map)5 LeftTuple (org.drools.core.reteoo.LeftTuple)5 HashMap (java.util.HashMap)4 InternalWorkingMemory (org.drools.core.common.InternalWorkingMemory)4 RuleImpl (org.drools.core.definitions.rule.impl.RuleImpl)4 KieServices (org.kie.api.KieServices)4 HashSet (java.util.HashSet)3 Person (org.drools.compiler.Person)3 ReleaseId (org.kie.api.builder.ReleaseId)3 KieHelper (org.kie.internal.utils.KieHelper)3 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)2