Open pereirazc opened 7 years ago
The scene
(.scn) code:
package br.ufes.lprm.scene.examples.fever
situation Fever
when
@febrile: Person(temperature > 37)
transpiles to drl
code:
package br.ufes.lprm.scene.examples.fever
import ...
declare Fever extends SituationType
febrile: Person @Role("febrile")
end
rule "Fever"
@role(situation)
@type(Fever)
when
$febrile: Person(temperature > 37)
then
SituationHelper.situationDetected(drools)
end
There's a way to add knowledge packages from strings into a kbuilder ResourceFactory.newByteArrayResource
CommonTestMethodBase.java
PackageDescrBuilder packageBuilder = DescrFactory.newPackage();
packageBuilder
.name("br.ufes.lprm.scene.examples.fever")
.newDeclare().type()
.name("Fever")
.superType("SituationType")
.newField("febrile")
.type("Person")
.newAnnotation("Role").value("febrile")
.end()
.end()
.end()
.newRule().name("Fever")
.newAnnotation("role").value("situation")
.end()
.newAnnotation("type").value("Fever")
.end()
.lhs()
.pattern().id("$febrile", false)
.type("Person").constraint("temperature > 37")
.end()
.end()
.rhs("SituationHelper.situationDetected(drools);")
.end();
String rules = new DrlDumper().dump(packageBuilder.getDescr());
kbuilder.add(ResourceFactory.newByteArrayResource(rules.getBytes()), ResourceType.DRL);
A straightforward dialect for
situation
writing/designing to be transpiled at runtime intodrl
rules.The so-famous
Fever
situation could be described like:situation
keyword would refer to a special kind of rule with no need for an explicit consequence (RHS) which would always be internal situation life cycle management code.SituationType
-descendant Java class. The situation declaration provides enough information for building the situation class dynamically. The@<label>
construct would represent that the binding variable maps to a class attribute<label>
as a situation role.short-term downfalls:
situation only file
: domain rules and events would be written apart from the situations, although, defined situations could be used by any domain business rule.