Uploaded image for project: 'JBRULES'
  1. JBRULES
  2. JBRULES-1199

Add a field constraint negation operator to drools

This issue belongs to an archived project. You can view it, but you can't modify it. Learn more

XMLWordPrintable

    • Icon: Feature Request Feature Request
    • Resolution: Unresolved
    • Icon: Major Major
    • FUTURE
    • None
    • None
    • None
    • Documentation (Ref Guide, User Guide, etc.), Release Notes, Compatibility/Configuration

      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@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@lists.jboss.org rules-users-bounces@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@lists.jboss.org rules-users-bounces@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@lists.jboss.org rules-users-bounces@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@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
      Sent from the drools - user mailing list archive at Nabble.com.

      _______________________________________________
      rules-users mailing list
      rules-users@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@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

            etirelli@redhat.com Edson Tirelli
            azaidi123_jira Arsalan Zaidi (Inactive)
            Archiver:
            rhn-support-ceverson Clark Everson

              Created:
              Updated:
              Archived: