Uploaded image for project: 'Drools'
  1. Drools
  2. DROOLS-6072

Logical events. Staging will set it's status to stated

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Major Major
    • None
    • 7.48.0.Final
    • core engine
    • None
    • Undefined
    • NEW
    • NEW
    • ---
    • ---

      EqualityKey state must be staged for the following case:

      Test

      @Test
      public void testInsertStatedEventEqualToLogical() {
          KieSession session = ...
          
          AtomicInteger positive = new AtomicInteger(1);
          
          session.insert(new AtomicInteger(-1));
          session.fireAllRules();
          session.insert(positive);
          session.fireAllRules();
          InternalFactHandle fh = (InternalFactHandle) session.insert(new Event("negative integer"));
          assertEquals(STATED, fh.getEqualityKey().getStatus());
          
          session.insert(new AdminEvent("reset negative values"));
          session.fireAllRules();
          assertEquals(1, positive.get());
      }
      
      public static class Event {
          private String message;
          
          public Event(String message) {
              this.message = message;
          }
          
          public String getMessage() {
              return message;
          }
          
          public void setMessage(String message) {
              this.message = message;
          }
          
          @Override
          public boolean equals(Object obj) {
              return reflectionEquals(this, obj, false);
          }
          
          @Override
          public int hashCode() {
              return reflectionHashCode(this, false);
          }
      }
      
      public static class AdminEvent {
          private String message;
          
          public AdminEvent(String message) {
              this.message = message;
          }
          
          public String getMessage() {
              return message;
          }
          
          public void setMessage(String message) {
              this.message = message;
          }
      }
      

      Rule

      dialect 'mvel'
      
      import java.util.concurrent.atomic.AtomicInteger
      import ...Event
      import ...AdminEvent
      
      rule 'negative integer'
          when
              $int: AtomicInteger(intValue < 0)
          then
              insertLogical(new Event("negative integer"))
      end
      
      rule 'increment positive if no negative values'
          when
              $positive: AtomicInteger(intValue > 0)
              not Event()
          then
              $positive.incrementAndGet();
      end
      
      rule 'reset negative integers'
          when
              AdminEvent(message == 'reset negative values')
              $negative: AtomicInteger(intValue < 0)
          then
             	$negative.set(0)
              update($negative);
      end
      

            mfusco@redhat.com Mario Fusco
            madamovych Mykhaylo Adamovych
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: