[jboss-svn-commits] JBL Code SVN: r20158 - labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun May 25 11:57:55 EDT 2008


Author: tirelli
Date: 2008-05-25 11:57:54 -0400 (Sun, 25 May 2008)
New Revision: 20158

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NotNode.java
Log:
Adding support to behaviors to all beta nodes

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2008-05-24 19:45:10 UTC (rev 20157)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2008-05-25 15:57:54 UTC (rev 20158)
@@ -48,9 +48,9 @@
  * @version $Id$
  */
 public class AccumulateNode extends BetaNode {
-    
-    private static final long          serialVersionUID = 400L;  
 
+    private static final long          serialVersionUID = 400L;
+
     private boolean                    unwrapRightObject;
     private Accumulate                 accumulate;
     private AlphaNodeFieldConstraint[] resultConstraints;
@@ -247,7 +247,7 @@
 
         final RightTuple rightTuple = new RightTuple( factHandle,
                                                       this );
-        if ( !behavior.assertRightTuple( memory.behaviorContext,
+        if ( !behavior.assertRightTuple( memory.betaMemory.getBehaviorContext(),
                                          rightTuple,
                                          workingMemory ) ) {
             // destroy right tuple
@@ -304,8 +304,10 @@
                                   final PropagationContext context,
                                   final InternalWorkingMemory workingMemory) {
         final AccumulateMemory memory = (AccumulateMemory) workingMemory.getNodeMemory( this );
-        
-        behavior.retractRightTuple( memory.behaviorContext, rightTuple, workingMemory );
+
+        behavior.retractRightTuple( memory.betaMemory.getBehaviorContext(),
+                                    rightTuple,
+                                    workingMemory );
         memory.betaMemory.getRightTupleMemory().remove( rightTuple );
 
         for ( LeftTuple childTuple = rightTuple.getBetaChildren(); childTuple != null; ) {
@@ -535,15 +537,15 @@
             }
         }
     }
-    
+
     protected void doRemove(final InternalWorkingMemory workingMemory,
                             final AccumulateMemory memory) {
-          Iterator it = memory.betaMemory.getCreatedHandles().iterator();
-          for ( ObjectEntry entry = (ObjectEntry) it.next(); entry != null; entry = (ObjectEntry) it.next() ) {
-              AccumulateContext ctx = ( AccumulateContext ) entry.getValue();
-              workingMemory.getFactHandleFactory().destroyFactHandle( ctx.result.getFactHandle() );              
-          }    
-    }       
+        Iterator it = memory.betaMemory.getCreatedHandles().iterator();
+        for ( ObjectEntry entry = (ObjectEntry) it.next(); entry != null; entry = (ObjectEntry) it.next() ) {
+            AccumulateContext ctx = (AccumulateContext) entry.getValue();
+            workingMemory.getFactHandleFactory().destroyFactHandle( ctx.result.getFactHandle() );
+        }
+    }
 
     /* (non-Javadoc)
      * @see org.drools.reteoo.BaseNode#hashCode()
@@ -590,13 +592,13 @@
         for ( int i = 0; i < this.resultConstraints.length; i++ ) {
             memory.alphaContexts[i] = this.resultConstraints[i].createContextEntry();
         }
-        memory.behaviorContext = this.behavior.createBehaviorContext();
+        memory.betaMemory.setBehaviorContext( this.behavior.createBehaviorContext() );
         return memory;
     }
-    
+
     public short getType() {
         return NodeTypeEnums.AccumulateNode;
-    } 
+    }
 
     public static class AccumulateMemory
         implements
@@ -607,7 +609,6 @@
         public BetaMemory         betaMemory;
         public ContextEntry[]     resultsContext;
         public ContextEntry[]     alphaContexts;
-        public Object             behaviorContext;
 
         public void readExternal(ObjectInput in) throws IOException,
                                                 ClassNotFoundException {
@@ -615,7 +616,6 @@
             betaMemory = (BetaMemory) in.readObject();
             resultsContext = (ContextEntry[]) in.readObject();
             alphaContexts = (ContextEntry[]) in.readObject();
-            behaviorContext = in.readObject();
         }
 
         public void writeExternal(ObjectOutput out) throws IOException {
@@ -623,7 +623,6 @@
             out.writeObject( betaMemory );
             out.writeObject( resultsContext );
             out.writeObject( alphaContexts );
-            out.writeObject( behaviorContext );
         }
 
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaMemory.java	2008-05-24 19:45:10 UTC (rev 20157)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaMemory.java	2008-05-25 15:57:54 UTC (rev 20158)
@@ -8,7 +8,9 @@
 import org.drools.rule.ContextEntry;
 import org.drools.util.ObjectHashMap;
 
-public class BetaMemory {
+public class BetaMemory
+    implements
+    Externalizable {
 
     private static final long serialVersionUID = 400L;
 
@@ -16,6 +18,7 @@
     private RightTupleMemory  rightTupleMemory;
     private ObjectHashMap     createdHandles;
     private ContextEntry[]    context;
+    private Object            behaviorContext;
 
     public BetaMemory() {
     }
@@ -28,6 +31,23 @@
         this.context = context;
     }
 
+    public void readExternal(ObjectInput in) throws IOException,
+                                            ClassNotFoundException {
+        leftTupleMemory = (LeftTupleMemory) in.readObject();
+        rightTupleMemory = (RightTupleMemory) in.readObject();
+        createdHandles = (ObjectHashMap) in.readObject();
+        context = (ContextEntry[]) in.readObject();
+        behaviorContext = (Object) in.readObject();
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject( leftTupleMemory );
+        out.writeObject( rightTupleMemory );
+        out.writeObject( createdHandles );
+        out.writeObject( context );
+        out.writeObject( behaviorContext );
+    }
+
     public RightTupleMemory getRightTupleMemory() {
         return this.rightTupleMemory;
     }
@@ -35,9 +55,9 @@
     public LeftTupleMemory getLeftTupleMemory() {
         return this.leftTupleMemory;
     }
-    
+
     public ObjectHashMap getCreatedHandles() {
-        if( this.createdHandles == null ) {
+        if ( this.createdHandles == null ) {
             this.createdHandles = new ObjectHashMap();
         }
         return this.createdHandles;
@@ -49,4 +69,12 @@
     public ContextEntry[] getContext() {
         return context;
     }
+
+    public Object getBehaviorContext() {
+        return behaviorContext;
+    }
+
+    public void setBehaviorContext(Object behaviorContext) {
+        this.behaviorContext = behaviorContext;
+    }
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java	2008-05-24 19:45:10 UTC (rev 20157)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java	2008-05-25 15:57:54 UTC (rev 20158)
@@ -332,7 +332,9 @@
      * Creates a BetaMemory for the BetaNode's memory.
      */
     public Object createMemory(final RuleBaseConfiguration config) {
-        return this.constraints.createBetaMemory( config );
+        BetaMemory memory = this.constraints.createBetaMemory( config );
+        memory.setBehaviorContext( this.behavior.createBehaviorContext() );
+        return memory;
     }
 
     /**

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2008-05-24 19:45:10 UTC (rev 20157)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2008-05-25 15:57:54 UTC (rev 20158)
@@ -16,6 +16,7 @@
 
 package org.drools.reteoo;
 
+import java.io.Externalizable;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
@@ -24,7 +25,6 @@
 import java.util.Collection;
 
 import org.drools.RuleBaseConfiguration;
-import org.drools.common.BaseNode;
 import org.drools.common.BetaConstraints;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
@@ -231,6 +231,14 @@
         final RightTuple rightTuple = new RightTuple( factHandle,
                                                       this );
 
+        if ( !behavior.assertRightTuple( memory.betaMemory.getBehaviorContext(),
+                                         rightTuple,
+                                         workingMemory ) ) {
+            // destroy right tuple
+            rightTuple.unlinkFromRightParent();
+            return;
+        }
+
         memory.betaMemory.getRightTupleMemory().add( rightTuple );
 
         if ( !this.tupleMemoryEnabled ) {
@@ -272,6 +280,7 @@
                                   final InternalWorkingMemory workingMemory) {
 
         final CollectMemory memory = (CollectMemory) workingMemory.getNodeMemory( this );
+        behavior.retractRightTuple( memory.betaMemory.getBehaviorContext(), rightTuple, workingMemory );
         memory.betaMemory.getRightTupleMemory().remove( rightTuple );
 
         for ( LeftTuple leftTuple = rightTuple.getBetaChildren(); leftTuple != null; ) {
@@ -502,6 +511,7 @@
         for ( int i = 0; i < this.resultConstraints.length; i++ ) {
             memory.alphaContexts[i] = this.resultConstraints[i].createContextEntry();
         }
+        memory.betaMemory.setBehaviorContext( this.behavior.createBehaviorContext() );
         return memory;
     }
     
@@ -511,11 +521,24 @@
 
     public static class CollectMemory
         implements
-        Serializable {
+        Externalizable {
         private static final long serialVersionUID = 400L;
         public BetaMemory         betaMemory;
         public ContextEntry[]     resultsContext;
         public ContextEntry[]     alphaContexts;
+
+        public void readExternal(ObjectInput in) throws IOException,
+                                                ClassNotFoundException {
+            betaMemory = (BetaMemory) in.readObject();
+            resultsContext = (ContextEntry[]) in.readObject();
+            alphaContexts = (ContextEntry[]) in.readObject();
+        }
+
+        public void writeExternal(ObjectOutput out) throws IOException {
+            out.writeObject( betaMemory );
+            out.writeObject( resultsContext );
+            out.writeObject( alphaContexts );
+        }
     }
 
     private static class CollectContext

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java	2008-05-24 19:45:10 UTC (rev 20157)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java	2008-05-25 15:57:54 UTC (rev 20158)
@@ -22,8 +22,6 @@
 import org.drools.reteoo.builder.BuildContext;
 import org.drools.rule.Behavior;
 import org.drools.spi.PropagationContext;
-import org.drools.util.FactEntry;
-import org.drools.util.Iterator;
 
 /**
  * <code>ExistsNode</code> extends <code>BetaNode</code> to perform tests for
@@ -169,6 +167,14 @@
                                                       this );
 
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
+        if ( !behavior.assertRightTuple( memory.getBehaviorContext(),
+                                         rightTuple,
+                                         workingMemory ) ) {
+            // destroy right tuple
+            rightTuple.unlinkFromRightParent();
+            return;
+        }
+
         memory.getRightTupleMemory().add( rightTuple );
 
         if ( !this.tupleMemoryEnabled ) {
@@ -269,6 +275,9 @@
         final RightTuple rootBlocker = (RightTuple) rightTuple.getPrevious();
 
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
+        behavior.retractRightTuple( memory.getBehaviorContext(),
+                                    rightTuple,
+                                    workingMemory );
         memory.getRightTupleMemory().remove( rightTuple );
 
         if ( rightTuple.getBlocked() == null ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2008-05-24 19:45:10 UTC (rev 20157)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2008-05-25 15:57:54 UTC (rev 20158)
@@ -22,7 +22,6 @@
 import org.drools.reteoo.builder.BuildContext;
 import org.drools.rule.Behavior;
 import org.drools.spi.PropagationContext;
-import org.drools.util.FactEntry;
 import org.drools.util.Iterator;
 
 /**
@@ -149,6 +148,14 @@
         RightTuple rightTuple = new RightTuple( factHandle,
                                                 this );
 
+        if ( !behavior.assertRightTuple( memory.getBehaviorContext(),
+                                         rightTuple,
+                                         workingMemory ) ) {
+            // destroy right tuple
+            rightTuple.unlinkFromRightParent();
+            return;
+        }
+
         memory.getRightTupleMemory().add( rightTuple );
         if ( !this.tupleMemoryEnabled ) {
             // do nothing here, as we know there are no left tuples at this stage in sequential mode.
@@ -189,6 +196,9 @@
                                   final PropagationContext context,
                                   final InternalWorkingMemory workingMemory) {
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
+        behavior.retractRightTuple( memory.getBehaviorContext(),
+                                    rightTuple,
+                                    workingMemory );
         memory.getRightTupleMemory().remove( rightTuple );
 
         if ( rightTuple.getBetaChildren() != null ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NotNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NotNode.java	2008-05-24 19:45:10 UTC (rev 20157)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NotNode.java	2008-05-25 15:57:54 UTC (rev 20158)
@@ -17,13 +17,11 @@
  */
 
 import org.drools.common.BetaConstraints;
-import org.drools.common.EmptyBetaConstraints;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.reteoo.builder.BuildContext;
 import org.drools.rule.Behavior;
 import org.drools.spi.PropagationContext;
-import org.drools.util.FactEntry;
 import org.drools.util.Iterator;
 
 /**
@@ -146,6 +144,14 @@
                                                       this );
 
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
+        if ( !behavior.assertRightTuple( memory.getBehaviorContext(),
+                                         rightTuple,
+                                         workingMemory ) ) {
+            // destroy right tuple
+            rightTuple.unlinkFromRightParent();
+            return;
+        }
+
         memory.getRightTupleMemory().add( rightTuple );
 
         if ( !this.tupleMemoryEnabled ) {
@@ -200,6 +206,9 @@
         final RightTuple rootBlocker = (RightTuple) rightTuple.getPrevious();
 
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
+        behavior.retractRightTuple( memory.getBehaviorContext(),
+                                    rightTuple,
+                                    workingMemory );
         memory.getRightTupleMemory().remove( rightTuple );
 
         if ( rightTuple.getBlocked() == null ) {




More information about the jboss-svn-commits mailing list