[rules-users] Re: DSL question: how to apply same conversion multiple times?

Jared Davis sunray at davisprogramming.com
Tue Nov 11 19:27:08 EST 2008


Charles Binford <Charles.Binford <at> Sun.COM> writes:

> 
> I'm using the DSL feature of 4.07 and am having trouble getting it to
> behave like I want.
> 
> I have a File object where I'm always going to have a "state"
> constraint, plus one or more optional constraints based on user input. 
> (I'm parsing user data to generate the .dsrl file on the fly).
> 
> Samples:
>     file in "1.x" state where uid == 0 where gid == 0
> Should turn into
>    $f: File ( classState == "1.x", uid == 0, gid == 0 )
> 
> The key lines from my DSL file that do this are:
> [condition][]file in "{state}" state {constraints}=$f: File ( classState
> == "{state}" {constraints} )
> [condition][]where {constraint}=, {constraint}
> 
> Unfortunately what I get is
>    $f: File ( classState == "1.x", uid == 0 where gid == 0 )
> 
> If only have one "where" then all works fine.  If I add another
> "[condition][]where {constraint}=, {constraint}"
> line in my DSL file it works. The first DSL "where" line catches the
> first "where uuid" and the second DSL line catches the "where gid".   On
> the current path it looks like I'll have to set a hard limit on how many
> constraints a user can specify and make sure I've dup'd the "where" line
> that many times in the DSL file.  Of course I'd much rather leave it
> open and have the single "where" line apply itself as many times as it can.
> 
> Thanks in advance for any help.
> 
> Charles Binford
> Sun Microsystems
> _______________________________________________
> rules-users mailing list
> rules-users <at> lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
> 
> 


Have you looked at using the - operation? It doesn't meet your one line goal,
but it works.

The rule would look like this:

file in "1.x" state where
 - uid is 0
 - gid is 0
 - lastModified > 


the dsl would follow this cheese example from the drools docs (I grabbed it from
4.03)

[when]There is a Cheese with=Cheese()
[when]- age is less than {age}=age<{age}
[when]- type is '{type}'=type=='{type}'
[when]- country equal to '{country}'=country=='{country}'

Search the doc for the section "Adding constraints to facts" for more details.

HTH,

Jared Davis





More information about the rules-users mailing list