Ohh ..that was tricky - I neeed to read this sincerely :) thanks a ton for all your help and time !!!!
Thanks & Regards, Maverik 2011/1/4 Wolfgang Laun <wolfgang.l...@gmail.com> > You have omitted the regular expressions from some of the variable > definitions > in DSL entries: > > [when][] {attr:\S+} follows pattern {x:\S+} = > startsWithFunction({attr},{x}) > > Restore them all, and it's OK. > > > -W > > > > 2011/1/4 maverik j <maverikj...@gmail.com> > >> Here is the complete DSL/DSLR >> >> DSLr: >> rule "Your First Rule" >> >> when >> There is a Department >> There is at least one Person >> - with a valid subOrdinate >> - check that name follows pattern "M" >> then >> >System.out.println("Test Generic Cosntranit done !!!"); >> end >> >> DSL: >> [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 {attr} equal to {value} = {attr} == {value} >> [when][]- with a valid {attr} = {attr} != null >> >> [when][]- with {attr} not equal to {value} = {attr} != {value} >> [when][]- eval\( {whatever} \)= eval( {whatever} ) >> [when][] {attr} equals {value} = {attr}.equals({value}) >> [when][] {attr} is valid = {attr} != null >> [when][] {attr} follows pattern {x} = startsWithFunction({attr},{x}) >> >> Function used in drl is: >> function boolean startsWithFunction(String value, String beginning) { >> if (value == null) return false; >> if (beginning == null) return false; >> return value.startsWith(beginning); >> } >> I am using drools version 5.1.1 >> >> Thanks & Regards, >> -Maverik >> >> 2011/1/4 Wolfgang Laun <wolfgang.l...@gmail.com> >> >>> Do you have any comments ("#..." or "//...") between when and then? If >>> so, please remove and try again. >>> >>> If this doesn't fix it, please post completely and exactly >>> - the rule from the DSLR >>> - the full DSL >>> - Drools version. >>> >>> Thanks >>> -W >>> >>> >>> >>> >>> 2011/1/4 maverik j <maverikj...@gmail.com> >>> >>>> >>>> >>>> 2011/1/4 Wolfgang Laun <wolfgang.l...@gmail.com> >>>> >>>> >>>>> >>>>> 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. >>>>> >>>> >>>> >>>>> Sorry for that, it is actually >>>>> >>>> >>>> >>>>> [when][] {*attr*} follows pattern {pattern} = startsWithFunction( {* >>>>> attr*}, {pattern} ) >>>>>> >>>>>> and is being added as last statement in DSL (for testing purpose I >>>>>> am using same dsl as you have shown) >>>>>> >>>>> >>>> >>>>> in this case it is getting translated to >>>>>> exists(Person:Person(subordinate != null , startsWithFunction( *eval*( >>>>>> name, "I" ) ) ) >>>>>> where as I was hoping this to be >>>>>> exists(Person:Person(subordinate != null , *eval *(startsWithFunction( >>>>>> name, "I" ) ) ) >>>>>> >>>>>> >>>>> >>>>> I cannot reproduce this. But it may depend on the order of your entries >>>>> in you DSL file. >>>>> >>>>> Actually I tried changing order as well but didnt worked. I have >>>> actually defined these common functions in drl and added that to >>>> knowledgebase along with these DSL and DSLR. >>>> >>>> >>>> >>>>> -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 >>>>> >>>>> >>>> >>>> _______________________________________________ >>>> 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 > >
_______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users