[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