[jboss-svn-commits] JBL Code SVN: r26163 - in labs/jbossrules/branches/DroolsChance: drools-compiler/src/main/java/org/drools/compiler and 12 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Apr 20 19:16:43 EDT 2009


Author: dsotty
Date: 2009-04-20 19:16:43 -0400 (Mon, 20 Apr 2009)
New Revision: 26163

Modified:
   labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/degrees/SimpleDegree.java
   labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java
   labs/jbossrules/branches/DroolsChance/drools-compiler/src/test/java/org/drools/reteoo/MockLeftTupleSink.java
   labs/jbossrules/branches/DroolsChance/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/BaseNode.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ConcurrentNodeMemories.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ImplicationBetaConstraint.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/NodeMemories.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/TupleStartEqualsConstraint.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IDegreeFactory.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/SimpleDegreeFactory.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDotAnd.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMaxOr.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMinAnd.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/BetaNode.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluation.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluationTemplate.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvalRecord.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Evaluation.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/FromNode.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectRuleBase.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/InitialFactHandle.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/LeftTupleSource.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ModusPonensNode.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/NotNode.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/OperatorInstaller.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Rete.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/RightTupleMemory.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/builder/ImperfectGroupElementBuilder.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/builder/ImperfectReteooRuleBuilder.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/AbstractHashTable.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/Iterator.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/LeftTupleIndexHashTable.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/LeftTupleList.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/LinkedList.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/RightTupleIndexHashTable.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/RightTupleList.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/test/java/org/drools/reteoo/MockLeftTupleSink.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/test/java/org/drools/reteoo/MockObjectSource.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/test/java/org/drools/reteoo/MockTupleSource.java
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/chance/FuzzyTest1.drl
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/chance/HelloWorld.drl
   labs/jbossrules/branches/DroolsChance/drools-guvnor/src/main/java/org/drools/guvnor/public/version.txt
Log:
many bugfixes
support for imperfect exists

Modified: labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/degrees/SimpleDegree.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/degrees/SimpleDegree.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/degrees/SimpleDegree.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -37,7 +37,7 @@
 	}
 	
 	public static IDegree UNKNOWN() {
-		return null;
+		return FALSE();
 	}
 	
 	

Modified: labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -239,8 +239,13 @@
             
             System.out.println(this.getClass().toString() + " HACKED TO GET DROOLSTREE");
             
-            //System.out.println((((DroolsTree) resultTree.getChild(8)).toStringTree()));
-           //System.out.println((((DroolsTree) resultTree.getChild(4)).toIndentedStringTree()));
+
+            int j = 0;            
+            DroolsTree dtree = (DroolsTree) resultTree.getChild(j);
+            while (dtree != null && ! dtree.getToken().getText().equals("rule"))
+            	dtree = (DroolsTree) resultTree.getChild(j++);
+            
+           System.out.println(dtree.toIndentedStringTree());
 //            
             
             

Modified: labs/jbossrules/branches/DroolsChance/drools-compiler/src/test/java/org/drools/reteoo/MockLeftTupleSink.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/src/test/java/org/drools/reteoo/MockLeftTupleSink.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/src/test/java/org/drools/reteoo/MockLeftTupleSink.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -179,4 +179,12 @@
 		
 	}
 
+	public ConstraintKey[] getConstraintKeys() {
+		return new ConstraintKey[] {new ConstraintKey("MOCK")};
+	}
+
+	
+	public LeftTupleSource getParentSource() {
+    	return null;
+    }
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/DroolsChance/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -551,4 +551,9 @@
 		
 	}
 
+	public Object setNodeMemory(NodeMemory node, Object memory) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -291,7 +291,7 @@
     }
     
     public void inject(ArgList args, String field, String op, String value) {
-    	System.out.println(this.getClass()+" : KH injects a rule for degree "+getConsequenceDegree());
+    	System.out.println("\n"+this.getClass()+" : KH injects a rule for degree "+getConsequenceDegree());
     	workingMemory.inject(this.getRule().getName(), 
     					     args,
     					     new ConstraintKey(field,op,value),

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -1079,7 +1079,7 @@
                                                                                   entryPoint );
 
         //TODO:
-        //System.out.println(this.getClass().toString() + "Hacked to enroute imperfect");
+        System.out.println(this.getClass().toString() + "Hacked to enroute imperfect");
         
         
         if (this.ruleBase instanceof ImperfectRuleBase) {
@@ -1537,6 +1537,7 @@
     public void clearNodeMemory(final NodeMemory node) {
         this.nodeMemories.clearNodeMemory( node );
     }
+        
 
     public WorkingMemoryEventSupport getWorkingMemoryEventSupport() {
         return this.workingMemoryEventSupport;
@@ -1972,7 +1973,7 @@
     				// Object exists and has already been eval'ed
     				// Add new degree to evaluation
     				//TODO: 1 should be confidence!    				
-    				eval.addDegree(ruleName, degree,1);
+    				eval.addDegree(ruleName, degree,1,true);
     				//Notification is implicit in the record...
     			} else if (node == null) {
     				System.out.println("Warning - injected USELESS eval");

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/BaseNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/BaseNode.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/BaseNode.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -20,6 +20,7 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 
+import org.drools.reteoo.LeftTupleSource;
 import org.drools.reteoo.ReteooBuilder;
 import org.drools.reteoo.RuleRemovalContext;
 
@@ -145,4 +146,7 @@
     public void setPartitionId( final RuleBasePartitionId partitionId ) {
         this.partitionId = partitionId;
     }
+    
+    
+
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ConcurrentNodeMemories.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ConcurrentNodeMemories.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ConcurrentNodeMemories.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -77,6 +77,7 @@
 
         return memory;
     }
+        
 
 
     /**
@@ -131,4 +132,6 @@
         this.rulebase = ruleBase;
     }
 
+	
+
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ImplicationBetaConstraint.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ImplicationBetaConstraint.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ImplicationBetaConstraint.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -191,14 +191,14 @@
 	public Evaluation[] isSatisfiedCachedLeft(ContextEntry[] context,
 			InternalFactHandle handle, IDegreeFactory factory) {
 		Evaluation eval = template[0].spawn(factory.Unknown());
-			eval.addDegree(Evaluation.PRIOR, this.priorDegree, 1);
+			eval.addDegree(Evaluation.PRIOR, this.priorDegree, 1,true);
 		return new Evaluation[] {eval};
 	}
 
 	public Evaluation[] isSatisfiedCachedRight(ContextEntry[] context,
 			LeftTuple tuple, IDegreeFactory factory) { 
 		Evaluation eval = template[0].spawn(factory.Unknown());
-			eval.addDegree(Evaluation.PRIOR, this.priorDegree, 1);
+			eval.addDegree(Evaluation.PRIOR, this.priorDegree, 1,true);
 		return new Evaluation[] {eval};
 	}
 	

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -45,7 +45,7 @@
 
     public void setRuleFlowEventSupport(RuleFlowEventSupport ruleFlowEventSupport);
     
-    public Object getNodeMemory(NodeMemory node);
+    public Object getNodeMemory(NodeMemory node);       
 
     public void clearNodeMemory(NodeMemory node);
 

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/NodeMemories.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/NodeMemories.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/NodeMemories.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -26,7 +26,7 @@
  */
 public interface NodeMemories {
 
-    public Object getNodeMemory( NodeMemory node );
+    public Object getNodeMemory( NodeMemory node );    
 
     public void clearNodeMemory( NodeMemory node );
 

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -33,6 +33,7 @@
 import org.drools.reteoo.EvaluationTemplate;
 import org.drools.reteoo.LeftTuple;
 import org.drools.reteoo.LeftTupleMemory;
+import org.drools.reteoo.ObservableRightTupleMemoryWrapper;
 import org.drools.reteoo.RightTupleMemory;
 import org.drools.reteoo.SingleEvaluationTemplate;
 import org.drools.rule.ContextEntry;
@@ -187,11 +188,14 @@
             }
 
             RightTupleMemory factHandleMemory;
-            if ( this.conf.isIndexRightBetaMemory() ) {
-                factHandleMemory = new RightTupleIndexHashTable( new FieldIndex[]{index} );
-            } else {
-                factHandleMemory = new RightTupleList();
-            }
+               	if ( this.conf.isIndexRightBetaMemory() ) {
+            		factHandleMemory = new RightTupleIndexHashTable( new FieldIndex[]{index} );
+            	} else {
+                	factHandleMemory = new RightTupleList();
+            	}
+            
+           
+               	
             memory = new BetaMemory( config.isSequential() ? null : tupleMemory,
                                      factHandleMemory,
                                      this.createContext() );

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/TupleStartEqualsConstraint.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/TupleStartEqualsConstraint.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/TupleStartEqualsConstraint.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -211,8 +211,11 @@
 	private EvaluationTemplate template;
     
 	public ConstraintKey getConstraintKey() {
-		if (singletonKey == null)
+		if (singletonKey == null) {
+			
+			
 			singletonKey = new ConstraintKey("tuple","starts","...");
+		}
 		return singletonKey;
 	}
 

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IDegreeFactory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IDegreeFactory.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IDegreeFactory.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -42,6 +42,14 @@
 	
 	public IDegreeCombiner getModusPonensOp();
 	
+	
+	public IDegreeCombiner getExistsOperator();
+	
+	public IDegreeCombiner getForallOperator();
+	
+	public IDegreeCombiner getForAnyOperator();
+	
+	
 //	public IDegreeCombiner getEquivModusPonensOp();
 	
 	

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/SimpleDegreeFactory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/SimpleDegreeFactory.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/SimpleDegreeFactory.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -8,6 +8,7 @@
 import org.drools.degrees.operators.simple.SimpleAverage;
 import org.drools.degrees.operators.simple.SimpleDotAnd;
 import org.drools.degrees.operators.simple.SimpleEquiv;
+import org.drools.degrees.operators.simple.SimpleExists;
 import org.drools.degrees.operators.simple.SimpleMaxOr;
 import org.drools.degrees.operators.simple.SimpleMinAnd;
 import org.drools.degrees.operators.simple.SimpleNot;
@@ -110,4 +111,16 @@
 		return new SimpleNullHandlingStrategy();
 	}
 
+	public IDegreeCombiner getExistsOperator() {
+		return new SimpleExists();
+	}
+
+	public IDegreeCombiner getForAnyOperator() {
+		return new SimpleAverage();
+	}
+
+	public IDegreeCombiner getForallOperator() {
+		return this.getAndOperator();
+	}
+
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDotAnd.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDotAnd.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDotAnd.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -11,6 +11,9 @@
 
 	
 	public IDegree eval(IDegree[] args) {
+		if (args == null || args.length == 0)
+			return SimpleDegree.UNKNOWN();
+		
 		float ans = 1;
 		for (IDegree deg : args) {
 			SimpleDegree d = deg.getDegree();				

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMaxOr.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMaxOr.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMaxOr.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -11,7 +11,10 @@
 
 	
 	public IDegree eval(IDegree[] args) {
-		float ans = 1;
+		if (args == null || args.length == 0)
+			return SimpleDegree.UNKNOWN();
+		
+		float ans = 0;
 		for (IDegree deg : args) {
 			SimpleDegree d = deg.getDegree();				
 				ans = Math.max(ans,d.getValue());

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMinAnd.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMinAnd.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMinAnd.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -10,6 +10,9 @@
 
 	
 	public IDegree eval(IDegree[] args) {
+		if (args == null || args.length == 0)
+			return SimpleDegree.UNKNOWN();
+		
 		float ans = 1;
 		for (IDegree deg : args) {
 			SimpleDegree d = deg.getDegree();				

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -690,4 +690,9 @@
 		throw new UnsupportedOperationException("Imperfect Accumulate will be supported soon ");
 		
 	}
+
+	public ConstraintKey[] getConstraintKeys() {
+		throw new RuntimeDroolsException("CRISP Accumulate should not be asked for CK");
+		
+	}
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -576,6 +576,11 @@
 	}
 
 	
+	public ConstraintKey getConstraintKey() {
+		return this.getConstraint().getConstraintKey();
+	}
 
 	
+
+	
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/BetaNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/BetaNode.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/BetaNode.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -432,5 +432,8 @@
 		return this.filterStrat;
 	}
     
+    public LeftTupleSource getParentSource() {
+    	return this.leftInput;
+    }
     
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -24,6 +24,7 @@
 import java.util.Collection;
 
 import org.drools.RuleBaseConfiguration;
+import org.drools.RuntimeDroolsException;
 import org.drools.common.BetaConstraints;
 import org.drools.common.ImperfectFactHandle;
 import org.drools.common.InternalFactHandle;
@@ -579,5 +580,10 @@
 		throw new UnsupportedOperationException("Imperfect collect will be supported soon");
 		
 	}
+	
+	public ConstraintKey[] getConstraintKeys() {
+		throw new RuntimeDroolsException("CRISP Collect should not be asked for CK");
+		
+	}
 
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluation.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluation.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluation.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -6,7 +6,9 @@
 import java.util.Observable;
 import java.util.Observer;
 import java.util.Set;
+import java.util.Vector;
 
+import org.drools.RuntimeDroolsException;
 import org.drools.degrees.IDegree;
 import org.drools.degrees.operators.IDegreeCombiner;
 import org.drools.degrees.operators.IMergeStrategy;
@@ -15,7 +17,7 @@
 public class CompositeEvaluation extends Evaluation implements Observer {
 
 	private IDegreeCombiner operator;
-	protected Evaluation[] operands;
+	protected Vector<Evaluation> operands;
 	private float opRate;
 	
 	public CompositeEvaluation(int id, ConstraintKey key, Set<String> deps,
@@ -23,10 +25,12 @@
 		super(id,key,deps,mergeStrat,nullStrat);
 		
 		if (evalDegrees != null) {
-			this.operands = new Evaluation[evalDegrees.length];
+			this.operands = new Vector<Evaluation>(evalDegrees.length);
 				for (int j = 0; j < evalDegrees.length; j++) {
 					setOperand(j,evalDegrees[j]);
 				}
+		} else {
+			this.operands = new Vector<Evaluation>(0);
 		}
 	
 		this.operator = operator;
@@ -34,11 +38,26 @@
 		this.combine();
 	}
 	
+	
+	
+	protected CompositeEvaluation(int id, ConstraintKey key, Set<String> deps,
+			IMergeStrategy mergeStrat, INullHandlingStrategy nullStrat) {		
+		super(id,key,deps,mergeStrat,nullStrat);
+				
+		this.operands = new Vector<Evaluation>(0);			
+		this.operator = null;
+				
+	}
+	
+	
+	
+	
+	
 	public CompositeEvaluation(int id, ConstraintKey key, Set<String> deps,
 			int arity, IDegreeCombiner operator, IMergeStrategy mergeStrat, INullHandlingStrategy nullStrat) {		
 		super(id,key,deps,mergeStrat,nullStrat);
 				
-		this.operands = new Evaluation[arity];
+		this.operands = new Vector<Evaluation>(arity);
 		
 	
 		this.operator = operator;
@@ -67,47 +86,62 @@
 //		
 //	}
 
-	protected void combine() {
-		if (operands == null)
-			return;
+	protected boolean combine() {
 		
-		int N = operands.length;
-		IDegree[] args = new IDegree[N];
 		
+		IDegree[] args = null;
 		
-		for (int j=0; j < N; j++) {
-			args[j] = operands[j].getDegree();
+		if (getOperands() != null) {				
+			int N = getOperands().size();
+			args = new IDegree[N];
 		
-		}
-				
+			int j = 0;
+			for (Evaluation eval : getOperands()) {
+				args[j++] = eval.getDegree();		
+			}
+		}		
+		
 		IDegree opDeg = this.operator.eval(args);
 		updateOpRate();
-		this.addDegree(Evaluation.EVAL, opDeg, getOpRate());
+		boolean newContrib = this.addDegree(Evaluation.EVAL, opDeg, getOpRate(),true);
+						
+		return newContrib;
 		
 	}
 	
 	
-	public Evaluation[] getOperands() {
+	public Collection<Evaluation> getOperands() {
 		return operands;
 	}
 	
 	public void setOperand(int position, Evaluation operand) {
 				
-		if (operands[position] != null && operands[position] != operand) {
-			System.out.println("SET OPERAND "+operand.getKey()+ "with " + operand.getBitS());
-			operands[position].deleteObserver(this);
+		if (operands.size() <= position) {
+			// Surely a new operand!
+			operands.setSize(position+1);
+			
 			operand.addObserver(this);
-			operands[position] = operand;
-			combine();
+			//operands.set(position,operand);
 		} else {
-			operand.addObserver(this);
-			operands[position] = operand;
-		}
-													
+			if (operands.get(position) != null && operands.get(position) != operand) {
+				System.out.println("SET OPERAND "+operand.getKey()+ "with " + operand.getBitS());
+				operands.get(position).deleteObserver(this);
+				operand.addObserver(this);
+				//operands.set(position,operand);
+				//combine();
+			} else {
+				// merging with old op
+//				if (operands.get(position) != null)
+//					throw new RuntimeDroolsException("DD");														
+				//operands.set(position,operand);
+			}
+		}		
+		
+		operands.set(position,operand);
 	}
 	
 	public Collection<Evaluation> getEvalTree() {
-		Collection<Evaluation> ans = new ArrayList<Evaluation>(2*operands.length);
+		Collection<Evaluation> ans = new ArrayList<Evaluation>(2*operands.size());
 			for (Evaluation eval : operands)
 				ans.addAll(eval.getEvalTree());
 		ans.add(this);
@@ -133,18 +167,24 @@
 	}
 	
 	protected void updateOpRate() {
-		float delta = 0;
-		for (Evaluation child : this.operands) {
-			delta += child.getInfoRate();
-		}			
-		opRate = delta / (1.0f*this.operands.length);			
+		if (this.operands.size() == 0) {
+			setOpRate(1);
+		} else {
+			float delta = 0;
+			for (Evaluation child : this.getOperands()) {
+				delta += child.getInfoRate();
+			}			
+			setOpRate(delta / (1.0f*this.operands.size()));
+		}
 	}	
 	
 	
 	public void update(Observable o, Object arg) {
-		System.out.println("UPDATE HAS BEEN CALLED ON COMBOVAL");
-		incInfo("EVAL",-opRate);
-		combine();		
+		System.out.println("\nUPDATE HAS BEEN CALLED ON COMBOVAL by" + o.toString());
+		incInfo("EVAL",-getOpRate());
+		combine();	
+		
+		this.notifyObservers(this);
 	}
 	
 	protected IDegreeCombiner getOperator() {
@@ -176,5 +216,12 @@
 		}
 		return sb.toString();
 	}
+
+	/**
+	 * @param opRate the opRate to set
+	 */
+	public void setOpRate(float opRate) {
+		this.opRate = opRate;
+	}
 	
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluationTemplate.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluationTemplate.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluationTemplate.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -56,7 +56,11 @@
 		return new CompositeEvaluation(id,key,deps,N,operator,mergeStrat,nullStrat);
 	}
 	
+	public Evaluation spawn(IOperandSet args) {
+		return new SetCompositeEvaluation(id,key,deps,operator,args,mergeStrat,nullStrat);
+	}
 	
+	
 	protected IDegreeCombiner getOperator() {
 		return operator;
 	}

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -340,4 +340,9 @@
 			}
 	}
 
+	@Override
+	public ConstraintKey getConstraintKey() {
+		return new ConstraintKey("ENTRYPOINT");
+	}
+
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -23,6 +23,7 @@
 import java.util.Collections;
 
 import org.drools.RuleBaseConfiguration;
+import org.drools.RuntimeDroolsException;
 import org.drools.common.BaseNode;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.common.NodeMemory;
@@ -412,7 +413,19 @@
         }
     }
 
+    
+    
+    
+    public ConstraintKey[] getConstraintKeys() {
+		throw new RuntimeDroolsException("Imperfect eval will be supported soon");
+		
+	}
+
 	
+	public LeftTupleSource getParentSource() {
+		return this.tupleSource;
+	}
+	
 
 	
 

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvalRecord.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvalRecord.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvalRecord.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -25,6 +25,8 @@
 public class EvalRecord extends CompositeEvaluation implements Observer {
 	
 	
+	public static final int INITIAL_ID = -99;
+
 	private Map<ConstraintKey, Evaluation> 		evalMap;
 	//private ConstraintKey 						mainKey;
 	
@@ -67,9 +69,9 @@
 		//pre-order visit!
 		if (eval instanceof CompositeEvaluation) {
 			CompositeEvaluation combo = (CompositeEvaluation) eval;
-			Evaluation[] operands = combo.getOperands();
-			for (int j = 0; j < operands.length; j++) {
-				Evaluation newOp = insert(operands[j]);
+			Vector<Evaluation> operands = (Vector<Evaluation>) combo.getOperands();
+			for (int j = 0; j < operands.size(); j++) {
+				Evaluation newOp = insert(operands.get(j));
 				combo.setOperand(j,newOp);
 			}			
 		}
@@ -79,7 +81,7 @@
 			System.out.println(this.getClass()+" insert "+eval.toString());
 			evalMap.put(eval.getKey(),eval);	
 			prevEval = eval;
-			eval.addObserver(this);
+			//eval.addObserver(this);
 		} else {
 			System.out.println(this.getClass()+" merge "+eval.toString());
 			prevEval.merge(eval);
@@ -102,20 +104,28 @@
 		
 		if (newEval) {
 			if (operands == null) {
-				operands = new Evaluation[1];
-				operands[0] = addedEval;
+				operands = new Vector<Evaluation>(1);
+				
+				operands.add(addedEval);
 			} else {
-				int N = operands.length;
-				Evaluation[] temp = new Evaluation[N+1]; 
+				/*
+				int N = operands.size();
+				Vector<Evaluation> temp = new Vector<Evaluation>(N+1);
+				temp.setSize(N+1);
 				for (int j = 0; j < N; j++)
-					temp[j] = operands[j];
+					temp.set(j,operands.get(j));
 				
 				operands = temp;
 				
-				operands[N] = addedEval;
+				operands.set(N,addedEval);
+				*/
+				operands.add(addedEval);
 			}
 		}
 		
+			addedEval.deleteObserver(this);
+			addedEval.addObserver(this);
+		
 		((DynamicConstraintKey) this.getKey()).addArg(eval.getKey());
 		
 		combine();
@@ -290,16 +300,18 @@
 
 	public void replace(CompositeEvaluation operator, int N) {
 		
-		int M = this.getOperands().length;
+		
+		int M = this.getOperands().size();
 		for (int j = M-N; j < M; j++) {
-			Evaluation operand = getOperands()[j];
+			Evaluation operand = ((Vector<Evaluation>) getOperands()).get(j);
+			
 			operand.deleteObserver(this);
 			operator.setOperand(j+N-M, operand);
 			((DynamicConstraintKey) operator.getKey()).addArg(operand.getKey());
 		}
 		
 		
-		
+		/*
 		Evaluation[] locOperands = new Evaluation[M-N+1];
 		((DynamicConstraintKey) this.getKey()).reset();
 		for (int j = 0; j < M-N; j++) {
@@ -310,16 +322,33 @@
 		((DynamicConstraintKey) this.getKey()).addArg(operator.getKey());
 			
 		operands = locOperands;
+		*/
 		
-		operator.combine();
 		
+		Vector<Evaluation> locOperands = (Vector<Evaluation>) getOperands();
 		
-		evalMap.put(operator.getKey(),operator);	
-		operator.addObserver(this);
 		
+		((DynamicConstraintKey) this.getKey()).reset();
+		for (int j = 0; j < M-N; j++) {			
+			((DynamicConstraintKey) this.getKey()).addArg(locOperands.get(j).getKey());
+		}				
+		((DynamicConstraintKey) this.getKey()).addArg(operator.getKey());
+		
+		for (int j = 0; j < N; j++) {			
+			locOperands.remove(locOperands.size()-1);
+		}
+		locOperands.add(operator);
+		
+				
+			operator.combine();				
+			evalMap.put(operator.getKey(),operator);	
+			operator.addObserver(this);
+		
 		this.combine();
 		this.setChanged();
 		this.notifyObservers(null);
+		
+		
 	}
 
 	

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Evaluation.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Evaluation.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Evaluation.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -58,12 +58,13 @@
 	
 	public Evaluation(int id, ConstraintKey key, Set<String> deps, IDegree evalDeg, IMergeStrategy mergeStrat, INullHandlingStrategy nullStrat) {
 		this(id,key,deps,mergeStrat,nullStrat);
-		this.addDegree(Evaluation.EVAL,evalDeg,1);
+		this.addDegree(Evaluation.EVAL,evalDeg,1,true);
+		
 	}
 	
 	public Evaluation(int id, ConstraintKey key, Set<String> deps, IDegree evalDeg, String source, IMergeStrategy mergeStrat, INullHandlingStrategy nullStrat) {
 		this(id,key,deps,mergeStrat,nullStrat);
-		this.addDegree(source,evalDeg,1);
+		this.addDegree(source,evalDeg,1,true);
 	}
 	
 	
@@ -101,7 +102,8 @@
 			System.out.println("Trying to merge degrees for source "+ source + "+1");
 			IDegree evalDeg = moreDegrees.get(source);
 			if (evalDeg != null) {						
-							
+				
+				/*
 				confidence.put(source, conf.get(source));
 				
 				if (getDegreeBit(source) == null) {
@@ -110,36 +112,53 @@
 				} else {
 					this.degrees.put(source,evalDeg);
 				}
-			
+				 */
+				newContrib = newContrib || this.addDegree(source, evalDeg, conf.get(source),false);
 				
 				
+				
 			}
 		}
-	    update(newContrib);
+		if (newContrib) {
+			aggDegree = mergeDegrees();
+			this.setChanged();
+			this.notifyObservers();
+		}
+	    
 	
 	}
 	
 		
-	public void addDegree(String source, IDegree evalDeg, float wgt) {
-		
+	public boolean addDegree(String source, IDegree evalDeg, float wgt, boolean immediateUpdate) {
 		boolean newContrib = false;
+		boolean rateIncr = false;
 		
 		if (evalDeg == null) {
-			newContrib = clearDegree(source);			
+			/*
+			newContrib = clearDegree(source);
+			rateIncr = true;
+			*/
 		} else {
 		
 		
+			Float prevConf = confidence.get(source);
+				confidence.put(source, wgt);
+			rateIncr = prevConf == null ? true : prevConf.floatValue() < wgt;
 			
-			confidence.put(source, wgt);
-			
-			if (getDegreeBit(source) == null) {
+			IDegree oldVal = getDegreeBit(source);
+			if (oldVal == null) {
 				System.out.println(this.key+" Added degree for source "+ source + " with wgt "+wgt);
 				this.degrees.put(source,evalDeg);					
 				newContrib = true;
 			} else {
-				System.out.println(this.key+" UPDATED degree for source "+ source + " with wgt "+wgt);				
-					this.degrees.put(source,evalDeg);
-					newContrib = true;
+					if (oldVal.equals(evalDeg)) {
+						System.out.println(this.key+" No news for source "+ source + " with wgt "+wgt);
+						newContrib = false;
+					} else {
+						System.out.println(this.key+" UPDATED degree for source "+ source + " with wgt "+wgt);
+						this.degrees.put(source,evalDeg);
+						newContrib = true;
+					}
 			}
 			
 //			if (getDegreeBit(source) == null) {
@@ -153,9 +172,19 @@
 								
 		}
 		
+		System.out.println(this.getKey()+"\n\t\tAdd degree status immUpd = "+immediateUpdate + " , newcontr = "+newContrib+ " , rateincr ="+ rateIncr);
 		
-		update(newContrib);
 		
+		if (immediateUpdate && newContrib)
+			aggDegree = mergeDegrees();
+		
+		if (immediateUpdate && (newContrib || rateIncr)) {
+			this.setChanged();
+			this.notifyObservers();
+		}
+		
+		return (newContrib || rateIncr);
+		
 	}
 	
 	protected void incInfo(String source, float delta) {
@@ -163,11 +192,11 @@
 	}
 	
 	
-		
-	protected void update(boolean newContrib) {
+	/*	
+	protected void update(boolean rateIncreased) {
 		IDegree newDeg = mergeDegrees();
 		
-		if ((this.countObservers() > 0) &&  ((! newDeg.equals(aggDegree)) || newContrib)) {
+		if ((this.countObservers() > 0) &&  ((! newDeg.equals(aggDegree)) || rateIncreased)) {
 			aggDegree = newDeg;
 			this.setChanged();
 			this.notifyObservers(newDeg);
@@ -176,6 +205,7 @@
 		}
 		
 	}
+	*/
 	
 	public boolean clearDegree(String source) {
 		boolean cleared = false;

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -16,6 +16,7 @@
 
 package org.drools.reteoo;
 
+import org.drools.RuntimeDroolsException;
 import org.drools.common.BetaConstraints;
 import org.drools.common.ImperfectFactHandle;
 import org.drools.common.InternalFactHandle;
@@ -398,21 +399,32 @@
         return NodeTypeEnums.ExistsNode;
     }
 
+    
+    
+    
+	public void assertLeftTuple(ImperfectLeftTuple leftTuple,
+			PropagationContext context, InternalWorkingMemory workingMemory,
+			IDegreeFactory factory) {
+		throw new RuntimeDroolsException("Imperfect Exists is handled by specific subclass");		
+	}
+
 	public void assertObject(ImperfectFactHandle factHandle,
 			PropagationContext propagationContext,
 			InternalWorkingMemory workingMemory, IDegreeFactory factory,
 			EvalRecord record) {
-		// TODO Auto-generated method stub
-		throw new UnsupportedOperationException("Imperfect exist will be supported soon");
+		throw new RuntimeDroolsException("Imperfect Exists is handled by specific subclass");		
 	}
 
+    
+    
+	public ConstraintKey[] getConstraintKeys() {
+		throw new RuntimeDroolsException("CRISP Exist should not be asked for CK");
+		
+	}
+    
+  
 	
+	
+	
 
-	public void assertLeftTuple(ImperfectLeftTuple leftTuple,
-			PropagationContext context, InternalWorkingMemory workingMemory,
-			IDegreeFactory factory) {
-		// TODO Auto-generated method stub
-		throw new UnsupportedOperationException("Imperfect exist will be supported soon");
-	}   
-
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/FromNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/FromNode.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/FromNode.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -6,6 +6,7 @@
 import java.io.Serializable;
 
 import org.drools.RuleBaseConfiguration;
+import org.drools.RuntimeDroolsException;
 import org.drools.common.BaseNode;
 import org.drools.common.BetaConstraints;
 import org.drools.common.EmptyBetaConstraints;
@@ -340,5 +341,14 @@
         }
     }
 
+    public ConstraintKey[] getConstraintKeys() {
+		throw new RuntimeDroolsException("CRISP FROM should not be asked for CK");
+		
+	}
+    
+    public LeftTupleSource getParentSource() {
+    	return this.tupleSource;
+    }
+    
 	
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectRuleBase.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectRuleBase.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectRuleBase.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -1,12 +1,18 @@
 package org.drools.reteoo;
 
+import org.drools.FactException;
+import org.drools.FactHandle;
 import org.drools.RuleBaseConfiguration;
+import org.drools.common.DefaultFactHandle;
+import org.drools.common.ImperfectFactHandle;
+import org.drools.common.InternalWorkingMemory;
 import org.drools.common.RuleBasePartitionId;
 import org.drools.degrees.factory.IDegreeFactory;
 import org.drools.degrees.factory.SimpleDegreeFactory;
 import org.drools.degrees.factory.SimpleFuzzyDegreeFactory;
 import org.drools.rule.EntryPoint;
 import org.drools.spi.FactHandleFactory;
+import org.drools.spi.PropagationContext;
 
 public class ImperfectRuleBase extends ReteooRuleBase {
 
@@ -124,5 +130,25 @@
 	public IDegreeFactory getDegreeFactory() {
 		return degreeFactory;
 	}
+	
+	
+	
+	public void assertObject(final FactHandle handle,
+            final Object object,
+            final PropagationContext context,
+            final InternalWorkingMemory workingMemory) throws FactException {
+			
+				IDegreeFactory factory = this.getDegreeFactory();
+				EvalRecord record = new EvalRecord(EvalRecord.INITIAL_ID,
+						getDegreeFactory().getAndOperator(),
+						getDegreeFactory().getMergeStrategy(),
+						getDegreeFactory().getNullHandlingStrategy());
+		
+				getRete().assertObject( (ImperfectFactHandle) handle,
+						context,
+						workingMemory, 
+						factory, 
+						record);
+	}
 
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/InitialFactHandle.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/InitialFactHandle.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/InitialFactHandle.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -1,6 +1,7 @@
 package org.drools.reteoo;
 
 import org.drools.common.DefaultFactHandle;
+import org.drools.common.ImperfectFactHandle;
 import org.drools.common.InternalFactHandle;
 
 /*
@@ -19,7 +20,7 @@
  * limitations under the License.
  */
 
-public class InitialFactHandle extends DefaultFactHandle {
+public class InitialFactHandle extends ImperfectFactHandle {
     /**
      *
      */

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -20,6 +20,7 @@
 import java.util.Observable;
 import java.util.Observer;
 
+import org.drools.RuntimeDroolsException;
 import org.drools.common.BetaConstraints;
 import org.drools.common.ImperfectFactHandle;
 import org.drools.common.InternalFactHandle;
@@ -636,7 +637,10 @@
 
 	
 
-	
+	public ConstraintKey[] getConstraintKeys() {
+		return this.constraints.getConstraintKeys();
+		
+	}
 
 	
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -326,5 +326,13 @@
 		
     }
 
+	@Override
+	public ConstraintKey[] getConstraintKeys() {
+		return new ConstraintKey[] {this.objectSource.getConstraintKey()};
+	}
+
+	public LeftTupleSource getParentSource() {
+    	return null;
+    }
 	
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/LeftTupleSource.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/LeftTupleSource.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/LeftTupleSource.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -157,4 +157,8 @@
     public boolean isInUse() {
         return this.sink.size() > 0;
     }
+    
+    public abstract ConstraintKey[] getConstraintKeys();
+    
+    public abstract LeftTupleSource getParentSource();
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ModusPonensNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ModusPonensNode.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ModusPonensNode.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -77,7 +77,7 @@
         
         	    
         
-            EvalRecord premiseRecord = leftTuple.getRecord().clone();
+            EvalRecord premiseRecord = leftTuple.getRecord();
         	            
             Evaluation implEval = this.constraints.isSatisfiedCachedRight( memory.getContext(),
 					  leftTuple, 
@@ -94,7 +94,9 @@
     		
     		
         	EvalRecord mpRecord = new EvalRecord(this.id,factory.getModusPonensOp(),factory.getMergeStrategy(),factory.getNullHandlingStrategy());
-        	mpRecord.addEvaluation(premiseRecord.getOperands()[0]);
+        		Evaluation core = premiseRecord.getOperands().iterator().next();
+        		core.deleteObserver(premiseRecord);
+        	mpRecord.addEvaluation(core);        		
         	mpRecord.addEvaluation(implEval);
         	
         	

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/NotNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/NotNode.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/NotNode.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+import org.drools.RuntimeDroolsException;
 import org.drools.common.BetaConstraints;
 import org.drools.common.ImperfectFactHandle;
 import org.drools.common.InternalFactHandle;
@@ -330,4 +331,9 @@
 		// TODO Auto-generated method stub
 		
 	}
+
+	
+	public ConstraintKey[] getConstraintKeys() {
+		throw new RuntimeDroolsException("Crisp NOT should not be asked for CKs");
+	}
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -192,4 +192,7 @@
     public boolean isInUse() {
         return this.sink.size() > 0;
     }
+    
+    
+    public abstract ConstraintKey getConstraintKey();
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -513,7 +513,7 @@
     
     
     
-    protected ConstraintKey getConstraintKey() {
+    public ConstraintKey getConstraintKey() {
     	return new ConstraintKey("class","==",((ClassObjectType) this.objectType).getClassName() );
     }
     
@@ -552,4 +552,6 @@
 
         
 	}
+
+	
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/OperatorInstaller.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/OperatorInstaller.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/OperatorInstaller.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -4,6 +4,9 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Vector;
 
 
 import org.drools.RuntimeDroolsException;
@@ -39,15 +42,16 @@
 	}
 	
 	public EvaluationTemplate buildEvaluationTemplate(IDegreeCombiner operator, IMergeStrategy mergeStrat, INullHandlingStrategy nullStrat) {
+						
 		template = new CompositeEvaluationTemplate( this.getId(),
-													new DynamicConstraintKey(operator.getName()),
+													new DynamicConstraintKey(operator.getName()),													
 													null,
 													getArity(),
 													operator,
 													mergeStrat,
 													nullStrat
 													);
-			
+					
 		return template;
 	}
 	
@@ -136,11 +140,12 @@
 			PropagationContext context, InternalWorkingMemory workingMemory,
 			IDegreeFactory factory) {
 		EvalRecord record = leftTuple.getRecord();
-		int M = record.getOperands().length;
+		int M = record.getOperands().size();
 		int N = getArity();
 						
 		record.replace((CompositeEvaluation) getTemplate().spawn(N),N);
 		
+				
 		
 		this.getSinkPropagator().propagateAssertLeftTuple(
 				leftTuple, 
@@ -177,5 +182,12 @@
 	}
 
 	
+	public ConstraintKey[] getConstraintKeys() {
+		return new ConstraintKey[] {template.getConstraintKey()};
+	}
 	
+	public LeftTupleSource getParentSource() {
+    	return this.source;
+    }
+	
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -408,4 +408,15 @@
     }
 
 	
+    
+    
+    
+    
+    
+    
+	public ConstraintKey getConstraintKey() {
+		return new ConstraintKey("PROPQUEUE");
+	}
+
+	
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Rete.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Rete.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Rete.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -282,6 +282,11 @@
 	public IGammaNode getNode(ConstraintKey key) {
 		return this.constraintIndex.get(key);
 	}
+
 	
+	public ConstraintKey getConstraintKey() {
+		return new ConstraintKey("RETE");
+	}
 	
+	
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -283,10 +283,13 @@
                                                                            this.leftTuple,
                                                                            this.factHandle );
             ReteooRuleBase ruleBase = (ReteooRuleBase) workingMemory.getRuleBase();
-            ruleBase.assertObject( this.factHandle,
+            
+           
+            	ruleBase.assertObject( this.factHandle,
                                    this.factHandle.getObject(),
                                    context,
                                    workingMemory );
+           
         }
     }
 

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -342,6 +342,19 @@
     }
 
 	
+    
+    
+    
+	public ConstraintKey[] getConstraintKeys() {
+		return tupleSource.getConstraintKeys();
+	}
 
+
+	public ConstraintKey getConstraintKey() {		
+		return getConstraintKeys()[0];
+	}
+
 	
+
+	
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/RightTupleMemory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/RightTupleMemory.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/RightTupleMemory.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -2,7 +2,7 @@
 
 import org.drools.util.Iterator;
 
-public interface RightTupleMemory {
+public interface RightTupleMemory extends IOperandSet {
     public RightTuple getFirst(LeftTuple leftTuple);
 
     public RightTuple getLast(LeftTuple leftTuple);

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/builder/ImperfectGroupElementBuilder.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/builder/ImperfectGroupElementBuilder.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/builder/ImperfectGroupElementBuilder.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -9,11 +9,13 @@
 
 import org.drools.RuntimeDroolsException;
 import org.drools.common.BetaConstraints;
+import org.drools.common.EmptyBetaConstraints;
 import org.drools.common.TupleStartEqualsConstraint;
 import org.drools.degrees.factory.IDegreeFactory;
 import org.drools.degrees.operators.IDegreeCombiner;
 import org.drools.reteoo.AndOperatorInstaller;
 import org.drools.reteoo.ExistsNode;
+import org.drools.reteoo.ImperfectExistsNode;
 import org.drools.reteoo.ImperfectRuleBase;
 import org.drools.reteoo.JoinNode;
 import org.drools.reteoo.LeftInputAdapterNode;
@@ -379,7 +381,7 @@
             }
 
             final BetaConstraints betaConstraints = utils.createBetaNodeConstraint( context,
-                                                                                    context.getBetaconstraints(),
+                                                                                    context.getBetaconstraints(),            																		
                                                                                     false );
 
             Behavior[] behaviors = createBehaviorArray( context );
@@ -388,7 +390,7 @@
             // or as subnetwork join node as the context was set appropriatelly
             // in each case
             context.setTupleSource( (LeftTupleSource) utils.attachNode( context,
-                                                                        new ExistsNode( context.getNextId(),
+                                                                        new ImperfectExistsNode( context.getNextId(),
                                                                                         context.getTupleSource(),
                                                                                         context.getObjectSource(),
                                                                                         betaConstraints,

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/builder/ImperfectReteooRuleBuilder.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/builder/ImperfectReteooRuleBuilder.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/builder/ImperfectReteooRuleBuilder.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -50,7 +50,7 @@
         this.getUtils().addBuilder( Accumulate.class,
                                new AccumulateBuilder() );
         this.getUtils().addBuilder( Forall.class,
-                               new ImperfectForallBuilder() );
+                               new ForallBuilder() );
         this.getUtils().addBuilder( EntryPoint.class,
                                new EntryPointBuilder() );
     }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/AbstractHashTable.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/AbstractHashTable.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/AbstractHashTable.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -306,6 +306,20 @@
 
             return this.entry;
         }
+        
+        public boolean hasNext() {
+			if (this.entry != null && this.entry.getNext() != null)
+				return true;
+			
+			int row = this.row;			
+			    while ( this.table[++row] == null ) {                    
+                    if ( this.row == this.length ) {
+                        return false;
+                    }                    
+                    
+                }
+            return true;          
+		}
 
         //        /* (non-Javadoc)
         //         * @see org.drools.util.Iterator#next()

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/Iterator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/Iterator.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/Iterator.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -6,4 +6,5 @@
     extends
     Serializable {
     public Object next();
+    public boolean hasNext();
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/LeftTupleIndexHashTable.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/LeftTupleIndexHashTable.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/LeftTupleIndexHashTable.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -164,6 +164,22 @@
             this.row = -1;
             this.entry = null;
         }
+
+        //TODO: test...
+		public boolean hasNext() {
+			if (this.entry != null && this.entry.getNext() != null)
+				return true;
+			
+			int row = this.row;			
+			    while ( this.table[++row] == null ) {                    
+                    if ( this.row == this.length ) {
+                        return false;
+                    }                    
+                    
+                }
+            return true;          
+		}
+		
     }
 
     public LeftTuple[] toArray() {

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/LeftTupleList.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/LeftTupleList.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/LeftTupleList.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -139,6 +139,10 @@
                 return null;
             }
         }
+        
+        public boolean hasNext() {
+        	return this.current != null;
+        }
 
         public void remove() {
             // do nothing

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/LinkedList.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/LinkedList.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/LinkedList.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -303,6 +303,10 @@
             return node;
         }
 
+        public boolean hasNext() {
+        	return this.current != null;
+        }
+        
         public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
             list    = (LinkedList)in.readObject();
             current = (LinkedListNode)in.readObject();

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/RightTupleIndexHashTable.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/RightTupleIndexHashTable.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/RightTupleIndexHashTable.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -6,7 +6,11 @@
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.util.Collection;
+import java.util.LinkedList;
 
+import org.drools.reteoo.Evaluation;
+import org.drools.reteoo.ImperfectRightTuple;
 import org.drools.reteoo.LeftTuple;
 import org.drools.reteoo.RightTuple;
 import org.drools.reteoo.RightTupleMemory;
@@ -37,7 +41,7 @@
               index );
     }
 
-    public RightTupleIndexHashTable(final int capacity,
+    public RightTupleIndexHashTable(final int capacity, 
                                     final float loadFactor,
                                     final FieldIndex[] index) {
         super( capacity,
@@ -174,6 +178,20 @@
             this.row = -1;
             this.entry = null;
         }
+
+        public boolean hasNext() {
+			if (this.entry != null && this.entry.getNext() != null)
+				return true;
+			
+			int row = this.row;			
+			    while ( this.table[++row] == null ) {                    
+                    if ( this.row == this.length ) {
+                        return false;
+                    }                    
+                    
+                }
+            return true;          
+		}
     }
 
     public Entry[] toArray() {
@@ -354,4 +372,17 @@
 
         return builder.toString();
     }
+
+    
+    
+    public Collection<Evaluation> getArgs() {
+		LinkedList<Evaluation> ans = new LinkedList<Evaluation>();
+		Iterator iter = this.iterator();
+		while (iter.hasNext()) {
+			RightTuple rt = (RightTuple) iter.next();
+			if (rt instanceof ImperfectRightTuple)
+				ans.add(((ImperfectRightTuple) rt).getRecord());
+		}
+		return ans;
+	}
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/RightTupleList.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/RightTupleList.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/util/RightTupleList.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -3,7 +3,12 @@
  */
 package org.drools.util;
 
+import java.util.Collection;
+import java.util.LinkedList;
+
 import org.drools.common.InternalFactHandle;
+import org.drools.reteoo.Evaluation;
+import org.drools.reteoo.ImperfectRightTuple;
 import org.drools.reteoo.LeftTuple;
 import org.drools.reteoo.RightTuple;
 import org.drools.reteoo.RightTupleMemory;
@@ -150,6 +155,10 @@
                 return null;
             }
         }
+        
+        public boolean hasNext() {
+        	return this.current != null;
+        }
 
         public void remove() {
             // do nothing
@@ -206,4 +215,15 @@
 
         return builder.toString();
     }
+
+	public Collection<Evaluation> getArgs() {
+		LinkedList<Evaluation> ans = new LinkedList<Evaluation>();
+		Iterator iter = this.iterator();
+		while (iter.hasNext()) {
+			RightTuple rt = (RightTuple) iter.next();
+			if (rt instanceof ImperfectRightTuple)
+				ans.add(((ImperfectRightTuple) rt).getRecord());
+		}
+		return ans;
+	}
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -9,6 +9,7 @@
 
 import org.drools.Cheese;
 import org.drools.RuleBaseFactory;
+import org.drools.RuntimeDroolsException;
 import org.drools.base.ClassFieldAccessorCache;
 import org.drools.base.ClassFieldAccessorStore;
 import org.drools.base.ValueType;
@@ -621,5 +622,15 @@
 			// TODO Auto-generated method stub
 			
 		}
+		
+		public ConstraintKey getConstraintKey() {
+			return new ConstraintKey("MOCK");
+			
+		}
+
+		@Override
+		public ConstraintKey[] getConstraintKeys() {
+			return new ConstraintKey[] {new ConstraintKey("MOCK")};
+		}
     }
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/test/java/org/drools/reteoo/MockLeftTupleSink.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/test/java/org/drools/reteoo/MockLeftTupleSink.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/test/java/org/drools/reteoo/MockLeftTupleSink.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -182,7 +182,14 @@
     }
 
 	
+	public ConstraintKey[] getConstraintKeys() {
+		return new ConstraintKey[] {new ConstraintKey("MOCK")};
+	}
 
+	public LeftTupleSource getParentSource() {
+		return null;
+    }
+
 	
 
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/test/java/org/drools/reteoo/MockObjectSource.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/test/java/org/drools/reteoo/MockObjectSource.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/test/java/org/drools/reteoo/MockObjectSource.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -103,4 +103,9 @@
 
     }
 
+	
+	public ConstraintKey getConstraintKey() {
+		return new ConstraintKey("MOCK");
+	}
+
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/test/java/org/drools/reteoo/MockTupleSource.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/test/java/org/drools/reteoo/MockTupleSource.java	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/test/java/org/drools/reteoo/MockTupleSource.java	2009-04-20 23:16:43 UTC (rev 26163)
@@ -70,5 +70,13 @@
         // TODO Auto-generated method stub
         
     }
+    
+    public ConstraintKey[] getConstraintKeys() {
+		return new ConstraintKey[] {new ConstraintKey("MOCK")};
+	}
+    
+    public LeftTupleSource getParentSource() {
+    	return null;
+    }
 
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/chance/FuzzyTest1.drl
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/chance/FuzzyTest1.drl	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/chance/FuzzyTest1.drl	2009-04-20 23:16:43 UTC (rev 26163)
@@ -24,6 +24,8 @@
 		drools.inject(new Fan(),"org.drools.examples.chance.Fan.speed","seems","stop");
 end
 
+
+
 rule "Hot"
 	when
 		$r : Room( temperature hot[] 0)
@@ -35,6 +37,10 @@
 
 
 
+
+
+
+
 rule "Fan1" 
 	when 
 		$f : Fan( speed seems[] "fast")
@@ -43,6 +49,7 @@
 		writer.write("\n\n ********** Set speed to fast ****** \n\n" + drools.getConsequenceDegree());
 end
 
+
 rule "Fan2" 
 	when 
 		$f : Fan( speed seems[] "slow")
@@ -51,6 +58,8 @@
 		writer.write("\n\n ********** Set speed to slow ****** \n\n" + drools.getConsequenceDegree());
 end
 
+
+
 rule "Fan3" 
 	when 
 		$f : Fan( speed seems[] "stop")

Modified: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/chance/HelloWorld.drl
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/chance/HelloWorld.drl	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/chance/HelloWorld.drl	2009-04-20 23:16:43 UTC (rev 26163)
@@ -16,7 +16,7 @@
 		Trigger();		
 	then
 		writer.write("\n A Message with status = HELLO will hold the message Hello!");
-		drools.inject(new Message(Message.HELLO),"org.drools.examples.Test$Message.message","String ==","Hello!");
+		drools.inject(new Message(Message.HELLO),"org.drools.examples.chance.Test$Message.message","String ==","Hello!");
 end
 
 
@@ -35,7 +35,7 @@
 		
 		//FIXME Until lexical analysis is done properly, args must be defined in two steps
 		Object[] args = new Object[] { p , b }; 
-		drools.inject(args,"org.drools.examples.Test$Book.owner","Object ==","$p");
+		drools.inject(args,"org.drools.examples.chance.Test$Book.owner","Object ==","$p");
 end
 
 

Modified: labs/jbossrules/branches/DroolsChance/drools-guvnor/src/main/java/org/drools/guvnor/public/version.txt
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-guvnor/src/main/java/org/drools/guvnor/public/version.txt	2009-04-20 18:27:03 UTC (rev 26162)
+++ labs/jbossrules/branches/DroolsChance/drools-guvnor/src/main/java/org/drools/guvnor/public/version.txt	2009-04-20 23:16:43 UTC (rev 26163)
@@ -1 +1 @@
-5.0.0.SNAPSHOT 25662:26123
\ No newline at end of file
+5.0.0.SNAPSHOT 26142
\ No newline at end of file




More information about the jboss-svn-commits mailing list