Re: [rules-users] how do I add not exists contraint in dslr

2011-01-11 Thread maverik j
I tried with same example as in
http://permalink.gmane.org/gmane.comp.java.drools.user/23689
just changed the exists in this example to not(exists)

Regards,
-maverik

2011/1/11 Wolfgang Laun wolfgang.l...@gmail.com

 Don't use not(exists( X() )).
not( X() )
 means there is no X. The error may be due to constraints, but you'd have
 to show us the entire DSLR condition and its DSL definition.
 -W


 2011/1/11 maverik j maverikj...@gmail.com

   Hi,

   I have been trying to add not exists constraint in dslr but its failing
 to parse the dslr. Here is what I am trying to do in DSLR

 [when][][*Tt*]here is at least one {entity}= not(exists {entity}:
 {entity}())

 If I simply use the exists constraint here then it works well. But then
 after adding not to it, its not getting parsed correctly.

 error I am geeting is:

 [10,27]: [ERR 102] Line 10:27 mismatched input ',' expecting ')' in rule
 Rule1 in pattern Person

 not sure whats going wrong here, if it is expected to work this way?

 thanks,

 -m

 ___
 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


Re: [rules-users] using complex evaluate expressions with DSL

2011-01-04 Thread maverik j
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

Re: [rules-users] using complex evaluate expressions with DSL

2011-01-04 Thread maverik j
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.comwrote:

 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

Re: [rules-users] using complex evaluate expressions with DSL

2011-01-04 Thread maverik j
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.comwrote:

 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

[rules-users] using complex evaluate expressions with DSL

2011-01-03 Thread maverik j
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


Re: [rules-users] using complex evaluate expressions with DSL

2011-01-03 Thread maverik j
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