2011/1/4 maverik j <maverikj...@gmail.com> > is there any restriction in terms of using custom function in condition > etc. > If I add function evaluation to conditions its messing up with dsl. For > pattern matching if I use custom function defined in drl then its not able > to parse that properly > > [when][] {attr:\S+} follows pattern {pattern:\S+} = > funcToEvalPattern({attr},( {pattern} ) >
Is this exactly what you have in the DSL definition? It's syntactically incorrect. > in this case it is getting translated to > exists(Person:Person(subordinate != null , funcToEvalPattern( *eval*( > name, "I" ) ) ) > where as I was hoping this to be > exists(Person:Person(subordinate != null , *eval *(funcToEvalPattern( > name, "I" ) ) ) > > I cannot reproduce this. But it may depend on the order of your entries in you DSL file. -W > Regards, > -Maverik > > On Tue, Jan 4, 2011 at 12:24 PM, maverik j <maverikj...@gmail.com> wrote: > >> cool...this was of great help, I will try this out I think it shoudl solve >> the purpose. >> >> Thanks once again, >> Maverik >> >> 2011/1/3 Wolfgang Laun <wolfgang.l...@gmail.com> >> >> 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 <maverikj...@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@lists.jboss.org >>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>> >>>> >>> >>> _______________________________________________ >>> rules-users mailing list >>> rules-users@lists.jboss.org >>> https://lists.jboss.org/mailman/listinfo/rules-users >>> >>> >> > > _______________________________________________ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > >
_______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users