[jboss-svn-commits] JBL Code SVN: r19291 - 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
Fri Mar 28 02:04:40 EDT 2008


Author: mark.proctor at jboss.com
Date: 2008-03-28 02:04:40 -0400 (Fri, 28 Mar 2008)
New Revision: 19291

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java
Log:
JBRULES-1520 RightTuple merge for asymmetrical Rete propagations
-Various fixes to get things working.

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java	2008-03-28 06:04:34 UTC (rev 19290)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java	2008-03-28 06:04:40 UTC (rev 19291)
@@ -26,27 +26,27 @@
     }
 
     public void propagateAssertLeftTuple(final LeftTuple leftTuple,
-                                     final RightTuple rightTuple,
-                                     final PropagationContext context,
-                                     final InternalWorkingMemory workingMemory) {
+                                         final RightTuple rightTuple,
+                                         final PropagationContext context,
+                                         final InternalWorkingMemory workingMemory) {
 
         for ( LeftTupleSinkNode sink = this.sinks.getFirst(); sink != null; sink = sink.getNextLeftTupleSinkNode() ) {
             sink.assertLeftTuple( new LeftTuple( leftTuple,
-                                             rightTuple,
-                                             sink ),
-                              context,
-                              workingMemory );
+                                                 rightTuple,
+                                                 sink ),
+                                  context,
+                                  workingMemory );
         }
     }
 
     public void propagateAssertLeftTuple(final LeftTuple tuple,
-                                     final PropagationContext context,
-                                     final InternalWorkingMemory workingMemory) {
+                                         final PropagationContext context,
+                                         final InternalWorkingMemory workingMemory) {
         for ( LeftTupleSinkNode sink = this.sinks.getFirst(); sink != null; sink = sink.getNextLeftTupleSinkNode() ) {
             sink.assertLeftTuple( new LeftTuple( tuple,
-                                             sink ),
-                              context,
-                              workingMemory );
+                                                 sink ),
+                                  context,
+                                  workingMemory );
         }
     }
 
@@ -58,30 +58,30 @@
             LeftTuple temp = child.getLeftParentNext();
             //child.unlinkFromParents();
             child.getSink().retractLeftTuple( child,
-                                          context,
-                                          workingMemory );
-            child.unlinkFromRightParent();            
+                                              context,
+                                              workingMemory );
+            child.unlinkFromRightParent();
             //child = child.getLeftParentNext();
             child = temp;
         }
         leftTuple.setBetaChildren( null );
     }
-    
+
     public void propagateRetractLeftTupleDestroyRightTuple(final LeftTuple leftTuple,
-                                          final PropagationContext context,
-                                          final InternalWorkingMemory workingMemory) {
+                                                           final PropagationContext context,
+                                                           final InternalWorkingMemory workingMemory) {
         LeftTuple child = leftTuple.getBetaChildren();
         while ( child != null ) {
             LeftTuple temp = child.getLeftParentNext();
             child.getSink().retractLeftTuple( child,
-                                          context,
-                                          workingMemory );
+                                              context,
+                                              workingMemory );
             workingMemory.getFactHandleFactory().destroyFactHandle( child.getRightParent().getFactHandle() );
-            child.unlinkFromRightParent();            
+            child.unlinkFromRightParent();
             child = temp;
         }
         leftTuple.setBetaChildren( null );
-    }    
+    }
 
     public void propagateRetractRightTuple(final RightTuple rightTuple,
                                            final PropagationContext context,
@@ -91,9 +91,9 @@
             LeftTuple temp = child.getRightParentNext();
             //child.unlinkFromParents();
             child.getSink().retractLeftTuple( child,
-                                          context,
-                                          workingMemory );
-            child.unlinkFromLeftParent();            
+                                              context,
+                                              workingMemory );
+            child.unlinkFromLeftParent();
             //child = child.getRightParentNext();
             child = temp;
         }
@@ -101,13 +101,13 @@
     }
 
     public void createAndPropagateAssertLeftTuple(final InternalFactHandle factHandle,
-                                              final PropagationContext context,
-                                              final InternalWorkingMemory workingMemory) {
+                                                  final PropagationContext context,
+                                                  final InternalWorkingMemory workingMemory) {
         for ( LeftTupleSinkNode sink = this.sinks.getFirst(); sink != null; sink = sink.getNextLeftTupleSinkNode() ) {
             sink.assertLeftTuple( new LeftTuple( factHandle,
-                                             sink ),
-                              context,
-                              workingMemory );
+                                                 sink ),
+                                  context,
+                                  workingMemory );
         }
     }
 
@@ -122,83 +122,16 @@
         return sinkArray;
     }
 
-    //    public void propagateNewTupleSink(TupleMatch tupleMatch,
-    //                                      PropagationContext context,
-    //                                      InternalWorkingMemory workingMemory) {
-    //
-    //        final TupleSink sink = sinks.getLast();
-    //        final ReteTuple tuple = new ReteTuple( tupleMatch.getTuple(),
-    //                                               tupleMatch.getObjectMatches().getFactHandle(),
-    //                                               sink );
-    //        tupleMatch.addJoinedTuple( tuple );
-    //        tuple.assertTuple( context,
-    //                           workingMemory );
-    //    }
-    //
-    //    public void propagateNewTupleSink(ReteTuple tuple,
-    //                                      PropagationContext context,
-    //                                      InternalWorkingMemory workingMemory) {
-    //
-    //        final TupleSink sink = sinks.getLast();
-    //        ReteTuple child = new ReteTuple( tuple,
-    //                                         sink );
-    //        tuple.addChildEntry( child );
-    //        child.assertTuple( context,
-    //                           workingMemory );
-    //    }
-    //
-    //    public void propagateNewTupleSink(InternalFactHandle handle,
-    //                                      LinkedList list,
-    //                                      PropagationContext context,
-    //                                      InternalWorkingMemory workingMemory) {
-    //        TupleSink sink = this.sinks.getLast();
-    //        ReteTuple tuple = new ReteTuple( handle,
-    //                                         sink );
-    //        list.add( new LinkedListEntry( tuple ) );
-    //        tuple.assertTuple( context,
-    //                           workingMemory );
-    //    }
-    //
-    //    /**
-    //     * @inheritDoc
-    //     */
-    //    public List getPropagatedTuples(final Map memory,
-    //                                    final InternalWorkingMemory workingMemory,
-    //                                    final TupleSink sink) {
-    //        int index = 0;
-    //        for ( TupleSinkNode node = this.sinks.getFirst(); node != null; node = node.getNextTupleSinkNode() ) {
-    //            if ( node.equals( sink ) ) {
-    //                break;
-    //            }
-    //            index++;
-    //        }
-    //
-    //        final List propagatedTuples = new ArrayList( memory.size() );
-    //
-    //        for ( final Iterator it = memory.values().iterator(); it.hasNext(); ) {
-    //            final LinkedList tuples = (LinkedList) it.next();
-    //            LinkedListEntry wrapper = (LinkedListEntry) tuples.getFirst();
-    //            for ( int i = 0; i < index; i++ ) {
-    //                wrapper = (LinkedListEntry) wrapper.getNext();
-    //            }
-    //            propagatedTuples.add( wrapper.getObject() );
-    //        }
-    //
-    //        return propagatedTuples;
-    //    }
-
     public int size() {
         return this.sinks.size();
     }
 
     public void readExternal(ObjectInput in) throws IOException,
                                             ClassNotFoundException {
-        // TODO Auto-generated method stub
-        
+        this.sinks = (LeftTupleSinkNodeList) in.readObject();
     }
 
     public void writeExternal(ObjectOutput out) throws IOException {
-        // TODO Auto-generated method stub
-        
+        out.writeObject( this.sinks );
     }
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java	2008-03-28 06:04:34 UTC (rev 19290)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java	2008-03-28 06:04:40 UTC (rev 19291)
@@ -38,8 +38,10 @@
 import org.drools.spi.ObjectType;
 import org.drools.spi.PropagationContext;
 import org.drools.util.FactEntry;
+import org.drools.util.ObjectHashSet;
 import org.drools.util.RightTupleList;
 import org.drools.util.Iterator;
+import org.drools.util.ObjectHashSet.ObjectEntry;
 
 /**
  * A node that is an entry point into the Rete network.
@@ -271,26 +273,25 @@
                            final PropagationContext context,
                            final InternalWorkingMemory workingMemory) {
         // @todo
-//        // JBRULES-612: the cache MUST be invalidated when a new node type is added to the network, so iterate and reset all caches.
-//        final ObjectTypeNode node = (ObjectTypeNode) sink;
-//
-//        final ObjectType newObjectType = node.getObjectType();
-//
-//        InternalWorkingMemoryEntryPoint wmEntryPoint = (InternalWorkingMemoryEntryPoint) workingMemory.getWorkingMemoryEntryPoint( this.entryPoint.getEntryPointId() );
-//
-//        for ( ObjectTypeConf objectTypeConf : wmEntryPoint.getObjectTypeConfigurationRegistry().values() ) {
-//            if ( newObjectType.isAssignableFrom( objectTypeConf.getConcreteObjectTypeNode().getObjectType() ) ) {
-//                objectTypeConf.resetCache();
-//                ObjectTypeNode sourceNode = objectTypeConf.getConcreteObjectTypeNode();
-//                RightTupleList table = (RightTupleList) workingMemory.getNodeMemory( sourceNode );
-//                Iterator factIter = table.iterator();
-//                for ( FactEntry factEntry = (FactEntry) factIter.next(); factEntry != null; factEntry = (FactEntry) factIter.next() ) {
-//                    sink.assertObject( factEntry.getFactHandle(),
-//                                       context,
-//                                       workingMemory );
-//                }
-//            }
-//        }
+        // JBRULES-612: the cache MUST be invalidated when a new node type is added to the network, so iterate and reset all caches.
+        final ObjectTypeNode node = (ObjectTypeNode) sink;
+
+        final ObjectType newObjectType = node.getObjectType();
+
+        InternalWorkingMemoryEntryPoint wmEntryPoint = (InternalWorkingMemoryEntryPoint) workingMemory.getWorkingMemoryEntryPoint( this.entryPoint.getEntryPointId() );
+
+        for ( ObjectTypeConf objectTypeConf : wmEntryPoint.getObjectTypeConfigurationRegistry().values() ) {
+            if ( newObjectType.isAssignableFrom( objectTypeConf.getConcreteObjectTypeNode().getObjectType() ) ) {
+                objectTypeConf.resetCache();
+                ObjectTypeNode sourceNode = objectTypeConf.getConcreteObjectTypeNode();
+                Iterator it = ((ObjectHashSet) workingMemory.getNodeMemory( sourceNode )).iterator();
+                for ( ObjectEntry entry = (ObjectEntry) it.next(); entry != null; entry = (ObjectEntry) it.next() ) {
+                    sink.assertObject( (InternalFactHandle) entry.getValue(),
+                                       context,
+                                       workingMemory );
+                }
+            }
+        }
     }
 
     public boolean isObjectMemoryEnabled() {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java	2008-03-28 06:04:34 UTC (rev 19290)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java	2008-03-28 06:04:40 UTC (rev 19291)
@@ -41,23 +41,6 @@
                                    workingMemory );
     }
 
-    //    public void propagateNotRetractLeftTuple(final LeftTuple leftTuple,
-    //                                          final PropagationContext context,
-    //                                          final InternalWorkingMemory workingMemory) {
-    //            LeftTuple child = leftTuple.getBetaChildren();
-    //            while ( child != null ) {
-    //                //LeftTuple temp = leftTuple.getRightParentNext();
-    //                //child.unlinkFromParents();
-    //                //child.unlinkFromLeftParent();
-    //                child.getSink().retractTuple( child,
-    //                                              context,
-    //                                              workingMemory );
-    //                child = child.getLeftParentNext();
-    //                //child = temp;
-    //            }
-    //            leftTuple.setBetaChildren( null );
-    //        }    
-
     public void propagateRetractLeftTuple(final LeftTuple leftTuple,
                                           final PropagationContext context,
                                           final InternalWorkingMemory workingMemory) {
@@ -127,11 +110,10 @@
 
     public void readExternal(ObjectInput in) throws IOException,
                                             ClassNotFoundException {
-        // @todo
-
+        this.sink = ( LeftTupleSink) in.readObject();
     }
 
     public void writeExternal(ObjectOutput out) throws IOException {
-        // @todo        
+        out.writeObject( this.sink );     
     }
 }




More information about the jboss-svn-commits mailing list