[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