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 <maverikj348@gmail.com>
Here is the complete DSL/DSLRDSLr:rule "Your First Rule"- with a valid subOrdinate
when
There is a Department
There is at least one Person
- check that name follows pattern "M"
then
>System.out.println("Test Generic Cosntranit done !!!");
endDSL:[keyword][]check that {conditions}= eval( {conditions} )[when][]- with {attr} equal to {value} = {attr} == {value}
[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} != null[when][] {attr} equals {value} = {attr}.equals({value})
[when][]- with {attr} not equal to {value} = {attr} != {value}
[when][]- eval\( {whatever} \)= eval( {whatever} )
[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.1Thanks & Regards,-Maverik2011/1/4 Wolfgang Laun <wolfgang.laun@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 <maverikj348@gmail.com>
2011/1/4 Wolfgang Laun <wolfgang.laun@gmail.com>
2011/1/4 maverik j <maverikj348@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 toexists(Person:Person(subordinate != null , startsWithFunction( eval( name, "I" ) ) )where as I was hoping this to beexists(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,-MaverikOn Tue, Jan 4, 2011 at 12:24 PM, maverik j <maverikj348@gmail.com> wrote:
cool...this was of great help, I will try this out I think it shoudl solve the purpose.Thanks once again,Maverik2011/1/3 Wolfgang Laun <wolfgang.laun@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 <maverikj348@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