[jboss-svn-commits] JBL Code SVN: r5920 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/base/dataproviders main/java/org/drools/common main/java/org/drools/leaps main/java/org/drools/reteoo main/java/org/drools/reteoo/beta main/java/org/drools/rule main/java/org/drools/spi test/java/org/drools/base/dataproviders test/java/org/drools/facttemplates test/java/org/drools/reteoo test/java/org/drools/reteoo/beta test/java/org/drools/rule

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Aug 16 14:08:16 EDT 2006


Author: /services/svn/bin/commit-email.pl: `/opt/subversion/bin/svnlook info /services/jbf-svn/code -r 5920' failed with this output:
Date: svnlook: Inconsistent line ending style
New Revision: 5920

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/dataproviders/MethodDataProvider.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/LeapsTuple.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/Token.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedRightMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrLeftMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrRightMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrLeftMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrRightMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Column.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Declaration.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/EvalCondition.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Exists.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/From.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/DataProvider.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/dataproviders/MethodDataProviderTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/facttemplates/FactTemplateFieldExtractorTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BooleanConstrainedRightMemoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectEqualConstrLeftMemoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectEqualConstrRightMemoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectNotEqualConstrLeftMemoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectNotEqualConstrRightMemoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/DeclarationTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java
Log:
2006-08-16 14:07:59 -0400 (Wed, 16 Aug 2006)

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/dataproviders/MethodDataProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/dataproviders/MethodDataProvider.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/dataproviders/MethodDataProvider.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -23,65 +23,67 @@
     implements
     DataProvider {
 
-    private final Declaration[] requiredDeclarations;
-    private final boolean variableIsDeclaration;
-    private final Declaration variableDeclaration;
-    private final String      variableName;
-    
-    private final ValueHandler[]      valueHandlers;
+    private final Declaration[]  requiredDeclarations;
+    private final boolean        variableIsDeclaration;
+    private final Declaration    variableDeclaration;
+    private final String         variableName;
 
-    private final Method        method;
-    private final Class variableClass;
+    private final ValueHandler[] valueHandlers;
 
+    private final Method         method;
+    private final Class          variableClass;
+
     public MethodDataProvider(String variableName,
                               String methodName,
                               List arguments,
                               Map declarations,
                               Map globals) {
-        
+
         List requiredDecs = new ArrayList();
-        
+
         //work out where variable comes from, is it a dec or a global
-        this.variableName = variableName;        
-        if (declarations.containsKey( variableName )) {
+        this.variableName = variableName;
+        if ( declarations.containsKey( variableName ) ) {
             variableDeclaration = (Declaration) declarations.get( variableName );
             requiredDecs.add( variableDeclaration );
             variableIsDeclaration = true;
             this.variableClass = variableDeclaration.getExtractor().getExtractToClass();
-        } else if (globals.containsKey( variableName )) {
+        } else if ( globals.containsKey( variableName ) ) {
             variableIsDeclaration = false;
             this.variableClass = (Class) globals.get( variableName );
             variableDeclaration = null;
         } else {
             variableDeclaration = null;
-            throw new IllegalArgumentException("The variable name [" + variableName + "] was not a global or declaration.");
+            throw new IllegalArgumentException( "The variable name [" + variableName + "] was not a global or declaration." );
         }
 
         //now handle arguments
-        List argumentData = new ArrayList();        
-        
+        List argumentData = new ArrayList();
+
         for ( Iterator iter = arguments.iterator(); iter.hasNext(); ) {
             ArgumentValueDescr desc = (ArgumentValueDescr) iter.next();
             if ( desc.getType() == ArgumentValueDescr.VARIABLE ) {
                 if ( declarations.containsKey( desc.getValue() ) ) {
                     Declaration dec = (Declaration) declarations.get( desc.getValue() );
                     requiredDecs.add( dec );
-                    argumentData.add( new DeclaredVariable(dec) );
+                    argumentData.add( new DeclaredVariable( dec ) );
                 } else if ( globals.containsKey( desc.getValue() ) ) {
-                    argumentData.add( new GlobalVariable(desc.getValue()) );
+                    argumentData.add( new GlobalVariable( desc.getValue() ) );
                 } else {
                     throw new IllegalArgumentException( "Uknown variable: " + desc.getValue() );
                 }
             } else {
                 // handling a literal
-                argumentData.add( new LiteralValue(desc.getValue()) );
+                argumentData.add( new LiteralValue( desc.getValue() ) );
             }
         }
 
         //now find the method
-        method = configureMethod(methodName, variableClass, arguments.size());
-        
-        valueHandlers = (ValueHandler[]) argumentData.toArray(new ValueHandler[argumentData.size()]);
+        this.method = configureMethod( methodName,
+                                       variableClass,
+                                       arguments.size() );
+
+        valueHandlers = (ValueHandler[]) argumentData.toArray( new ValueHandler[argumentData.size()] );
         requiredDeclarations = new Declaration[requiredDecs.size()];
         requiredDecs.toArray( requiredDeclarations );
     }
@@ -89,11 +91,13 @@
     /**
      * work out what method we will be calling at runtime, based on the name and number of parameters.
      */
-    private Method configureMethod(String methodName, Class variableClass, int numOfArgs) {
+    private Method configureMethod(String methodName,
+                                   Class variableClass,
+                                   int numOfArgs) {
         Method[] methods = this.variableClass.getMethods();
         for ( int i = 0; i < methods.length; i++ ) {
-            if (methods[i].getName().equals(methodName)) {
-                if (methods[i].getParameterTypes().length == numOfArgs) {
+            if ( methods[i].getName().equals( methodName ) ) {
+                if ( methods[i].getParameterTypes().length == numOfArgs ) {
                     return methods[i];
                 }
             }
@@ -113,139 +117,148 @@
         
         //get the variable value that we are operating on
         Object variable = null;
-        if (variableIsDeclaration) {   
-            variable = tuple.get( this.variableDeclaration ).getObject();            
+        if ( variableIsDeclaration ) {
+            variable = tuple.get( this.variableDeclaration ).getObject();
         } else {
             variable = wm.getGlobal( this.variableName );
         }
+
         if (variable == null) {
             throw new IllegalArgumentException("Unable to resolve the variable: [" + this.variableName + "]");
         }
-                
+                
         //the types we have to convert the arguments to
         Class[] parameterTypes = this.method.getParameterTypes();
-        
+
         //the args values that we will pass
         Object[] args = new Object[this.valueHandlers.length];
-        
-        
+
         //now we need to set all the values, convert if literal
         for ( int i = 0; i < this.valueHandlers.length; i++ ) {
             ValueHandler handler = valueHandlers[i];
-            if (handler instanceof LiteralValue) {
-                String text = (String) handler.getValue( tuple, wm );
+            if ( handler instanceof LiteralValue ) {
+                String text = (String) handler.getValue( tuple,
+                                                         wm );
                 Class type = parameterTypes[i];
-                if (type == String.class) {
+                if ( type == String.class ) {
                     args[i] = text;
                 } else {
-                    args[i] = convert(text, type);
+                    args[i] = convert( text,
+                                       type );
                 }
             } else {
-                args[i] = handler.getValue( tuple, wm );
+                args[i] = handler.getValue( tuple,
+                                            wm );
             }
         }
-        
+
         //now the actual invoking of the method
         try {
-            Object result = this.method.invoke( variable, args );
-            if (result instanceof Collection) {
+            Object result = this.method.invoke( variable,
+                                                args );
+            if ( result instanceof Collection ) {
                 return ((Collection) result).iterator();
-            } else if (result instanceof Iterator) {
+            } else if ( result instanceof Iterator ) {
                 return (Iterator) result;
             } else {
-                List resultAsList = new ArrayList(1);
+                List resultAsList = new ArrayList( 1 );
                 resultAsList.add( result );
                 return resultAsList.iterator();
             }
         } catch ( IllegalArgumentException e ) {
-            throw new RuntimeDroolsException(e);
+            throw new RuntimeDroolsException( e );
         } catch ( IllegalAccessException e ) {
-            throw new RuntimeDroolsException(e);        
+            throw new RuntimeDroolsException( e );
         } catch ( InvocationTargetException e ) {
-            throw new RuntimeDroolsException(e);        
+            throw new RuntimeDroolsException( e );
         }
 
     }
-    
-    
+
     /** Attempt to convert text to the target class type */
     private Object convert(String text,
                            Class type) {
-        if ( type == Integer.class || type == int.class) {
-            return new Integer( text ) ;
+        if ( type == Integer.class || type == int.class ) {
+            return new Integer( text );
         } else if ( text == "null" ) {
             return null;
         } else if ( type == Character.class || type == char.class ) {
-            return ( new Character( text.charAt( 0 ) ) );
-        } else if ( type == Short.class || type == short.class) {
+            return (new Character( text.charAt( 0 ) ));
+        } else if ( type == Short.class || type == short.class ) {
             return new Short( text );
         } else if ( type == Long.class || type == long.class ) {
             return new Long( text );
-        } else if ( type == Float.class || type == float.class) {
+        } else if ( type == Float.class || type == float.class ) {
             return new Float( text );
-        } else if ( type == Double.class || type == double.class) {
+        } else if ( type == Double.class || type == double.class ) {
             return new Double( text );
-        } else if ( type == Boolean.class || type == boolean.class) {
+        } else if ( type == Boolean.class || type == boolean.class ) {
             return new Boolean( text );
-        } else if ( type == Date.class ) {            
+        } else if ( type == Date.class ) {
             return DateFactory.parseDate( text );
         } else if ( type == BigDecimal.class ) {
-            return new BigDecimal(text);
+            return new BigDecimal( text );
         } else if ( type == BigInteger.class ) {
-            return new BigInteger(text);
+            return new BigInteger( text );
         } else {
-            throw new IllegalArgumentException("Unable to convert [" + text + "] to type: [" + type.getName() + "]");
+            throw new IllegalArgumentException( "Unable to convert [" + text + "] to type: [" + type.getName() + "]" );
         }
     }
 
+    static interface ValueHandler {
 
-    static interface ValueHandler {
-        
-        Object getValue(Tuple tuple, WorkingMemory wm);
+        Object getValue(Tuple tuple,
+                        WorkingMemory wm);
     }
-    
-    static class GlobalVariable implements ValueHandler {
+
+    static class GlobalVariable
+        implements
+        ValueHandler {
         public String globalName;
+
         public GlobalVariable(String name) {
             this.globalName = name;
         }
+
         public Object getValue(Tuple tuple,
                                WorkingMemory wm) {
             return wm.getGlobal( globalName );
-            
+
         }
     }
-    
-    static class DeclaredVariable implements ValueHandler {
 
+    static class DeclaredVariable
+        implements
+        ValueHandler {
+
         private Declaration declaration;
 
         public DeclaredVariable(Declaration dec) {
             this.declaration = dec;
         }
-        
+
         public Object getValue(Tuple tuple,
                                WorkingMemory wm) {
             return tuple.get( this.declaration ).getObject();
         }
-        
+
     }
-    
-    static class LiteralValue implements ValueHandler {
 
+    static class LiteralValue
+        implements
+        ValueHandler {
+
         private String value;
 
         public LiteralValue(String value) {
             this.value = value;
         }
-        
+
         public Object getValue(Tuple tuple,
-                               WorkingMemory wm) {            
+                               WorkingMemory wm) {
             return value;
         }
-        
+
     }
-    
 
-
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -311,6 +311,10 @@
         // the firing for any other assertObject(..) that get
         // nested inside, avoiding concurrent-modification
         // exceptions, depending on code paths of the actions.
+        
+        if ( !this.factQueue.isEmpty() ) {
+            propagateQueuedActions();
+        }
 
         if ( !this.firing ) {
             try {
@@ -793,17 +797,21 @@
         }
 
     }
+    
+    public void queueWorkingMemoryAction( WorkingMemoryAction action ) {
+        this.factQueue.add( action );
+    }
 
     public void queueRetractAction(final InternalFactHandle factHandle,
                                    final boolean removeLogical,
                                    final boolean updateEqualsMap,
                                    final Rule ruleOrigin,
                                    final Activation activationOrigin) {
-        this.factQueue.add( new WorkingMemoryRetractAction( factHandle,
-                                                            false,
-                                                            true,
-                                                            ruleOrigin,
-                                                            activationOrigin ) );
+        queueWorkingMemoryAction( new WorkingMemoryRetractAction( factHandle,
+                                                                  false,
+                                                                  true,
+                                                                  ruleOrigin,
+                                                                  activationOrigin ) );        
     }
 
     /**
@@ -919,4 +927,5 @@
                            this.activationOrigin );
         }
     }
+      
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/LeapsTuple.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/LeapsTuple.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/LeapsTuple.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -117,7 +117,7 @@
      * @see org.drools.spi.Tuple
      */
     public InternalFactHandle get(final Declaration declaration) {
-        return this.get( declaration.getColumn() );
+        return this.get( declaration.getColumn().getFactIndex() );
     }
 
     /**

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/Token.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/Token.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/leaps/Token.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -178,7 +178,7 @@
      * @see org.drools.spi.Tuple
      */
     public InternalFactHandle get( final Declaration declaration ) {
-        return this.get( declaration.getColumn( ) );
+        return this.get( declaration.getColumn( ).getFactIndex() );
     }
 
     /**

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -59,7 +59,7 @@
     /**
      * 
      */
-    private static final long serialVersionUID = 4075809540597599706L;
+    private static final long serialVersionUID = 320;
 
     /**
      * Construct.

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -164,7 +164,7 @@
      * @see org.drools.spi.Tuple#get(org.drools.rule.Declaration)
      */
     public InternalFactHandle get(final Declaration declaration) {
-        return get( declaration.getColumn() );
+        return get( declaration.getColumn().getFactIndex() );
     }
 
     public void setActivation(final Activation activation) {

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-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -230,6 +230,7 @@
         if ( temp != null ) {
             and.getChildren().addAll( temp.getChildren() );
         }
+        this.currentOffsetAdjustment = 1;
     }
 
     private void addRule(final And and,
@@ -255,8 +256,8 @@
                 continue;
             }
 
-            BetaNodeBinder binder;
-            Column column;
+            BetaNodeBinder binder = null;
+            Column column = null;
 
             if ( object instanceof Column ) {
                 column = (Column) object;
@@ -279,7 +280,7 @@
                     // reference.
                     this.objectSource = null;
                 }
-            } else {
+            } else if ( object instanceof GroupElement ) {
                 // If its not a Column or EvalCondition then it can either be a Not or an Exists
                 GroupElement ce = (GroupElement) object;
                 while ( !(ce.getChildren().get( 0 ) instanceof Column) ) {
@@ -307,18 +308,21 @@
                                        false );
             }
 
-            if ( object instanceof Not ) {
+            if ( object.getClass() == Not.class ) {
                 attachNot( this.tupleSource,
                            (Not) object,
                            this.objectSource,
                            binder,
                            column );
-            } else if ( object instanceof Exists ) {
+            } else if ( object.getClass() == Exists.class ) {
                 attachExists( this.tupleSource,
                               (Exists) object,
                               this.objectSource,
                               binder,
                               column );
+            } else if ( object.getClass() == From.class ) {
+                attachFrom( this.tupleSource,
+                            (From) object );
             } else if ( this.objectSource != null ) {
                 this.tupleSource = attachNode( new JoinNode( this.id++,
                                                              this.tupleSource,
@@ -555,14 +559,29 @@
 
         return node;
     }
-    
+
     private void attachFrom(final TupleSource tupleSource,
                             final From from) {
         Column column = from.getColumn();
+
+        // If a tupleSource does not exist then we need to adapt an
+        // InitialFact into a a TupleSource using LeftInputAdapterNode
+        if ( this.tupleSource == null ) {
+            // adjusting offset as all tuples will now contain initial-fact at index 0
+            this.currentOffsetAdjustment = 1;
+
+            final ObjectSource objectSource = attachNode( new ObjectTypeNode( this.id++,
+                                                                              this.sinklistFactory.newObjectSinkList( ObjectTypeNode.class ),
+                                                                              new ClassObjectType( InitialFact.class ),
+                                                                              this.rete ) );
+
+            this.tupleSource = attachNode( new LeftInputAdapterNode( this.id++,
+                                                                     objectSource ) );
+        }
         
         // Adjusting offset in case a previous Initial-Fact was added to the network
         column.adjustOffset( this.currentOffsetAdjustment );
-        
+
         final List constraints = column.getConstraints();
 
         // Check if the Column is bound
@@ -575,7 +594,7 @@
 
         final List predicateConstraints = new ArrayList();
         final List alphaNodeConstraints = new ArrayList();
-        
+
         for ( final Iterator it = constraints.iterator(); it.hasNext(); ) {
             final Object object = it.next();
             // Check if its a declaration
@@ -595,8 +614,7 @@
                 predicateConstraints.add( fieldConstraint );
             }
         }
-        
-        
+
         BetaNodeBinder binder;
 
         if ( !predicateConstraints.isEmpty() ) {
@@ -604,15 +622,15 @@
         } else {
             binder = new BetaNodeBinder();
         }
-        
-        FromNode node = new FromNode( id, 
-                                      from.getDataProvider(),
-                                      this.tupleSource,
-                                      ( FieldConstraint[] ) alphaNodeConstraints.toArray( new FieldConstraint[ alphaNodeConstraints.size() ] ),
-                                      binder );        
-                
-    }    
 
+        this.tupleSource = attachNode( new FromNode( id++,
+                                                     from.getDataProvider(),
+                                                     this.tupleSource,
+                                                     (FieldConstraint[]) alphaNodeConstraints.toArray( new FieldConstraint[alphaNodeConstraints.size()] ),
+                                                     binder ) );
+
+    }
+
     private ObjectSource attachNode(final ObjectSource candidate) {
         ObjectSource node = (ObjectSource) this.attachedNodes.get( candidate );
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -31,6 +31,7 @@
 import org.drools.common.AbstractRuleBase;
 import org.drools.common.DefaultFactHandle;
 import org.drools.common.PropagationContextImpl;
+import org.drools.common.AbstractWorkingMemory.WorkingMemoryRetractAction;
 import org.drools.rule.CompositePackageClassLoader;
 import org.drools.rule.InvalidPatternException;
 import org.drools.rule.Rule;
@@ -68,26 +69,26 @@
      * will result in an invalid state for the instance.
      */
     public ReteooRuleBase() {
- 
+
     }
-    
+
     /**
      * Construct.
      * 
      * @param rete
      *            The rete network.
      */
-    public ReteooRuleBase(final String  id) {
+    public ReteooRuleBase(final String id) {
         this( id,
               null,
               new ReteooFactHandleFactory() );
     }
-    
 
     /**
      * @param factHandleFactory
      */
-    public ReteooRuleBase(final String id, final FactHandleFactory factHandleFactory) {
+    public ReteooRuleBase(final String id,
+                          final FactHandleFactory factHandleFactory) {
         this( id,
               null,
               factHandleFactory );
@@ -232,17 +233,19 @@
         super.addWorkingMemory( workingMemory,
                                 keepReference );
 
-        final InitialFactHandle handle = new InitialFactHandle( workingMemory.getFactHandleFactory().newFactHandle( new Serializable() {} ) );
+        final InitialFactHandle handle = new InitialFactHandle( workingMemory.getFactHandleFactory().newFactHandle( new Serializable() {
+        } ) );
 
         final PropagationContext propagationContext = new PropagationContextImpl( workingMemory.getNextPropagationIdCounter(),
                                                                                   PropagationContext.ASSERTION,
                                                                                   null,
                                                                                   null );
 
-        assertObject( handle,
-                      handle.getObject(),
-                      propagationContext,
-                      workingMemory );
+        workingMemory.queueWorkingMemoryAction( workingMemory.new WorkingMemoryReteAssertAction( handle,
+                                                                                                 false,
+                                                                                                 true,
+                                                                                                 null,
+                                                                                                 null ) );
 
         return workingMemory;
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -31,6 +31,7 @@
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalRuleBase;
 import org.drools.common.PropagationContextImpl;
+import org.drools.common.AbstractWorkingMemory.WorkingMemoryAction;
 import org.drools.rule.Query;
 import org.drools.rule.Rule;
 import org.drools.spi.Activation;
@@ -56,7 +57,7 @@
      * @param ruleBase
      *            The backing rule-base.
      */
-    public ReteooWorkingMemory(final int  id, 
+    public ReteooWorkingMemory(final int id,
                                final InternalRuleBase ruleBase) {
         super( id,
                ruleBase,
@@ -98,7 +99,7 @@
                 // and we cannot assert a null object
                 return;
             }
-            
+
             // set anyway, so that it updates the hashCodes
             handle.setObject( object );
 
@@ -126,7 +127,7 @@
             } else {
                 key.addFactHandle( handle );
             }
-            
+
             handle.setEqualityKey( key );
 
             this.handleFactory.increaseFactHandleRecency( handle );
@@ -181,4 +182,42 @@
                                node );
     }
 
+    public class WorkingMemoryReteAssertAction
+        implements
+        WorkingMemoryAction {
+        private InternalFactHandle factHandle;
+
+        private boolean            removeLogical;
+
+        private boolean            updateEqualsMap;
+
+        private Rule               ruleOrigin;
+
+        private Activation         activationOrigin;
+
+        public WorkingMemoryReteAssertAction(final InternalFactHandle factHandle,
+                                             final boolean removeLogical,
+                                             final boolean updateEqualsMap,
+                                             final Rule ruleOrigin,
+                                             final Activation activationOrigin) {
+            super();
+            this.factHandle = factHandle;
+            this.removeLogical = removeLogical;
+            this.updateEqualsMap = updateEqualsMap;
+            this.ruleOrigin = ruleOrigin;
+            this.activationOrigin = activationOrigin;
+        }
+
+        public void propagate() {
+
+            PropagationContext context = new PropagationContextImpl( ReteooWorkingMemory.this.propagationIdCounter++,
+                                                                     PropagationContext.ASSERTION,
+                                                                     this.ruleOrigin,
+                                                                     this.activationOrigin );
+            ReteooWorkingMemory.this.ruleBase.assertObject( factHandle,
+                                                            factHandle.getObject(),
+                                                            context,
+                                                            ReteooWorkingMemory.this );
+        }
+    }
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemory.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemory.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -23,6 +23,7 @@
 import org.drools.base.evaluators.Operator;
 import org.drools.common.InternalFactHandle;
 import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Column;
 import org.drools.rule.Declaration;
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldExtractor;
@@ -50,7 +51,7 @@
 
     private FieldExtractor  extractor    = null;
     private Declaration     declaration  = null;
-    private int             column;
+    private Column             column;
     private Evaluator       evaluator    = null;
 
     public BooleanConstrainedLeftMemory(final FieldExtractor extractor,
@@ -82,7 +83,7 @@
      */
     public final void add(final WorkingMemory workingMemory,
                           final ReteTuple tuple) {
-        final boolean select = ((Boolean) this.declaration.getValue( tuple.get( this.column ).getObject() )).booleanValue();
+        final boolean select = ((Boolean) this.declaration.getValue( tuple.get( this.column.getFactIndex() ).getObject() )).booleanValue();
         if ( select == true ) {
             this.trueList.add( tuple );
         } else {
@@ -116,7 +117,7 @@
      */
     public final void add(final WorkingMemory workingMemory,
                           final MultiLinkedListNodeWrapper tuple) {
-        final boolean partition = ((Boolean) this.declaration.getValue( ((ReteTuple) tuple.getNode()).get( this.column ).getObject() )).booleanValue();
+        final boolean partition = ((Boolean) this.declaration.getValue( ((ReteTuple) tuple.getNode()).get( this.column.getFactIndex() ).getObject() )).booleanValue();
         if ( partition == true ) {
             this.trueList.add( tuple );
         } else {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedRightMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedRightMemory.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedRightMemory.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -26,6 +26,7 @@
 import org.drools.common.DefaultFactHandle;
 import org.drools.reteoo.ObjectMatches;
 import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Column;
 import org.drools.rule.Declaration;
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldExtractor;
@@ -52,7 +53,7 @@
 
     private FieldExtractor  extractor    = null;
     private Declaration     declaration  = null;
-    private int             column;
+    private Column             column;
     private Evaluator       evaluator    = null;
 
     public BooleanConstrainedRightMemory(final FieldExtractor extractor,
@@ -215,7 +216,7 @@
      */
     public final void selectPossibleMatches(final WorkingMemory workingMemory,
                                             final ReteTuple tuple) {
-        boolean select = ((Boolean) this.declaration.getValue( tuple.get( this.column ).getObject() )).booleanValue();
+        boolean select = ((Boolean) this.declaration.getValue( tuple.get( this.column.getFactIndex() ).getObject() )).booleanValue();
         select = (this.evaluator.getOperator()) == Operator.EQUAL ? select : !select;
         this.selectedList = (select == true) ? this.trueList : this.falseList;
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrLeftMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrLeftMemory.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrLeftMemory.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -27,6 +27,7 @@
 import org.drools.WorkingMemory;
 import org.drools.common.InternalFactHandle;
 import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Column;
 import org.drools.rule.Declaration;
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldExtractor;
@@ -55,7 +56,7 @@
 
     private FieldExtractor  extractor    = null;
     private Declaration     declaration  = null;
-    private int             column;
+    private Column             column;
 
     public ObjectEqualConstrLeftMemory(final FieldExtractor extractor,
                                        final Declaration declaration,
@@ -305,7 +306,7 @@
      */
     private final Integer getTupleHash(final WorkingMemory workingMemory,
                                        final ReteTuple tuple) {
-        final Object select = this.declaration.getValue( tuple.get( this.column ).getObject() );
+        final Object select = this.declaration.getValue( tuple.get( this.column.getFactIndex() ).getObject() );
         final Integer hash = (select != null) ? new Integer( select.hashCode() ) : new Integer( 0 );
         return hash;
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrRightMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrRightMemory.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectEqualConstrRightMemory.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -29,6 +29,7 @@
 import org.drools.common.InternalFactHandle;
 import org.drools.reteoo.ObjectMatches;
 import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Column;
 import org.drools.rule.Declaration;
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldExtractor;
@@ -56,7 +57,7 @@
 
     private FieldExtractor  extractor    = null;
     private Declaration     declaration  = null;
-    private int             column;
+    private Column             column;
 
     public ObjectEqualConstrRightMemory(final FieldExtractor extractor,
                                         final Declaration declaration,
@@ -232,7 +233,7 @@
      */
     public final void selectPossibleMatches(final WorkingMemory workingMemory,
                                             final ReteTuple tuple) {
-        final Object select = this.declaration.getValue( tuple.get( this.column ).getObject() );
+        final Object select = this.declaration.getValue( tuple.get( this.column.getFactIndex() ).getObject() );
         final Integer hash = (select != null) ? new Integer( select.hashCode() ) : new Integer( 0 );
         this.selectedList = (MultiLinkedList) this.memoryMap.get( hash );
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrLeftMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrLeftMemory.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrLeftMemory.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -24,6 +24,7 @@
 import org.drools.WorkingMemory;
 import org.drools.common.InternalFactHandle;
 import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Column;
 import org.drools.rule.Declaration;
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldExtractor;
@@ -51,7 +52,7 @@
 
     private FieldExtractor  extractor        = null;
     private Declaration     declaration      = null;
-    private int             column;
+    private Column             column;
 
     public ObjectNotEqualConstrLeftMemory(final FieldExtractor extractor,
                                           final Declaration declaration,
@@ -300,7 +301,7 @@
      */
     private final Object getTupleKey(final WorkingMemory workingMemory,
                                      final ReteTuple tuple) {
-        final Object select = this.declaration.getValue( tuple.get( this.column ).getObject() );
+        final Object select = this.declaration.getValue( tuple.get( this.column.getFactIndex() ).getObject() );
         return select;
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrRightMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrRightMemory.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/ObjectNotEqualConstrRightMemory.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -25,6 +25,7 @@
 import org.drools.common.InternalFactHandle;
 import org.drools.reteoo.ObjectMatches;
 import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Column;
 import org.drools.rule.Declaration;
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldExtractor;
@@ -51,7 +52,7 @@
 
     private FieldExtractor  extractor        = null;
     private Declaration     declaration      = null;
-    private int             column;
+    private Column             column;
 
     public ObjectNotEqualConstrRightMemory(final FieldExtractor extractor,
                                            final Declaration declaration,
@@ -259,7 +260,7 @@
      */
     public final void selectPossibleMatches(final WorkingMemory workingMemory,
                                             final ReteTuple tuple) {
-        final Object select = this.declaration.getValue( tuple.get( this.column ).getObject() );
+        final Object select = this.declaration.getValue( tuple.get( this.column.getFactIndex() ).getObject() );
         final Integer hash = (select != null) ? new Integer( select.hashCode() ) : new Integer( 0 );
         this.noMatchList = (MultiLinkedList) this.memoryMap.get( hash );
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Column.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Column.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Column.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -70,7 +70,7 @@
         if ( identifier != null ) {
             this.declaration = new Declaration( identifier,
                                                 new ColumnExtractor( objectType ),
-                                                this.getFactIndex() );
+                                                this );
         } else {
             this.declaration = null;
         }
@@ -98,7 +98,7 @@
         }
         final Declaration declaration = new Declaration( identifier,
                                                          extractor,
-                                                         this.getFactIndex() );
+                                                         this );
         this.constraints.add( declaration );
         return declaration;
 
@@ -135,12 +135,12 @@
         this.offset += adjust;
 
         if ( this.declaration != null ) {
-            this.declaration.setColumn( this.getFactIndex() );
+            this.declaration.setColumn( this );
         }
         for ( final Iterator i = this.constraints.iterator(); i.hasNext(); ) {
             final Object constr = i.next();
             if ( constr instanceof Declaration ) {
-                ((Declaration) constr).setColumn( this.getFactIndex() );
+                ((Declaration) constr).setColumn( this );
             }
         }
     }
@@ -149,4 +149,54 @@
         return "Column type='" + this.objectType + "', index='" + this.index + "', offset='" + this.getOffset() + "', identifer='" + this.declaration.getIdentifier() + "'";
     }
 
+    public int hashCode() {
+        final int PRIME = 31;
+        int result = 1;
+        result = PRIME * result + this.constraints.hashCode();
+        result = PRIME * result + ((this.declaration == null) ? 0 : this.declaration.hashCode());
+        result = PRIME * result + this.index;
+        result = PRIME * result + this.objectType.hashCode();
+        result = PRIME * result + this.offset;
+        return result;
+    }
+
+    public boolean equals(Object object) {
+        if ( this == object ) {
+            return true;
+        }
+        
+        if ( object == null || getClass() != object.getClass() ) {
+            return false;
+        }
+        
+        final Column other = (Column) object;
+
+        if ( !this.constraints.equals( other.constraints ) ) {
+            return false;
+        }
+        
+        if ( this.declaration == null ) {
+            if ( other.declaration != null ) {
+                return false;
+            }
+        } else if ( !this.declaration.equals( other.declaration ) ) {
+            return false;
+        }
+        
+        if ( this.index != other.index ) {
+            return false;
+        }
+        
+        
+        if ( !this.objectType.equals( other.objectType ) ) {
+            return false;
+        }
+        if ( this.offset != other.offset ) {
+            return false;
+        }
+        return true;
+    }
+    
+    
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Declaration.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Declaration.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Declaration.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -84,7 +84,7 @@
 
     private final Extractor   extractor;
 
-    private int               column;
+    private Column               column;
 
     // ------------------------------------------------------------
     // Constructors
@@ -102,7 +102,7 @@
      */
     public Declaration(final String identifier,
                        final Extractor extractor,
-                       final int column) {
+                       final Column column) {
         this.identifier = identifier;
         this.extractor = extractor;
         this.column = column;
@@ -135,11 +135,11 @@
      * 
      * @return the column
      */
-    public int getColumn() {
+    public Column getColumn() {
         return this.column;
     }
 
-    public void setColumn(final int column) {
+    public void setColumn(final Column column) {
         this.column = column;
     }
 
@@ -165,7 +165,7 @@
     public int hashCode() {
         final int PRIME = 31;
         int result = 1;
-        result = PRIME * result + this.column;
+        result = PRIME * this.column.getFactIndex();
         result = PRIME * this.extractor.hashCode();
         result = PRIME * this.identifier.hashCode();
         return result;
@@ -180,9 +180,9 @@
             return false;
         }
 
-        final Declaration other = (Declaration) object;
-
-        return this.column == other.column && this.identifier.equals( other.identifier ) && this.extractor.equals( other.extractor );
+        final Declaration other = (Declaration) object;               
+        
+        return this.column.getFactIndex() == other.column.getFactIndex() && this.identifier.equals( other.identifier ) && this.extractor.equals( other.extractor );
     }
 
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/EvalCondition.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/EvalCondition.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/EvalCondition.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -99,7 +99,7 @@
         }
 
         for ( int i = 0, length = this.requiredDeclarations.length; i < length; i++ ) {
-            if ( this.requiredDeclarations[i].getColumn() != other.requiredDeclarations[i].getColumn() ) {
+            if ( this.requiredDeclarations[i].getColumn().getFactIndex() != other.requiredDeclarations[i].getColumn().getFactIndex() ) {
                 return false;
             }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Exists.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Exists.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Exists.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -20,7 +20,7 @@
     /**
      * 
      */
-    private static final long serialVersionUID = -2731485078261324186L;
+    private static final long serialVersionUID = 320;
 
     public Object getChild() {
         return getChildren().get( 0 );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/From.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/From.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/From.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -4,7 +4,7 @@
 
 import org.drools.spi.DataProvider;
 
-public class From implements Serializable{
+public class From extends ConditionalElement implements Serializable {
     private Column column;   
     
     private DataProvider dataProvider;
@@ -21,5 +21,10 @@
 
     public DataProvider getDataProvider() {
         return dataProvider;
+    }
+
+    public Object clone() {
+        // TODO Auto-generated method stub
+        return null;
     }    
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -118,7 +118,7 @@
             return false;
         }
 
-        if ( this.declaration.getColumn() != other.declaration.getColumn() ) {
+        if ( this.declaration.getColumn().getFactIndex() != other.declaration.getColumn().getFactIndex() ) {
             return false;
         }
 
@@ -127,7 +127,7 @@
         }
 
         for ( int i = 0, length = this.requiredDeclarations.length; i < length; i++ ) {
-            if ( this.requiredDeclarations[i].getColumn() != other.requiredDeclarations[i].getColumn() ) {
+            if ( this.requiredDeclarations[i].getColumn().getFactIndex() != other.requiredDeclarations[i].getColumn().getFactIndex() ) {
                 return false;
             }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -45,7 +45,7 @@
     /**
      * 
      */
-    private static final long serialVersionUID  = 7952983928232702826L;
+    private static final long serialVersionUID  = 320;
 
     /**   */
     // ------------------------------------------------------------
@@ -296,6 +296,8 @@
     public void addPattern(final ConditionalElement ce) {
         if ( ce instanceof GroupElement ) {
             addDeclarations( (GroupElement) ce );
+        } else  if ( ce.getClass() == From.class ) {
+            addDeclarations( ((From) ce ).getColumn());
         }
         this.lhsRoot.addChild( ce );
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/DataProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/DataProvider.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/DataProvider.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -6,8 +6,9 @@
 import org.drools.rule.Declaration;
 
 public interface DataProvider {
-    
+
     public Declaration[] getRequiredDeclarations();
     
-   public Iterator getResults(Tuple tuple, WorkingMemory wm, PropagationContext ctx); 
+    public Iterator getResults(Tuple tuple, WorkingMemory wm, PropagationContext ctx); 
+
 }

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/dataproviders/MethodDataProviderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/dataproviders/MethodDataProviderTest.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/dataproviders/MethodDataProviderTest.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -8,6 +8,7 @@
 
 import junit.framework.TestCase;
 
+import org.drools.Cheese;
 import org.drools.FactHandle;
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
@@ -18,6 +19,7 @@
 import org.drools.reteoo.ReteTuple;
 import org.drools.reteoo.ReteooRuleBase;
 import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.rule.Column;
 import org.drools.rule.Declaration;
 import org.drools.rule.Package;
 import org.drools.spi.ColumnExtractor;
@@ -45,12 +47,16 @@
     
     public void testWithDeclarationsHelloWorld() throws Exception {
         
+        Column column = new  Column(0, new ClassObjectType( Cheese.class ) );
+        
         Extractor ex = new ColumnExtractor(new ClassObjectType(TestVariable.class));
-        Declaration varDec = new Declaration("var", ex, 0);
+        Declaration varDec = new Declaration("var", ex, column);
         declarations.put("var", varDec);
         
+        
+        column = new  Column(1, new ClassObjectType( Cheese.class ) );
         ex = new ColumnExtractor(new ClassObjectType(String.class));
-        Declaration var2Dec = new Declaration("var2", ex, 1);
+        Declaration var2Dec = new Declaration("var2", ex, column);
         declarations.put( "var2", var2Dec );
         
         List args = new ArrayList();

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/facttemplates/FactTemplateFieldExtractorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/facttemplates/FactTemplateFieldExtractorTest.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/facttemplates/FactTemplateFieldExtractorTest.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -2,6 +2,9 @@
 
 import junit.framework.TestCase;
 
+import org.drools.Cheese;
+import org.drools.base.ClassObjectType;
+import org.drools.rule.Column;
 import org.drools.rule.Declaration;
 import org.drools.rule.Package;
 import org.drools.spi.Extractor;
@@ -68,9 +71,11 @@
         Extractor extractName = new FactTemplateFieldExtractor( cheese,
                                                                 0 );
 
+        Column column = new  Column(0, new FactTemplateObjectType( cheese ) );
+        
         final Declaration declaration = new Declaration( "typeOfCheese",
                                                          extractName,
-                                                         0 );
+                                                         column );
 
         Fact brie = cheese.createFact( 12 );
         brie.setFieldValue( "name",

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-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FromNodeTest.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -12,10 +12,12 @@
 import org.drools.RuleBaseFactory;
 import org.drools.WorkingMemory;
 import org.drools.base.ClassFieldExtractor;
+import org.drools.base.ClassObjectType;
 import org.drools.base.ValueType;
 import org.drools.base.evaluators.Operator;
 import org.drools.common.DefaultFactHandle;
 import org.drools.common.PropagationContextImpl;
+import org.drools.rule.Column;
 import org.drools.rule.Declaration;
 import org.drools.rule.LiteralConstraint;
 import org.drools.rule.VariableConstraint;
@@ -131,10 +133,12 @@
 
         final ClassFieldExtractor ageExtractor = new ClassFieldExtractor( Person.class,
                                                                           "age" );
+        
+        Column column = new  Column(0, new ClassObjectType( Person.class ) );
 
         Declaration declaration = new Declaration( "age",
                                                    ageExtractor,
-                                                   0 );
+                                                   column );
 
         VariableConstraint variableConstraint = new VariableConstraint( priceExtractor,
                                                                         declaration,

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemoryTest.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemoryTest.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -21,11 +21,14 @@
 
 import junit.framework.Assert;
 
+import org.drools.Cheese;
 import org.drools.base.ClassFieldExtractor;
+import org.drools.base.ClassObjectType;
 import org.drools.base.ValueType;
 import org.drools.base.evaluators.Operator;
 import org.drools.common.DefaultFactHandle;
 import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Column;
 import org.drools.rule.Declaration;
 import org.drools.spi.Evaluator;
 import org.drools.util.MultiLinkedListNodeWrapper;
@@ -45,9 +48,12 @@
         super.setUp();
         final ClassFieldExtractor extractor = new ClassFieldExtractor( DummyValueObject.class,
                                                                        "booleanAttr" );
+        
+        Column column = new  Column(0, new ClassObjectType( DummyValueObject.class ) );
+        
         final Declaration declaration = new Declaration( "myBoolean",
                                                          extractor,
-                                                         0 );
+                                                         column );
         final Evaluator evaluator = ValueType.BOOLEAN_TYPE.getEvaluator( Operator.EQUAL );
 
         this.memory = new BooleanConstrainedLeftMemory( extractor,

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BooleanConstrainedRightMemoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BooleanConstrainedRightMemoryTest.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BooleanConstrainedRightMemoryTest.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -22,11 +22,13 @@
 import junit.framework.Assert;
 
 import org.drools.base.ClassFieldExtractor;
+import org.drools.base.ClassObjectType;
 import org.drools.base.ValueType;
 import org.drools.base.evaluators.Operator;
 import org.drools.common.DefaultFactHandle;
 import org.drools.reteoo.ObjectMatches;
 import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Column;
 import org.drools.rule.Declaration;
 import org.drools.spi.Evaluator;
 import org.drools.util.MultiLinkedListNodeWrapper;
@@ -46,9 +48,12 @@
         super.setUp();
         final ClassFieldExtractor extractor = new ClassFieldExtractor( DummyValueObject.class,
                                                                        "booleanAttr" );
+        
+        Column column = new  Column(0, new ClassObjectType( DummyValueObject.class ) );
+        
         final Declaration declaration = new Declaration( "myBoolean",
                                                          extractor,
-                                                         0 );
+                                                         column );
         final Evaluator evaluator = ValueType.BOOLEAN_TYPE.getEvaluator( Operator.EQUAL );
 
         this.memory = new BooleanConstrainedRightMemory( extractor,

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectEqualConstrLeftMemoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectEqualConstrLeftMemoryTest.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectEqualConstrLeftMemoryTest.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -22,10 +22,12 @@
 import junit.framework.Assert;
 
 import org.drools.base.ClassFieldExtractor;
+import org.drools.base.ClassObjectType;
 import org.drools.base.ValueType;
 import org.drools.base.evaluators.Operator;
 import org.drools.common.DefaultFactHandle;
 import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Column;
 import org.drools.rule.Declaration;
 import org.drools.spi.Evaluator;
 import org.drools.util.MultiLinkedListNodeWrapper;
@@ -44,9 +46,12 @@
         super.setUp();
         final ClassFieldExtractor extractor = new ClassFieldExtractor( DummyValueObject.class,
                                                                        "objectAttr" );
+        
+        Column column = new  Column(0, new ClassObjectType( DummyValueObject.class ) );
+        
         final Declaration declaration = new Declaration( "myObject",
                                                          extractor,
-                                                         0 );
+                                                         column );
         final Evaluator evaluator = ValueType.OBJECT_TYPE.getEvaluator( Operator.EQUAL );
 
         this.memory = new ObjectEqualConstrLeftMemory( extractor,

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectEqualConstrRightMemoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectEqualConstrRightMemoryTest.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectEqualConstrRightMemoryTest.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -22,11 +22,13 @@
 import junit.framework.Assert;
 
 import org.drools.base.ClassFieldExtractor;
+import org.drools.base.ClassObjectType;
 import org.drools.base.ValueType;
 import org.drools.base.evaluators.Operator;
 import org.drools.common.DefaultFactHandle;
 import org.drools.reteoo.ObjectMatches;
 import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Column;
 import org.drools.rule.Declaration;
 import org.drools.spi.Evaluator;
 import org.drools.util.MultiLinkedListNodeWrapper;
@@ -46,9 +48,12 @@
         super.setUp();
         final ClassFieldExtractor extractor = new ClassFieldExtractor( DummyValueObject.class,
                                                                        "objectAttr" );
+        
+        Column column = new  Column(0, new ClassObjectType( DummyValueObject.class ) );
+        
         final Declaration declaration = new Declaration( "myObject",
                                                          extractor,
-                                                         0 );
+                                                         column );
         final Evaluator evaluator = ValueType.OBJECT_TYPE.getEvaluator( Operator.EQUAL );
 
         this.memory = new ObjectEqualConstrRightMemory( extractor,

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectNotEqualConstrLeftMemoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectNotEqualConstrLeftMemoryTest.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectNotEqualConstrLeftMemoryTest.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -22,10 +22,12 @@
 import junit.framework.Assert;
 
 import org.drools.base.ClassFieldExtractor;
+import org.drools.base.ClassObjectType;
 import org.drools.base.ValueType;
 import org.drools.base.evaluators.Operator;
 import org.drools.common.DefaultFactHandle;
 import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Column;
 import org.drools.rule.Declaration;
 import org.drools.spi.Evaluator;
 import org.drools.util.MultiLinkedListNodeWrapper;
@@ -45,9 +47,12 @@
         super.setUp();
         final ClassFieldExtractor extractor = new ClassFieldExtractor( DummyValueObject.class,
                                                                        "objectAttr" );
+        
+        Column column = new  Column(0, new ClassObjectType( DummyValueObject.class ) );
+        
         final Declaration declaration = new Declaration( "myObject",
                                                          extractor,
-                                                         0 );
+                                                         column );
         final Evaluator evaluator = ValueType.OBJECT_TYPE.getEvaluator( Operator.NOT_EQUAL );
 
         this.memory = new ObjectNotEqualConstrLeftMemory( extractor,

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectNotEqualConstrRightMemoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectNotEqualConstrRightMemoryTest.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectNotEqualConstrRightMemoryTest.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -22,11 +22,13 @@
 import junit.framework.Assert;
 
 import org.drools.base.ClassFieldExtractor;
+import org.drools.base.ClassObjectType;
 import org.drools.base.ValueType;
 import org.drools.base.evaluators.Operator;
 import org.drools.common.DefaultFactHandle;
 import org.drools.reteoo.ObjectMatches;
 import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Column;
 import org.drools.rule.Declaration;
 import org.drools.spi.Evaluator;
 import org.drools.util.MultiLinkedListNodeWrapper;
@@ -46,9 +48,13 @@
         super.setUp();
         final ClassFieldExtractor extractor = new ClassFieldExtractor( DummyValueObject.class,
                                                                        "objectAttr" );
+        
+        Column column = new  Column(0, new ClassObjectType( DummyValueObject.class ) );
+        
         final Declaration declaration = new Declaration( "myObject",
                                                          extractor,
-                                                         0 );
+                                                         column );
+        
         final Evaluator evaluator = ValueType.OBJECT_TYPE.getEvaluator( Operator.NOT_EQUAL );
 
         this.memory = new ObjectNotEqualConstrRightMemory( extractor,

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/DeclarationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/DeclarationTest.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/DeclarationTest.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -24,6 +24,7 @@
 
 import org.drools.Cheese;
 import org.drools.base.ClassFieldExtractor;
+import org.drools.base.ClassObjectType;
 import org.drools.spi.FieldExtractor;
 
 public class DeclarationTest extends TestCase {
@@ -31,12 +32,14 @@
     public void testDeclaration() throws IntrospectionException {
         final FieldExtractor extractor = new ClassFieldExtractor( Cheese.class,
                                                                   "type" );
-
+        
+        Column column = new  Column(5, new ClassObjectType( Cheese.class ) );
+        
         /* Bind the extractor to a decleration */
         /* Declarations know the column they derive their value from */
         final Declaration declaration = new Declaration( "typeOfCheese",
                                                          extractor,
-                                                         5 );
+                                                         column );
 
         assertEquals( "typeOfCheese",
                       declaration.getIdentifier() );
@@ -48,7 +51,7 @@
                     declaration.getExtractor() );
 
         assertEquals( 5,
-                      declaration.getColumn() );
+                      declaration.getColumn().getFactIndex() );
 
     }
 
@@ -56,11 +59,13 @@
         final FieldExtractor extractor = new ClassFieldExtractor( Cheese.class,
                                                                   "type" );
 
-        /* Bind the extractor to a decleration */
-        /* Declarations know the column they derive their value from */
+        Column column = new  Column(5, new ClassObjectType( Cheese.class ) );
+        
+        // Bind the extractor to a decleration 
+        // Declarations know the column they derive their value from 
         final Declaration declaration = new Declaration( "typeOfCheese",
                                                          extractor,
-                                                         5 );
+                                                         column );
 
         /* Create some facts */
         final Cheese cheddar = new Cheese( "cheddar",

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java	2006-08-16 18:06:31 UTC (rev 5919)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java	2006-08-16 18:07:59 UTC (rev 5920)
@@ -25,6 +25,7 @@
 import org.drools.RuleBaseFactory;
 import org.drools.WorkingMemory;
 import org.drools.base.ClassFieldExtractor;
+import org.drools.base.ClassObjectType;
 import org.drools.base.ValueType;
 import org.drools.base.evaluators.Operator;
 import org.drools.common.InternalFactHandle;
@@ -112,17 +113,22 @@
         final FieldExtractor priceExtractor = new ClassFieldExtractor( Cheese.class,
                                                                        "price" );
 
+        Column column = new  Column(0, new ClassObjectType( Cheese.class ) );
+        
         // Bind the extractor to a decleration
         // Declarations know the column they derive their value form
         final Declaration price1Declaration = new Declaration( "price1",
                                                                priceExtractor,
-                                                               0 );
+                                                               column );
 
+        
+        column = new  Column(1, new ClassObjectType( Cheese.class ) );
+        
         // Bind the extractor to a decleration
         // Declarations know the column they derive their value form
         final Declaration price2Declaration = new Declaration( "price2",
                                                                priceExtractor,
-                                                               1 );
+                                                               column );
 
         final PredicateExpression evaluator = new PredicateExpression() {
 
@@ -184,12 +190,14 @@
 
         final FieldExtractor priceExtractor = new ClassFieldExtractor( Cheese.class,
                                                                        "price" );
+        
+        Column column = new  Column(0, new ClassObjectType( Cheese.class ) );
 
         // Bind the extractor to a decleration
         // Declarations know the column they derive their value form
         final Declaration priceDeclaration = new Declaration( "price1",
                                                               priceExtractor,
-                                                              0 );
+                                                              column );
 
         final ReturnValueExpression isDoubleThePrice = new ReturnValueExpression() {
             /**




More information about the jboss-svn-commits mailing list