use of org.drools.modelcompiler.domain.Person in project drools by kiegroup.
the class CompilerTest method testNullSafeDereferncing.
@Test
public void testNullSafeDereferncing() {
String str = "import " + Result.class.getCanonicalName() + ";" + "import " + Person.class.getCanonicalName() + ";" + "rule R when\n" + " $r : Result()\n" + " $p : Person( name!.length == 4 )\n" + "then\n" + " $r.setValue(\"Found: \" + $p);\n" + "end";
KieSession ksession = getKieSession(str);
Result result = new Result();
ksession.insert(result);
ksession.insert(new Person("Mark", 37));
ksession.insert(new Person("Mario", 40));
ksession.insert(new Person(null, 40));
ksession.fireAllRules();
assertEquals("Found: Mark", result.getValue());
}
use of org.drools.modelcompiler.domain.Person in project drools by kiegroup.
the class CompilerTest method testNamedConsequence.
@Test
public void testNamedConsequence() {
String str = "import " + Result.class.getCanonicalName() + ";\n" + "import " + Person.class.getCanonicalName() + ";\n" + "rule R when\n" + " $r : Result()\n" + " $p1 : Person(name == \"Mark\")\n" + " do[FoundMark]\n" + " $p2 : Person(name != \"Mark\", age > $p1.age)\n" + "then\n" + " $r.addValue($p2.getName() + \" is older than \" + $p1.getName());\n" + "then[FoundMark]\n" + " $r.addValue(\"Found \" + $p1.getName());\n" + "end";
KieSession ksession = getKieSession(str);
Result result = new Result();
ksession.insert(result);
ksession.insert(new Person("Mark", 37));
ksession.insert(new Person("Edson", 35));
ksession.insert(new Person("Mario", 40));
ksession.fireAllRules();
Collection results = (Collection) result.getValue();
assertEquals(2, results.size());
assertTrue(results.containsAll(asList("Found Mark", "Mario is older than Mark")));
}
use of org.drools.modelcompiler.domain.Person in project drools by kiegroup.
the class FlowTest method testAccumulate1.
@Test
public void testAccumulate1() {
Result result = new Result();
Variable<Person> person = declarationOf(Person.class);
Variable<Integer> resultSum = declarationOf(Integer.class);
Variable<Integer> age = declarationOf(Integer.class);
Rule rule = rule("accumulate").build(bind(age).as(person, Person::getAge), accumulate(expr(person, p -> p.getName().startsWith("M")), accFunction(org.drools.core.base.accumulators.IntegerSumAccumulateFunction.class, age).as(resultSum)), on(resultSum).execute(sum -> result.setValue("total = " + sum)));
Model model = new ModelImpl().addRule(rule);
KieBase kieBase = KieBaseBuilder.createKieBaseFromModel(model);
KieSession ksession = kieBase.newKieSession();
ksession.insert(new Person("Mark", 37));
ksession.insert(new Person("Edson", 35));
ksession.insert(new Person("Mario", 40));
ksession.fireAllRules();
assertEquals("total = 77", result.getValue());
}
use of org.drools.modelcompiler.domain.Person in project drools by kiegroup.
the class FlowTest method testForall.
@Test
public void testForall() {
Variable<Person> p1V = declarationOf(Person.class);
Variable<Person> p2V = declarationOf(Person.class);
Rule rule = rule("not").build(forall(expr("exprA", p1V, p -> p.getName().length() == 5), expr("exprB", p2V, p1V, (p2, p1) -> p2 == p1), expr("exprC", p2V, p -> p.getAge() > 40)), execute(drools -> drools.insert(new Result("ok"))));
Model model = new ModelImpl().addRule(rule);
KieBase kieBase = KieBaseBuilder.createKieBaseFromModel(model);
KieSession ksession = kieBase.newKieSession();
ksession.insert(new Person("Mario", 41));
ksession.insert(new Person("Mark", 39));
ksession.insert(new Person("Edson", 42));
ksession.fireAllRules();
Collection<Result> results = getObjectsIntoList(ksession, Result.class);
assertEquals(1, results.size());
assertEquals("ok", results.iterator().next().getValue());
}
use of org.drools.modelcompiler.domain.Person in project drools by kiegroup.
the class FlowTest method testAccumulate2.
@Test
public void testAccumulate2() {
Result result = new Result();
Variable<Person> person = declarationOf(Person.class);
Variable<Integer> resultSum = declarationOf(Integer.class);
Variable<Double> resultAvg = declarationOf(Double.class);
Variable<Integer> age = declarationOf(Integer.class);
Rule rule = rule("accumulate").build(bind(age).as(person, Person::getAge), accumulate(expr(person, p -> p.getName().startsWith("M")), accFunction(org.drools.core.base.accumulators.IntegerSumAccumulateFunction.class, age).as(resultSum), accFunction(org.drools.core.base.accumulators.AverageAccumulateFunction.class, age).as(resultAvg)), on(resultSum, resultAvg).execute((sum, avg) -> result.setValue("total = " + sum + "; average = " + avg)));
Model model = new ModelImpl().addRule(rule);
KieBase kieBase = KieBaseBuilder.createKieBaseFromModel(model);
KieSession ksession = kieBase.newKieSession();
ksession.insert(new Person("Mark", 37));
ksession.insert(new Person("Edson", 35));
ksession.insert(new Person("Mario", 40));
ksession.fireAllRules();
assertEquals("total = 77; average = 38.5", result.getValue());
}
Aggregations