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);
}
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());
}
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));
}
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"));
}
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"));
}
Aggregations