[jboss-svn-commits] JBL Code SVN: r14997 - 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
Mon Sep 10 16:21:22 EDT 2007
Author: tirelli
Date: 2007-09-10 16:21:22 -0400 (Mon, 10 Sep 2007)
New Revision: 14997
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
Log:
JBRULES-1177: implementing definitive solution
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java 2007-09-10 17:16:48 UTC (rev 14996)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java 2007-09-10 20:21:22 UTC (rev 14997)
@@ -28,7 +28,6 @@
import org.drools.util.FactEntry;
import org.drools.util.FactHashTable;
import org.drools.util.Iterator;
-import org.drools.util.AbstractHashTable.FactEntryImpl;
/**
* <code>AlphaNodes</code> are nodes in the <code>Rete</code> network used
@@ -61,9 +60,6 @@
private boolean objectMemoryAllowed;
- // a reference to the ObjectSink currently being updated
- private transient ObjectSink sinkBeingUpdated;
-
/**
* Construct an <code>AlphaNode</code> with a unique id using the provided
* <code>FieldConstraint</code> and the given <code>ObjectSource</code>.
@@ -141,17 +137,9 @@
false );
}
- if ( this.sinkBeingUpdated == null ) {
- // this is a regular assert
- this.sink.propagateAssertObject( handle,
- context,
- workingMemory );
- } else {
- // this is an assert as a result of sink update
- this.sinkBeingUpdated.assertObject( handle,
- context,
- workingMemory );
- }
+ this.sink.propagateAssertObject( handle,
+ context,
+ workingMemory );
}
}
@@ -181,11 +169,10 @@
if ( !isObjectMemoryEnabled() ) {
// get the objects from the parent
- this.sinkBeingUpdated = sink;
- this.objectSource.updateSink( this,
+ ObjectSinkUpdateAdapter adapter = new ObjectSinkUpdateAdapter( sink, this.constraint );
+ this.objectSource.updateSink( adapter,
context,
workingMemory );
- this.sinkBeingUpdated = null;
} else {
// if already has memory, just iterate and propagate
memory = (FactHashTable) workingMemory.getNodeMemory( this );
@@ -303,4 +290,53 @@
this.previousObjectSinkNode = previous;
}
+ /**
+ * Used with the updateSink method, so that the parent ObjectSource
+ * can update the TupleSink
+ * @author mproctor
+ *
+ */
+ private static class ObjectSinkUpdateAdapter
+ implements
+ ObjectSink {
+ private final ObjectSink sink;
+ private final AlphaNodeFieldConstraint constraint;
+
+ public ObjectSinkUpdateAdapter(final ObjectSink sink,
+ final AlphaNodeFieldConstraint constraint ) {
+ this.sink = sink;
+ this.constraint = constraint;
+ }
+
+ public void assertObject(final InternalFactHandle handle,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+ if ( this.constraint.isAllowed( handle.getObject(),
+ workingMemory ) ) {
+ this.sink.assertObject( handle,
+ context,
+ workingMemory );
+ }
+ }
+
+ public void modifyObject(final InternalFactHandle handle,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+ throw new UnsupportedOperationException( "ObjectSinkUpdateAdapter onlys supports assertObject method calls" );
+ }
+
+ public void retractObject(final InternalFactHandle handle,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+ throw new UnsupportedOperationException( "ObjectSinkUpdateAdapter onlys supports assertObject method calls" );
+ }
+
+ public boolean isObjectMemoryEnabled() {
+ throw new UnsupportedOperationException( "ObjectSinkUpdateAdapter have no Object memory" );
+ }
+
+ public void setObjectMemoryEnabled(boolean objectMemoryEnabled) {
+ throw new UnsupportedOperationException( "ObjectSinkUpdateAdapter have no Object memory" );
+ }
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java 2007-09-10 17:16:48 UTC (rev 14996)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java 2007-09-10 20:21:22 UTC (rev 14997)
@@ -27,7 +27,6 @@
import org.drools.util.FactEntry;
import org.drools.util.FactHashTable;
import org.drools.util.Iterator;
-import org.drools.util.AbstractHashTable.FactEntryImpl;
/**
* All asserting Facts must propagated into the right <code>ObjectSink</code> side of a BetaNode, if this is the first Pattern
More information about the jboss-svn-commits
mailing list