use of org.drools.core.facttemplates.Fact in project drools by kiegroup.
the class FactTemplateTest method testBeta.
@Test
public void testBeta() {
Result result = new Result();
Prototype personFact = prototype("org.drools", "Person", field("name", Integer.class), field("age", String.class));
PrototypeVariable markV = declarationOf(personFact);
PrototypeVariable olderV = declarationOf(personFact);
Rule rule = rule("beta").build(pattern(markV).expr("exprA", p -> p.get("name").equals("Mark"), alphaIndexedBy(String.class, Index.ConstraintType.EQUAL, 1, p -> (String) p.get("name"), "Mark"), reactOn("name", "age")), pattern(olderV).expr("exprB", p -> !p.get("name").equals("Mark"), alphaIndexedBy(String.class, Index.ConstraintType.NOT_EQUAL, 1, p -> (String) p.get("name"), "Mark"), reactOn("name")).expr("exprC", markV, (p1, p2) -> (int) p1.get("age") > (int) p2.get("age"), betaIndexedBy(int.class, Index.ConstraintType.GREATER_THAN, 0, p -> (int) p.get("age"), p -> (int) p.get("age")), reactOn("age")), on(olderV, markV).execute((p1, p2) -> result.setValue(p1.get("name") + " is older than " + p2.get("name"))));
Model model = new ModelImpl().addRule(rule);
KieBase kieBase = KieBaseBuilder.createKieBaseFromModel(model);
KieSession ksession = kieBase.newKieSession();
assertTrue(hasFactTemplateObjectType(ksession, "Person"));
Fact mark = createMapBasedFact(personFact);
mark.setFieldValue("name", "Mark");
mark.setFieldValue("age", 37);
Fact edson = createMapBasedFact(personFact);
edson.setFieldValue("name", "Edson");
edson.setFieldValue("age", 35);
Fact mario = createMapBasedFact(personFact);
mario.setFieldValue("name", "Mario");
mario.setFieldValue("age", 40);
FactHandle markFH = ksession.insert(mark);
FactHandle edsonFH = ksession.insert(edson);
FactHandle marioFH = ksession.insert(mario);
ksession.fireAllRules();
assertEquals("Mario is older than Mark", result.getValue());
result.setValue(null);
ksession.delete(marioFH);
ksession.fireAllRules();
assertNull(result.getValue());
mark.setFieldValue("age", 34);
ksession.update(markFH, mark);
ksession.fireAllRules();
assertEquals("Edson is older than Mark", result.getValue());
}
use of org.drools.core.facttemplates.Fact in project drools by kiegroup.
the class ObjectTypeConfigurationRegistry method getObjectTypeConf.
/**
* Returns the ObjectTypeConfiguration object for the given object or
* creates a new one if none is found in the cache
*/
public ObjectTypeConf getObjectTypeConf(EntryPointId entrypoint, Object object) {
// first see if it's a ClassObjectTypeConf
Object key;
if (object instanceof Activation) {
key = ClassObjectType.Match_ObjectType.getClassType();
} else if (object instanceof Fact) {
key = ((Fact) object).getFactTemplate().getName();
} else {
key = object.getClass();
}
ObjectTypeConf objectTypeConf = this.typeConfMap.get(key);
// it doesn't exist, so create it.
if (objectTypeConf == null) {
if (object instanceof Fact) {
objectTypeConf = new FactTemplateTypeConf(entrypoint, ((Fact) object).getFactTemplate(), this.kBase);
} else {
objectTypeConf = new ClassObjectTypeConf(entrypoint, (Class<?>) key, this.kBase);
}
ObjectTypeConf existing = this.typeConfMap.putIfAbsent(key, objectTypeConf);
if (existing != null) {
// Raced, take the (now) existing.
objectTypeConf = existing;
}
}
return objectTypeConf;
}
use of org.drools.core.facttemplates.Fact in project drools by kiegroup.
the class FactTemplateTest method testAlpha.
@Test
public void testAlpha() {
Prototype personFact = prototype("org.drools", "Person", field("name", Integer.class), field("age", String.class));
PrototypeVariable markV = declarationOf(personFact);
Rule rule = rule("alpha").build(pattern(markV).expr("exprA", p -> p.get("name").equals("Mark"), alphaIndexedBy(String.class, Index.ConstraintType.EQUAL, 1, p -> (String) p.get("name"), "Mark"), reactOn("name", "age")), on(markV).execute((drools, p) -> drools.insert(new Result("Found a " + p.get("age") + " years old Mark"))));
Model model = new ModelImpl().addRule(rule);
KieBase kieBase = KieBaseBuilder.createKieBaseFromModel(model);
KieSession ksession = kieBase.newKieSession();
assertTrue(hasFactTemplateObjectType(ksession, "Person"));
Fact mark = createMapBasedFact(personFact);
mark.setFieldValue("name", "Mark");
mark.setFieldValue("age", 40);
ksession.insert(mark);
ksession.fireAllRules();
Collection<Result> results = getObjectsIntoList(ksession, Result.class);
assertThat(results, hasItem(new Result("Found a 40 years old Mark")));
}
use of org.drools.core.facttemplates.Fact in project drools by kiegroup.
the class FactTemplateTest method testBetaMixingClassAndFact.
@Test
public void testBetaMixingClassAndFact() {
Prototype personFact = prototype("org.drools", "FactPerson", field("name", Integer.class), field("age", String.class));
PrototypeVariable markV = declarationOf(personFact);
Variable<Person> olderV = declarationOf(Person.class);
Rule rule = rule("beta").build(pattern(markV).expr("exprA", p -> p.get("name").equals("Mark"), alphaIndexedBy(String.class, Index.ConstraintType.EQUAL, 1, p -> (String) p.get("name"), "Mark"), reactOn("name", "age")), pattern(olderV).expr("exprB", p -> !p.getName().equals("Mark"), alphaIndexedBy(String.class, Index.ConstraintType.NOT_EQUAL, 1, p -> p.getName(), "Mark"), reactOn("name")).expr("exprC", markV, (p1, p2) -> p1.getAge() > (int) p2.get("age"), betaIndexedBy(int.class, Index.ConstraintType.GREATER_THAN, 0, p -> p.getAge(), p -> (int) p.get("age")), reactOn("age")), on(olderV, markV).execute((drools, p1, p2) -> drools.insert(new Result(p1.getName() + " is older than " + p2.get("name")))));
Model model = new ModelImpl().addRule(rule);
KieBase kieBase = KieBaseBuilder.createKieBaseFromModel(model);
KieSession ksession = kieBase.newKieSession();
assertTrue(hasFactTemplateObjectType(ksession, "FactPerson"));
Fact mark = createMapBasedFact(personFact);
mark.setFieldValue("name", "Mark");
mark.setFieldValue("age", 37);
ksession.insert(mark);
FactHandle edsonFH = ksession.insert(new Person("Edson", 35));
FactHandle marioFH = ksession.insert(new Person("Mario", 40));
ksession.fireAllRules();
Collection<Result> results = getObjectsIntoList(ksession, Result.class);
assertThat(results, hasItem(new Result("Mario is older than Mark")));
}
use of org.drools.core.facttemplates.Fact in project drools by kiegroup.
the class PatternTest method testDeclarationsFactTemplate.
@Test
public void testDeclarationsFactTemplate() throws Exception {
InternalKnowledgePackage pkg = new KnowledgePackageImpl("org.store");
final FieldTemplate cheeseName = new FieldTemplateImpl("name", 0, String.class);
final FieldTemplate cheesePrice = new FieldTemplateImpl("price", 1, Integer.class);
final FieldTemplate[] fields = new FieldTemplate[] { cheeseName, cheesePrice };
final FactTemplate cheese = new FactTemplateImpl(pkg, "Cheese", fields);
final ObjectType type = new FactTemplateObjectType(cheese);
final Pattern col = new Pattern(0, type, "foo");
final Declaration dec = col.getDeclaration();
final InternalReadAccessor ext = dec.getExtractor();
assertEquals(Fact.class, ext.getExtractToClass());
final Fact stilton = cheese.createFact(10);
stilton.setFieldValue("name", "stilton");
stilton.setFieldValue("price", new Integer(200));
assertEquals(stilton, dec.getValue(null, stilton));
}
Aggregations