use of org.drools.mvel.compiler.Cheese in project drools by kiegroup.
the class MoreBatchExecutionTest method testFireAllRules.
@Test
public void testFireAllRules() {
KieBase kbase = KieBaseUtil.getKieBaseFromClasspathResources(this.getClass(), kieBaseTestConfiguration, "org/drools/mvel/integrationtests/drl/test_ImportFunctions.drl");
ksession = kbase.newKieSession();
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));
}
use of org.drools.mvel.compiler.Cheese in project drools by kiegroup.
the class PatternBuilderForQueryTest method testRuleWithQuery.
@Test
public void testRuleWithQuery() throws Exception {
final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl();
final PackageDescr packageDescr = new PackageDescr("p1");
QueryDescr queryDescr = new QueryDescr("query1");
queryDescr.addParameter("String", "$name");
queryDescr.addParameter("int", "$age");
queryDescr.addParameter("String", "$likes");
packageDescr.addRule(queryDescr);
AndDescr lhs = new AndDescr();
queryDescr.setLhs(lhs);
PatternDescr pattern = new PatternDescr(Person.class.getName());
lhs.addDescr(pattern);
pattern.addConstraint(new BindingDescr("$name", "name", true));
pattern.addConstraint(new BindingDescr("$age", "age", true));
pattern.addConstraint(new BindingDescr("$likes", "likes", true));
RuleDescr ruleDescr = new RuleDescr("rule-1");
packageDescr.addRule(ruleDescr);
lhs = new AndDescr();
ruleDescr.setLhs(lhs);
pattern = new PatternDescr(Cheese.class.getName());
lhs.addDescr(pattern);
pattern.addConstraint(new BindingDescr("$type", "type"));
pattern = new PatternDescr("query1");
pattern.setQuery(true);
lhs.addDescr(pattern);
ExprConstraintDescr expr = new ExprConstraintDescr("'bobba'");
expr.setPosition(0);
expr.setType(Type.POSITIONAL);
pattern.addConstraint(expr);
expr = new ExprConstraintDescr("$age");
expr.setPosition(1);
expr.setType(Type.POSITIONAL);
pattern.addConstraint(expr);
expr = new ExprConstraintDescr("$type");
expr.setPosition(2);
expr.setType(Type.POSITIONAL);
pattern.addConstraint(expr);
ruleDescr.setConsequence("System.out.println(\"age: \" + $age);");
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 Person("bobba", "stilton", 90));
session.insert(new Person("bobba", "brie", 80));
session.insert(new Person("bobba", "brie", 75));
session.insert(new Person("darth", "brie", 100));
session.insert(new Person("luke", "brie", 25));
session.insert(new Cheese("brie", 25));
session.fireAllRules();
}
use of org.drools.mvel.compiler.Cheese in project drools by kiegroup.
the class DynamicRulesTest method testDynamicRuleRemovals.
@Test(timeout = 10000)
public void testDynamicRuleRemovals() throws Exception {
InternalKnowledgeBase kbase = (InternalKnowledgeBase) KieBaseUtil.getKieBaseFromClasspathResources("test", getClass(), kieBaseTestConfiguration, "test_Dynamic1.drl", "test_Dynamic3.drl", "test_Dynamic4.drl");
Collection<KiePackage> kpkgs = KieBaseUtil.getKieBaseFromClasspathResources("tmp", getClass(), kieBaseTestConfiguration, "test_Dynamic2.drl").getKiePackages();
kbase.addPackages(kpkgs);
KieSession wm = kbase.newKieSession();
// AgendaEventListener ael = mock( AgendaEventListener.class );
// wm.addEventListener( ael );
final List<?> list = new ArrayList<Object>();
wm.setGlobal("list", list);
final PersonInterface bob = new Person("bob", "stilton");
bob.setStatus("Not evaluated");
FactHandle fh0 = wm.insert(bob);
final Cheese stilton1 = new Cheese("stilton", 5);
FactHandle fh1 = wm.insert(stilton1);
final Cheese stilton2 = new Cheese("stilton", 3);
FactHandle fh2 = wm.insert(stilton2);
final Cheese stilton3 = new Cheese("stilton", 1);
FactHandle fh3 = wm.insert(stilton3);
final Cheese cheddar = new Cheese("cheddar", 5);
FactHandle fh4 = wm.insert(cheddar);
wm.fireAllRules();
assertEquals(15, list.size());
list.clear();
kbase.removeRule("org.drools.mvel.compiler.test", "Who likes Stilton");
wm.update(fh0, bob);
wm.update(fh1, stilton1);
wm.update(fh2, stilton2);
wm.update(fh3, stilton3);
wm.update(fh4, cheddar);
wm.fireAllRules();
assertEquals(12, list.size());
list.clear();
kbase.removeRule("org.drools.mvel.compiler.test", "like cheese");
wm.update(fh0, bob);
wm.update(fh1, stilton1);
wm.update(fh2, stilton2);
wm.update(fh3, stilton3);
wm.update(fh4, cheddar);
wm.fireAllRules();
assertEquals(8, list.size());
list.clear();
final Cheese muzzarela = new Cheese("muzzarela", 5);
wm.insert(muzzarela);
wm.fireAllRules();
assertEquals(1, list.size());
list.clear();
}
use of org.drools.mvel.compiler.Cheese in project drools by kiegroup.
the class DynamicRulesTest method testDynamicRuleAdditions.
@Test(timeout = 10000)
public void testDynamicRuleAdditions() throws Exception {
InternalKnowledgeBase kbase = (InternalKnowledgeBase) KieBaseUtil.getKieBaseFromClasspathResources("test", getClass(), kieBaseTestConfiguration, "test_Dynamic1.drl");
KieSession workingMemory = kbase.newKieSession();
workingMemory.setGlobal("total", new Integer(0));
final List<?> list = new ArrayList<Object>();
workingMemory.setGlobal("list", list);
// Adding person in advance. There is no Person() object
// type node in memory yet, but the rule engine is supposed
// to handle that correctly
final PersonInterface bob = new Person("bob", "stilton");
bob.setStatus("Not evaluated");
workingMemory.insert(bob);
final Cheese stilton = new Cheese("stilton", 5);
workingMemory.insert(stilton);
final Cheese cheddar = new Cheese("cheddar", 5);
workingMemory.insert(cheddar);
workingMemory.fireAllRules();
assertEquals(1, list.size());
assertEquals("stilton", list.get(0));
Collection<KiePackage> kpkgs = KieBaseUtil.getKieBaseFromClasspathResources("tmp", getClass(), kieBaseTestConfiguration, "test_Dynamic2.drl").getKiePackages();
kbase.addPackages(kpkgs);
workingMemory.fireAllRules();
assertEquals(5, list.size());
assertEquals("stilton", list.get(0));
assertTrue("cheddar".equals(list.get(1)) || "cheddar".equals(list.get(2)));
assertTrue("stilton".equals(list.get(1)) || "stilton".equals(list.get(2)));
list.clear();
kpkgs = KieBaseUtil.getKieBaseFromClasspathResources("tmp", getClass(), kieBaseTestConfiguration, "test_Dynamic3.drl").getKiePackages();
kbase.addPackages(kpkgs);
// Package 3 has a rule working on Person instances.
// As we added person instance in advance, rule should fire now
workingMemory.fireAllRules();
assertEquals("Rule from package 3 should have been fired", "match Person ok", bob.getStatus());
assertEquals(1, list.size());
assertEquals(bob, list.get(0));
kpkgs = KieBaseUtil.getKieBaseFromClasspathResources("tmp", getClass(), kieBaseTestConfiguration, "test_Dynamic4.drl").getKiePackages();
kbase.addPackages(kpkgs);
workingMemory.fireAllRules();
assertEquals("Rule from package 4 should have been fired", "Who likes Stilton ok", bob.getStatus());
assertEquals(2, list.size());
assertEquals(bob, list.get(1));
}
use of org.drools.mvel.compiler.Cheese in project drools by kiegroup.
the class DynamicRulesTest method testDynamicNotNode.
@Test(timeout = 10000)
public void testDynamicNotNode() throws Exception {
InternalKnowledgeBase kbase = (InternalKnowledgeBase) KieBaseUtil.getKieBaseFromClasspathResources(getClass(), kieBaseTestConfiguration, "test_CollectDynamicRules1.drl");
Environment env = EnvironmentFactory.newEnvironment();
env.set(EnvironmentName.OBJECT_MARSHALLING_STRATEGIES, new ObjectMarshallingStrategy[] { new IdentityPlaceholderResolverStrategy(ClassObjectMarshallingStrategyAcceptor.DEFAULT) });
KieSession ksession = kbase.newKieSession(null, env);
List<?> results = new ArrayList<Object>();
ksession.setGlobal("results", results);
final Cheese a = new Cheese("stilton", 10);
final Cheese b = new Cheese("stilton", 15);
final Cheese c = new Cheese("stilton", 20);
ksession.insert(a);
ksession.insert(b);
ksession.insert(c);
Collection<KiePackage> kpkgs = KieBaseUtil.getKieBaseFromClasspathResources("tmp", getClass(), kieBaseTestConfiguration, "test_DynamicNotNode.drl").getKiePackages();
kbase.addPackages(kpkgs);
ksession = SerializationHelper.getSerialisedStatefulKnowledgeSession(ksession, false);
results = (List) ksession.getGlobal("results");
ksession.fireAllRules();
assertEquals(0, results.size());
kbase.removeKiePackage("org.drools.mvel.compiler");
ksession.retract(ksession.getFactHandle(b));
kpkgs = KieBaseUtil.getKieBaseFromClasspathResources("tmp", getClass(), kieBaseTestConfiguration, "test_DynamicNotNode.drl").getKiePackages();
kbase.addPackages(kpkgs);
ksession = SerializationHelper.getSerialisedStatefulKnowledgeSession(ksession, false);
results = (List<?>) ksession.getGlobal("results");
ksession.fireAllRules();
assertEquals(1, results.size());
}
Aggregations