[rules-users] How to use not operator in drool.

Edson Tirelli tirelli at post.com
Fri Sep 14 09:11:50 EDT 2007


    Arsalan,

    Unfortunately Drools does not have a field constraint negation operator,
mostly because when writing rules, it was not needed, since you can always
negate the constraint itself.
    Although, I understand a agree with your use case. My suggestion is for
you to open a JIRA feature request and we will include that as soon as
possible in the product.
    Although, meanwhile, the only workaround I can see for your case is to
translate the expression you are using directly into a java or mvel
expression and write it inside an in-line eval.

    []s
    Edson

2007/9/14, Arsalan S. Zaidi <arsalan.zaidi at capgemini.com>:
>
>  Hi
>
>
>
> I'll try to explain the situation that Gaurav finds himself in. We're
> working on this problem together and so far, we haven't been able to crack
> it.
>
>
>
> We're using drools to handle the business rules for an application. The
> rules however, are not provided to us in a .drl file, rather, we get an XLS
> sheet from the analysts with rules in a different grammar.
>
>
>
> We're using ANTLR to read and parse these rules to generate the drools
> rules programmatically. However, we're running into problems with NOT.
>
>
>
> The input rules (in the non-drools business language) have a NOT operator
> which works like '!' in Java. It flips the Boolean around, so to speak. So:
>
>
>
> NOT((some sub expression which evaluates to TRUE)) == FALSE
>
>
>
> MVEL doesn't seem to support this. So how do we simulate it?
>
>
>
> If it were only being used with NOT IN, we could manage, but its use is
> completely arbitrary. Changes to the input rules or to the input rules
> grammar have been (ha ha) ruled out.
>
>
>
> Any help would be appreciated.
>
>
>
> Regards,
>
> _____________________________________________________
>
> Arsalan Zaidi / *Capgemini - India* *(FS SBU) /* Mumbai
>
> Technical Architect
> Mobile Phone: +91 – 9892 8970 03 / www.capgemini.com
>
>
> *Together: the Collaborative Business Experience*
> _____________________________________________________
>   ------------------------------
>
> *From:* rules-users-bounces at lists.jboss.org [mailto:
> rules-users-bounces at lists.jboss.org] *On Behalf Of *Anstis, Michael (M.)
> *Sent:* 13 September 2007 13:31
> *To:* Rules Users List
> *Subject:* RE: [rules-users] How to use not operator in drool.
>
>
>
> What dialect do your rules use?
>
>
>
> You could also simplify the logic using DeMorgans Theorem (which might be
> troublesome to accomplish programmatically)
>
>
>
> I don't know whether your example is flawed as the brackets don't match,
> but assuming you mean something like this:-
>
>
>
> (NOT (G13.1 IN ("1","2","3") OR (G250.8 = Y)))
>
>
>
> You can re-write this as
>
>
>
>
>
> (G13.1NOT IN ("1","2","3") AND G250.8 != Y)
>
>
>
> With kind regards,
>
>
>
> Mike
>
>
>
>
>  ------------------------------
>
> *From:* rules-users-bounces at lists.jboss.org [mailto:
> rules-users-bounces at lists.jboss.org] *On Behalf Of *JOSHI, GAURAV
> *Sent:* 13 September 2007 08:20
> *To:* Rules Users List
> *Subject:* RE: [rules-users] How to use not operator in drool.
>
> Thank's for your sugession of using "not in" instead of "not" but my
> problem is that "not" can also come without "in".
>
>
>
> Actually I am making a generator of rule file from expression like
>
>  ((NOT (ENDS WITH (G10.2, ",")))
>
>
>
>  ((NOT (G13.1 IN ("1","2","3"))) OR (G250.8 = Y)))
>
>
>
> Where G13.2, G250.8, G10.2 are variables coming from a map inserted in
> working memory.
>
>
>
> I am accessing these variables from map.
>
>
>
> My rules are as follows
>
>
>
> This rule is working fine.
>
>
>
> rule "Editable_G10.3"
>
> when
>
>
>
> * ((Map( this["G10.3"] !=8))||(Map( this["G10.2"] ==19)))*
>
>
>
> then
>
> System.out.println("comming
> here----------------------------------------------------->");
>
> End
>
>
>
> *This is not working*
>
>
>
> rule "Mandatory_G10.3"
>
> when
>
> * (not((Map( this["G10.3"] !=8))||(Map( this["G10.2"] ==19)))) *
>
> Then
>
> System.out.println("comming
> here----------------------------------------------------->");
>
> End
>
>
>
> In also tried following approaches:
>
> 1)      *eval(not((Map( this["G10.3"] !=8))||(Map( this["G10.2"] ==19))))
> *
>
> * *
>
> *2) eval(!((Map( this["G10.3"] !=8))||(Map( this["G10.2"] ==19)))) *
>
> * *
>
> But in both cases it is giving same error:
>
> org.drools.rule.InvalidRulePackage: Rule Compilation error : [Rule
> name=ValidationRuleExp_G10.3, agendaGroup=MAIN, salience=0, no-loop=false]
>
>
> com/telekurs/nva/mde/fe/ak/validation/Rule_ValidationRuleExp_G10_3_0.java
> (11:495) : Cannot use this in a static context
>
>
> com/telekurs/nva/mde/fe/ak/validation/Rule_ValidationRuleExp_G10_3_0.java
> (11:500) : Type mismatch: cannot convert from String to int
>
>
>
> I am trying to find out some general concept so that I can change just
> achieve the functionality of not.
>
>
>
> Thanks
>
> Gaurav
>
>
>  ------------------------------
>
> *From:* rules-users-bounces at lists.jboss.org [mailto:
> rules-users-bounces at lists.jboss.org] *On Behalf Of *Edson Tirelli
> *Sent:* Wednesday, September 12, 2007 10:20 PM
> *To:* Rules Users List
> *Subject:* Re: [rules-users] How to use not operator in drool.
>
>
>
>
>    Remove your "eval" and use "or" instead of "||" for the OR CE.
>
>    Although, I feel that this is not what you want... what you want is
> simply:
>
> when
>     Map( this['city'] not in ( "mumbai", "delhi" ) )
> then
>     //...
> end
>
>     []s
>     Edson
>
> 2007/9/12, Gaurav2007 <gaurav.a.joshi at capgemini.com>:
>
>
> Hi ALL,
>
> I am using drool4.0.1 in my application i am able to use IN,OR,AND
> operator
> but i am facing problem in using not operator.
>
> my requirement of not operator is just like a not gate.
>
> the way i am using it is :
>
> eval(not((Map( this["city"] !="mumbai"))||(Map( this["city"] =="delhi"))))
>
>
> so can you please help me out to solve this problem:
> should i use not operator or some thing else in drool.
>
> Thanks,
>
>
> --
> View this message in context: http://www.nabble.com/How-to-use-not-operator-in-drool.-tf4430240.html#a12638430
>
> <http://www.nabble.com/How-to-use-not-operator-in-drool.-tf4430240...html#a12638430>
> Sent from the drools - user mailing list archive at Nabble.com.
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
>
> --
>   Edson Tirelli
>   Software Engineer - JBoss Rules Core Developer
>   Office: +55 11 3529-6000
>   Mobile: +55 11 9287-5646
>   JBoss, a division of Red Hat @ www.jboss.com
>
> This message contains information that may be privileged or confidential
> and is the property of the Capgemini Group. It is intended only for the
> person to whom it is addressed. If you are not the intended recipient, you
> are not authorized to read, print, retain, copy, disseminate, distribute, or
> use this message or any part thereof. If you receive this message in error,
> please notify the sender immediately and delete all copies of this message.
>
>
>
>  This message contains information that may be privileged or confidential
> and is the property of the Capgemini Group. It is intended only for the
> person to whom it is addressed. If you are not the intended recipient, you
> are not authorized to read, print, retain, copy, disseminate, distribute, or
> use this message or any part thereof. If you receive this message in error,
> please notify the sender immediately and delete all copies of this message.
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>


-- 
  Edson Tirelli
  Software Engineer - JBoss Rules Core Developer
  Office: +55 11 3529-6000
  Mobile: +55 11 9287-5646
  JBoss, a division of Red Hat @ www.jboss.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20070914/6dba2e41/attachment.html 


More information about the rules-users mailing list