[rules-users] using complex evaluate expressions with DSL
Wolfgang Laun
wolfgang.laun at gmail.com
Mon Jan 3 08:24:06 EST 2011
Try using eval as a last resort. A better (smaller, more robust) DSL can be
designed around facts and their attributes.
"||" (and "OR") can be used, but setting parentheses in order to get the
priority right is difficult. In constraints, you may have to resort to
"memberof" or "not memberof".
Your sample isn't self-contained. But I think that the following DSL and the
DSLR might give you some ideas how to proceed.
[keyword][]check that {conditions}= eval( {conditions} )
[keyword][]AND = &&
[keyword][]OR = ||
[when][][Tt]here is an? {entity}= {entity}: {entity}()
[when][][Tt]here is at least one {entity}= exists {entity}: {entity}()
[when][]the {entity:\w+}'s {attr:\w+} = {entity}.get{attr}()
[when][]- with a valid {attr} = {attr}: {attr} != null
[when][]- with {attr} not equal to {value} = {attr} != {value}
[when][]- eval\( {whatever} \)=eval( {whatever} )
[when][] {attr:\S+} follows pattern {pattern:\S+} = {attr}.matches(
{pattern} )
[when][] {attr:\S+} not equals? {value:\S+} = ! {attr}.equals( {value} )
[when][] {attr:\S+} is valid = {attr} != null
rule "Rule 5"
when
There is a Department
There is at least one Person
- with name not equal to "xxx"
- with a valid subordinate
- check that the Person's Id is valid AND the Department's Id follows
pattern "I" AND the Department's HeadOfDpt not equal name
then
end
Notice that "-check that..." must be written as a single line.
-W
2011/1/3 maverik j <maverikj348 at gmail.com>
> Hi,
>
> We are planning to use DSL/DSRL approach with generic DSL template like
> say
>
> [condition][]The {object} has valid {field}={object}({field} != null )
>
> [condition][]there is object {*obj*} that = {*obj*}()
>
> [condition][]- has {*attr*} equal {*val*} = {*attr*} == {*val*}
>
> [condition][]- has valid {*attr*} = {*attr*} != null
>
> [condition][]- and has {*attr*} equal {value}= && {*attr*} == {value}
>
> But there are quite few of requirements like to have DSL rules that can
> generate expression as follows:
> exists Employee(
> attribute name not equals "xxx"
> && the attribute subOrdinate is not null
> && eval(
> the attribute $dept.getId() is not null
> && attribute $dept.getId() follows pattern "I"
> && ( ! (the attribute $dept.getHeadOfDpt() equals name)
> )
> )
>
> I am not sure if this is possible with DSL. Using '-' operator we cannot
> really add '&&', '||' conditions it by-default expands to ',' separated and
> conditions. And wirtting generic rules with and/or is not really dynamic to
> allow any number of expressions in evaluation.
>
> i am struggling to get this run since long time so any help/thoughts on
> this would be highly appriciable !!!
>
> Thanks & Regards,
> -Maverik
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20110103/1288fe25/attachment.html
More information about the rules-users
mailing list