[jboss-svn-commits] JBL Code SVN: r19009 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/reteoo and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat Mar 15 02:32:38 EDT 2008
Author: mingjin
Date: 2008-03-15 02:32:38 -0400 (Sat, 15 Mar 2008)
New Revision: 19009
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BaseNode.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/EvalConditionNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Rete.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/BaseNodeTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockTupleSink.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockTupleSource.java
Log:
compiled after merge, fixed the tests.
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BaseNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BaseNode.java 2008-03-15 06:13:59 UTC (rev 19008)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/BaseNode.java 2008-03-15 06:32:38 UTC (rev 19009)
@@ -73,6 +73,13 @@
public abstract void attach(InternalWorkingMemory[] workingMemories);
+ /**
+ * A method that is called for all nodes whose network bellow them
+ * changed, after the change is complete, providing them with an oportunity
+ * for state update
+ */
+ public abstract void networkUpdated();
+
public void remove(RuleRemovalContext context,
ReteooBuilder builder,
BaseNode node,
@@ -110,6 +117,6 @@
}
public String toString() {
- return "[" + this.getClass().getName() + "(" + this.id + ")]";
+ return "[" + this.getClass().getSimpleName() + "(" + this.id + ")]";
}
}
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-03-15 06:13:59 UTC (rev 19008)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java 2008-03-15 06:32:38 UTC (rev 19009)
@@ -16,12 +16,6 @@
* limitations under the License.
*/
-import java.util.ArrayList;
-import java.util.List;
-import java.io.ObjectOutput;
-import java.io.IOException;
-import java.io.ObjectInput;
-
import org.drools.RuleBaseConfiguration;
import org.drools.common.BaseNode;
import org.drools.common.BetaConstraints;
@@ -33,6 +27,12 @@
import org.drools.util.LinkedList;
import org.drools.util.LinkedListEntry;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* <code>BetaNode</code> provides the base abstract class for <code>JoinNode</code> and <code>NotNode</code>. It implements
* both TupleSink and ObjectSink and as such can receive <code>Tuple</code>s and <code>FactHandle</code>s. BetaNode uses BetaMemory
@@ -141,10 +141,15 @@
* @see org.drools.reteoo.BaseNode#attach()
*/
public void attach() {
+ this.rightInput.addObjectSink( this );
this.leftInput.addTupleSink( this );
- this.rightInput.addObjectSink( this );
}
+ public void networkUpdated() {
+ this.rightInput.networkUpdated();
+ this.leftInput.networkUpdated();
+ }
+
public List getRules() {
final List list = new ArrayList();
@@ -177,12 +182,12 @@
PropagationContext.RULE_ADDITION,
null,
null );
+ this.rightInput.updateSink( this,
+ propagationContext,
+ workingMemory );
this.leftInput.updateSink( this,
propagationContext,
workingMemory );
- this.rightInput.updateSink( this,
- propagationContext,
- workingMemory );
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java 2008-03-15 06:13:59 UTC (rev 19008)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java 2008-03-15 06:32:38 UTC (rev 19009)
@@ -136,6 +136,10 @@
}
}
+ public void networkUpdated() {
+ this.tupleSource.networkUpdated();
+ }
+
// ------------------------------------------------------------
// Instance methods
// ------------------------------------------------------------
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java 2008-03-15 06:13:59 UTC (rev 19008)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java 2008-03-15 06:32:38 UTC (rev 19009)
@@ -1,10 +1,5 @@
package org.drools.reteoo;
-import java.io.Serializable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
import org.drools.RuleBaseConfiguration;
import org.drools.common.BaseNode;
import org.drools.common.BetaConstraints;
@@ -22,6 +17,11 @@
import org.drools.util.LinkedListEntry;
import org.drools.util.TupleHashTable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.Serializable;
+
public class FromNode extends TupleSource
implements
TupleSinkNode,
@@ -182,6 +182,10 @@
}
}
+ public void networkUpdated() {
+ this.tupleSource.networkUpdated();
+ }
+
protected void doRemove(final RuleRemovalContext context,
final ReteooBuilder builder,
final BaseNode node,
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 2008-03-15 06:13:59 UTC (rev 19008)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java 2008-03-15 06:32:38 UTC (rev 19009)
@@ -120,6 +120,10 @@
}
}
+ public void networkUpdated() {
+ this.objectSource.networkUpdated();
+ }
+
/**
* Takes the asserted <code>FactHandleImpl</code> received from the <code>ObjectSource</code> and puts it
* in a new <code>ReteTuple</code> before propagating to the <code>TupleSinks</code>
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java 2008-03-15 06:13:59 UTC (rev 19008)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java 2008-03-15 06:32:38 UTC (rev 19009)
@@ -16,17 +16,16 @@
* limitations under the License.
*/
-import java.io.Serializable;
+import org.drools.common.BaseNode;
+import org.drools.common.DefaultFactHandle;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.spi.PropagationContext;
+
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
-import org.drools.common.BaseNode;
-import org.drools.common.DefaultFactHandle;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.spi.PropagationContext;
-
/**
* A source of <code>FactHandle</code>s for an <code>ObjectSink</code>.
*
@@ -113,7 +112,7 @@
* <code>FactHandleImpl</code>.
*/
protected void addObjectSink(final ObjectSink objectSink) {
- if ( EmptyObjectSinkAdapter.getInstance().equals(this.sink) ) {
+ if ( this.sink instanceof EmptyObjectSinkAdapter ) {
this.sink = new SingleObjectSinkAdapter( objectSink );
} else if ( this.sink instanceof SingleObjectSinkAdapter ) {
final CompositeObjectSinkAdapter sinkAdapter = new CompositeObjectSinkAdapter( this.alphaNodeHashingThreshold );
@@ -132,7 +131,7 @@
* The <code>ObjectSink</code> to remove
*/
protected void removeObjectSink(final ObjectSink objectSink) {
- if ( this.sink == EmptyObjectSinkAdapter.getInstance() ) {
+ if ( this.sink instanceof EmptyObjectSinkAdapter ) {
throw new IllegalArgumentException( "Cannot remove a sink, when the list of sinks is null" );
}
@@ -151,6 +150,10 @@
PropagationContext context,
InternalWorkingMemory workingMemory);
+ public void networkUpdated() {
+ this.objectSource.networkUpdated();
+ }
+
public ObjectSinkPropagator getSinkPropagator() {
return this.sink;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2008-03-15 06:13:59 UTC (rev 19008)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2008-03-15 06:32:38 UTC (rev 19009)
@@ -31,6 +31,7 @@
import org.drools.reteoo.builder.BuildContext;
import org.drools.rule.Declaration;
import org.drools.rule.EntryPoint;
+import org.drools.rule.EvalCondition;
import org.drools.spi.Constraint;
import org.drools.spi.ObjectType;
import org.drools.spi.PropagationContext;
@@ -240,6 +241,10 @@
}
}
+ public void networkUpdated() {
+ this.skipOnModify = canSkipOnModify( this.sink.getSinks() );
+ }
+
/**
* OTN needs to override remove to avoid releasing the node ID, since OTN are
* never removed from the rulebase in the current implementation
@@ -314,7 +319,6 @@
*/
protected void addObjectSink(final ObjectSink objectSink) {
super.addObjectSink( objectSink );
- this.skipOnModify = canSkipOnModify( this.sink.getSinks() );
}
/**
@@ -322,7 +326,6 @@
*/
protected void removeObjectSink(final ObjectSink objectSink) {
super.removeObjectSink( objectSink );
- this.skipOnModify = canSkipOnModify( this.sink.getSinks() );
}
/**
@@ -336,15 +339,17 @@
// If we have no alpha or beta node with constraints on this ObjectType, we can just skip modifies
boolean hasConstraints = false;
for ( int i = 0; i < sinks.length && !hasConstraints; i++ ) {
- if ( sinks[i] instanceof AlphaNode ) {
- hasConstraints = this.usesDeclaration( ((AlphaNode) sinks[i]).getConstraint() );
+ if ( sinks[i] instanceof AlphaNode || sinks[i] instanceof AccumulateNode || sinks[i] instanceof CollectNode || sinks[i] instanceof FromNode ) {
+ hasConstraints = true;
} else if ( sinks[i] instanceof BetaNode && ((BetaNode) sinks[i]).getConstraints().length > 0 ) {
hasConstraints = this.usesDeclaration( ((BetaNode) sinks[i]).getConstraints() );
+ } else if ( sinks[i] instanceof EvalConditionNode ) {
+ hasConstraints = this.usesDeclaration( ((EvalConditionNode)sinks[i]).getCondition() );
}
if ( !hasConstraints && sinks[i] instanceof ObjectSource ) {
- hasConstraints = this.canSkipOnModify( ((ObjectSource) sinks[i]).getSinkPropagator().getSinks() );
- } else if ( sinks[i] instanceof TupleSource ) {
- hasConstraints = this.canSkipOnModify( ((TupleSource) sinks[i]).getSinkPropagator().getSinks() );
+ hasConstraints = !this.canSkipOnModify( ((ObjectSource) sinks[i]).getSinkPropagator().getSinks() );
+ } else if ( !hasConstraints && sinks[i] instanceof TupleSource ) {
+ hasConstraints = !this.canSkipOnModify( ((TupleSource) sinks[i]).getSinkPropagator().getSinks() );
}
}
@@ -352,6 +357,7 @@
return !hasConstraints;
}
+
private boolean usesDeclaration(final Constraint[] constraints) {
boolean usesDecl = false;
for ( int i = 0; !usesDecl && i < constraints.length; i++ ) {
@@ -369,6 +375,15 @@
return usesDecl;
}
+ private boolean usesDeclaration(final EvalCondition condition) {
+ boolean usesDecl = false;
+ final Declaration[] declarations = condition.getRequiredDeclarations();
+ for ( int j = 0; !usesDecl && j < declarations.length; j++ ) {
+ usesDecl = (declarations[j].getPattern().getObjectType() == this.objectType);
+ }
+ return usesDecl;
+ }
+
/**
* @return the entryPoint
*/
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java 2008-03-15 06:13:59 UTC (rev 19008)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java 2008-03-15 06:32:38 UTC (rev 19009)
@@ -174,6 +174,10 @@
}
}
+ public void networkUpdated() {
+ this.tupleSource.networkUpdated();
+ }
+
protected void doRemove(final RuleRemovalContext context,
final ReteooBuilder builder,
final BaseNode node,
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Rete.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Rete.java 2008-03-15 06:13:59 UTC (rev 19008)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Rete.java 2008-03-15 06:32:38 UTC (rev 19009)
@@ -16,30 +16,24 @@
* limitations under the License.
*/
+import org.drools.common.BaseNode;
+import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalRuleBase;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.common.InternalWorkingMemoryEntryPoint;
+import org.drools.rule.EntryPoint;
+import org.drools.spi.ObjectType;
+import org.drools.spi.PropagationContext;
+
+import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
-import java.io.Externalizable;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import org.drools.common.BaseNode;
-import org.drools.common.InternalFactHandle;
-import org.drools.common.InternalRuleBase;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.common.DroolsObjectInput;
-import org.drools.reteoo.builder.BuildContext;
-import org.drools.rule.EntryPoint;
-import org.drools.spi.ObjectType;
-import org.drools.spi.PropagationContext;
-import org.drools.util.FactEntry;
-import org.drools.util.FactHashTable;
-import org.drools.util.Iterator;
-import org.drools.util.ObjectHashMap;
-import org.drools.RuleBase;
-
/**
* The Rete-OO network.
*
@@ -109,9 +103,12 @@
public void assertObject(final InternalFactHandle handle,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
- EntryPointNode node = this.entryPoints.get( context.getEntryPoint() );
+ EntryPoint entryPoint = context.getEntryPoint();
+ EntryPointNode node = this.entryPoints.get( entryPoint );
+ ObjectTypeConf typeConf = ((InternalWorkingMemoryEntryPoint) workingMemory.getWorkingMemoryEntryPoint( entryPoint.getEntryPointId() )).getObjectTypeConfigurationRegistry().getObjectTypeConf( entryPoint, handle.getObject() );
node.assertObject( handle,
context,
+ typeConf,
workingMemory );
}
@@ -127,9 +124,12 @@
public void retractObject(final InternalFactHandle handle,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
- EntryPointNode node = this.entryPoints.get( context.getEntryPoint() );
+ EntryPoint entryPoint = context.getEntryPoint();
+ EntryPointNode node = this.entryPoints.get( entryPoint );
+ ObjectTypeConf typeConf = ((InternalWorkingMemoryEntryPoint) workingMemory.getWorkingMemoryEntryPoint( entryPoint.getEntryPointId() )).getObjectTypeConfigurationRegistry().getObjectTypeConf( entryPoint, handle.getObject() );
node.retractObject( handle,
context,
+ typeConf,
workingMemory );
}
@@ -161,6 +161,10 @@
throw new UnsupportedOperationException( "cannot call attach() from the root Rete node" );
}
+ public void networkUpdated() {
+ // nothing to do
+ }
+
protected void doRemove(final RuleRemovalContext context,
final ReteooBuilder builder,
final BaseNode node,
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java 2008-03-15 06:13:59 UTC (rev 19008)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java 2008-03-15 06:32:38 UTC (rev 19009)
@@ -457,6 +457,10 @@
}
}
+ public void networkUpdated() {
+ this.tupleSource.networkUpdated();
+ }
+
protected void doRemove(final RuleRemovalContext context,
final ReteooBuilder builder,
final BaseNode node,
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/BaseNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/BaseNodeTest.java 2008-03-15 06:13:59 UTC (rev 19008)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/BaseNodeTest.java 2008-03-15 06:32:38 UTC (rev 19009)
@@ -78,6 +78,12 @@
return true;
}
+ @Override
+ public void networkUpdated() {
+ // TODO Auto-generated method stub
+
+ }
+
}
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockTupleSink.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockTupleSink.java 2008-03-15 06:13:59 UTC (rev 19008)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockTupleSink.java 2008-03-15 06:32:38 UTC (rev 19009)
@@ -16,11 +16,6 @@
* limitations under the License.
*/
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-
import org.drools.FactException;
import org.drools.RuleBaseConfiguration;
import org.drools.common.BaseNode;
@@ -28,6 +23,11 @@
import org.drools.common.NodeMemory;
import org.drools.spi.PropagationContext;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+
public class MockTupleSink extends TupleSource
implements
TupleSinkNode,
@@ -159,4 +159,10 @@
}
+ @Override
+ public void networkUpdated() {
+ // TODO Auto-generated method stub
+
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockTupleSource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockTupleSource.java 2008-03-15 06:13:59 UTC (rev 19008)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockTupleSource.java 2008-03-15 06:32:38 UTC (rev 19009)
@@ -64,4 +64,10 @@
}
+ @Override
+ public void networkUpdated() {
+ // TODO Auto-generated method stub
+
+ }
+
}
\ No newline at end of file
More information about the jboss-svn-commits
mailing list