[jboss-svn-commits] JBL Code SVN: r7004 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/common main/java/org/drools/reteoo main/java/org/drools/rule main/java/org/drools/spi main/java/org/drools/util test/java/org/drools/reteoo

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Oct 21 16:12:39 EDT 2006


Author: tirelli
Date: 2006-10-21 16:12:23 -0400 (Sat, 21 Oct 2006)
New Revision: 7004

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ScheduledAgendaItem.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.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/ReteooBuilder.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Restriction.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractBaseLinkedListNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedList.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedListNode.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java
Log:
Fixing compilation problems and FromNode

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java	2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java	2006-10-21 20:12:23 UTC (rev 7004)
@@ -298,7 +298,7 @@
      */
     public Activation[] getScheduledActivations() {
         final List list = new ArrayList( this.scheduledActivations.size() );
-        for ( LinkedListNode node = this.scheduledActivations.getFirst(); node != null; node = node.getNext() ) {
+        for ( LinkedListNode node = this.scheduledActivations.getFirst(); node != null; node = (LinkedListNode) node.getNext() ) {
             list.add( node );
         }
         return (Activation[]) list.toArray( new Activation[list.size()] );
@@ -373,7 +373,7 @@
      */
     public void clearActivationGroup(final ActivationGroup activationGroup) {
         final EventSupport eventsupport = (EventSupport) this.workingMemory;
-        final java.util.Iterator it = activationGroup.iterator();
+        final Iterator it = activationGroup.iterator();
         for ( ActivationGroupNode node = (ActivationGroupNode) it.next() ; node != null; node = (ActivationGroupNode) it.next()) {
             final Activation activation = node.getActivation();
             activation.setActivationGroupNode( null );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java	2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java	2006-10-21 20:12:23 UTC (rev 7004)
@@ -18,7 +18,6 @@
 
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 
 import org.drools.base.evaluators.Operator;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ScheduledAgendaItem.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ScheduledAgendaItem.java	2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ScheduledAgendaItem.java	2006-10-21 20:12:23 UTC (rev 7004)
@@ -23,6 +23,7 @@
 import org.drools.spi.Activation;
 import org.drools.spi.PropagationContext;
 import org.drools.spi.Tuple;
+import org.drools.util.Entry;
 import org.drools.util.LinkedList;
 import org.drools.util.LinkedListNode;
 
@@ -128,12 +129,12 @@
         return this.activationNumber;
     }
 
-    public LinkedListNode getNext() {
+    public Entry getNext() {
         return this.next;
     }
 
-    public void setNext(final LinkedListNode next) {
-        this.next = next;
+    public void setNext(final Entry next) {
+        this.next = (LinkedListNode) next;
     }
 
     public LinkedListNode getPrevious() {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java	2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java	2006-10-21 20:12:23 UTC (rev 7004)
@@ -11,6 +11,7 @@
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldExtractor;
 import org.drools.spi.PropagationContext;
+import org.drools.util.Entry;
 import org.drools.util.Iterator;
 import org.drools.util.LinkedList;
 import org.drools.util.LinkedListNode;
@@ -415,6 +416,7 @@
     public static class FieldIndex
         implements
         LinkedListNode {
+        private static final long serialVersionUID = 3853708964744065172L;
         private final int      index;
         private FieldExtractor fieldExtactor;
 
@@ -463,7 +465,7 @@
             this.count--;
         }
 
-        public LinkedListNode getNext() {
+        public Entry getNext() {
             return this.next;
         }
 
@@ -471,8 +473,8 @@
             return this.previous;
         }
 
-        public void setNext(final LinkedListNode next) {
-            this.next = next;
+        public void setNext(final Entry next) {
+            this.next = (LinkedListNode) next;
 
         }
 

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	2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java	2006-10-21 20:12:23 UTC (rev 7004)
@@ -12,7 +12,10 @@
 import org.drools.spi.DataProvider;
 import org.drools.spi.PropagationContext;
 import org.drools.util.Iterator;
-import org.drools.util.ObjectHashMap.ObjectEntry;
+import org.drools.util.LinkedList;
+import org.drools.util.LinkedListEntry;
+import org.drools.util.TupleHashTable;
+import org.drools.util.LinkedList.LinkedListIterator;
 
 public class FromNode extends TupleSource
     implements
@@ -25,8 +28,8 @@
 
     private DataProvider               dataProvider;
     private TupleSource                tupleSource;
-    private AlphaNodeFieldConstraint[] constraints;
-    private BetaConstraints            binder;
+    private AlphaNodeFieldConstraint[] alphaConstraints;
+    private BetaConstraints            betaConstraints;
 
     public FromNode(final int id,
                     final DataProvider dataProvider,
@@ -36,8 +39,8 @@
         super( id );
         this.dataProvider = dataProvider;
         this.tupleSource = tupleSource;
-        this.constraints = constraints;
-        this.binder = ( binder == null ) ? EmptyBetaConstraints.getInstance() : binder;
+        this.alphaConstraints = constraints;
+        this.betaConstraints = (binder == null) ? EmptyBetaConstraints.getInstance() : binder;
     }
 
     /**
@@ -49,33 +52,47 @@
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
 
         memory.getTupleMemory().add( leftTuple );
-        this.binder.updateFromTuple( workingMemory, leftTuple );
+        LinkedList list = new LinkedList();
+        this.betaConstraints.updateFromTuple( workingMemory,
+                                              leftTuple );
 
         for ( final java.util.Iterator it = this.dataProvider.getResults( leftTuple,
-                                                          workingMemory,
-                                                          context ); it.hasNext(); ) {
+                                                                          workingMemory,
+                                                                          context ); it.hasNext(); ) {
             final Object object = it.next();
 
-            // First alpha node filters
-            for ( int i = 0, length = this.constraints.length; i < length; i++ ) {
-                if ( !this.constraints[i].isAllowed( object,
-                                                     workingMemory ) ) {
-                    // next iteration
+            if( this.alphaConstraints != null ) {
+                // First alpha node filters
+                boolean isAllowed = true;
+                for ( int i = 0, length = this.alphaConstraints.length; i < length; i++ ) {
+                    if ( !this.alphaConstraints[i].isAllowed( object,
+                                                              workingMemory ) ) {
+                        // next iteration
+                        isAllowed = false;
+                        break;
+                    }
+                }
+                if( !isAllowed ) {
                     continue;
                 }
             }
 
-            if ( this.binder.isAllowedCachedLeft( object ) ) {
+            if ( this.betaConstraints.isAllowedCachedLeft( object ) ) {
                 final InternalFactHandle handle = workingMemory.getFactHandleFactory().newFactHandle( object );
-                
-                memory.getCreatedHandles().put( leftTuple, handle );
 
+                list.add( new LinkedListEntry( handle ) );
+
                 this.sink.propagateAssertTuple( leftTuple,
                                                 handle,
                                                 context,
                                                 workingMemory );
             }
         }
+        if ( !list.isEmpty() ) {
+            memory.getCreatedHandles().put( leftTuple,
+                                            list );
+        }
+
     }
 
     public void retractTuple(final ReteTuple leftTuple,
@@ -83,19 +100,20 @@
                              final InternalWorkingMemory workingMemory) {
 
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
-        memory.getTupleMemory().remove( leftTuple );
-        final InternalFactHandle handle = (InternalFactHandle) memory.getCreatedHandles().remove( leftTuple );
+        ReteTuple tuple = (ReteTuple) memory.getTupleMemory().remove( leftTuple );
 
+        LinkedList list = (LinkedList) memory.getCreatedHandles().remove( tuple );
         // if tuple was propagated
-        if ( handle != null ) {
-
-            this.sink.propagateRetractTuple( leftTuple,
-                                             handle,
-                                             context,
-                                             workingMemory );
-
-            // Destroying the 'from' result object 
-            workingMemory.getFactHandleFactory().destroyFactHandle( handle );
+        if ( list != null ) {
+            LinkedListIterator it = (LinkedListIterator) list.iterator();
+            for ( LinkedListEntry entry = (LinkedListEntry) it.next(); entry != null; entry = (LinkedListEntry) it.next() ) {
+                InternalFactHandle handle = (InternalFactHandle) entry.getObject();
+                this.sink.propagateRetractTuple( leftTuple,
+                                                 handle,
+                                                 context,
+                                                 workingMemory );
+                workingMemory.getFactHandleFactory().destroyFactHandle( handle );
+            }
         }
     }
 
@@ -112,13 +130,15 @@
                                                                                       PropagationContext.RULE_ADDITION,
                                                                                       null,
                                                                                       null );
-            this.tupleSource.updateSink( this, propagationContext, workingMemory );
+            this.tupleSource.updateSink( this,
+                                         propagationContext,
+                                         workingMemory );
         }
     }
 
     public void remove(final BaseNode node,
                        final InternalWorkingMemory[] workingMemories) {
-        
+
         if ( !node.isInUse() ) {
             removeTupleSink( (TupleSink) node );
         }
@@ -130,26 +150,36 @@
             }
         }
         this.tupleSource.remove( this,
-                               workingMemories );
+                                 workingMemories );
     }
 
-    public Object createMemory(final RuleBaseConfiguration config) {
-        return this.binder.createBetaMemory();
-    }
-
     public void updateSink(TupleSink sink,
                            PropagationContext context,
                            InternalWorkingMemory workingMemory) {
-        
+
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
-        
-        final Iterator it = memory.getCreatedHandles().iterator();
 
-        for ( ObjectEntry entry = (ObjectEntry) it.next(); entry != null; entry = (ObjectEntry) it.next()) {
-            sink.assertTuple( new ReteTuple( (ReteTuple)entry.getKey(),
-                                             (InternalFactHandle) entry.getValue()),
-                              context,
-                              workingMemory );
+        Iterator tupleIter = memory.getTupleMemory().iterator();
+        for ( ReteTuple tuple = (ReteTuple) tupleIter.next(); tuple != null; tuple = (ReteTuple) tupleIter.next() ) {
+            LinkedList list = (LinkedList) memory.getCreatedHandles().remove( tuple );
+            if ( list == null ) {
+                continue;
+            }
+            Iterator it = list.iterator();
+            for ( LinkedListEntry entry = (LinkedListEntry) it.next(); entry != null; entry = (LinkedListEntry) it.next() ) {
+                InternalFactHandle handle = (InternalFactHandle) entry.getObject();
+                this.sink.propagateRetractTuple( tuple,
+                                                 handle,
+                                                 context,
+                                                 workingMemory );
+                workingMemory.getFactHandleFactory().destroyFactHandle( handle );
+            }
         }
     }
+
+    public Object createMemory(final RuleBaseConfiguration config) {
+        return new BetaMemory( new TupleHashTable(),
+                               null );
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java	2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java	2006-10-21 20:12:23 UTC (rev 7004)
@@ -487,7 +487,7 @@
                                                                                                        column.getFactIndex(),
                                                                                                        notNode ) );
 
-        final BetaConstraints identityBinder = new DefaultBetaConstraints( new InstanceEqualsConstraint( column ) );
+        final BetaConstraints identityBinder = new DefaultBetaConstraints( new BetaNodeFieldConstraint[] { new InstanceEqualsConstraint( column ) } );
         notNode = (NotNode) attachNode( new NotNode( this.id++,
                                                      tupleSource,
                                                      adapter,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java	2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/VariableRestriction.java	2006-10-21 20:12:23 UTC (rev 7004)
@@ -55,20 +55,20 @@
         return this.evaluator;
     }
 
+    public boolean isAllowed(final Extractor extractor,
+                             final Object object,
+                             final InternalWorkingMemory workingMemoiry) {
+        throw new UnsupportedOperationException( "does not support method  call  isAllowed(Object object, InternalWorkingMemory workingMemoiry)" );
+    }
+    
     public boolean isAllowedCachedLeft(final ContextEntry context,
                                        final Object object) {
-        //        return this.evaluator.evaluate( ((VariableContextEntry) context).left, 
-        //                                        ((VariableContextEntry) context).extractor,
-        //                                        object );        
         return this.evaluator.evaluateCachedLeft( (VariableContextEntry) context,
                                                   object );
     }
 
     public boolean isAllowedCachedRight(final ReteTuple tuple,
                                         final ContextEntry context) {
-        //        return this.evaluator.evaluate( this.declaration.getExtractor(),
-        //                                        tuple.get( this.declaration ).getObject(), 
-        //                                        ((VariableContextEntry) context).right );        
         return this.evaluator.evaluateCachedRight( (VariableContextEntry) context,
                                                    tuple.get( this.declaration ).getObject() );
     }
@@ -104,9 +104,4 @@
                                                                                                                           other.requiredDeclarations );
     }
 
-    public boolean isAllowed(final Extractor extractor,
-                             final Object object,
-                             final InternalWorkingMemory workingMemoiry) {
-        throw new UnsupportedOperationException( "does not support method  call  isAllowed(Object object, InternalWorkingMemory workingMemoiry)" );
-    }
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Restriction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Restriction.java	2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Restriction.java	2006-10-21 20:12:23 UTC (rev 7004)
@@ -14,7 +14,7 @@
 
     public boolean isAllowed(Extractor extractor,
                              Object object,
-                             InternalWorkingMemory workingMemoiry);
+                             InternalWorkingMemory workingMemory);
 
     public boolean isAllowedCachedLeft(ContextEntry context,
                                        Object object);

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractBaseLinkedListNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractBaseLinkedListNode.java	2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractBaseLinkedListNode.java	2006-10-21 20:12:23 UTC (rev 7004)
@@ -27,6 +27,9 @@
 public class AbstractBaseLinkedListNode
     implements
     LinkedListNode {
+
+    private static final long serialVersionUID = -3926700105253864146L;
+
     private LinkedListNode previous;
 
     private LinkedListNode next;
@@ -40,15 +43,15 @@
     /* (non-Javadoc)
      * @see org.drools.reteoo.LinkedListNode#getNext()
      */
-    public LinkedListNode getNext() {
+    public Entry getNext() {
         return this.next;
     }
 
     /* (non-Javadoc)
      * @see org.drools.reteoo.LinkedListNode#setNext(org.drools.reteoo.LinkedListNode)
      */
-    public void setNext(final LinkedListNode next) {
-        this.next = next;
+    public void setNext(final Entry next) {
+        this.next = (LinkedListNode) next;
     }
 
     /* (non-Javadoc)

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedList.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedList.java	2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedList.java	2006-10-21 20:12:23 UTC (rev 7004)
@@ -90,7 +90,7 @@
     public void remove(final LinkedListNode node) {
         if ( (this.firstNode != node) && (this.lastNode != node) ) {
             node.getPrevious().setNext( node.getNext() );
-            node.getNext().setPrevious( node.getPrevious() );
+            ((LinkedListNode)node.getNext()).setPrevious( node.getPrevious() );
             this.size--;
             node.setPrevious( null );
             node.setNext( null );
@@ -134,7 +134,7 @@
             return null;
         }
         final LinkedListNode node = this.firstNode;
-        this.firstNode = node.getNext();
+        this.firstNode = (LinkedListNode) node.getNext();
         node.setNext( null );
         if ( this.firstNode != null ) {
             this.firstNode.setPrevious( null );
@@ -159,7 +159,7 @@
             newNode.setNext( node );
             this.firstNode = newNode;
         } else {
-            existingNode.getNext().setPrevious( newNode );
+            ((LinkedListNode)existingNode.getNext()).setPrevious( newNode );
             newNode.setNext( existingNode.getNext() );
             existingNode.setNext( newNode );
             newNode.setPrevious( existingNode );
@@ -217,7 +217,7 @@
     public int hashCode() {
         final int PRIME = 31;
         int result = 1;
-        for ( LinkedListNode node = this.firstNode; node != null; node = node.getNext() ) {
+        for ( LinkedListNode node = this.firstNode; node != null; node = (LinkedListNode)node.getNext() ) {
             result = PRIME * result + node.hashCode();
         }
         return result;
@@ -238,7 +238,7 @@
             return false;
         }
 
-        for ( LinkedListNode thisNode = this.firstNode, otherNode = other.firstNode; thisNode != null && otherNode != null; thisNode = thisNode.getNext(), otherNode = otherNode.getNext() ) {
+        for ( LinkedListNode thisNode = this.firstNode, otherNode = other.firstNode; thisNode != null && otherNode != null; thisNode = (LinkedListNode)thisNode.getNext(), otherNode = (LinkedListNode)otherNode.getNext() ) {
             if ( !thisNode.equals( otherNode ) ) {
                 return false;
             }
@@ -248,27 +248,28 @@
 
     public Iterator iterator() {
         this.iterator.reset( this );
-        return this.iterator();
+        return this.iterator;
     }
     
     /**
      * Returns a list iterator
      * @return
      */
-    public class LinkedListIterator {
+    public class LinkedListIterator implements Iterator {
         private LinkedList list;
         private LinkedListNode current;
         
         public  void  reset( LinkedList list) {
             this.list = list;
+            this.current = this.list.firstNode;
         }
         
-        public LinkedListNode next() {
-            if (  this.current == null ) {
-               this.current = this.list.firstNode;
+        public Entry next() {
+            if( this.current == null ){
+                return null;
             }
             LinkedListNode node  = this.current;
-            current = current.getNext();
+            current = (LinkedListNode) current.getNext();
             return node;
         }
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedListNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedListNode.java	2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/LinkedListNode.java	2006-10-21 20:12:23 UTC (rev 7004)
@@ -28,21 +28,21 @@
  */
 public interface LinkedListNode
     extends
-    Serializable {
+    Entry, Serializable {
 
     /**
      * Returns the next node
      * @return
      *      The next LinkedListNode
      */
-    public LinkedListNode getNext();
+    public Entry getNext();
 
     /**
      * Sets the next node 
      * @param next
      *      The next LinkedListNode
      */
-    public void setNext(LinkedListNode next);
+    public void setNext(Entry next);
 
     /**
      * Returns the previous node

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java	2006-10-21 17:23:59 UTC (rev 7003)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java	2006-10-21 20:12:23 UTC (rev 7004)
@@ -15,8 +15,11 @@
 import org.drools.base.ClassObjectType;
 import org.drools.base.ValueType;
 import org.drools.base.evaluators.Operator;
+import org.drools.common.BetaConstraints;
 import org.drools.common.DefaultFactHandle;
+import org.drools.common.InternalFactHandle;
 import org.drools.common.PropagationContextImpl;
+import org.drools.common.SingleBetaConstraints;
 import org.drools.rule.Column;
 import org.drools.rule.Declaration;
 import org.drools.rule.LiteralConstraint;
@@ -27,6 +30,8 @@
 import org.drools.spi.MockField;
 import org.drools.spi.PropagationContext;
 import org.drools.spi.Tuple;
+import org.drools.util.LinkedList;
+import org.drools.util.LinkedListEntry;
 
 public class FromNodeTest extends TestCase {
 
@@ -47,23 +52,23 @@
 
         final List list = new ArrayList();
         final Cheese cheese1 = new Cheese( "cheddar",
-                                     20 );
+                                           20 );
         final Cheese cheese2 = new Cheese( "brie",
-                                     20 );
+                                           20 );
         list.add( cheese1 );
         list.add( cheese2 );
         final MockDataProvider dataProvider = new MockDataProvider( list );
 
         final FromNode from = new FromNode( 3,
-                                      dataProvider,
-                                      null,
-                                      new AlphaNodeFieldConstraint[]{constraint},
-                                      null );
+                                            dataProvider,
+                                            null,
+                                            new AlphaNodeFieldConstraint[]{constraint},
+                                            null );
         final MockTupleSink sink = new MockTupleSink( 5 );
         from.addTupleSink( sink );
 
         final Person person1 = new Person( "xxx1",
-                                     30 );
+                                           30 );
         final FactHandle person1Handle = workingMemory.assertObject( person1 );
         final ReteTuple tuple1 = new ReteTuple( (DefaultFactHandle) person1Handle );
         from.assertTuple( tuple1,
@@ -77,7 +82,7 @@
         //Set cheese1 to stilton and it should now propagate
         cheese1.setType( "stilton" );
         final Person person2 = new Person( "xxx2",
-                                     30 );
+                                           30 );
         final FactHandle person2Handle = workingMemory.assertObject( person2 );
         final ReteTuple tuple2 = new ReteTuple( (DefaultFactHandle) person2Handle );
         from.assertTuple( tuple2,
@@ -89,13 +94,13 @@
                       asserted.size() );
         Tuple tuple = (Tuple) ((Object[]) asserted.get( 0 ))[0];
         assertSame( person2,
-                    tuple.getFactHandles()[0].getObject() );
-        assertSame( cheese1,
                     tuple.getFactHandles()[1].getObject() );
+        assertSame( cheese1,
+                    tuple.getFactHandles()[0].getObject() );
 
         cheese2.setType( "stilton" );
         final Person person3 = new Person( "xxx2",
-                                     30 );
+                                           30 );
         final FactHandle person3Handle = workingMemory.assertObject( person3 );
         final ReteTuple tuple3 = new ReteTuple( (DefaultFactHandle) person3Handle );
         from.assertTuple( tuple3,
@@ -106,14 +111,14 @@
                       asserted.size() );
         tuple = (Tuple) ((Object[]) asserted.get( 1 ))[0];
         assertSame( person3,
-                    tuple.getFactHandles()[0].getObject() );
-        assertSame( cheese1,
                     tuple.getFactHandles()[1].getObject() );
+        assertSame( cheese1,
+                    tuple.getFactHandles()[0].getObject() );
         tuple = (Tuple) ((Object[]) asserted.get( 2 ))[0];
         assertSame( person3,
-                    tuple.getFactHandles()[0].getObject() );
-        assertSame( cheese2,
                     tuple.getFactHandles()[1].getObject() );
+        assertSame( cheese2,
+                    tuple.getFactHandles()[0].getObject() );
 
         assertNotSame( cheese1,
                        cheese2 );
@@ -135,35 +140,36 @@
                                                                           "age" );
 
         final Column column = new Column( 0,
-                                    new ClassObjectType( Person.class ) );
+                                          new ClassObjectType( Person.class ) );
 
         final Declaration declaration = new Declaration( "age",
-                                                   ageExtractor,
-                                                   column );
+                                                         ageExtractor,
+                                                         column );
 
         final VariableConstraint variableConstraint = new VariableConstraint( priceExtractor,
-                                                                        declaration,
-                                                                        ValueType.INTEGER_TYPE.getEvaluator( Operator.EQUAL ) );
+                                                                              declaration,
+                                                                              ValueType.PINTEGER_TYPE.getEvaluator( Operator.EQUAL ) );
+        final BetaConstraints betaConstraints = new SingleBetaConstraints( variableConstraint, false );
 
         final List list = new ArrayList();
         final Cheese cheese1 = new Cheese( "cheddar",
-                                     18 );
+                                           18 );
         final Cheese cheese2 = new Cheese( "brie",
-                                     12 );
+                                           12 );
         list.add( cheese1 );
         list.add( cheese2 );
         final MockDataProvider dataProvider = new MockDataProvider( list );
 
         final FromNode from = new FromNode( 3,
-                                      dataProvider,
-                                      null,
-                                      new AlphaNodeFieldConstraint[]{variableConstraint},
-                                      null );
+                                            dataProvider,
+                                            null,
+                                            null,
+                                            betaConstraints );
         final MockTupleSink sink = new MockTupleSink( 5 );
         from.addTupleSink( sink );
 
         final Person person1 = new Person( "xxx1",
-                                     30 );
+                                           30 );
         final FactHandle person1Handle = workingMemory.assertObject( person1 );
         final ReteTuple tuple1 = new ReteTuple( (DefaultFactHandle) person1Handle );
         from.assertTuple( tuple1,
@@ -177,7 +183,7 @@
         //Set cheese1 to stilton and it should now propagate
         cheese1.setPrice( 30 );
         final Person person2 = new Person( "xxx2",
-                                     30 );
+                                           30 );
         final FactHandle person2Handle = workingMemory.assertObject( person2 );
         final ReteTuple tuple2 = new ReteTuple( (DefaultFactHandle) person2Handle );
         from.assertTuple( tuple2,
@@ -189,13 +195,13 @@
                       asserted.size() );
         Tuple tuple = (Tuple) ((Object[]) asserted.get( 0 ))[0];
         assertSame( person2,
-                    tuple.getFactHandles()[0].getObject() );
-        assertSame( cheese1,
                     tuple.getFactHandles()[1].getObject() );
+        assertSame( cheese1,
+                    tuple.getFactHandles()[0].getObject() );
 
         cheese2.setPrice( 30 );
         final Person person3 = new Person( "xxx2",
-                                     30 );
+                                           30 );
         final FactHandle person3Handle = workingMemory.assertObject( person3 );
         final ReteTuple tuple3 = new ReteTuple( (DefaultFactHandle) person3Handle );
         from.assertTuple( tuple3,
@@ -206,14 +212,14 @@
                       asserted.size() );
         tuple = (Tuple) ((Object[]) asserted.get( 1 ))[0];
         assertSame( person3,
-                    tuple.getFactHandles()[0].getObject() );
-        assertSame( cheese1,
                     tuple.getFactHandles()[1].getObject() );
+        assertSame( cheese1,
+                    tuple.getFactHandles()[0].getObject() );
         tuple = (Tuple) ((Object[]) asserted.get( 2 ))[0];
         assertSame( person3,
-                    tuple.getFactHandles()[0].getObject() );
-        assertSame( cheese2,
                     tuple.getFactHandles()[1].getObject() );
+        assertSame( cheese2,
+                    tuple.getFactHandles()[0].getObject() );
 
         assertNotSame( cheese1,
                        cheese2 );
@@ -236,25 +242,25 @@
 
         List list = new ArrayList();
         final Cheese cheese1 = new Cheese( "stilton",
-                                     5 );
+                                           5 );
         final Cheese cheese2 = new Cheese( "stilton",
-                                     15 );
+                                           15 );
         list.add( cheese1 );
         list.add( cheese2 );
         final MockDataProvider dataProvider = new MockDataProvider( list );
 
         final FromNode from = new FromNode( 3,
-                                      dataProvider,
-                                      null,
-                                      new AlphaNodeFieldConstraint[]{constraint},
-                                      null );
+                                            dataProvider,
+                                            null,
+                                            new AlphaNodeFieldConstraint[]{constraint},
+                                            null );
         final MockTupleSink sink = new MockTupleSink( 5 );
         from.addTupleSink( sink );
 
         final List asserted = sink.getAsserted();
 
         final Person person1 = new Person( "xxx2",
-                                     30 );
+                                           30 );
         final FactHandle person1Handle = workingMemory.assertObject( person1 );
         final ReteTuple tuple = new ReteTuple( (DefaultFactHandle) person1Handle );
         from.assertTuple( tuple,
@@ -266,124 +272,25 @@
 
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( from );
         assertEquals( 1,
-                      memory.getLeftTupleMemory().size() );
-        assertEquals( 0,
-                      memory.getRightObjectMemory().size() );
+                      memory.getTupleMemory().size() );
+        assertNull( memory.getObjectMemory() );
         assertEquals( 2,
-                      tuple.getTupleMatches().size() );
+                      ((LinkedList) memory.getCreatedHandles().get( tuple )).size() );
 
-        list = new ArrayList();
-        for ( final Iterator it = tuple.getTupleMatches().values().iterator(); it.hasNext(); ) {
-            TupleMatch tupleMatch = (TupleMatch) it.next();
-            list.add( tupleMatch.getObjectMatches().getFactHandle().getObject() );
-        }
-        assertEquals( 2,
-                      list.size() );
-        assertTrue( list.contains( cheese1 ) );
-        assertTrue( list.contains( cheese2 ) );
+        InternalFactHandle handle1 = (InternalFactHandle) ((LinkedListEntry)((LinkedList) memory.getCreatedHandles().get( tuple )).getFirst()).getObject();
+        InternalFactHandle handle2 = (InternalFactHandle) ((LinkedListEntry)((LinkedList) memory.getCreatedHandles().get( tuple )).getLast()).getObject();
+        assertEquals( handle1.getObject(), cheese1 );
+        assertEquals( handle2.getObject(), cheese2 );
 
         from.retractTuple( tuple,
                            context,
                            workingMemory );
         assertEquals( 0,
-                      memory.getLeftTupleMemory().size() );
-        assertEquals( 0,
-                      memory.getRightObjectMemory().size() );
+                      memory.getTupleMemory().size() );
+        assertNull( memory.getObjectMemory() );
     }
 
-    public void testModify() {
-        final PropagationContext context = new PropagationContextImpl( 0,
-                                                                       PropagationContext.ASSERTION,
-                                                                       null,
-                                                                       null );
-        final ReteooWorkingMemory workingMemory = new ReteooWorkingMemory( 1,
-                                                                           (ReteooRuleBase) RuleBaseFactory.newRuleBase() );
-        final ClassFieldExtractor extractor = new ClassFieldExtractor( Cheese.class,
-                                                                       "type" );
 
-        final FieldValue field = new MockField( "stilton" );
-        final LiteralConstraint constraint = new LiteralConstraint( extractor,
-                                                                    ValueType.STRING_TYPE.getEvaluator( Operator.EQUAL ),
-                                                                    field );
-
-        final List list = new ArrayList();
-        final Cheese cheese1 = new Cheese( "cheddar",
-                                     20 );
-        final Cheese cheese2 = new Cheese( "brie",
-                                     20 );
-        list.add( cheese1 );
-        list.add( cheese2 );
-        final MockDataProvider dataProvider = new MockDataProvider( list );
-
-        final FromNode from = new FromNode( 3,
-                                      dataProvider,
-                                      null,
-                                      new AlphaNodeFieldConstraint[]{constraint},
-                                      null );
-        final MockTupleSink sink = new MockTupleSink( 5 );
-        from.addTupleSink( sink );
-
-        final Person person1 = new Person( "xxx1",
-                                     30 );
-        final FactHandle person1Handle = workingMemory.assertObject( person1 );
-        final ReteTuple tuple1 = new ReteTuple( (DefaultFactHandle) person1Handle );
-        from.assertTuple( tuple1,
-                          context,
-                          workingMemory );
-
-        // nothing should be asserted, as cheese1 is cheddar and we are filtering on stilton
-        assertEquals( 0,
-                      sink.getAsserted().size() );
-
-        //Set cheese1 to stilton and it should now propagate
-        cheese1.setType( "stilton" );
-        from.modifyTuple( tuple1,
-                          context,
-                          workingMemory );
-        final List asserted = sink.getAsserted();
-        assertEquals( 1,
-                      asserted.size() );
-        Tuple tuple = (Tuple) ((Object[]) asserted.get( 0 ))[0];
-        assertSame( person1,
-                    tuple.getFactHandles()[0].getObject() );
-        assertSame( cheese1,
-                    tuple.getFactHandles()[1].getObject() );
-
-        cheese2.setType( "stilton" );
-        from.modifyTuple( tuple1,
-                          context,
-                          workingMemory );
-
-        // A modify when using from involves a retract and an assert - so make sure there was a retraction and no modify propagations
-        assertEquals( 0,
-                      sink.getModified().size() );
-        assertEquals( 1,
-                      sink.getRetracted().size() );
-
-        assertEquals( 3,
-                      asserted.size() );
-        tuple = (Tuple) ((Object[]) asserted.get( 1 ))[0];
-        assertSame( person1,
-                    tuple.getFactHandles()[0].getObject() );
-        assertSame( cheese1,
-                    tuple.getFactHandles()[1].getObject() );
-
-        tuple = (Tuple) ((Object[]) asserted.get( 2 ))[0];
-        assertSame( person1,
-                    tuple.getFactHandles()[0].getObject() );
-        assertSame( cheese2,
-                    tuple.getFactHandles()[1].getObject() );
-
-        // Double check the nodes memory
-        final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( from );
-        assertEquals( 1,
-                      memory.getLeftTupleMemory().size() );
-        assertEquals( 0,
-                      memory.getRightObjectMemory().size() );
-        assertEquals( 2,
-                      tuple1.getTupleMatches().size() );
-    }
-
     public static class MockDataProvider
         implements
         DataProvider {




More information about the jboss-svn-commits mailing list