[jboss-svn-commits] JBL Code SVN: r21493 - in labs/jbossrules/branches/uncDrools5x: drools-compiler/src/main/resources/META-INF and 11 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Aug 12 18:48:37 EDT 2008


Author: dsotty
Date: 2008-08-12 18:48:36 -0400 (Tue, 12 Aug 2008)
New Revision: 21493

Modified:
   labs/jbossrules/branches/uncDrools5x/drools-compiler/.classpath
   labs/jbossrules/branches/uncDrools5x/drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf
   labs/jbossrules/branches/uncDrools5x/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
   labs/jbossrules/branches/uncDrools5x/drools-core/.classpath
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/RuleBaseFactory.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/WorkingMemoryEntryPoint.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/ClassObjectType.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/AbstractFactHandleFactory.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/BetaConstraints.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InstanceEqualsConstraint.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InstanceNotEqualsConstraint.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InternalWorkingMemoryActions.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/NamedEntryPoint.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/ObjectTypeConfigurationRegistry.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/TupleStartEqualsConstraint.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/facttemplates/FactTemplateObjectType.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/BetaNode.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EmptyLeftTupleSinkAdapter.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EmptyObjectSinkAdapter.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/FactTemplateTypeConf.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LIANodePropagation.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LeftTupleSinkPropagator.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/NotNode.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectSinkPropagator.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/Rete.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ReteooFactHandleFactory.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/SingleObjectSinkAdapter.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/AndCompositeRestriction.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/AndConstraint.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/OrCompositeRestriction.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/OrConstraint.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/VariableConstraint.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/AlphaNodeFieldConstraint.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/BetaNodeFieldConstraint.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/FactHandleFactory.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/ObjectType.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/Restriction.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/reteoo/MockObjectSink.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/spi/MockConstraint.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/spi/MockObjectType.java
Log:
New branch for uncertainty support in 5.x

Modified: labs/jbossrules/branches/uncDrools5x/drools-compiler/.classpath
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-compiler/.classpath	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-compiler/.classpath	2008-08-12 22:48:36 UTC (rev 21493)
@@ -14,5 +14,6 @@
 	<classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
 	<classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
 	<classpathentry kind="var" path="M2_REPO/org/antlr/gunit/1.0.1/gunit-1.0.1.jar"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/Essence"/>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>

Modified: labs/jbossrules/branches/uncDrools5x/drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf	2008-08-12 22:48:36 UTC (rev 21493)
@@ -29,4 +29,8 @@
 drools.evaluator.comparable = org.drools.base.evaluators.ComparableEvaluatorsDefinition
 drools.evaluator.set = org.drools.base.evaluators.SetEvaluatorsDefinition
 drools.evaluator.matches = org.drools.base.evaluators.MatchesEvaluatorsDefinition
-drools.evaluator.soundslike = org.drools.base.evaluators.SoundslikeEvaluatorsDefinition
\ No newline at end of file
+drools.evaluator.soundslike = org.drools.base.evaluators.SoundslikeEvaluatorsDefinition
+
+drools.evaluator.young = org.drools.base.evaluators.YoungEvaluatorDefinition
+drools.evaluator.heavy = org.drools.base.evaluators.HeavyEvaluatorDefinition
+drools.evaluator.nearly = org.drools.base.evaluators.NearlyEvaluatorDefinition

Modified: labs/jbossrules/branches/uncDrools5x/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -3,6 +3,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -41,6 +42,7 @@
 import org.drools.process.instance.timer.TimerManager;
 import org.drools.reteoo.LIANodePropagation;
 import org.drools.reteoo.ObjectTypeConf;
+import org.drools.rule.ConstraintSignature;
 import org.drools.rule.EntryPoint;
 import org.drools.rule.Rule;
 import org.drools.rule.TimeMachine;
@@ -55,6 +57,8 @@
 import org.drools.time.TimerService;
 import org.drools.util.ObjectHashMap;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class MockWorkingMemory implements InternalWorkingMemory {
 
 	List<Object> facts = new ArrayList<Object>();
@@ -546,4 +550,12 @@
         return null;
     }
 
+	@Override
+	public FactHandle insert(Object object,
+			Hashtable<ConstraintSignature, IUncertainDegree> priors)
+			throws FactException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/.classpath
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/.classpath	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/.classpath	2008-08-12 22:48:36 UTC (rev 21493)
@@ -1,12 +1,14 @@
-<classpath>
-  <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
-  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
-  <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
-</classpath>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+	<classpathentry excluding="**/*.java" kind="src" output="target/test-classes" path="src/test/resources"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar"/>
+	<classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar"/>
+	<classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/Essence"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/RuleBaseFactory.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/RuleBaseFactory.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/RuleBaseFactory.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -56,6 +56,12 @@
             case RuleBase.RETEOO :
                 return new org.drools.reteoo.ReteooRuleBase( UUIDGenerator.getInstance().generateRandomBasedUUID().toString(),
                                                              config );
+                
+            
+            case IUncertainRuleBase.RETEOO_UNCERTAIN :            	            	
+                return new org.drools.reteoo.UncertainReteooRuleBase( UUIDGenerator.getInstance().generateRandomBasedUUID().toString(),
+                        config );
+            
             default :
                 throw new IllegalArgumentException( "Unknown engine type: " + type );
 

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/WorkingMemoryEntryPoint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/WorkingMemoryEntryPoint.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/WorkingMemoryEntryPoint.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -18,7 +18,13 @@
 package org.drools;
 
 import java.io.Serializable;
+import java.util.Hashtable;
 
+import org.drools.rule.ConstraintSignature;
+import org.drools.spi.Constraint;
+
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * An interface for instances that allow handling of entry-point-scoped
  * facts
@@ -39,6 +45,11 @@
      */
     FactHandle insert(Object object) throws FactException;
     
+
+    
+        
+    FactHandle insert(Object object, Hashtable<ConstraintSignature,IUncertainDegree> priors) throws FactException;
+    
     /**
      * Insert a fact registering JavaBean <code>PropertyChangeListeners</code>
      * on the Object to automatically trigger <code>update</code> calls
@@ -58,7 +69,47 @@
     FactHandle insert(Object object,
                             boolean dynamic) throws FactException;
     
+    
+    
     /**
+     * Assert a fact stating certain properties.
+     * 
+     * @param object
+     *            The fact object.
+     * 
+     * @return The new fact-handle associated with the object.
+     * 
+     * @throws FactException
+     *             If a RuntimeException error occurs.
+     */
+    //FactHandle insert(Object object, Hashtable<ConstraintSignature, IUncertainDegree> prems) throws FactException;
+    
+    
+    
+    /**
+     * Assert a fact stating certain properties.
+     * Logical assertion allows information to be combined with the existing one
+     * @param object
+     *            The fact object.
+     * 
+     * @return The new fact-handle associated with the object.
+     * 
+     * @throws FactException
+     *             If a RuntimeException error occurs.
+     */
+    //FactHandle insertLogical(Object object, Hashtable<ConstraintSignature, IUncertainDegree> prems) throws FactException;
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    /**
      * Retract a fact.
      * 
      * @param handle

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/ClassObjectType.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/ClassObjectType.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/ClassObjectType.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -18,6 +18,9 @@
 
 import org.drools.spi.ObjectType;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 import java.io.ObjectInput;
 import java.io.IOException;
 import java.io.ObjectOutput;
@@ -187,5 +190,18 @@
     public int hashCode() {
         return this.objectTypeClass.hashCode();
     }
+	/* (non-Javadoc)
+	 * @see org.drools.spi.ObjectType#isAn(java.lang.Object)
+	 */
+	public IUncertainDegree isAn(Object object, IDegreeFactory factory) {	
+		// TODO: May/Should use instance info --> see ontologies??
+		return factory.fromBoolean(isAssignableFrom(object.getClass()));
+	}
+	/* (non-Javadoc)
+	 * @see org.drools.spi.ObjectType#isSubClass(java.lang.Class)
+	 */
+	public IUncertainDegree isSubClass(Class clazz, IDegreeFactory factory) {
+		return factory.fromBoolean(matchesClass(clazz));
+	}
 
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -20,17 +20,23 @@
 import org.drools.FactHandle;
 import org.drools.WorkingMemory;
 import org.drools.common.InternalWorkingMemoryActions;
+import org.drools.reteoo.UncertainAgendaItem;
+import org.drools.rule.ConstraintSignature;
 import org.drools.rule.Declaration;
 import org.drools.rule.GroupElement;
 import org.drools.rule.Rule;
 import org.drools.spi.Activation;
+import org.drools.spi.Constraint;
 import org.drools.spi.KnowledgeHelper;
 import org.drools.spi.Tuple;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 import java.io.Externalizable;
 import java.io.IOException;
 import java.io.ObjectOutput;
 import java.io.ObjectInput;
+import java.util.Hashtable;
 
 public class DefaultKnowledgeHelper
     implements
@@ -229,4 +235,32 @@
     public void halt() {
         this.workingMemory.halt();
     }
+    
+    
+    public IUncertainDegree getActivationDegree() {
+    	if (this.activation instanceof UncertainAgendaItem) {
+    		return ((UncertainAgendaItem) activation).getDegree();
+    	}
+    	return null;
+    }
+	/* (non-Javadoc)
+	 * @see org.drools.spi.KnowledgeHelper#insert(java.lang.Object, java.util.Hashtable)
+	 */
+	public void insert(Object object,
+			Hashtable<ConstraintSignature, IUncertainDegree> priors)
+			throws FactException {
+		this.workingMemory.insert(object, priors);
+		
+	}
+	/* (non-Javadoc)
+	 * @see org.drools.spi.KnowledgeHelper#insertLogical(java.lang.Object, java.util.Hashtable)
+	 */
+	public void insertLogical(Object object,
+			Hashtable<ConstraintSignature, IUncertainDegree> priors)
+			throws FactException {
+		this.workingMemory.insertLogical(object, priors, this.rule, this.activation);
+		
+	}
+    
+    
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+import java.util.Hashtable;
 import java.util.List;
 
 import org.drools.FactException;
@@ -23,14 +24,19 @@
 import org.drools.QueryResults;
 import org.drools.WorkingMemory;
 import org.drools.common.InternalWorkingMemoryActions;
+import org.drools.reteoo.UncertainAgendaItem;
+import org.drools.rule.ConstraintSignature;
 import org.drools.rule.Declaration;
 import org.drools.rule.GroupElement;
 import org.drools.rule.Rule;
 import org.drools.spi.Activation;
 import org.drools.spi.AgendaGroup;
+import org.drools.spi.Constraint;
 import org.drools.spi.KnowledgeHelper;
 import org.drools.spi.Tuple;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class SequentialKnowledgeHelper
     implements
     KnowledgeHelper {
@@ -179,4 +185,33 @@
     public void halt() {
         this.workingMemory.halt();
     }    
+    
+    
+    public IUncertainDegree getActivationDegree() {
+    	if (this.activation instanceof UncertainAgendaItem) {
+    		return ((UncertainAgendaItem) activation).getDegree();
+    	}
+    	return null;
+    }
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.KnowledgeHelper#insert(java.lang.Object, java.util.Hashtable)
+	 */
+	public void insert(Object object,
+			Hashtable<ConstraintSignature, IUncertainDegree> priors)
+			throws FactException {
+				
+	}
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.KnowledgeHelper#insertLogical(java.lang.Object, java.util.Hashtable)
+	 */
+	public void insertLogical(Object object,
+			Hashtable<ConstraintSignature, IUncertainDegree> priors)
+			throws FactException {
+	
+		
+	}
+    
+    
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/AbstractFactHandleFactory.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/AbstractFactHandleFactory.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/AbstractFactHandleFactory.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -20,6 +20,7 @@
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.util.Hashtable;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
 
@@ -27,8 +28,12 @@
 import org.drools.marshalling.MarshallerReaderContext;
 import org.drools.marshalling.MarshallerWriteContext;
 import org.drools.reteoo.ObjectTypeConf;
+import org.drools.rule.ConstraintSignature;
+import org.drools.spi.Constraint;
 import org.drools.spi.FactHandleFactory;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public abstract class AbstractFactHandleFactory
     implements
     FactHandleFactory  {
@@ -75,7 +80,22 @@
                               conf,
                               workingMemory );
     }
+    
+    
+    public IUncertainInternalFactHandle newUncertainFactHandle(Object object, Hashtable<ConstraintSignature, IUncertainDegree> priors, ObjectTypeConf conf, InternalWorkingMemory workingMemory ) {
+    	return newUncertainFactHandle(	this.id.incrementAndGet(),
+                						object,
+                						priors,
+                						conf,
+                						workingMemory );
+    }
 
+    
+    
+    public abstract IUncertainInternalFactHandle newUncertainFactHandle(int id, Object object, Hashtable<ConstraintSignature, IUncertainDegree> priors, ObjectTypeConf conf, InternalWorkingMemory workingMemory );
+
+    
+
     /* (non-Javadoc)
      * @see org.drools.reteoo.FactHandleFactory#newFactHandle(long)
      */

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -24,6 +24,7 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
@@ -38,6 +39,7 @@
 import org.drools.Agenda;
 import org.drools.FactException;
 import org.drools.FactHandle;
+import org.drools.IUncertainRuleBase;
 import org.drools.ObjectFilter;
 import org.drools.Otherwise;
 import org.drools.QueryResults;
@@ -74,6 +76,7 @@
 import org.drools.reteoo.LIANodePropagation;
 import org.drools.reteoo.LeftTuple;
 import org.drools.reteoo.ObjectTypeConf;
+import org.drools.rule.ConstraintSignature;
 import org.drools.rule.Declaration;
 import org.drools.rule.EntryPoint;
 import org.drools.rule.Rule;
@@ -82,6 +85,7 @@
 import org.drools.spi.AgendaFilter;
 import org.drools.spi.AgendaGroup;
 import org.drools.spi.AsyncExceptionHandler;
+import org.drools.spi.Constraint;
 import org.drools.spi.FactHandleFactory;
 import org.drools.spi.GlobalResolver;
 import org.drools.spi.PropagationContext;
@@ -89,6 +93,8 @@
 import org.drools.time.TimerService;
 import org.drools.time.TimerServiceFactory;
 
+import uncertainty.truthvals.IUncertainDegree;
+ 
 /**
  * Implementation of <code>WorkingMemory</code>.
  * 
@@ -676,6 +682,14 @@
         return this.tms;
     }
 
+    
+    
+    
+    
+    
+    
+    
+    
     /**
      * @see WorkingMemory
      */
@@ -953,6 +967,403 @@
                                                            this );
     }
 
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    /************************************************************************************/
+    
+    /*	Uncertainty handling methods */
+    /*  Uncertain objects have a prior table associated */
+    
+    
+    /**
+     * Basic insertion
+     */
+    public FactHandle insert(final Object object, Hashtable<ConstraintSignature, IUncertainDegree> priors) throws FactException {
+    	
+    	if (priors == null);
+    		priors = new Hashtable<ConstraintSignature, IUncertainDegree>();
+        return insert( EntryPoint.DEFAULT,
+        			   object,
+                       0,
+                       false,
+                       false,
+                       null,
+                       null,
+                       priors);
+    }
+    
+    /**
+     * Basic logical insertion
+     * 
+     * @param object
+     * @param priors
+     * @return
+     * @throws FactException
+     */
+    public FactHandle insertLogical(final Object object, Hashtable<ConstraintSignature, IUncertainDegree> priors, Rule rule, Activation activation) throws FactException {
+        return insert( EntryPoint.DEFAULT,
+        			   object,
+                       0,
+                       false,
+                       true,
+                       rule,
+                       activation,
+                       priors);
+    }
+    
+    
+    public FactHandle insertLogical(Object object,
+			long duration,
+			boolean dynamic, Rule rule, Activation activation,
+			Hashtable<ConstraintSignature, IUncertainDegree> priors)
+			throws FactException {
+    	
+    	return this.insert( EntryPoint.DEFAULT,
+                object,
+                0,
+                dynamic,
+                true,
+                rule,
+                activation,
+                priors);
+		
+	}
+    
+   
+    
+    
+    
+    
+    
+    /**
+     * Object insertion with logical uncertain priors
+     * 
+     * @param entryPoint
+     * @param object
+     * @param duration
+     * @param dynamic
+     * @param logical
+     * @param rule
+     * @param activation
+     * @param priors
+     * @return
+     * @throws FactException
+     */
+    protected FactHandle insert(final EntryPoint entryPoint,
+    		final Object object,
+    		final long duration,
+    		final boolean dynamic,
+    		boolean logical,
+    		final Rule rule,
+    		final Activation activation,
+    		Hashtable<ConstraintSignature, IUncertainDegree> priors) throws FactException {
+
+    	System.out.println("AbstractWorkingMemory : Uncertain  State / Justify Ordeal");
+
+    	if ( object == null ) {
+//  		you cannot assert a null object
+    		return null;
+    	}
+
+    	ObjectTypeConf typeConf = this.typeConfReg.getUncertainObjectTypeConf( this.entryPoint,
+                 object );
+
+    	InternalFactHandle handle = null;
+
+    	//TODO : Not really supported yet...
+    	if ( isSequential() ) {
+    		System.out.println("AWM :Sequential mode, buggy. TODO");
+    		handle = this.handleFactory.newUncertainFactHandle( object,
+    				priors,
+    				typeConf,    				
+    				this );
+    		this.objectStore.addHandle( handle, object );
+    		insert( handle,
+                    object,
+                    rule,
+                    activation,
+                    typeConf );
+    		return handle;
+    	}
+    	
+    	
+    	
+    	if ( dynamic ) {
+			addPropertyChangeListener( object );
+		}
+    	
+    	
+    	
+    	// The most sensible thing is to start from scratch again...    	   
+
+    	try {
+    		this.lock.lock();
+    			// check for IDENTITY
+    		handle = (InternalFactHandle) this.objectStore.getHandleForObject(object);
+    		
+    		
+    		if ( this.maintainTms ) {
+
+    			EqualityKey key; 
+
+    			if ( handle != null ) {
+    				// There is an ID object in memory
+    				key = handle.getEqualityKey();
+
+    				if ( !logical ) {
+    					// This is a STATE. Regardless of the prev state, priors are reset and object
+    					// is restated.
+    					if (key.getStatus() == EqualityKey.JUSTIFIED)
+    						this.tms.removeLogicalDependencies( handle );
+    					
+    					key.setStatus( EqualityKey.STATED );   
+    					//Restate with true overrides following evaluations.
+    					//Starting again from zero, evaluators must contribute 
+    					System.out.println("AWM : State existing-by-ID statement, which is overridden");
+    					return this.reAssert(entryPoint, handle, rule, activation, typeConf, priors, false, false);    					
+    					
+    				} else {
+    					// This is a JUSTIFY.     					
+    					if  (key.getStatus() == EqualityKey.STATED) {
+    						//If the object is stated, the justification is ignored
+    						System.out.println("AWM : Justify existing-by-ID statement, ignored");
+    						return handle;
+    					} else {
+    						//TODO: Priors should enter the dependency, so to be undone
+    						if (activation != null) {
+    							this.tms.addLogicalDependency( handle,
+    									activation,
+    									activation.getPropagationContext(),
+    									rule );
+    						}
+    						//Restate with false merges info...
+    						// Evaluators contrib already in, so they must be inhibited
+    						System.out.println("AWM : Justify existing-by-ID justify, merge but not reeval");
+    						return this.reAssert(entryPoint, handle, rule, activation, typeConf,priors, true, true);
+    					}
+    				}
+    				
+    			} else {
+    				// Ok, no ID object in memory.
+    				// Maybe there is an EQUAL object:
+    				key = this.tms.get(object);
+    				if (key != null) {
+    					//Yes, there is an EQ object
+    					
+    					if (logical) {
+    						
+    						// Justify an EQUAL obj    						
+    						if ( key.getStatus() == EqualityKey.JUSTIFIED ) {
+        						//TODO : again, deps should include priors
+        						this.tms.addLogicalDependency( key.getFactHandle(),
+        								activation,
+        								activation.getPropagationContext(),
+        								rule );
+        						//Merge new info, but inhibit evaluators
+        						System.out.println("AWM : Justify existing-by-EQ justify, merge but not reeval");
+        						return reAssert(entryPoint, key.getFactHandle(), rule, activation,typeConf, priors,true,true);
+        						//return key.getFactHandle();
+        					} else {
+        						// Can't justify a stated obj, do nothing
+        						System.out.println("AWM : Justify existing-by-EQ statement, do nothing");
+        						return key.getFactHandle();
+        					}
+    						
+    					} else {
+    						
+    						//STATE about an EQUAL obj
+    						
+    						if ( key.getStatus() == EqualityKey.STATED ) {
+    							// The obj was already stated, so reset that other object.
+    							// THIS IS A DIFFERENCE WITH THE USUAL SEMANTICS 
+    							System.out.println("AWM : State existing-by-EQ statement, override with values and new eval");
+    							return reAssert(entryPoint, key.getFactHandle(), rule, activation,typeConf, priors,false,false);
+    						} else {
+    							// Stating an existing equal obj, which is only justified.
+    							// Update that object. 
+    							this.tms.removeLogicalDependencies( key.getFactHandle() );
+    	    					
+    	    					key.setStatus( EqualityKey.STATED );   
+    	    					//Restate with true overrides following evaluations.
+    	    					//Starting again from zero, evaluators must contribute 
+    	    					System.out.println("AWM : State existing-by-EQ justify, cleanup and override");
+    	    					return this.reAssert(entryPoint, key.getFactHandle(), rule, activation, typeConf,priors, false, false);  
+    						}
+    					
+    						
+    					}
+    					
+    					    					
+    				} else {
+    					// Not even an EQ, this is the first time an object enters the mem
+    					//Alpha-evaluators must not be inhibited
+    					handle = this.handleFactory.newUncertainFactHandle( object,
+    							null,
+        						typeConf,
+        						this );
+        				this.objectStore.addHandle( handle, object );
+
+        				key = new EqualityKey( handle );
+        				handle.setEqualityKey( key );
+        				this.tms.put( key );
+        				if ( !logical ) {
+        					key.setStatus( EqualityKey.STATED );
+        					System.out.println("AWM : Brand new statement, eval everything");
+        					return reAssert(entryPoint, handle, rule, activation,typeConf, priors,false,false);
+        				} else {
+        					key.setStatus( EqualityKey.JUSTIFIED );
+        					if (activation != null && rule != null)
+        							this.tms.addLogicalDependency( handle,
+        							activation,
+        							activation.getPropagationContext(),
+        							rule );
+        					System.out.println("AWM : Brand new justification, eval everything");
+        					return reAssert(entryPoint, handle, rule, activation ,typeConf,priors,false,false);
+        				}
+    					
+    				}
+    			}
+    			
+    			
+    			
+    		} else {
+    			
+    			// OK, here no TMS:
+    			// Logical insertions are ignored, statement exists already.
+    			if (logical) {
+    				System.out.println("AWM : No TMS, logical insertion ignored");
+    				return null;
+    			}
+    			
+    			if ( handle != null ) {
+    				// Object exists, priors are updated just later
+    				//TODO: Check: Obj should be retracted before being inserted again??
+    				System.out.println("AWM : No TMS, stated existing object, nothing done");
+    				return handle;
+    			} else {
+    			// No object exists, so we just create. Priors will be set just later
+    				handle = this.handleFactory.newUncertainFactHandle( object,
+    					null,		//priors
+    					typeConf,
+    					this );
+    				this.objectStore.addHandle( handle, object );
+    				//Nothing to merge with, let the evaluators play
+    				System.out.println("AWM : No TMS, new insertion is evaluated");
+    				return reAssert(entryPoint, handle, rule, activation,typeConf,priors,false,false);
+    			}
+
+    		}    		    		    		    	
+    	
+		
+
+    	} finally {
+    		this.lock.unlock();
+    	}
+    	
+    	
+    }  
+    
+    
+    
+    
+    
+    protected InternalFactHandle reAssert(
+    		EntryPoint entryPoint,
+    		InternalFactHandle handle, 
+    		Rule rule,
+    		Activation activation,
+    		ObjectTypeConf typeConf,
+    		Hashtable<ConstraintSignature, IUncertainDegree> priors, 
+    		boolean mergeWithExisting, boolean inhibitEvaluators) {
+    	
+    	    IUncertainInternalFactHandle uHandle = (IUncertainInternalFactHandle) handle;
+    	    if (mergeWithExisting) 
+    	    	uHandle.mergePriors(priors, ((IUncertainRuleBase) this.getRuleBase()).getTruthFactory());
+    	    else 
+    	    	uHandle.setPriors(priors);
+    	    
+    	    
+    	    uHandle.setOverruling(inhibitEvaluators);
+    	    
+	   		insertUncertain( entryPoint,
+				handle,
+				handle.getObject(),
+				rule,
+				activation,
+				typeConf
+				);
+	   		
+    	return handle;
+    }
+    
+    
+
+    protected void insertUncertain(final EntryPoint entryPoint,
+    		final InternalFactHandle handle,
+    		final Object object,
+    		final Rule rule,
+    		final Activation activation,
+    		ObjectTypeConf typeConf
+    		) {
+    	this.ruleBase.executeQueuedActions();
+
+    	if ( activation != null ) {
+//  		release resources so that they can be GC'ed
+    		activation.getPropagationContext().releaseResources();
+    	}
+    	final PropagationContext propagationContext = new PropagationContextImpl( getNextPropagationIdCounter(),
+    			PropagationContext.ASSERTION,
+    			rule,
+    			(activation == null) ? null : (LeftTuple) activation.getTuple(),
+    			handle,
+    			this.agenda.getActiveActivations(),
+    			this.agenda.getDormantActivations(),
+    			entryPoint );
+    	
+    	
+    	System.out.println("AbstractWorkingMemory : Wrapped a to-be-inserted obj with a handle");
+    	System.out.println("AbstractWorkingMemory : New insert method uses uncValues");
+
+        this.entryPointNode.assertObject( handle,
+                                          propagationContext,
+                                          typeConf,
+                                          this );
+
+        executeQueuedActions();
+    
+    	
+
+    	this.workingMemoryEventSupport.fireObjectInserted( propagationContext,
+    			handle,
+    			object,
+    			this );
+    }
+    
+    
+    
+    /************************************************************************************/
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
     protected void addPropertyChangeListener(final Object object) {
         try {
             final Method method = object.getClass().getMethod( "addPropertyChangeListener",

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/BetaConstraints.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/BetaConstraints.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/BetaConstraints.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -6,6 +6,9 @@
 import org.drools.rule.ContextEntry;
 import org.drools.util.LinkedList;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 import java.io.Externalizable;
 
 public interface BetaConstraints
@@ -27,7 +30,16 @@
 
     public boolean isAllowedCachedRight(ContextEntry[] context,
                                         LeftTuple tuple);
+    
+    
+    public IUncertainDegree matchesCachedLeft(ContextEntry[] context,
+            InternalFactHandle handle, IDegreeFactory factory);
 
+    public IUncertainDegree matchesCachedRight(ContextEntry[] context,
+             LeftTuple tuple, IDegreeFactory factory);
+
+    
+
     public LinkedList getConstraints();
 
     public boolean isIndexed();

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -21,6 +21,7 @@
 import java.io.ObjectOutput;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Vector;
 
 import org.drools.RuleBaseConfiguration;
 import org.drools.base.evaluators.Operator;
@@ -40,6 +41,9 @@
 import org.drools.util.RightTupleList;
 import org.drools.util.AbstractHashTable.FieldIndex;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 public class DefaultBetaConstraints
     implements
     BetaConstraints {
@@ -304,4 +308,60 @@
         return this.constraints.equals( other.constraints );
     }
 
+    
+    
+    
+    /* (non-Javadoc)
+     * @see org.drools.common.BetaNodeConstraints#isAllowedCachedLeft(java.lang.Object)
+     */
+    public IUncertainDegree matchesCachedLeft(final ContextEntry[] context,
+                                       final InternalFactHandle handle, 
+                                       IDegreeFactory factory) {
+        // skip the indexed constraints
+        LinkedListEntry entry = (LinkedListEntry) findNode( this.indexed+1 );
+
+        int i = 1;
+        Vector<IUncertainDegree> degs = new Vector<IUncertainDegree>();
+        while ( entry != null ) {
+
+        	BetaNodeFieldConstraint constraint = (BetaNodeFieldConstraint) entry.getObject();
+        	degs.add(constraint.matchesCachedLeft(context[this.indexed + i], handle, factory));
+
+            entry = (LinkedListEntry) entry.getNext();
+            i++;
+        }
+        
+        if (degs.size() == 0) return factory.True();
+        IUncertainDegree[] ans = new IUncertainDegree[degs.size()]; 
+        return factory.getAndOperator().eval(degs.toArray(ans));
+        
+        
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.common.BetaNodeConstraints#isAllowedCachedRight(org.drools.reteoo.ReteTuple)
+     */
+    public IUncertainDegree matchesCachedRight(final ContextEntry[] context,
+                                        		final LeftTuple tuple,
+                                        		IDegreeFactory factory) {
+    	// skip the indexed constraints
+        LinkedListEntry entry = (LinkedListEntry) findNode( this.indexed+1 );
+
+        int i = 1;
+        Vector<IUncertainDegree> degs = new Vector<IUncertainDegree>();
+        while ( entry != null ) {
+
+        	BetaNodeFieldConstraint constraint = (BetaNodeFieldConstraint) entry.getObject();
+        	degs.add(constraint.matchesCachedRight(tuple, context[this.indexed + i], factory));
+
+            entry = (LinkedListEntry) entry.getNext();
+            i++;
+        }
+        
+        if (degs.size() == 0) return factory.True();
+        IUncertainDegree[] ans = new IUncertainDegree[degs.size()]; 
+        return factory.getAndOperator().eval(degs.toArray(ans));
+    }
+    
+    
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -33,6 +33,9 @@
 import org.drools.util.LeftTupleList;
 import org.drools.util.LeftTupleIndexHashTable;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
@@ -299,5 +302,38 @@
     public ContextEntry[] createContext() {
         return new ContextEntry[]{this.constraint0.createContextEntry(), this.constraint1.createContextEntry()};
     }
+    
+    
+    
+    
+    
+    
+    
+    
+	/* (non-Javadoc)
+	 * @see org.drools.common.BetaConstraints#matchesCachedLeft(org.drools.rule.ContextEntry[], org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedLeft(ContextEntry[] context,
+			InternalFactHandle handle, IDegreeFactory factory) {
+				
+		
+		IUncertainDegree[] args = new IUncertainDegree[2];
+			args[0] = this.indexed0 ? factory.True() : this.constraint0.matchesCachedLeft( context[0], handle, factory);
+			args[1] = this.indexed1 ? factory.True() : this.constraint1.matchesCachedLeft( context[1], handle, factory);
+		return factory.getAndOperator().eval(args);
 
+	}
+	/* (non-Javadoc)
+	 * @see org.drools.common.BetaConstraints#matchesCachedRight(org.drools.rule.ContextEntry[], org.drools.reteoo.LeftTuple, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedRight(ContextEntry[] context,
+			LeftTuple tuple, IDegreeFactory factory) {
+		
+		IUncertainDegree[] args = new IUncertainDegree[2];
+			args[0] = this.constraint0.matchesCachedRight( tuple, context[0], factory);
+			args[1] = this.constraint1.matchesCachedRight( tuple, context[1], factory);
+		
+		return factory.getAndOperator().eval(args);
+	}
+
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -25,6 +25,9 @@
 import org.drools.util.LinkedList;
 import org.drools.util.LeftTupleList;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
@@ -143,5 +146,27 @@
     public ContextEntry[] createContext() {
         return EMPTY;
     }
+    
+    
+    
+    
 
+	
+
+	/**
+	 */
+	public IUncertainDegree matchesCachedLeft(ContextEntry[] context,
+			InternalFactHandle handle, IDegreeFactory factory) {
+		return factory.True();
+	}
+
+	/**
+	 * 
+	 */
+	public IUncertainDegree matchesCachedRight(ContextEntry[] context,
+			LeftTuple tuple, IDegreeFactory factory) {
+		return factory.True();
+		
+	}
+
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InstanceEqualsConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InstanceEqualsConstraint.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InstanceEqualsConstraint.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -22,6 +22,9 @@
 import org.drools.rule.Declaration;
 import org.drools.spi.BetaNodeFieldConstraint;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 import java.io.ObjectInput;
 import java.io.IOException;
 import java.io.ObjectOutput;
@@ -177,4 +180,24 @@
     public ConstraintType getType() {
         return ConstraintType.BETA;
     }
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedLeft(org.drools.rule.ContextEntry, org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedLeft(ContextEntry context,
+			InternalFactHandle handle, IDegreeFactory factory) {
+		return factory.fromBoolean(this.isAllowedCachedLeft(context, handle));
+	}
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedRight(org.drools.reteoo.LeftTuple, org.drools.rule.ContextEntry, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+			ContextEntry context, IDegreeFactory factory) {
+		return factory.fromBoolean(this.isAllowedCachedRight(tuple, context));
+	}
+    
+    
+    
+    
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InstanceNotEqualsConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InstanceNotEqualsConstraint.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InstanceNotEqualsConstraint.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -22,6 +22,9 @@
 import org.drools.rule.Pattern;
 import org.drools.spi.BetaNodeFieldConstraint;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 import java.io.ObjectOutput;
 import java.io.IOException;
 import java.io.ObjectInput;
@@ -174,4 +177,20 @@
         }
     }
 
+	/* (non-Javadoc)
+	 * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedLeft(org.drools.rule.ContextEntry, org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedLeft(ContextEntry context,
+			InternalFactHandle handle, IDegreeFactory factory) {
+		return factory.fromBoolean(this.isAllowedCachedLeft(context, handle));
+	}
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedRight(org.drools.reteoo.LeftTuple, org.drools.rule.ContextEntry, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+			ContextEntry context, IDegreeFactory factory) {
+		return factory.fromBoolean(this.isAllowedCachedRight(tuple, context));
+	}
+
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InternalWorkingMemoryActions.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InternalWorkingMemoryActions.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InternalWorkingMemoryActions.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -16,11 +16,18 @@
  * limitations under the License.
  */
 
+import java.util.Hashtable;
+
 import org.drools.FactException;
 import org.drools.FactHandle;
+import org.drools.rule.ConstraintSignature;
 import org.drools.rule.Rule;
 import org.drools.spi.Activation;
+import org.drools.spi.Constraint;
 
+import uncertainty.truthvals.IUncertainDegree;
+
+
 public interface InternalWorkingMemoryActions
     extends
     InternalWorkingMemory,
@@ -41,10 +48,25 @@
                       boolean logical,
                       Rule rule,
                       Activation activation) throws FactException;
+    
+    
+    
+    
+    
 
     public FactHandle insertLogical(Object object,
                                     boolean dynamic) throws FactException;
+    
+    public FactHandle insertLogical(Object object,
+    								Hashtable<ConstraintSignature, IUncertainDegree> priors,
+    								Rule rule,
+    								Activation activation) throws FactException;
 
+
+    
+    
+    
+
     public void modifyRetract(final FactHandle factHandle,
                               final Rule rule,
                               final Activation activation);

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/NamedEntryPoint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/NamedEntryPoint.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/NamedEntryPoint.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -6,6 +6,7 @@
 import java.beans.PropertyChangeListener;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.util.Hashtable;
 import java.util.concurrent.locks.ReentrantLock;
 
 import org.drools.WorkingMemoryEntryPoint;
@@ -19,12 +20,16 @@
 import org.drools.reteoo.EntryPointNode;
 import org.drools.reteoo.LeftTuple;
 import org.drools.reteoo.ObjectTypeConf;
+import org.drools.rule.ConstraintSignature;
 import org.drools.rule.EntryPoint;
 import org.drools.rule.Rule;
 import org.drools.spi.Activation;
+import org.drools.spi.Constraint;
 import org.drools.spi.FactHandleFactory;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class NamedEntryPoint
     implements
     InternalWorkingMemoryEntryPoint {
@@ -82,6 +87,16 @@
                        null,
                        null );
     }
+    
+    
+    public FactHandle insert(final Object object, Hashtable<ConstraintSignature, IUncertainDegree> priors) throws FactException {
+        return insert( object, /* Not-Dynamic */
+        			   priors,
+                       false,
+                       false,
+                       null,
+                       null );
+    }
 
     public FactHandle insert(final Object object,
                              final boolean dynamic) throws FactException {
@@ -127,7 +142,56 @@
         }
         return handle;
     }
+    
+    
+    protected FactHandle insert(final Object object,
+    		Hashtable<ConstraintSignature, IUncertainDegree> priors,
+            final boolean dynamic,
+            boolean logical,
+            final Rule rule,
+            final Activation activation) throws FactException {
+		if ( object == null ) {
+			// you cannot assert a null object
+			return null;
+		}
 
+		ObjectTypeConf typeConf = this.typeConfReg.getObjectTypeConf( this.entryPoint,
+				object );
+
+		InternalFactHandle handle = this.handleFactory.newUncertainFactHandle( object,
+				priors,
+				typeConf,
+				wm );
+		
+		this.objectStore.addHandle( handle,
+					object );
+
+		if ( dynamic ) {
+			addPropertyChangeListener( object );
+		}	
+
+		try {
+			this.lock.lock();
+			insert( handle,
+			object,
+			rule,
+			activation );
+		} finally {
+			this.lock.unlock();
+		}
+		
+		return handle;
+    }   
+    
+    
+    
+    
+    
+    
+    
+    
+    
+
     protected void insert(final InternalFactHandle handle,
                           final Object object,
                           final Rule rule,

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/ObjectTypeConfigurationRegistry.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/ObjectTypeConfigurationRegistry.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/ObjectTypeConfigurationRegistry.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -10,6 +10,9 @@
 import org.drools.reteoo.ClassObjectTypeConf;
 import org.drools.reteoo.FactTemplateTypeConf;
 import org.drools.reteoo.ObjectTypeConf;
+import org.drools.reteoo.UncertainClassObjectTypeConf;
+import org.drools.reteoo.UncertainFactTemplateTypeConf;
+import org.drools.reteoo.UncertainObjectTypeConf;
 import org.drools.rule.EntryPoint;
 
 public class ObjectTypeConfigurationRegistry implements Serializable {
@@ -65,6 +68,44 @@
 
         return objectTypeConf;
     }
+    
+    
+    
+    public UncertainObjectTypeConf getUncertainObjectTypeConf(EntryPoint entrypoint,   		    		
+            Object object) {
+    	
+    	
+    	UncertainObjectTypeConf objectTypeConf = null;
+        Class cls = null;
+        if ( object instanceof Fact ) {
+            String key = ((Fact) object).getFactTemplate().getName();
+            objectTypeConf = (UncertainObjectTypeConf) this.typeConfMap.get( key );            
+        } else {
+            cls = object.getClass();
+            objectTypeConf = (UncertainObjectTypeConf) this.typeConfMap.get( cls );            
+        }                       
+        
+        // it doesn't exist, so create it.
+        if ( objectTypeConf == null ) {
+            if ( object instanceof Fact ) {;
+            
+            
+                objectTypeConf = new UncertainFactTemplateTypeConf( entrypoint,
+                                                           ((Fact) object).getFactTemplate(),
+                                                           this.ruleBase );           
+                this.typeConfMap.put( ((Fact) object).getFactTemplate().getName(), 
+                                      objectTypeConf );
+            } else {
+                objectTypeConf = new UncertainClassObjectTypeConf( entrypoint,
+                                                          cls,
+                                                          this.ruleBase );
+                this.typeConfMap.put( cls, objectTypeConf );
+            }            
+        }
+    	
+    	
+    	return objectTypeConf;
+    }
 
     
     public Collection<ObjectTypeConf> values() {

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -33,6 +33,9 @@
 import org.drools.util.LeftTupleList;
 import org.drools.util.LeftTupleIndexHashTable;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
@@ -410,5 +413,40 @@
     public ContextEntry[] createContext() {
         return new ContextEntry[]{this.constraint0.createContextEntry(), this.constraint1.createContextEntry(), this.constraint2.createContextEntry(), this.constraint3.createContextEntry()};
     }
+    
+    
+    
+    /* (non-Javadoc)
+	 * @see org.drools.common.BetaConstraints#matchesCachedLeft(org.drools.rule.ContextEntry[], org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedLeft(ContextEntry[] context,
+			InternalFactHandle handle, IDegreeFactory factory) {
+				
+		
+		IUncertainDegree[] args = new IUncertainDegree[4];
+			args[0] = this.indexed0 ? factory.True() : this.constraint0.matchesCachedLeft( context[0], handle, factory);
+			args[1] = this.indexed1 ? factory.True() : this.constraint1.matchesCachedLeft( context[1], handle, factory);
+			args[2] = this.indexed2 ? factory.True() : this.constraint2.matchesCachedLeft( context[2], handle, factory);
+			args[3] = this.indexed3 ? factory.True() : this.constraint3.matchesCachedLeft( context[3], handle, factory);
+		return factory.getAndOperator().eval(args);
 
+	}
+	/* (non-Javadoc)
+	 * @see org.drools.common.BetaConstraints#matchesCachedRight(org.drools.rule.ContextEntry[], org.drools.reteoo.LeftTuple, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedRight(ContextEntry[] context,
+			LeftTuple tuple, IDegreeFactory factory) {
+		
+		IUncertainDegree[] args = new IUncertainDegree[4];
+			args[0] = this.constraint0.matchesCachedRight( tuple, context[0], factory);
+			args[1] = this.constraint1.matchesCachedRight( tuple, context[1], factory);
+			args[2] = this.constraint2.matchesCachedRight( tuple, context[2], factory);
+			args[3] = this.constraint3.matchesCachedRight( tuple, context[3], factory);
+		
+		return factory.getAndOperator().eval(args);
+	}
+    
+    
+    
+
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -38,6 +38,9 @@
 import org.drools.util.LeftTupleIndexHashTable;
 import org.drools.util.AbstractHashTable.FieldIndex;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 public class SingleBetaConstraints
     implements
     BetaConstraints {
@@ -237,5 +240,35 @@
     public void resetTuple(ContextEntry[] context) {
         context[0].resetTuple();
     }
+    
+    
+    
+    
+    
 
+	/* (non-Javadoc)
+	 * @see org.drools.common.BetaConstraints#matchesCachedLeft(org.drools.rule.ContextEntry[], org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedLeft(ContextEntry[] context,
+			InternalFactHandle handle, IDegreeFactory factory) {
+		
+		if (this.indexed) return factory.True();
+		
+		return this.constraint.matchesCachedLeft( context[0],
+                handle, factory );
+		
+		
+	}
+
+	/* (non-Javadoc)
+	 * @see org.drools.common.BetaConstraints#matchesCachedRight(org.drools.rule.ContextEntry[], org.drools.reteoo.LeftTuple, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedRight(ContextEntry[] context,
+			LeftTuple tuple, IDegreeFactory factory) {
+		
+		return this.constraint.matchesCachedRight( tuple,
+                context[0], factory );
+		
+	}
+
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -39,6 +39,9 @@
 import org.drools.util.LeftTupleIndexHashTable;
 import org.drools.util.AbstractHashTable.FieldIndex;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 public class TripleBetaConstraints
     implements
     BetaConstraints {
@@ -352,4 +355,34 @@
         return new ContextEntry[]{this.constraint0.createContextEntry(), this.constraint1.createContextEntry(), this.constraint2.createContextEntry()};
     }
 
+    
+    /* (non-Javadoc)
+	 * @see org.drools.common.BetaConstraints#matchesCachedLeft(org.drools.rule.ContextEntry[], org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedLeft(ContextEntry[] context,
+			InternalFactHandle handle, IDegreeFactory factory) {
+				
+		
+		IUncertainDegree[] args = new IUncertainDegree[3];
+			args[0] = this.indexed0 ? factory.True() : this.constraint0.matchesCachedLeft( context[0], handle, factory);
+			args[1] = this.indexed1 ? factory.True() : this.constraint1.matchesCachedLeft( context[1], handle, factory);
+			args[2] = this.indexed2 ? factory.True() : this.constraint2.matchesCachedLeft( context[2], handle, factory);
+		return factory.getAndOperator().eval(args);
+
+	}
+	/* (non-Javadoc)
+	 * @see org.drools.common.BetaConstraints#matchesCachedRight(org.drools.rule.ContextEntry[], org.drools.reteoo.LeftTuple, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedRight(ContextEntry[] context,
+			LeftTuple tuple, IDegreeFactory factory) {
+		
+		IUncertainDegree[] args = new IUncertainDegree[3];
+			args[0] = this.constraint0.matchesCachedRight( tuple, context[0], factory);
+			args[1] = this.constraint1.matchesCachedRight( tuple, context[1], factory);
+			args[2] = this.constraint2.matchesCachedRight( tuple, context[2], factory);
+		
+		return factory.getAndOperator().eval(args);
+	}
+    
+    
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/TupleStartEqualsConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/TupleStartEqualsConstraint.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/TupleStartEqualsConstraint.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -21,6 +21,9 @@
 import org.drools.rule.Declaration;
 import org.drools.spi.BetaNodeFieldConstraint;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
@@ -180,4 +183,22 @@
     public ConstraintType getType() {
         return ConstraintType.BETA;
     }
+
+    
+    
+	/* (non-Javadoc)
+	 * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedLeft(org.drools.rule.ContextEntry, org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedLeft(ContextEntry context,
+			InternalFactHandle handle, IDegreeFactory factory) {
+		return factory.fromBoolean(this.isAllowedCachedLeft(context, handle));
+	}
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedRight(org.drools.reteoo.LeftTuple, org.drools.rule.ContextEntry, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+			ContextEntry context, IDegreeFactory factory) {
+		return factory.fromBoolean(this.isAllowedCachedRight(tuple, context));
+	}
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/facttemplates/FactTemplateObjectType.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/facttemplates/FactTemplateObjectType.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/facttemplates/FactTemplateObjectType.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -19,6 +19,9 @@
 import org.drools.base.ValueType;
 import org.drools.spi.ObjectType;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 import java.io.ObjectOutput;
 import java.io.IOException;
 import java.io.ObjectInput;
@@ -156,4 +159,20 @@
     public int hashCode() {
         return this.factTemplate.hashCode();
     }
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.ObjectType#isAn(java.lang.Object, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree isAn(Object object, IDegreeFactory factory) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.ObjectType#isSubClass(java.lang.Class, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree isSubClass(Class clazz, IDegreeFactory factory) {
+		// TODO Auto-generated method stub
+		return null;
+	}
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -21,6 +21,7 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.util.Arrays;
+import java.util.Deque;
 
 import org.drools.RuleBaseConfiguration;
 import org.drools.RuntimeDroolsException;
@@ -38,6 +39,8 @@
 import org.drools.util.Iterator;
 import org.drools.util.ObjectHashMap.ObjectEntry;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * AccumulateNode
  * A beta node capable of doing accumulate logic.
@@ -230,8 +233,19 @@
         }
     }
 
+    
+    
+    public void assertObject(final InternalFactHandle factHandle,			 
+            final PropagationContext context,
+            final InternalWorkingMemory workingMemory) {
+
+    		assertObject(factHandle,null,context,workingMemory);
+    }
+    
     /**
      * @inheritDoc
+     * 
+     * TODO : the effects of an uncertain assertion are to be considered...
      *
      *  When a new object is asserted into an AccumulateNode, do this:
      *
@@ -240,6 +254,7 @@
      *
      */
     public void assertObject(final InternalFactHandle factHandle,
+    						 Deque<IUncertainDegree> tVal,
                              final PropagationContext context,
                              final InternalWorkingMemory workingMemory) {
 

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -19,6 +19,7 @@
 import java.io.ObjectOutput;
 import java.io.IOException;
 import java.io.Externalizable;
+import java.util.Deque;
 
 import org.drools.FactException;
 import org.drools.RuleBaseConfiguration;
@@ -35,6 +36,8 @@
 import org.drools.util.RightTupleList;
 import org.drools.util.Iterator;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * <code>AlphaNodes</code> are nodes in the <code>Rete</code> network used
  * to apply <code>FieldConstraint<.code>s on asserted fact
@@ -312,9 +315,59 @@
                                         workingMemory );
             }
         }
+        
+        public void assertObject(InternalFactHandle factHandle,
+    			Deque<IUncertainDegree> truthVal, PropagationContext context,
+    			InternalWorkingMemory workingMemory) {
+    		    	                    
+            IUncertainDegree constrDeg = this.constraint.matches( factHandle, workingMemory, this.contextEntry );                            
+            	System.out.println("UNCERTAIN AlphaNode.ObjectSinkUpdateAdapter : Passed object "+factHandle.getObject()+ " with degree "+constrDeg);
+                                                               
+                    this.sink.assertObject( factHandle,
+                    			   		    truthVal,
+                                            context,
+                                            workingMemory );
+            
+    	}
 
         public int getId() {
             return 0;
         }
     }
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+	/* (non-Javadoc)
+	 * @see org.drools.reteoo.ObjectSink#assertObject(org.drools.common.InternalFactHandle, java.util.Deque, org.drools.spi.PropagationContext, org.drools.common.InternalWorkingMemory)
+	 */
+	public void assertObject(InternalFactHandle factHandle,
+			Deque<IUncertainDegree> truthVal, PropagationContext context,
+			InternalWorkingMemory workingMemory) {
+
+		
+		final AlphaMemory memory = (AlphaMemory) workingMemory.getNodeMemory( this );
+                	
+        IUncertainDegree constrDeg = this.constraint.matches( factHandle, workingMemory, memory.context );                            
+        	System.out.println("UNCERTAIN AlphaNode : Passed object "+factHandle.getObject()+ " with degree "+constrDeg);
+         
+        truthVal.addLast(constrDeg);
+                	
+        
+                this.sink.propagateAssertObject( factHandle,
+                								 truthVal,
+                                                 context,
+                                                 workingMemory );
+        
+	}
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/BetaNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/BetaNode.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/BetaNode.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -409,4 +409,8 @@
         this.previousObjectSinkNode = previous;
     }
     
+    
+    
+    
+    
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -46,14 +46,14 @@
 
     private static final long              serialVersionUID = 8218802585428841926L;
 
-    private Class< ? >                     cls;
-    private transient InternalRuleBase     ruleBase;
+    protected Class< ? >                     cls;
+    protected transient InternalRuleBase     ruleBase;
     private ObjectTypeNode[]               objectTypeNodes;
 
     protected boolean                      shadowEnabled;
 
     private ObjectTypeNode                 concreteObjectTypeNode;
-    private EntryPoint                     entryPoint;
+    protected EntryPoint                     entryPoint;
     
     private TypeDeclaration                typeDecl;
 

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -23,6 +23,7 @@
 import java.io.Serializable;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Deque;
 
 import org.drools.RuleBaseConfiguration;
 import org.drools.common.BetaConstraints;
@@ -39,6 +40,8 @@
 import org.drools.util.Iterator;
 import org.drools.util.ObjectHashMap.ObjectEntry;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * @author etirelli
  *
@@ -214,9 +217,19 @@
         }
     }
 
+    
+    
+    public void assertObject(final InternalFactHandle factHandle,
+    		Deque<IUncertainDegree> tVal,
+            final PropagationContext context,
+            final InternalWorkingMemory workingMemory) {
+    	assertObject(factHandle, context, workingMemory);
+    }
+    
     /**
      * @inheritDoc
      *
+     * TODO : Expand with uncertainty...
      *  When a new object is asserted into a CollectNode, do this:
      *
      *  1. Select all matching tuples from left memory

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -3,12 +3,15 @@
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.util.Deque;
 
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.common.BaseNode;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class CompositeLeftTupleSinkAdapter
     implements
     LeftTupleSinkPropagator {
@@ -33,10 +36,23 @@
                                          final boolean leftTupleMemoryEnabled) {
 
         for ( LeftTupleSinkNode sink = this.sinks.getFirst(); sink != null; sink = sink.getNextLeftTupleSinkNode() ) {
-            sink.assertLeftTuple( new LeftTuple( leftTuple,
-                                                 rightTuple,
-                                                 sink,
-                                                 leftTupleMemoryEnabled ),
+            
+        	LeftTuple ltuple;
+        	
+        	if (leftTuple instanceof UncertainLeftTuple) {
+        		ltuple = new UncertainLeftTuple( leftTuple,
+        				rightTuple,
+        				sink,
+        				leftTupleMemoryEnabled );
+        	} else {
+        		ltuple = new LeftTuple( leftTuple,
+        				rightTuple,
+        				sink,
+        				leftTupleMemoryEnabled );
+        	}
+        	
+        	
+        	sink.assertLeftTuple( ltuple,
                                   context,
                                   workingMemory );
         }
@@ -47,9 +63,20 @@
                                          final InternalWorkingMemory workingMemory,
                                          final boolean leftTupleMemoryEnabled) {
         for ( LeftTupleSinkNode sink = this.sinks.getFirst(); sink != null; sink = sink.getNextLeftTupleSinkNode() ) {
-            sink.assertLeftTuple( new LeftTuple( tuple,
-                                                 sink,
-                                                 leftTupleMemoryEnabled ),
+        	
+        	LeftTuple ltuple;
+        	
+        	if (tuple instanceof UncertainLeftTuple) {
+        		ltuple = new UncertainLeftTuple( tuple,
+                        sink,
+                        leftTupleMemoryEnabled );
+        	} else {
+        		ltuple = new LeftTuple( tuple,
+                        sink,
+                        leftTupleMemoryEnabled );
+        	}
+        	
+            sink.assertLeftTuple( ltuple,
                                   context,
                                   workingMemory );
         }
@@ -147,4 +174,23 @@
     public void writeExternal(ObjectOutput out) throws IOException {
         out.writeObject( this.sinks );
     }
+
+	/* (non-Javadoc)
+	 * @see org.drools.reteoo.LeftTupleSinkPropagator#createAndPropagateAssertLeftTuple(org.drools.common.InternalFactHandle, java.util.Deque, org.drools.spi.PropagationContext, org.drools.common.InternalWorkingMemory, boolean)
+	 */
+	public void createAndPropagateAssertLeftTuple(
+			InternalFactHandle factHandle, Deque<IUncertainDegree> val,
+			PropagationContext context, InternalWorkingMemory workingMemory,
+			boolean leftTupleMemoryEnabled) {
+		
+		for ( LeftTupleSinkNode sink = this.sinks.getFirst(); sink != null; sink = sink.getNextLeftTupleSinkNode() ) {
+            sink.assertLeftTuple( new UncertainLeftTuple( factHandle,
+            									 val,
+                                                 sink,
+                                                 leftTupleMemoryEnabled),
+                                  context,
+                                  workingMemory );
+        }
+		
+	}
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -5,6 +5,7 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.util.ArrayList;
+import java.util.Deque;
 import java.util.List;
 
 import org.drools.base.ValueType;
@@ -25,6 +26,8 @@
 import org.drools.util.ObjectHashMap;
 import org.drools.util.ObjectHashMap.ObjectEntry;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class CompositeObjectSinkAdapter
     implements
     ObjectSinkPropagator {
@@ -309,12 +312,19 @@
     public void propagateAssertObject(final InternalFactHandle factHandle,
                                       final PropagationContext context,
                                       final InternalWorkingMemory workingMemory) {
-        final Object object = factHandle.getObject();
-
-        // Iterates t he FieldIndex collection, which tells you if particularly field is hashed or not
-        // if the field is hashed then it builds the hashkey to return the correct sink for the current objects slot's
-        // value, one object may have multiple fields indexed.
-        if ( this.hashedFieldIndexes != null ) {
+    	
+    	propagateAssertObject(factHandle, null, context, workingMemory);
+    }
+    
+    
+    public void propagateAssertObject(final InternalFactHandle factHandle,
+    		Deque<IUncertainDegree> tVal,
+            final PropagationContext context,
+            final InternalWorkingMemory workingMemory) {
+    	
+    	final Object object = factHandle.getObject(); 
+    	
+    	if ( this.hashedFieldIndexes != null ) {
             // Iterate the FieldIndexes to see if any are hashed
             for ( FieldIndex fieldIndex = (FieldIndex) this.hashedFieldIndexes.getFirst(); fieldIndex != null; fieldIndex = (FieldIndex) fieldIndex.getNext() ) {
                 if ( !fieldIndex.isHashed() ) {
@@ -329,9 +339,11 @@
                 final ObjectSink sink = (ObjectSink) this.hashedSinkMap.get( hashKey );
                 if ( sink != null ) {
                     // The sink exists so propagate
-                    sink.assertObject( factHandle,
-                                       context,
-                                       workingMemory );
+                	if (tVal != null) {
+                		sink.assertObject( factHandle, new java.util.LinkedList<IUncertainDegree>(tVal), context, workingMemory );
+                	} else {
+                		sink.assertObject( factHandle, context, workingMemory );
+                	}
                 }
             }
         }
@@ -339,22 +351,31 @@
         // propagate unhashed
         if ( this.hashableSinks != null ) {
             for ( ObjectSinkNode sink = this.hashableSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
-                sink.assertObject( factHandle,
-                                   context,
-                                   workingMemory );
+            	if (tVal != null) {
+            		sink.assertObject( factHandle, new java.util.LinkedList<IUncertainDegree>(tVal), context, workingMemory );
+            	} else {
+            		sink.assertObject( factHandle, context, workingMemory );
+            	}
             }
         }
 
         if ( this.otherSinks != null ) {
             // propagate others
             for ( ObjectSinkNode sink = this.otherSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
-                sink.assertObject( factHandle,
-                                   context,
-                                   workingMemory );
+            	if (tVal != null) {
+            		sink.assertObject( factHandle, new java.util.LinkedList<IUncertainDegree>(tVal), context, workingMemory );
+            	} else {
+            		sink.assertObject( factHandle, context, workingMemory );
+            	}
             }
         }
 
     }
+    
+    
+    
+    
+    
 
     public BaseNode getMatchingNode(BaseNode candidate) {
         if ( this.otherSinks != null ) {

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EmptyLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EmptyLeftTupleSinkAdapter.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EmptyLeftTupleSinkAdapter.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -5,9 +5,12 @@
 import org.drools.common.BaseNode;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 import java.io.ObjectOutput;
 import java.io.IOException;
 import java.io.ObjectInput;
+import java.util.Deque;
 
 public class EmptyLeftTupleSinkAdapter
     implements
@@ -76,4 +79,15 @@
         return 0;
     }
 
+	/* (non-Javadoc)
+	 * @see org.drools.reteoo.LeftTupleSinkPropagator#createAndPropagateAssertLeftTuple(org.drools.common.InternalFactHandle, java.util.Deque, org.drools.spi.PropagationContext, org.drools.common.InternalWorkingMemory, boolean)
+	 */
+	public void createAndPropagateAssertLeftTuple(
+			InternalFactHandle factHandle, Deque<IUncertainDegree> val,
+			PropagationContext context, InternalWorkingMemory workingMemory,
+			boolean leftTupleMemoryEnabled) {
+		
+		
+	}
+
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EmptyObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EmptyObjectSinkAdapter.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EmptyObjectSinkAdapter.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -5,9 +5,12 @@
 import org.drools.common.BaseNode;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 import java.io.ObjectOutput;
 import java.io.IOException;
 import java.io.ObjectInput;
+import java.util.Deque;
 
 public class EmptyObjectSinkAdapter
     implements
@@ -61,4 +64,13 @@
         return obj instanceof EmptyObjectSinkAdapter;
     }
 
+	/* (non-Javadoc)
+	 * @see org.drools.reteoo.ObjectSinkPropagator#propagateAssertObject(org.drools.common.InternalFactHandle, java.util.Deque, org.drools.spi.PropagationContext, org.drools.common.InternalWorkingMemory)
+	 */
+	public void propagateAssertObject(InternalFactHandle factHandle,
+			Deque<IUncertainDegree> truthVal, PropagationContext context,
+			InternalWorkingMemory workingMemory) {
+		
+	}
+
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -22,12 +22,17 @@
 import java.io.ObjectInput;
 import java.io.IOException;
 import java.io.ObjectOutput;
+import java.util.Deque;
 import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.LinkedList;
 import java.util.Map;
+import java.util.Queue;
 
 import org.drools.WorkingMemoryEntryPoint;
 import org.drools.base.ShadowProxy;
 import org.drools.common.BaseNode;
+import org.drools.common.IUncertainInternalFactHandle;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.common.InternalWorkingMemoryEntryPoint;
@@ -43,6 +48,8 @@
 import org.drools.util.Iterator;
 import org.drools.util.ObjectHashSet.ObjectEntry;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * A node that is an entry point into the Rete network.
  *
@@ -125,7 +132,36 @@
         return entryPoint;
     }
 
+    
+    
+    /**
+     * Dispatches an object to the compliant ObjectTypeNodes 
+     * 
+     * @param handle
+     * @param context
+     * @param objectTypeConf
+     * @param workingMemory
+     */
     public void assertObject(final InternalFactHandle handle,
+            final PropagationContext context,
+            final ObjectTypeConf objectTypeConf,
+            final InternalWorkingMemory workingMemory) {
+    	
+    	assertObject(handle, null, context, objectTypeConf, workingMemory);
+    }
+    
+    
+    //TODO: Check
+    public void assertObject(InternalFactHandle factHandle,
+			Deque<IUncertainDegree> truthVal, PropagationContext context,
+			InternalWorkingMemory workingMemory) {
+		System.out.println("WARNING : EntryPointNode : Unexpected Direct insertion ??");
+    	assertObject(factHandle, truthVal, context, null , workingMemory);
+	}
+    
+    
+    public void assertObject(final InternalFactHandle handle,
+    						 Deque<IUncertainDegree> tVal,
                              final PropagationContext context,
                              final ObjectTypeConf objectTypeConf,
                              final InternalWorkingMemory workingMemory) {
@@ -136,12 +172,28 @@
             ((ShadowProxy) handle.getObject()).updateProxy();
         }
 
-        ObjectTypeNode[] cachedNodes = objectTypeConf.getObjectTypeNodes();
+        
 
-        for ( int i = 0, length = cachedNodes.length; i < length; i++ ) {
-            cachedNodes[i].assertObject( handle,
-                                         context,
-                                         workingMemory );
+        if (handle instanceof IUncertainInternalFactHandle) {
+        	Hashtable<ObjectTypeNode, IUncertainDegree> cachedNodes = ((UncertainObjectTypeConf) objectTypeConf).getMatchDegrees();
+        	
+        	for (ObjectTypeNode node : cachedNodes.keySet()) {
+        		Deque<IUncertainDegree> truthVal = (tVal != null) ? tVal : new LinkedList<IUncertainDegree>();  
+        			        		
+        			truthVal.addLast(cachedNodes.get(node));
+        		System.out.println("EntryPointNode : Dispatching "+handle.getObject() + " to node "+node + "with tval "+cachedNodes.get(node));
+        		node.assertObject(handle, truthVal, context, workingMemory);
+        	}        	
+	        
+        } else {
+        	// Standard insertion
+        	ObjectTypeNode[] cachedNodes = objectTypeConf.getObjectTypeNodes();
+        	
+	        for ( int i = 0, length = cachedNodes.length; i < length; i++ ) {
+	            cachedNodes[i].assertObject( handle,
+	                                         context,
+	                                         workingMemory );
+	        }
         }
     }
 
@@ -302,4 +354,7 @@
         return "[EntryPointNode(" + this.id + ") " + this.entryPoint + " ]";
     }
 
+	
+	
+
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -16,6 +16,8 @@
 
 package org.drools.reteoo;
 
+import java.util.Deque;
+
 import org.drools.common.BetaConstraints;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
@@ -23,6 +25,8 @@
 import org.drools.rule.Behavior;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * <code>ExistsNode</code> extends <code>BetaNode</code> to perform tests for
  * the existence of a Fact plus one or more conditions. Where existence
@@ -124,11 +128,24 @@
         }
     }
 
+    
+    
+    
+    public void assertObject(final InternalFactHandle factHandle,
+    		Deque<IUncertainDegree> tVal,
+            final PropagationContext context,
+            final InternalWorkingMemory workingMemory) {
+    	assertObject(factHandle,context,workingMemory);
+    }
+    
     /**
      * Assert a new <code>FactHandleImpl</code> from the right input. If it
      * matches any left ReteTuple's that had no matches before, propagate
      * tuple as an assertion.
      *
+     *	TODO: Consider the uncertain assertion
+     *
+     *
      * @param factHandle
      *            The <code>FactHandleImpl</code> being asserted.
      * @param context

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/FactTemplateTypeConf.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/FactTemplateTypeConf.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/FactTemplateTypeConf.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -41,7 +41,7 @@
     private static final long serialVersionUID = 4493660262148247467L;
 
     private FactTemplate      factTemplate;
-    private ObjectTypeNode    concreteObjectTypeNode;
+    protected ObjectTypeNode    concreteObjectTypeNode;
     private ObjectTypeNode[]  cache;
 
     public FactTemplateTypeConf() {

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -16,6 +16,9 @@
  * limitations under the License.
  */
 
+import java.util.Deque;
+
+import org.drools.IUncertainRuleBase;
 import org.drools.common.BetaConstraints;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
@@ -24,6 +27,9 @@
 import org.drools.spi.PropagationContext;
 import org.drools.util.Iterator;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * <code>JoinNode</code> extends <code>BetaNode</code> to perform
  * <code>ReteTuple</code> and <code>FactHandle</code> joins. Tuples are
@@ -180,6 +186,9 @@
         }
         this.constraints.resetFactHandle( memory.getContext() );
     }
+    
+    
+    
 
     /**
      * Retract a FactHandleImpl. Iterates the referenced TupleMatches stored in
@@ -274,4 +283,66 @@
 
         return "[JoinNode(" + this.getId() + ") - " + ((ObjectTypeNode) source).getObjectType() + "]";
     }
+
+    
+    
+    
+	/**
+	 * TODO : Join with uncertainty IMPERATIVE
+	 */
+	public void assertObject(InternalFactHandle factHandle,
+			Deque<IUncertainDegree> truthVal, PropagationContext context,
+			InternalWorkingMemory workingMemory) {
+		
+		IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+		
+		System.out.println("Beta JOIN Node : Added Object with uncertainty");
+		
+		final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
+
+        UncertainRightTuple rightTuple = new UncertainRightTuple( factHandle,
+        										truthVal,
+                                                this );
+
+        if ( !behavior.assertRightTuple( memory.getBehaviorContext(),
+                                         rightTuple,
+                                         workingMemory ) ) {
+            // destroy right tuple
+            rightTuple.unlinkFromRightParent();
+            return;
+        }
+
+        memory.getRightTupleMemory().add( rightTuple );
+        if ( !this.tupleMemoryEnabled ) {
+            // do nothing here, as we know there are no left tuples at this stage in sequential mode.
+            return;
+        }
+
+        this.constraints.updateFromFactHandle( memory.getContext(),
+                                               workingMemory,
+                                               factHandle );
+        int i = 0;
+        for ( LeftTuple leftTuple = memory.getLeftTupleMemory().getFirst( rightTuple ); leftTuple != null; leftTuple = (LeftTuple) leftTuple.getNext() ) {
+        	
+            //if ( this.constraints.isAllowedCachedRight( memory.getContext(), leftTuple ) ) {
+                // wm.marshaller.write( i, leftTuple )
+        	//}
+        
+        	IUncertainDegree deg = this.constraints.matchesCachedRight(memory.getContext(), leftTuple, factory);
+        	rightTuple.setDegree(deg);
+        	
+        	System.out.println("Join Node : Newly created Right Tuple Updated :"+ rightTuple);
+        	
+                this.sink.propagateAssertLeftTuple( leftTuple,
+                                                    rightTuple,
+                                                    context,
+                                                    workingMemory,
+                                                    this.tupleMemoryEnabled  );
+            
+            
+            i++;
+        }
+        this.constraints.resetFactHandle( memory.getContext() );
+		
+	}
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LIANodePropagation.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LIANodePropagation.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LIANodePropagation.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -12,10 +12,10 @@
 public class LIANodePropagation
     implements
     Externalizable {
-    private LeftInputAdapterNode node;
-    private InternalFactHandle   handle;
-    private PropagationContext   context;
-    private boolean leftTupleMemoryEnabled;
+    protected LeftInputAdapterNode node;
+    protected InternalFactHandle   handle;
+    protected PropagationContext   context;
+    protected boolean leftTupleMemoryEnabled;
     
     public LIANodePropagation() {
         // constructor needed for serialisation

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -28,9 +28,12 @@
 import org.drools.util.RightTupleList;
 import org.drools.util.Iterator;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 import java.io.ObjectOutput;
 import java.io.IOException;
 import java.io.ObjectInput;
+import java.util.Deque;
 
 /**
  * All asserting Facts must propagated into the right <code>ObjectSink</code> side of a BetaNode, if this is the first Pattern
@@ -130,7 +133,7 @@
      * Takes the asserted <code>FactHandleImpl</code> received from the <code>ObjectSource</code> and puts it
      * in a new <code>ReteTuple</code> before propagating to the <code>TupleSinks</code>
      *
-     * @param factHandle
+     * @param factHandle 
      *            The asserted <code>FactHandle/code>.
      * @param context
      *             The <code>PropagationContext</code> of the <code>WorkingMemory<code> action.
@@ -149,6 +152,28 @@
             workingMemory.addLIANodePropagation( new LIANodePropagation(this, factHandle, context) );
         }
     }
+    
+    
+    
+    public void assertObject(final InternalFactHandle factHandle,
+    		Deque<IUncertainDegree> tVal,
+            final PropagationContext context,
+            final InternalWorkingMemory workingMemory) {
+    	
+    	if ( !workingMemory.isSequential() ) {
+    		this.sink.createAndPropagateAssertLeftTuple( factHandle,
+    				tVal,
+    				context,
+    				workingMemory,
+    				this.leftTupleMemoryEnabled );
+    	} else {
+    		workingMemory.addLIANodePropagation( 
+    				new UncertainLIANodePropagation(this, tVal, factHandle, context) 
+    		);
+    	}
+    }
+    
+    
 
     public void updateSink(final LeftTupleSink sink,
                            final PropagationContext context,
@@ -263,6 +288,22 @@
                                        context,
                                        workingMemory );
         }
+        
+        
+        public void assertObject(InternalFactHandle factHandle,
+				Deque<IUncertainDegree> truthVal, PropagationContext context,
+				InternalWorkingMemory workingMemory) {
+        	
+        	final LeftTuple tuple = new UncertainLeftTuple( factHandle, 
+        			truthVal,
+                    this.sink,
+                    this.leftTupleMemoryEnabled );
+        	
+        	this.sink.assertLeftTuple( tuple,
+        			context,
+        			workingMemory );
+			
+		}
 
         public void retractRightTuple(final RightTuple rightTuple,
                                       final PropagationContext context,
@@ -273,6 +314,9 @@
         public int getId() {
             return 0;
         }
+
+		
+		
     }
 
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LeftTupleSinkPropagator.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LeftTupleSinkPropagator.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LeftTupleSinkPropagator.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -1,12 +1,15 @@
 package org.drools.reteoo;
 
 import java.io.Externalizable;
+import java.util.Deque;
 
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.common.BaseNode;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public interface LeftTupleSinkPropagator
     extends
     Externalizable {
@@ -61,4 +64,19 @@
 
     public int size();
 
+    
+	/**
+	 * Uncertain Left Tuple creator
+	 * 
+	 * @param factHandle
+	 * @param val
+	 * @param context
+	 * @param workingMemory
+	 * @param leftTupleMemoryEnabled
+	 */
+	public void createAndPropagateAssertLeftTuple(
+			InternalFactHandle factHandle, Deque<IUncertainDegree> val,
+			PropagationContext context, InternalWorkingMemory workingMemory,
+			boolean leftTupleMemoryEnabled);
+
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/NotNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/NotNode.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/NotNode.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -16,6 +16,8 @@
  * limitations under the License.
  */
 
+import java.util.Deque;
+
 import org.drools.common.BetaConstraints;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
@@ -24,6 +26,8 @@
 import org.drools.spi.PropagationContext;
 import org.drools.util.Iterator;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * <code>NotNode</code> extends <code>BetaNode</code> to perform tests for
  * the non existence of a Fact plus one or more conditions. Where none existence
@@ -125,10 +129,22 @@
         }
     }
 
+    
+    
+    
+    public void assertObject(final InternalFactHandle factHandle,			 
+            final PropagationContext context,
+            final InternalWorkingMemory workingMemory) {
+    	assertObject(factHandle,null,context,workingMemory);
+    }
+    
+    
     /**
      * Assert a new <code>FactHandleImpl</code> from the right input. If it
      * matches any left ReteTuple's that already has propagations then those
      * propagations are retracted.
+     * 
+     * TODO : The effect of an uncertain prop on this type of node has to be evaluated
      *
      * @param factHandle
      *            The <code>FactHandleImpl</code> being asserted.
@@ -138,6 +154,7 @@
      *            The working memory seesion.
      */
     public void assertObject(final InternalFactHandle factHandle,
+    						 Deque<IUncertainDegree> tVal,
                              final PropagationContext context,
                              final InternalWorkingMemory workingMemory) {
         final RightTuple rightTuple = new RightTuple( factHandle,

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -16,10 +16,14 @@
  * limitations under the License.
  */
 
+import java.util.Deque;
+
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * Receiver of propagated <code>FactHandleImpl</code>s from a
  * <code>ObjectSource</code>.
@@ -37,4 +41,14 @@
     public void assertObject(InternalFactHandle factHandle,
                              PropagationContext propagationContext,
                              InternalWorkingMemory workingMemory);
+
+	/**
+	 * @param factHandle
+	 * @param truthVal
+	 * @param context
+	 * @param workingMemory
+	 */
+	public void assertObject(InternalFactHandle factHandle,
+			Deque<IUncertainDegree> truthVal, PropagationContext context,
+			InternalWorkingMemory workingMemory);
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectSinkPropagator.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectSinkPropagator.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectSinkPropagator.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -1,12 +1,15 @@
 package org.drools.reteoo;
 
 import java.io.Externalizable;
+import java.util.Deque;
 
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.common.BaseNode;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public interface ObjectSinkPropagator
     extends
     Externalizable {
@@ -19,4 +22,14 @@
     public ObjectSink[] getSinks();
 
     public int size();
+
+	/**
+	 * @param factHandle
+	 * @param truthVal
+	 * @param context
+	 * @param workingMemory
+	 */
+	public void propagateAssertObject(InternalFactHandle factHandle,
+			Deque<IUncertainDegree> truthVal, PropagationContext context,
+			InternalWorkingMemory workingMemory);
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -21,14 +21,20 @@
 import java.io.ObjectOutput;
 import java.io.IOException;
 import java.io.ObjectInput;
+import java.util.Deque;
 
+import org.drools.IUncertainRuleBase;
 import org.drools.RuleBaseConfiguration;
+import org.drools.base.ClassObjectType;
 import org.drools.common.BaseNode;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.common.NodeMemory;
 import org.drools.common.PropagationContextImpl;
+import org.drools.common.UncertainFactHandle;
 import org.drools.reteoo.builder.BuildContext;
+import org.drools.rule.ClassConstraint;
+import org.drools.rule.ConstraintSignature;
 import org.drools.rule.Declaration;
 import org.drools.rule.EntryPoint;
 import org.drools.rule.EvalCondition;
@@ -41,6 +47,9 @@
 import org.drools.util.ObjectHashSet;
 import org.drools.util.ObjectHashSet.ObjectEntry;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * <code>ObjectTypeNodes<code> are responsible for filtering and propagating the matching
  * fact assertions propagated from the <code>Rete</code> node using <code>ObjectType</code> interface.
@@ -147,7 +156,19 @@
     public boolean isAssignableFrom(final Object object) {
         return this.objectType.isAssignableFrom( object );
     }
-
+    
+            
+    public IUncertainDegree isAn(final Object object, IDegreeFactory factory) {
+        return this.objectType.isAn( object, factory );
+    }
+    
+    
+    public IUncertainDegree isSubClass(final Class clazz, IDegreeFactory factory) {
+        return this.objectType.isSubClass( clazz, factory );
+    }
+    
+    
+    
     /**
      * Propagate the <code>FactHandleimpl</code> through the <code>Rete</code> network. All
      * <code>FactHandleImpl</code> should be remembered in the node memory, so that later runtime rule attachmnents
@@ -179,7 +200,92 @@
                                          workingMemory );
     }
 
+    
     /**
+     * Uncertain version of the assertObject method
+     * 
+     * An object enters the method with a truth degree saying how its 
+     * class matches the type for this node.
+     * 
+     * Here, this is merged with two other truth values
+     * 		- the priors 
+     * 		- the degree at which the Object is a member of the local typed class 
+     * 
+     *  Since the three degrees are relative to the same constraint,
+     *  the operation is the merge-intersection.
+     * 
+     * @param factHandle
+     * @param truthVal
+     * @param context
+     * @param workingMemory
+     */
+    public void assertObject(final InternalFactHandle factHandle,
+    		Deque<IUncertainDegree> truthVal,
+            final PropagationContext context,
+            final InternalWorkingMemory workingMemory) {
+    	
+		if ( context.getType() == PropagationContext.MODIFICATION && this.skipOnModify && context.getDormantActivations() == 0 ) {
+			// we do this after the shadowproxy update, just so that its up to date for the future
+			return;
+		}
+		
+		if ( this.objectMemoryEnabled ) {
+			final ObjectHashSet memory = (ObjectHashSet) workingMemory.getNodeMemory( this );
+			memory.add( factHandle, false );
+		}
+		
+		
+		//
+		UncertainFactHandle uncHandle = (UncertainFactHandle) factHandle;
+    		if (uncHandle == null) throw new RuntimeException("ObjectTypeNode : Uncertain Information expected here!!");
+    	
+    	Object object = uncHandle.getObject();
+    	IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory(); 
+    	
+    	//ClassConstraint constr = new ClassConstraint( ((ClassObjectType) objectType).getClassType());
+    	ConstraintSignature cs = ClassConstraint.buildSignature(((ClassObjectType) objectType).getClassType());
+		IUncertainDegree objectPrior = uncHandle.getPriors().get(cs);
+		IUncertainDegree classPrior = truthVal.removeLast();
+		IUncertainDegree posterior = null;
+		
+		System.out.println("ObjectTypeNode : Trying to filter "+object);
+		System.out.println("\t ObjectTypeNode : Object.Class vs class match "+classPrior);
+		
+			if (objectPrior == null) {
+				// No external priors, combine class and object compatibility, then set it
+				IUncertainDegree objPost = isAn(object, factory);
+				System.out.println("\t ObjectTypeNode : Object vs class match "+objPost);
+				posterior = factory.mergeIntersect(objPost, classPrior);
+			} else {
+				if (uncHandle.isOverruling()) {
+					System.out.println("\t ObjectTypeNode : Keep priors from table");
+					// Do not change the priors
+		      		posterior = objectPrior;
+		      	} else {
+		      		// Combine everything
+		      		System.out.println("\t ObjectTypeNode : Prior info "+objectPrior);
+		      		IUncertainDegree objPost = isAn(object, factory);
+		      		System.out.println("\t ObjectTypeNode : Object vs class match "+objPost);
+		      		posterior = factory.mergeIntersect(objPost, classPrior);
+		      		posterior = factory.mergeIntersect(objectPrior, posterior);		      		
+		      	}    		
+			}
+			
+			uncHandle.setPrior(cs, posterior);
+			truthVal.addLast(posterior);
+			System.out.println("\t ObjectTypeNode : Global result "+posterior);
+			
+			if (posterior.getDegree().getValue() > 0) {
+						
+				this.sink.propagateAssertObject( factHandle,
+						truthVal,
+						context,
+						workingMemory );
+			}
+	}
+    
+    
+    /**
      * Retract the <code>FactHandleimpl</code> from the <code>Rete</code> network. Also remove the 
      * <code>FactHandleImpl</code> from the node memory.
      * 

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.Externalizable;
+import java.util.Deque;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.atomic.AtomicBoolean;
 
@@ -34,6 +35,8 @@
 import org.drools.reteoo.builder.BuildContext;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * A node that will add the propagation to the working memory actions queue,
  * in order to allow multiple threads to concurrently assert objects to multiple
@@ -197,7 +200,24 @@
             workingMemory.queueWorkingMemoryAction( this.action );
         }
     }
+    
+    
+    public void assertObject(InternalFactHandle factHandle,
+    		Deque<IUncertainDegree> tVal,
+            PropagationContext context,
+            InternalWorkingMemory workingMemory) {
+    	
+    	final PropagationQueueingNodeMemory memory = (PropagationQueueingNodeMemory) workingMemory.getNodeMemory( this );
+    	memory.addAction( new UncertainAssertAction( factHandle, tVal ,context ) );
 
+
+    	if ( memory.isQueued().compareAndSet( false, true ) ) {
+    		workingMemory.queueWorkingMemoryAction( this.action );
+    	}
+
+    }
+    
+
     /**
      * @see org.drools.reteoo.ObjectSink#isObjectMemoryEnabled()
      */
@@ -365,7 +385,33 @@
                                         workingMemory );
         }
     }
+    
+    
+    private static class UncertainAssertAction extends Action {
+        private static final long serialVersionUID = -8478488926430845209L;
 
+        private Deque<IUncertainDegree> tVal;
+        
+        public UncertainAssertAction(final InternalFactHandle handle,
+        					Deque<IUncertainDegree> tVal,
+                            final PropagationContext context) {
+            super( handle,
+                   context );
+            this.tVal = tVal;
+        }
+
+        public void execute(final ObjectSinkPropagator sink,
+                            final InternalWorkingMemory workingMemory) {
+            sink.propagateAssertObject( this.handle,
+            							this.tVal,
+                                        this.context,
+                                        workingMemory );
+        }
+    }
+    
+    
+    
+
     private static class RetractAction extends Action {
         private static final long serialVersionUID = -84784886430845209L;
 

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/Rete.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/Rete.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/Rete.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -20,11 +20,13 @@
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.util.Deque;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
+import org.drools.RuntimeDroolsException;
 import org.drools.common.BaseNode;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalRuleBase;
@@ -34,6 +36,8 @@
 import org.drools.spi.ObjectType;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * The Rete-OO network.
  *
@@ -112,6 +116,29 @@
                            typeConf,
                            workingMemory );
     }
+    
+    
+    
+    /**
+     * Rete-level insertion with truth value
+     * This may be used to model an initial confidence or something like that.
+     * 
+     */
+    public void assertObject(final InternalFactHandle factHandle,
+    		Deque<IUncertainDegree> tVal,
+            final PropagationContext context,
+            final InternalWorkingMemory workingMemory) {
+		EntryPoint entryPoint = context.getEntryPoint();
+		EntryPointNode node = this.entryPoints.get( entryPoint );
+		ObjectTypeConf typeConf = ((InternalWorkingMemoryEntryPoint) workingMemory.getWorkingMemoryEntryPoint( entryPoint.getEntryPointId() )).getObjectTypeConfigurationRegistry().getObjectTypeConf( entryPoint,
+		                                                                                                                                                                                      factHandle.getObject() );
+				
+		node.assertObject( factHandle,
+					tVal,
+		          context,
+		          typeConf,
+		          workingMemory );
+    }
 
     /**
      * Retract a fact object from this <code>RuleBase</code> and the specified

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ReteooFactHandleFactory.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ReteooFactHandleFactory.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ReteooFactHandleFactory.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -16,14 +16,24 @@
  * limitations under the License.
  */
 
+import java.util.Hashtable;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.WorkingMemory;
 import org.drools.common.AbstractFactHandleFactory;
 import org.drools.common.DefaultFactHandle;
 import org.drools.common.EventFactHandle;
+import org.drools.common.IUncertainInternalFactHandle;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.common.UncertainFactHandle;
+import org.drools.rule.ConstraintSignature;
 import org.drools.rule.TypeDeclaration;
+import org.drools.spi.Constraint;
 import org.drools.spi.FactHandleFactory;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class ReteooFactHandleFactory extends AbstractFactHandleFactory {
 
     private static final long serialVersionUID = 400L;
@@ -63,7 +73,35 @@
                                           recency );
         }
     }
+    
+    
+    public IUncertainInternalFactHandle newUncertainFactHandle(int id, Object object, Hashtable<ConstraintSignature, IUncertainDegree> priors, ObjectTypeConf conf, InternalWorkingMemory workingMemory ) {
+    	if ( conf != null && conf.isEvent() ) {
+            TypeDeclaration type = conf.getTypeDeclaration();
+            long timestamp = workingMemory.getTimerService().getCurrentTime();
+            long duration = 0;
+            if ( type.getDurationExtractor() != null ) {
+                duration = type.getDurationExtractor().getLongValue( workingMemory,
+                                                                     object );
+            }
+            
+            //TODO : Support Uncertain EVENTS 
+            
+            /*
+            return new EventFactHandle( id,
+                                        object,
+                                        recency,
+                                        timestamp,
+                                        duration );
+                                        */
+            throw new RuntimeDroolsException("TODO : Support uncertain events");
+            
+        } else {
+            return new UncertainFactHandle(id, object, priors);
+        }
+    }
 
+
     /* (non-Javadoc)
      * @see org.drools.reteoo.FactHandleFactory#newInstance()
      */

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -20,7 +20,10 @@
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.util.Deque;
+import java.util.Vector;
 
+import org.drools.IUncertainRuleBase;
 import org.drools.RuleBaseConfiguration;
 import org.drools.common.AgendaItem;
 import org.drools.common.BaseNode;
@@ -40,6 +43,10 @@
 import org.drools.util.Iterator;
 import org.drools.util.LeftTupleList;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+import uncertainty.truthvals.operators.IUncDegCombiner;
+
 /**
  * Leaf Rete-OO node responsible for enacting <code>Action</code> s on a
  * matched <code>Rule</code>.
@@ -52,7 +59,7 @@
     implements
     LeftTupleSinkNode,
     NodeMemory,
-    TerminalNode,
+    IUncertainTerminalNode,
     Externalizable {
     // ------------------------------------------------------------
     // Instance members
@@ -200,57 +207,89 @@
         final InternalAgenda agenda = (InternalAgenda) workingMemory.getAgenda();
 
         final Duration dur = this.rule.getDuration();
-
-        if ( dur != null && dur.getDuration( tuple ) > 0 ) {
-            final ScheduledAgendaItem item = new ScheduledAgendaItem( context.getPropagationNumber(),
-                                                                      cloned,
-                                                                      agenda,
-                                                                      context,
-                                                                      this.rule,
-                                                                      this.subrule );
-            final TerminalNodeMemory memory = (TerminalNodeMemory) workingMemory.getNodeMemory( this );
-
-            agenda.scheduleItem( item );
-            tuple.setActivation( item );
-
-            if ( this.tupleMemoryEnabled ) {
-                memory.getTupleMemory().add( tuple );
-            }
-
-            item.setActivated( true );
-            ((EventSupport) workingMemory).getAgendaEventSupport().fireActivationCreated( item,
-                                                                                          workingMemory );
-        } else {
-            // -----------------
-            // Lazy instantiation and addition to the Agenda of AgendGroup
-            // implementations
-            // ----------------
-            final TerminalNodeMemory memory = (TerminalNodeMemory) workingMemory.getNodeMemory( this );
-
-            final AgendaItem item = new AgendaItem( context.getPropagationNumber(),
-                                                    cloned,
-                                                    rule.getSalience().getValue( tuple,
-                                                                                 workingMemory ),
-                                                    context,
-                                                    this.rule,
-                                                    this.subrule );
-
+        
+        
+        
+        
+        if (cloned instanceof UncertainLeftTuple) {
+        	
+        	IUncertainDegree degree = combine((UncertainLeftTuple) cloned, ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory() );
+        		if (degree.getDegree().getValue() == 0) return;
+        	
+        	final TerminalNodeMemory memory = (TerminalNodeMemory) workingMemory.getNodeMemory( this );
+    		
+            final AgendaItem item = new UncertainAgendaItem( context.getPropagationNumber(),
+            												 cloned,
+            												 rule.getSalience().getValue( tuple, workingMemory ),
+            												 context,
+            												 this.rule,
+            												 this.subrule,
+            												 degree
+            												 );
             item.setSequenence( this.sequence );
-
             tuple.setActivation( item );
-            memory.getTupleMemory().add( tuple );
-            
+            memory.getTupleMemory().add( tuple );            
             agenda.addActivation( item );
-
             item.setActivated( true );
-
             // We only want to fire an event on a truly new Activation and not on an Activation as a result of a modify
             if ( fireActivationCreated ) {
                 ((EventSupport) workingMemory).getAgendaEventSupport().fireActivationCreated( item,
                                                                                               workingMemory );
             }
+        	        	
+        } else {
+        
+		
+		        if ( dur != null && dur.getDuration( tuple ) > 0 ) {
+		            final ScheduledAgendaItem item = new ScheduledAgendaItem( context.getPropagationNumber(),
+		                                                                      cloned,
+		                                                                      agenda,
+		                                                                      context,
+		                                                                      this.rule,
+		                                                                      this.subrule );
+		            final TerminalNodeMemory memory = (TerminalNodeMemory) workingMemory.getNodeMemory( this );
+		
+		            agenda.scheduleItem( item );
+		            tuple.setActivation( item );
+		
+		            if ( this.tupleMemoryEnabled ) {
+		                memory.getTupleMemory().add( tuple );
+		            }
+		
+		            item.setActivated( true );
+		            ((EventSupport) workingMemory).getAgendaEventSupport().fireActivationCreated( item,
+		                                                                                          workingMemory );
+		        } else {
+		            // -----------------
+		            // Lazy instantiation and addition to the Agenda of AgendGroup
+		            // implementations
+		            // ----------------
+		            final TerminalNodeMemory memory = (TerminalNodeMemory) workingMemory.getNodeMemory( this );
+		
+		            final AgendaItem item = new AgendaItem( context.getPropagationNumber(),
+		                                                    cloned,
+		                                                    rule.getSalience().getValue( tuple,
+		                                                                                 workingMemory ),
+		                                                    context,
+		                                                    this.rule,
+		                                                    this.subrule );
+		
+		            item.setSequenence( this.sequence );
+		
+		            tuple.setActivation( item );
+		            memory.getTupleMemory().add( tuple );
+		            
+		            agenda.addActivation( item );
+		
+		            item.setActivated( true );
+		
+		            // We only want to fire an event on a truly new Activation and not on an Activation as a result of a modify
+		            if ( fireActivationCreated ) {
+		                ((EventSupport) workingMemory).getAgendaEventSupport().fireActivationCreated( item,
+		                                                                                              workingMemory );
+		            }
+		        }
         }
-
         agenda.increaseActiveActivations();
     }
 
@@ -511,4 +550,38 @@
 //            this.ruleFlowGroup = ruleFlowGroup;
 //        }
     }
+
+    
+    
+    
+    protected IUncertainDegree combine(UncertainLeftTuple leftTuple, IDegreeFactory factory) {
+    	
+    	IUncDegCombiner and = factory.getAndOperator();
+    	
+    	UncertainLeftTuple tuple = leftTuple;
+    	
+    	Vector<IUncertainDegree> argsV = new Vector<IUncertainDegree>(); 
+    	while (tuple != null) {
+    		Deque<IUncertainDegree> tVal = tuple.getTruthVal();
+    		if (tVal != null) {
+    			IUncertainDegree[] degs = new IUncertainDegree[tuple.getTruthVal().size()];
+    			tuple.getTruthVal().toArray(degs);
+    			IUncertainDegree deg = and.eval(degs);
+    			
+    			argsV.add(deg);    			
+    		}
+    		
+    		tuple = (UncertainLeftTuple) tuple.getParent();
+    	
+    	}
+    	
+    		
+    	if (argsV.size() == 0)
+    		return factory.True();
+    	
+    	IUncertainDegree[] args = new IUncertainDegree[argsV.size()];
+    	return factory.getAndOperator().eval(argsV.toArray(args));
+    	    	    	   
+    }
+	
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -5,9 +5,12 @@
 import org.drools.common.BaseNode;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 import java.io.ObjectInput;
 import java.io.IOException;
 import java.io.ObjectOutput;
+import java.util.Deque;
 
 public class SingleLeftTupleSinkAdapter
     implements
@@ -27,10 +30,21 @@
                                          final PropagationContext context,
                                          final InternalWorkingMemory workingMemory,
                                          boolean leftTupleMemoryEnabled) {
-        this.sink.assertLeftTuple( new LeftTuple( leftTuple,
-                                                  rightTuple,
-                                                  this.sink,
-                                                  leftTupleMemoryEnabled ),
+    	LeftTuple ltuple;
+    	
+    	if (leftTuple instanceof UncertainLeftTuple) {
+    		ltuple = new UncertainLeftTuple( leftTuple,
+    				rightTuple,
+    				this.sink,
+    				leftTupleMemoryEnabled );
+    	} else {
+    		ltuple = new LeftTuple( leftTuple,
+    				rightTuple,
+    				this.sink,
+    				leftTupleMemoryEnabled );
+    	}
+    	
+        this.sink.assertLeftTuple( ltuple,
                                    context,
                                    workingMemory );
     }
@@ -39,13 +53,26 @@
                                          final PropagationContext context,
                                          final InternalWorkingMemory workingMemory,
                                          boolean leftTupleMemoryEnabled) {
-        this.sink.assertLeftTuple( new LeftTuple( tuple,
-                                                  this.sink,
-                                                  leftTupleMemoryEnabled ),
+    	LeftTuple ltuple;
+    	
+    	if (tuple instanceof UncertainLeftTuple) {
+    		ltuple = new UncertainLeftTuple( tuple,
+                    this.sink,
+                    leftTupleMemoryEnabled );
+    	} else {
+    		ltuple = new LeftTuple( tuple,
+                    this.sink,
+                    leftTupleMemoryEnabled );
+    	}
+    	
+    	this.sink.assertLeftTuple( ltuple,
                                    context,
                                    workingMemory );
     }
 
+    
+    
+    
     public void propagateRetractLeftTuple(final LeftTuple leftTuple,
                                           final PropagationContext context,
                                           final InternalWorkingMemory workingMemory) {
@@ -126,4 +153,21 @@
     public void writeExternal(ObjectOutput out) throws IOException {
         out.writeObject( this.sink );
     }
+
+	/* (non-Javadoc)
+	 * @see org.drools.reteoo.LeftTupleSinkPropagator#createAndPropagateAssertLeftTuple(org.drools.common.InternalFactHandle, java.util.Deque, org.drools.spi.PropagationContext, org.drools.common.InternalWorkingMemory, boolean)
+	 */
+	public void createAndPropagateAssertLeftTuple(
+			InternalFactHandle factHandle, Deque<IUncertainDegree> val,
+			PropagationContext context, InternalWorkingMemory workingMemory,
+			boolean leftTupleMemoryEnabled) {
+		
+		this.sink.assertLeftTuple( new UncertainLeftTuple( factHandle,
+				val,
+                this.sink,
+                leftTupleMemoryEnabled ),
+                context,
+                workingMemory );
+		
+	}
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/SingleObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/SingleObjectSinkAdapter.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/SingleObjectSinkAdapter.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -5,10 +5,13 @@
 import org.drools.common.BaseNode;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 import java.io.Externalizable;
 import java.io.ObjectOutput;
 import java.io.IOException;
 import java.io.ObjectInput;
+import java.util.Deque;
 
 public class SingleObjectSinkAdapter
     implements
@@ -60,4 +63,17 @@
         return 1;
     }
 
+	/* (non-Javadoc)
+	 * @see org.drools.reteoo.ObjectSinkPropagator#propagateAssertObject(org.drools.common.InternalFactHandle, java.util.Deque, org.drools.spi.PropagationContext, org.drools.common.InternalWorkingMemory)
+	 */
+	public void propagateAssertObject(InternalFactHandle factHandle,
+			Deque<IUncertainDegree> truthVal, PropagationContext context,
+			InternalWorkingMemory workingMemory) {
+		this.sink.assertObject( factHandle,
+				truthVal,
+                context,
+                workingMemory );
+		
+	}
+
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/AndCompositeRestriction.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/AndCompositeRestriction.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/AndCompositeRestriction.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -1,11 +1,16 @@
 package org.drools.rule;
 
+import org.drools.IUncertainRuleBase;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.reteoo.LeftTuple;
 import org.drools.spi.InternalReadAccessor;
 import org.drools.spi.Restriction;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+import uncertainty.truthvals.operators.IUncDegCombiner;
+
 public class AndCompositeRestriction extends AbstractCompositeRestriction {
 
     private static final long serialVersionUID = 400L;
@@ -31,6 +36,34 @@
         }
         return true;
     }
+    
+    
+    /**
+	 * Uncertain AND for alpha network
+	 */
+	public IUncertainDegree matches(InternalReadAccessor extractor,
+			InternalFactHandle handle, InternalWorkingMemory workingMemory,
+			ContextEntry context)  {
+				        
+		IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+        
+        if (this.restrictions.length > 0) {
+    		IUncertainDegree[] degs = new IUncertainDegree[this.restrictions.length];
+    		for ( int i = 0; i < this.restrictions.length; i++ ) {
+                degs[i] = this.restrictions[i].matches(extractor, handle, workingMemory, context);                
+            }
+    		
+    		IUncDegCombiner and = factory.getAndOperator();
+    		IUncertainDegree ans = and.eval(degs); 
+    		
+    		System.out.println("AndCompositeRestriction : Combination yields "+ans);
+    		return ans;
+    		    		
+    	} else return factory.True();
+        
+		
+	}
+    
 
     public boolean isAllowedCachedLeft(final ContextEntry context,
                                        final InternalFactHandle handle) {
@@ -64,4 +97,35 @@
         return new AndCompositeRestriction( clone );
     }
 
+	/* (non-Javadoc)
+	 * @see org.drools.spi.Restriction#matchesCachedLeft(org.drools.rule.ContextEntry, org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedLeft(ContextEntry context,
+			InternalFactHandle handle, IDegreeFactory factory) {
+		
+		CompositeContextEntry contextEntry = (CompositeContextEntry) context;
+		IUncertainDegree[] degs = new IUncertainDegree[this.restrictions.length];
+        for ( int i = 0, ilength = this.restrictions.length; i < ilength; i++ ) {
+        	degs[i] = this.restrictions[i].matchesCachedLeft(contextEntry.contextEntries[i], handle, factory);          
+        }
+        return factory.getAndOperator().eval(degs);
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.Restriction#matchesCachedRight(org.drools.reteoo.LeftTuple, org.drools.rule.ContextEntry, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+			ContextEntry context, IDegreeFactory factory) {
+		
+		CompositeContextEntry contextEntry = (CompositeContextEntry) context;
+		IUncertainDegree[] degs = new IUncertainDegree[this.restrictions.length];
+		
+        for ( int i = 0, ilength = this.restrictions.length; i < ilength; i++ ) {
+        	degs[i] = this.restrictions[i].matchesCachedRight(tuple, contextEntry.contextEntries[i], factory);            
+        }
+        return factory.getAndOperator().eval(degs);
+	}
+
+	
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/AndConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/AndConstraint.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/AndConstraint.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -19,6 +19,7 @@
 
 import java.util.Arrays;
 
+import org.drools.IUncertainRuleBase;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.reteoo.LeftTuple;
@@ -26,6 +27,10 @@
 import org.drools.spi.BetaNodeFieldConstraint;
 import org.drools.util.ArrayUtils;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+import uncertainty.truthvals.operators.IUncDegCombiner;
+
 /**
  * AND composite constraint, so the user can do things like:
  * 
@@ -141,4 +146,87 @@
         return clone;
     }
 
+	/**
+	 * Uncertain AND for alpha network
+	 */
+	public IUncertainDegree matches(InternalFactHandle handle,
+			InternalWorkingMemory workingMemory, ContextEntry context) {
+				        
+        IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+        
+        if (this.alphaConstraints.length > 0) {
+    		IUncertainDegree[] degs = new IUncertainDegree[this.alphaConstraints.length];
+    		for ( int i = 0; i < this.alphaConstraints.length; i++ ) {
+                degs[i] = this.alphaConstraints[i].matches(handle, workingMemory, context);                
+            }
+    		
+    		IUncDegCombiner and = factory.getAndOperator();
+    		IUncertainDegree ans = and.eval(degs); 
+    		
+    		System.out.println("AndConstraint : Combination yields "+ans);
+    		return ans;
+    		    		
+    	} else return factory.True();
+        
+		
+	}
+	
+	
+	
+
+    /**
+     * {@inheritDoc}
+     */
+    public IUncertainDegree matchesCachedLeft(ContextEntry context,
+                                       InternalFactHandle handle,
+                                       IDegreeFactory factory) {
+    	
+    	int nA = this.alphaConstraints.length;
+    	int nB = this.betaConstraints.length;
+    	IUncertainDegree[] degs = new IUncertainDegree[nA+nB];
+        for ( int i = 0; i < this.alphaConstraints.length; i++ ) {
+            degs[i] = this.alphaConstraints[i].matches( handle,
+                                                      ((MultiFieldConstraintContextEntry) context).workingMemory,
+                                                      ((MultiFieldConstraintContextEntry) context).alphas[i] );
+        }
+        
+        for ( int i = 0; i < this.betaConstraints.length; i++ ) {
+            degs[nA+i] = this.betaConstraints[i].matchesCachedLeft( ((MultiFieldConstraintContextEntry) context).betas[i],
+                                                               handle, factory );                             
+        }
+
+        if (nA+nB == 0) return factory.True();
+        return factory.getAndOperator().eval(degs);
+                
+    }
+    
+    
+    /**
+     * {@inheritDoc}
+     */
+    public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+            						   ContextEntry context, 
+                                       IDegreeFactory factory) {
+    	
+    	int nA = this.alphaConstraints.length;
+    	int nB = this.betaConstraints.length;
+    	IUncertainDegree[] degs = new IUncertainDegree[nA+nB];
+        for ( int i = 0; i < this.alphaConstraints.length; i++ ) {
+            degs[i] = this.alphaConstraints[i].matches( ((MultiFieldConstraintContextEntry) context).handle,
+                    									((MultiFieldConstraintContextEntry) context).workingMemory,
+                    									((MultiFieldConstraintContextEntry) context).alphas[i] );
+        }
+        
+        for ( int i = 0; i < this.betaConstraints.length; i++ ) {
+            degs[nA+i] = this.betaConstraints[i].matchesCachedRight( tuple,
+                    	((MultiFieldConstraintContextEntry) context).betas[i], factory );                             
+        }
+
+        if (nA+nB == 0) return factory.True();
+        return factory.getAndOperator().eval(degs);
+                
+    }
+	
+	
+
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -20,15 +20,28 @@
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.util.Hashtable;
 
+import org.drools.IUncertainRuleBase;
+import org.drools.base.ClassFieldReader;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.EqualityEvaluatorsDefinition;
+import org.drools.base.evaluators.EvaluatorRegistry;
+import org.drools.base.evaluators.Operator;
+import org.drools.base.field.LongFieldImpl;
+import org.drools.base.field.ObjectFieldImpl;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.common.UncertainFactHandle;
 import org.drools.spi.AlphaNodeFieldConstraint;
 import org.drools.spi.Constraint;
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldValue;
 import org.drools.spi.InternalReadAccessor;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 public class LiteralConstraint
     implements
     AlphaNodeFieldConstraint, Externalizable {
@@ -41,7 +54,36 @@
     public LiteralConstraint() {
         this(null, null);
     }
-
+    
+    
+    /*
+    public static LiteralConstraint buildDefaultConstraint(EvaluatorRegistry registry, Object obj, String fieldName, ValueType type, String opName, String opArgs) { 
+    	return new LiteralConstraint(
+				new ClassFieldReader(obj.getClass(),fieldName),
+				registry.getEvaluator(type, opName,false,opArgs),
+				new ObjectFieldImpl(new Long(1))
+				);    	
+    }
+    */
+    
+    public static ConstraintSignature buildSignature(String fieldName, String op, String value) {
+    	ConstraintSignature cs = new ConstraintSignature(fieldName,op, value);
+    	System.out.println("LiteralConstraint : Static signature build  "+cs);
+    	return cs;
+    }
+    
+    public ConstraintSignature getSignature() {
+    	ClassFieldReader cfr = (ClassFieldReader) this.extractor;
+    	ConstraintSignature cs =  new ConstraintSignature(
+    									cfr.getFieldName(),    									
+    									this.restriction.getEvaluator().getOperator().getOperatorString(),
+    									this.restriction.getField().toString());
+    	
+    	System.out.println("LiteralConstraint : transformed to signature "+cs);
+    	return cs;
+    }
+    
+    
     public LiteralConstraint(final InternalReadAccessor extractor,
                              final Evaluator evaluator,
                              final FieldValue field) {
@@ -112,6 +154,7 @@
         int result = 1;
         result = PRIME * result + this.extractor.hashCode();
         result = PRIME * result + this.restriction.hashCode();
+        System.out.println("LC : Hashcode "+this.toString()+ " " +result);
         return result;
     }
 
@@ -123,7 +166,7 @@
             return false;
         }
         final LiteralConstraint other = (LiteralConstraint) object;
-
+        
         return this.extractor.equals( other.extractor ) && this.restriction.equals( other.restriction );
     }
 
@@ -141,4 +184,67 @@
     public ConstraintType getType() {
         return Constraint.ConstraintType.ALPHA;
     }
+
+    
+    
+	/**
+	 * Uncertain Constraint Evaluator
+	 * 
+	 */
+	public IUncertainDegree matches(InternalFactHandle handle,
+			InternalWorkingMemory workingMemory, ContextEntry context) {
+
+
+		System.out.println("LiteralConstraint :: Trying to evaluate an Alpha-Constraint over Object ..."+handle.getObject().toString());
+    	System.out.println("Using extractor of type "+this.extractor.getClass());
+    	    	
+    	System.out.println("The value to be matched against is "+this.restriction.getField());    	
+    	
+    	UncertainFactHandle uHandle = (UncertainFactHandle) handle;  
+    	Hashtable<ConstraintSignature, IUncertainDegree> priors = uHandle.getPriors();
+    	IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+    	    
+    	ConstraintSignature key = null;    	
+    	if (priors != null && priors.containsKey(this.getSignature())) { 
+    		key = this.getSignature();
+    	} else {
+    		LiteralConstraint unbound = this.getGeneralizedLiteralConstraint(); 
+    		if (priors != null && priors.containsKey(unbound.getSignature()))
+    		key = unbound.getSignature();
+    	}
+    	
+    	
+    	key = key;
+    	    
+    	if (key != null) {
+    		// the field has already been evaluated
+    		IUncertainDegree prior = priors.get(key);
+    		if (uHandle.isOverruling()) {
+    			//the local evaluator is to be overruled. Maybe it has been applied earlier.
+    			return prior;
+    		} else {    			
+    			// Eval the operator, maybe merge with the available prior
+    			IUncertainDegree posterior = this.restriction.matches( this.extractor, handle, workingMemory );
+    			IUncertainDegree newPrior =  factory.mergeIntersect(prior, posterior);
+    				uHandle.setPrior(this.getSignature(),newPrior);
+    			return newPrior;
+    		}
+    		
+    	} else {
+    		// no, the field has not
+    		// it now becomes the actual prior
+    		IUncertainDegree newPrior = this.restriction.matches( this.extractor, handle, workingMemory );
+    			uHandle.setPrior(this.getSignature(),newPrior);
+    		return newPrior;
+    	}
+    	    	     				
+	}
+	
+	
+	public LiteralConstraint getGeneralizedLiteralConstraint() {
+    	return new LiteralConstraint(this.extractor, this.restriction.getGeneralizedRestriction());
+    }
+	
+	
+	
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -21,14 +21,20 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 
+import org.drools.IUncertainRuleBase;
+import org.drools.base.field.ObjectFieldImpl;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.reteoo.LeftTuple;
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldValue;
+import org.drools.spi.IUncertainEvaluator;
 import org.drools.spi.InternalReadAccessor;
 import org.drools.spi.Restriction;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 public class LiteralRestriction
     implements
     Restriction, Externalizable {
@@ -76,9 +82,9 @@
 
     public boolean isAllowed(final InternalReadAccessor extractor,
                              final InternalFactHandle handle,
-                             final InternalWorkingMemory workingMemoiry,
+                             final InternalWorkingMemory workingMemory,
                              final ContextEntry context ) {
-        return this.evaluator.evaluate( null,
+        return this.evaluator.evaluate( workingMemory,
                                         extractor,
                                         handle.getObject(),
                                         this.field );
@@ -133,7 +139,7 @@
             return false;
         }
         final LiteralRestriction other = (LiteralRestriction) object;
-
+        
         return this.field.equals( other.field ) && this.evaluator.equals( other.evaluator );
     }
 
@@ -147,6 +153,56 @@
                                        this.extractor );
     }
 
+    
+    
+    
+    
+    
+    
+    /**
+     * TODO Nope the generalization works now...
+     * @return
+     */
+    public LiteralRestriction getGeneralizedRestriction() {
+    	return new LiteralRestriction(new ObjectFieldImpl(null),this.evaluator, this.extractor);
+    }
+    
+    
+    public IUncertainDegree matches(InternalReadAccessor extractor,
+            InternalFactHandle handle, InternalWorkingMemory workingMemory) {
+    	
+    	
+    	if (this.evaluator instanceof IUncertainEvaluator) {
+    		IUncertainEvaluator uEval = ((IUncertainEvaluator) this.evaluator);
+            return uEval.evaluateUncertain(workingMemory,
+                    		extractor,
+                    		handle.getObject(),
+                    		this.field );    		
+    	} else {
+    		IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+    		return factory.fromBoolean(this.evaluator.evaluate(workingMemory, extractor, handle.getObject(), this.field));
+    	}
+    	
+    	
+    }
+    
+    /* (non-Javadoc)
+	 * @see org.drools.spi.Restriction#matches(org.drools.spi.InternalReadAccessor, org.drools.common.InternalFactHandle, org.drools.common.InternalWorkingMemory, org.drools.rule.ContextEntry)
+	 */
+	public IUncertainDegree matches(InternalReadAccessor extractor,
+			InternalFactHandle handle, InternalWorkingMemory workingMemory,
+			ContextEntry context) {
+		
+		return matches(extractor, handle, workingMemory);
+	}
+    
+    
+    
+    
+    
+    
+    
+    
     private static class LiteralContextEntry
         implements
         ContextEntry {
@@ -210,4 +266,72 @@
 
     }
 
+
+
+
+
+
+
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.Restriction#matchesCachedLeft(org.drools.rule.ContextEntry, org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedLeft(ContextEntry context,
+			InternalFactHandle handle, IDegreeFactory factory) {
+		
+		if (this.evaluator instanceof IUncertainEvaluator) {
+    		IUncertainEvaluator uEval = ((IUncertainEvaluator) this.evaluator);
+            return uEval.evaluateUncertain(
+            		null,
+					((LiteralContextEntry) context).getFieldExtractor(),
+					handle.getObject(),
+					this.field );    		
+    	} else {
+    		
+    		return factory.fromBoolean( 
+    				this.evaluator.evaluate( null,
+    						((LiteralContextEntry) context).getFieldExtractor(),
+    						handle.getObject(),
+    						this.field )) ;
+    		
+    		
+    	}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.Restriction#matchesCachedRight(org.drools.reteoo.LeftTuple, org.drools.rule.ContextEntry, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+			ContextEntry context, IDegreeFactory factory) {
+		
+		if (this.evaluator instanceof IUncertainEvaluator) {
+    		IUncertainEvaluator uEval = ((IUncertainEvaluator) this.evaluator);
+            return uEval.evaluateUncertain(
+            		null,
+                    ((LiteralContextEntry) context).getFieldExtractor(),
+                    ((LiteralContextEntry) context).getObject(),
+                    this.field );    		
+    	} else {
+    		
+    		return factory.fromBoolean( 
+    				this.evaluator.evaluate( null,
+                            ((LiteralContextEntry) context).getFieldExtractor(),
+                            ((LiteralContextEntry) context).getObject(),
+                            this.field )
+                    );
+    		
+    	}
+	}
+
+
+
+
+
+
+
+
+
+
+	
+
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -11,6 +11,9 @@
 import org.drools.spi.ReadAccessor;
 import org.drools.spi.Restriction;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 public class MultiRestrictionFieldConstraint extends MutableTypeConstraint {
 
     private static final long    serialVersionUID = 400L;
@@ -109,5 +112,40 @@
         return new MultiRestrictionFieldConstraint( this.extractor,
                                                     (Restriction) this.restrictions.clone() );
     }
+    
+    
+    
 
+	/**
+	 * 
+	 */
+	public IUncertainDegree matches(InternalFactHandle handle,
+			InternalWorkingMemory workingMemory, ContextEntry context) {
+		
+		return this.restrictions.matches( this.extractor,
+                handle,
+                workingMemory,
+                context );
+		
+		
+	}
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedLeft(org.drools.rule.ContextEntry, org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedLeft(ContextEntry context,
+			InternalFactHandle handle, IDegreeFactory factory) {
+		return this.restrictions.matchesCachedLeft( context,
+                handle, factory );
+	}
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedRight(org.drools.reteoo.LeftTuple, org.drools.rule.ContextEntry, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+			ContextEntry context, IDegreeFactory factory) {
+		return this.restrictions.matchesCachedRight( tuple,
+                context, factory );
+	}
+
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/OrCompositeRestriction.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/OrCompositeRestriction.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/OrCompositeRestriction.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -1,11 +1,17 @@
 package org.drools.rule;
 
+import org.drools.IUncertainRuleBase;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.reteoo.LeftTuple;
+import org.drools.rule.AbstractCompositeRestriction.CompositeContextEntry;
 import org.drools.spi.InternalReadAccessor;
 import org.drools.spi.Restriction;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+import uncertainty.truthvals.operators.IUncDegCombiner;
+
 public class OrCompositeRestriction extends AbstractCompositeRestriction {
 
     private static final long serialVersionUID = 400L;
@@ -32,6 +38,34 @@
         return false;
     }
 
+    
+    
+    /**
+	 * Uncertain OR for alpha network
+	 */
+	public IUncertainDegree matches(InternalReadAccessor extractor,
+			InternalFactHandle handle, InternalWorkingMemory workingMemory,
+			ContextEntry context)  {
+				        
+		IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+        
+        if (this.restrictions.length > 0) {
+    		IUncertainDegree[] degs = new IUncertainDegree[this.restrictions.length];
+    		for ( int i = 0; i < this.restrictions.length; i++ ) {
+                degs[i] = this.restrictions[i].matches(extractor, handle, workingMemory, context);                
+            }
+    		
+    		IUncDegCombiner or = factory.getOrOperator();
+    		IUncertainDegree ans = or.eval(degs); 
+    		
+    		System.out.println("OrCompositeRestriction : Combination yields "+ans);
+    		return ans;
+    		    		
+    	} else return factory.True();
+        
+		
+	}
+    
     public boolean isAllowedCachedLeft(final ContextEntry context,
                                        final InternalFactHandle handle) {
         CompositeContextEntry contextEntry = (CompositeContextEntry) context;
@@ -63,4 +97,38 @@
         }
         return new OrCompositeRestriction( clone );
     }
+    
+    
+    
+    /* (non-Javadoc)
+	 * @see org.drools.spi.Restriction#matchesCachedLeft(org.drools.rule.ContextEntry, org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedLeft(ContextEntry context,
+			InternalFactHandle handle, IDegreeFactory factory) {
+		
+		CompositeContextEntry contextEntry = (CompositeContextEntry) context;
+		IUncertainDegree[] degs = new IUncertainDegree[this.restrictions.length];
+        for ( int i = 0, ilength = this.restrictions.length; i < ilength; i++ ) {
+        	degs[i] = this.restrictions[i].matchesCachedLeft(contextEntry.contextEntries[i], handle, factory);          
+        }
+        return factory.getOrOperator().eval(degs);
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.Restriction#matchesCachedRight(org.drools.reteoo.LeftTuple, org.drools.rule.ContextEntry, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+			ContextEntry context, IDegreeFactory factory) {
+		
+		CompositeContextEntry contextEntry = (CompositeContextEntry) context;
+		IUncertainDegree[] degs = new IUncertainDegree[this.restrictions.length];
+		
+        for ( int i = 0, ilength = this.restrictions.length; i < ilength; i++ ) {
+        	degs[i] = this.restrictions[i].matchesCachedRight(tuple, contextEntry.contextEntries[i], factory);            
+        }
+        return factory.getOrOperator().eval(degs);
+	}
+
+    
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/OrConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/OrConstraint.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/OrConstraint.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -18,13 +18,19 @@
 
 import java.util.Arrays;
 
+import org.drools.IUncertainRuleBase;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.reteoo.LeftTuple;
+import org.drools.rule.AbstractCompositeConstraint.MultiFieldConstraintContextEntry;
 import org.drools.spi.AlphaNodeFieldConstraint;
 import org.drools.spi.BetaNodeFieldConstraint;
 import org.drools.util.ArrayUtils;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+import uncertainty.truthvals.operators.IUncDegCombiner;
+
 /**
  * A class to implement Multi-Field OR constraints, so user can do:
  * 
@@ -154,4 +160,87 @@
 
         return clone;
     }
+
+    /**
+	 * Uncertain OR for alpha network
+	 */
+	public IUncertainDegree matches(InternalFactHandle handle,
+			InternalWorkingMemory workingMemory, ContextEntry context) {
+				        
+        IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+        
+        if (this.alphaConstraints.length > 0) {
+    		IUncertainDegree[] degs = new IUncertainDegree[this.alphaConstraints.length];
+    		for ( int i = 0; i < this.alphaConstraints.length; i++ ) {
+                degs[i] = this.alphaConstraints[i].matches(handle, workingMemory, context);                
+            }
+    		
+    		IUncDegCombiner or = factory.getOrOperator();
+    		IUncertainDegree ans = or.eval(degs); 
+    		
+    		System.out.println("OrConstraint : Combination of "+this.alphaConstraints.length+" constraints yields "+ans);
+    		return ans;
+    		    		
+    	} else return factory.True();
+        
+		
+	}
+	
+	
+	
+	/**
+     * {@inheritDoc}
+     */
+    public IUncertainDegree matchesCachedLeft(ContextEntry context,
+                                       InternalFactHandle handle,
+                                       IDegreeFactory factory) {
+    	
+    	int nA = this.alphaConstraints.length;
+    	int nB = this.betaConstraints.length;
+    	IUncertainDegree[] degs = new IUncertainDegree[nA+nB];
+        for ( int i = 0; i < this.alphaConstraints.length; i++ ) {
+            degs[i] = this.alphaConstraints[i].matches( handle,
+                                                      ((MultiFieldConstraintContextEntry) context).workingMemory,
+                                                      ((MultiFieldConstraintContextEntry) context).alphas[i] );
+        }
+        
+        for ( int i = 0; i < this.betaConstraints.length; i++ ) {
+            degs[nA+i] = this.betaConstraints[i].matchesCachedLeft( ((MultiFieldConstraintContextEntry) context).betas[i],
+                                                               handle, factory );                             
+        }
+
+        if (nA+nB == 0) return factory.True();
+        return factory.getOrOperator().eval(degs);
+                
+    }
+    
+    
+    /**
+     * {@inheritDoc}
+     */
+    public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+            						   ContextEntry context, 
+                                       IDegreeFactory factory) {
+    	
+    	int nA = this.alphaConstraints.length;
+    	int nB = this.betaConstraints.length;
+    	IUncertainDegree[] degs = new IUncertainDegree[nA+nB];
+        for ( int i = 0; i < this.alphaConstraints.length; i++ ) {
+            degs[i] = this.alphaConstraints[i].matches( ((MultiFieldConstraintContextEntry) context).handle,
+                    									((MultiFieldConstraintContextEntry) context).workingMemory,
+                    									((MultiFieldConstraintContextEntry) context).alphas[i] );
+        }
+        
+        for ( int i = 0; i < this.betaConstraints.length; i++ ) {
+            degs[nA+i] = this.betaConstraints[i].matchesCachedRight( tuple,
+                    	((MultiFieldConstraintContextEntry) context).betas[i], factory );                             
+        }
+
+        if (nA+nB == 0) return factory.True();
+        return factory.getOrOperator().eval(degs);
+                
+    }
+	
+	
+	
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -30,6 +30,9 @@
 import org.drools.spi.PredicateExpression;
 import org.drools.spi.Restriction;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * A predicate can be written as a top level constraint or be nested
  * inside inside a field constraint (and as so, must implement the
@@ -371,4 +374,39 @@
         }
     }
 
+	/**
+	 * TODO : Unsupported Uncertain PredicateExpression...
+	 */
+	public IUncertainDegree matches(InternalFactHandle handle,
+			InternalWorkingMemory workingMemory, ContextEntry context) {
+
+		throw new UnsupportedOperationException("Predicate Constraint Uncertain Eval");
+        
+	}
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.Restriction#matches(org.drools.spi.InternalReadAccessor, org.drools.common.InternalFactHandle, org.drools.common.InternalWorkingMemory, org.drools.rule.ContextEntry)
+	 */
+	public IUncertainDegree matches(InternalReadAccessor extractor,
+			InternalFactHandle handle, InternalWorkingMemory workingMemory,
+			ContextEntry context) {
+		throw new UnsupportedOperationException("Method not supported. Please contact development team.");
+	}
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedLeft(org.drools.rule.ContextEntry, org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedLeft(ContextEntry context,
+			InternalFactHandle handle, IDegreeFactory factory) {
+		throw new UnsupportedOperationException("Method not supported. Please contact development team.");
+	}
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedRight(org.drools.reteoo.LeftTuple, org.drools.rule.ContextEntry, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+			ContextEntry context, IDegreeFactory factory) {
+		throw new UnsupportedOperationException("Method not supported. Please contact development team.");
+	}
+
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -30,6 +30,9 @@
 import org.drools.spi.InternalReadAccessor;
 import org.drools.spi.ReturnValueExpression;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 public class ReturnValueConstraint extends MutableTypeConstraint
     implements
     Externalizable {
@@ -159,10 +162,64 @@
                                               e );
         }
     }
+    
+    
+    
+    
+    public IUncertainDegree matchesCachedLeft(final ContextEntry context,
+            final InternalFactHandle handle, IDegreeFactory factory) {
+    	try {
+    		final ReturnValueContextEntry ctx = (ReturnValueContextEntry) context;
+    		return this.restriction.matches( this.fieldExtractor,
+    				handle,
+                    ctx.getTuple(),
+                    ctx.getWorkingMemory(),
+                    ctx );
+    	} catch ( final Exception e ) {
+    		throw new RuntimeDroolsException( "Exception executing ReturnValue constraint " + this.restriction + " : " + e.getMessage(),
+    				e );
+    	}
+    }
 
+    public IUncertainDegree matchesCachedRight(final LeftTuple tuple,
+             final ContextEntry context, IDegreeFactory factory) {
+    	try {
+    		final ReturnValueContextEntry ctx = (ReturnValueContextEntry) context;
+    		return this.restriction.matches( this.fieldExtractor,
+    					ctx.getHandle(),
+                    	tuple,
+                    	ctx.getWorkingMemory(),
+                    	ctx );
+    	} catch ( final Exception e ) {
+    		throw new RuntimeDroolsException( "Exception executing ReturnValue constraint " + this.restriction + " : " + e.getMessage(),
+                   e );
+    	}
+    }
+    
+
     public Object clone() {
         return new ReturnValueConstraint( this.fieldExtractor,
                                           (ReturnValueRestriction) this.restriction.clone() );
     }
 
+    
+    
+	/**
+	 * 
+	 */
+	public IUncertainDegree matches(InternalFactHandle handle,
+			InternalWorkingMemory workingMemory, ContextEntry context) {
+		
+		try {
+            return this.restriction.matches( this.fieldExtractor,
+                                               handle,
+                                               null,
+                                               workingMemory,
+                                               context );
+        } catch ( final Exception e ) {
+            throw new RuntimeDroolsException( "Exception executing ReturnValue constraint " + this.restriction + " : " + e.getMessage(),
+                                              e );
+        }
+	}
+
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -28,12 +28,16 @@
 import org.drools.common.InternalWorkingMemory;
 import org.drools.reteoo.LeftTuple;
 import org.drools.spi.Evaluator;
+import org.drools.spi.IUncertainEvaluator;
 import org.drools.spi.InternalReadAccessor;
 import org.drools.spi.ReadAccessor;
 import org.drools.spi.Restriction;
 import org.drools.spi.ReturnValueExpression;
 import org.drools.spi.Tuple;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 public class ReturnValueRestriction
     implements
     Restriction {
@@ -427,4 +431,61 @@
         }
     }
 
+	/**
+	 * @param fieldExtractor
+	 * @param handle
+	 * @param object
+	 * @param workingMemory
+	 * @param context
+	 * @return
+	 */
+	public IUncertainDegree matches(final InternalReadAccessor extractor,
+            final InternalFactHandle handle,
+            final Tuple tuple,
+            final WorkingMemory workingMemory,
+            final ContextEntry context) {
+
+		
+		try {
+            return ((IUncertainEvaluator) this.evaluator).evaluateUncertain( workingMemory,
+                                            extractor,
+                                            handle.getObject(),
+                                            this.expression.evaluate( handle.getObject(),
+                                                                      tuple,
+                                                                      this.previousDeclarations,
+                                                                      this.localDeclarations,
+                                                                      workingMemory,
+                                                                      ((ReturnValueContextEntry)context).dialectContext) );
+        } catch ( final Exception e ) {
+            throw new RuntimeDroolsException( e );
+        }
+	}
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.Restriction#matches(org.drools.spi.InternalReadAccessor, org.drools.common.InternalFactHandle, org.drools.common.InternalWorkingMemory, org.drools.rule.ContextEntry)
+	 */
+	public IUncertainDegree matches(InternalReadAccessor extractor,
+			InternalFactHandle handle, InternalWorkingMemory workingMemory,
+			ContextEntry context) {
+		throw new UnsupportedOperationException( "does not support method call matches(Object object, InternalWorkingMemory workingMemoiry)" );
+	}
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.Restriction#matchesCachedLeft(org.drools.rule.ContextEntry, org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedLeft(ContextEntry context,
+			InternalFactHandle handle, IDegreeFactory factory) {
+        throw new UnsupportedOperationException( "does not support method call isAllowed(Object object, InternalWorkingMemory workingMemoiry)" );
+
+	}
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.Restriction#matchesCachedRight(org.drools.reteoo.LeftTuple, org.drools.rule.ContextEntry, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+			ContextEntry context, IDegreeFactory factory) {
+        throw new UnsupportedOperationException( "does not support method call isAllowed(Object object, InternalWorkingMemory workingMemoiry)" );
+
+	}
+
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/VariableConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/VariableConstraint.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/VariableConstraint.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -20,13 +20,20 @@
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.util.Hashtable;
 
+import org.drools.IUncertainRuleBase;
+import org.drools.base.ClassFieldReader;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.common.UncertainFactHandle;
 import org.drools.reteoo.LeftTuple;
 import org.drools.spi.Evaluator;
 import org.drools.spi.InternalReadAccessor;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 public class VariableConstraint extends MutableTypeConstraint
     implements
     Externalizable {
@@ -93,6 +100,54 @@
                                            workingMemory,
                                            context );
     }
+    
+    
+    public IUncertainDegree matches(InternalFactHandle handle,
+			InternalWorkingMemory workingMemory, ContextEntry context) {
+    	
+    	
+    	System.out.println("VariableConstraint :: Trying to evaluate an Alpha-Constraint over Object ..."+handle.getObject().toString());
+    	    	    	           	
+    	UncertainFactHandle uHandle = (UncertainFactHandle) handle;  
+    	Hashtable<ConstraintSignature, IUncertainDegree> priors = uHandle.getPriors();
+    	IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+    	    
+    	ConstraintSignature key = null;    	
+    	if (priors != null && priors.containsKey(this.getSignature())) { 
+    		key = this.getSignature();
+    	} 
+    	    
+    	if (key != null) {
+    		// the field has already been evaluated
+    		IUncertainDegree prior = priors.get(key);
+    		if (uHandle.isOverruling()) {
+    			//the local evaluator is to be overruled. Maybe it has been applied earlier.
+    			return prior;
+    		} else {    			
+    			// Eval the operator, maybe merge with the available prior
+    			IUncertainDegree posterior = this.restriction.matches( this.fieldExtractor, handle, workingMemory, context );
+    			IUncertainDegree newPrior =  factory.mergeIntersect(prior, posterior);
+    				uHandle.setPrior(this.getSignature(),newPrior);
+    			return newPrior;
+    		}
+    		
+    	} else {
+    		// no, the field has not
+    		// it now becomes the actual prior
+    		IUncertainDegree newPrior = this.restriction.matches( this.fieldExtractor, handle, workingMemory, context );
+    			uHandle.setPrior(this.getSignature(),newPrior);
+    		return newPrior;
+    	}
+    	
+    	
+    	
+    	
+    	
+    	
+    	
+    	
+    	
+	}
 
     public boolean isAllowedCachedLeft(final ContextEntry context,
                                        final InternalFactHandle handle) {
@@ -105,7 +160,24 @@
         return this.restriction.isAllowedCachedRight( tuple,
                                                       context );
     }
+    
+    
+    public IUncertainDegree matchesCachedLeft(final ContextEntry context,
+            									final InternalFactHandle handle,
+            									IDegreeFactory factory) {
+    	return this.restriction.matchesCachedLeft( context,
+                          handle, factory );
+    }
 
+	public IUncertainDegree matchesCachedRight(final LeftTuple tuple,
+	             								final ContextEntry context,
+	             								IDegreeFactory factory) {
+		return this.restriction.matchesCachedRight( tuple,
+	                           context, factory );
+	}
+    
+    
+
     public String toString() {
         return "[VariableConstraint fieldExtractor=" + this.fieldExtractor + " declaration=" + getRequiredDeclarations() + "]";
     }
@@ -141,4 +213,18 @@
                                        (VariableRestriction) this.restriction.clone() );
     }
 
+	
+    
+    
+    public ConstraintSignature getSignature() {    	
+    	ConstraintSignature cs =  new ConstraintSignature(
+    									((ClassFieldReader) this.fieldExtractor).getFieldName(),    									
+    									this.restriction.getEvaluator().getOperator().getOperatorString(),
+    									((ClassFieldReader) ((VariableRestriction) this.restriction).getRequiredDeclarations()[0].getExtractor()).getFieldName()
+    									);
+    	
+    	System.out.println("VariableConstraint : transformed to signature "+cs);
+    	return cs;
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/VariableRestriction.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/VariableRestriction.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -21,15 +21,20 @@
 import java.io.ObjectOutput;
 import java.util.Arrays;
 
+import org.drools.IUncertainRuleBase;
 import org.drools.base.ValueType;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.reteoo.LeftTuple;
 import org.drools.spi.Evaluator;
+import org.drools.spi.IUncertainEvaluator;
 import org.drools.spi.InternalReadAccessor;
 import org.drools.spi.ReadAccessor;
 import org.drools.spi.Restriction;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 public class VariableRestriction
     implements
     Restriction {
@@ -96,7 +101,27 @@
                                         this.declaration.getExtractor(),
                                         this.evaluator.prepareObject( handle ) );
     }
-
+    
+    
+    public IUncertainDegree matches(final InternalReadAccessor extractor,
+            						final InternalFactHandle handle,
+            						final InternalWorkingMemory workingMemory,
+            						final ContextEntry context ) {
+    	
+    	if (this.evaluator instanceof IUncertainEvaluator) {
+    		return ((IUncertainEvaluator) this.evaluator).evaluateUncertain( workingMemory,
+        			this.extractor,
+        			this.evaluator.prepareObject( handle ),
+        			this.declaration.getExtractor(),
+        			this.evaluator.prepareObject( handle ) );
+    	} else {
+    		IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory(); 
+    		return factory.fromBoolean( this.isAllowed(extractor, handle, workingMemory, context) );
+    	}
+    	
+    	
+    }
+    
     public boolean isAllowedCachedLeft(final ContextEntry context,
                                        final InternalFactHandle handle) {
         return this.evaluator.evaluateCachedLeft( ((VariableContextEntry) context).workingMemory,
@@ -111,6 +136,59 @@
                                                    this.evaluator.prepareObject( tuple.get( this.declaration ) ) );
     }
 
+    
+    
+    
+    /**
+	 * @param context
+	 * @param handle
+	 * @param factory
+	 * @return
+	 */
+	public IUncertainDegree matchesCachedLeft(ContextEntry context,
+			InternalFactHandle handle, IDegreeFactory factory) {
+		
+		if (this.evaluator instanceof IUncertainEvaluator) {
+			IUncertainEvaluator uEval = (IUncertainEvaluator) this.evaluator;
+			return uEval.evaluateUncertainCachedLeft(((VariableContextEntry) context).workingMemory,
+													 (VariableContextEntry) context,
+													 this.evaluator.prepareObject( handle ) );
+		} else {
+		
+			return factory.fromBoolean(
+				this.evaluator.evaluateCachedLeft( ((VariableContextEntry) context).workingMemory,
+													(VariableContextEntry) context,
+													this.evaluator.prepareObject( handle ) ));
+		}
+	}
+
+	/**
+	 * @param tuple
+	 * @param context
+	 * @param factory
+	 * @return
+	 */
+	public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+			ContextEntry context, IDegreeFactory factory) {
+		
+		if (this.evaluator instanceof IUncertainEvaluator) {
+			IUncertainEvaluator uEval = (IUncertainEvaluator) this.evaluator;
+			return uEval.evaluateUncertainCachedRight( ((VariableContextEntry) context).workingMemory,
+														(VariableContextEntry) context,
+														this.evaluator.prepareObject( tuple.get( this.declaration ) ) );
+		} else {
+		
+			return factory.fromBoolean(
+					this.evaluator.evaluateCachedRight( ((VariableContextEntry) context).workingMemory,
+                            							(VariableContextEntry) context,
+                            							this.evaluator.prepareObject( tuple.get( this.declaration ) ) ));
+		}
+		
+	}
+    
+    
+    
+
     public String toString() {
         return "[VariableRestriction declaration=" + this.declaration + "]";
     }
@@ -571,4 +649,6 @@
             }
         }
     }
+
+	
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/AlphaNodeFieldConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/AlphaNodeFieldConstraint.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/AlphaNodeFieldConstraint.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -20,6 +20,8 @@
 import org.drools.common.InternalWorkingMemory;
 import org.drools.rule.ContextEntry;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public interface AlphaNodeFieldConstraint
     extends
     Constraint {
@@ -29,4 +31,9 @@
     public boolean isAllowed(InternalFactHandle handle,
                              InternalWorkingMemory workingMemory,
                              ContextEntry context);
+    
+    public IUncertainDegree matches(InternalFactHandle handle,
+            						InternalWorkingMemory workingMemory,
+            						ContextEntry context);
+    
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/BetaNodeFieldConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/BetaNodeFieldConstraint.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/BetaNodeFieldConstraint.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -20,6 +20,9 @@
 import org.drools.reteoo.LeftTuple;
 import org.drools.rule.ContextEntry;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 public interface BetaNodeFieldConstraint
     extends
     Constraint {
@@ -29,7 +32,17 @@
 
     public boolean isAllowedCachedRight(LeftTuple tuple,
                                         ContextEntry context);
+    
+    
+    public IUncertainDegree matchesCachedLeft(ContextEntry context,
+            InternalFactHandle handle,
+            IDegreeFactory factory);
 
+    public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+    		ContextEntry context,
+    		IDegreeFactory factory);
+    
+
     public ContextEntry createContextEntry();
 
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/FactHandleFactory.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/FactHandleFactory.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/FactHandleFactory.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -18,14 +18,20 @@
 
 import java.io.IOException;
 import java.io.Serializable;
+import java.util.Hashtable;
 
 import org.drools.FactHandle;
+import org.drools.WorkingMemory;
+import org.drools.common.IUncertainInternalFactHandle;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.marshalling.MarshallerReaderContext;
 import org.drools.marshalling.MarshallerWriteContext;
 import org.drools.reteoo.ObjectTypeConf;
+import org.drools.rule.ConstraintSignature;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * Factory Interface to return new <code>FactHandle</code>s
  * 
@@ -42,7 +48,19 @@
      */
     public InternalFactHandle newFactHandle(Object object, ObjectTypeConf conf, InternalWorkingMemory workingMemory );
     
+    
+    
     /**
+     * Construct a uncertainty-based handle with a new id.
+     * 
+     * @return The handle.
+     */    
+    public IUncertainInternalFactHandle newUncertainFactHandle(Object object, Hashtable<ConstraintSignature, IUncertainDegree> priors, ObjectTypeConf conf, InternalWorkingMemory workingMemory );
+    
+    
+    
+    
+    /**
      * Increases the recency of the FactHandle
      * 
      * @param factHandle

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -17,13 +17,17 @@
  */
 
 import java.io.Serializable;
+import java.util.Hashtable;
 
 import org.drools.FactException;
 import org.drools.FactHandle;
 import org.drools.WorkingMemory;
+import org.drools.rule.ConstraintSignature;
 import org.drools.rule.Declaration;
 import org.drools.rule.Rule;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * KnowledgeHelper implementation types are injected into consequenses
  * instrumented at compile time and instances passed at runtime. It provides
@@ -77,6 +81,13 @@
     public void insertLogical(Object object,
                                     boolean dynamic) throws FactException;
     
+    
+    public void insertLogical(Object object,
+            Hashtable<ConstraintSignature, IUncertainDegree> priors) throws FactException;
+    
+    public void insert(Object object,
+            Hashtable<ConstraintSignature, IUncertainDegree> priors) throws FactException;
+    
     void update(FactHandle handle,
                       Object newObject) throws FactException;
 
@@ -140,5 +151,7 @@
     public Declaration getDeclaration(String identifier);
     
     public void halt();
+    
+    public IUncertainDegree getActivationDegree();
 
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/ObjectType.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/ObjectType.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/ObjectType.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -19,6 +19,9 @@
 
 import org.drools.base.ValueType;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * Semantic object type differentiator.
  *
@@ -44,6 +47,13 @@
     boolean isAssignableFrom(Object object);
 
     boolean isAssignableFrom(ObjectType objectType);
+    
+    
+    
+    IUncertainDegree isAn(Object object, IDegreeFactory factory);
+    
+    IUncertainDegree isSubClass(Class clazz, IDegreeFactory factory);
+        
 
     /**
      * Returns true if the object type represented by this object

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/Restriction.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/Restriction.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/Restriction.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -9,6 +9,9 @@
 import org.drools.rule.ContextEntry;
 import org.drools.rule.Declaration;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 public interface Restriction
     extends
     Externalizable,
@@ -39,5 +42,29 @@
                             Declaration newDecl);
 
     public Object clone();
+    
+    
+    public IUncertainDegree matches(InternalReadAccessor extractor,
+            InternalFactHandle handle,
+            InternalWorkingMemory workingMemory,
+            ContextEntry context );
 
+	/**
+	 * @param context
+	 * @param handle
+	 * @param factory
+	 * @return
+	 */
+	IUncertainDegree matchesCachedLeft(ContextEntry context,
+			InternalFactHandle handle, IDegreeFactory factory);
+
+	/**
+	 * @param tuple
+	 * @param context
+	 * @param factory
+	 * @return
+	 */
+	IUncertainDegree matchesCachedRight(LeftTuple tuple, ContextEntry context,
+			IDegreeFactory factory);
+
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -4,6 +4,7 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.lang.reflect.Method;
+import java.util.Deque;
 
 import junit.framework.TestCase;
 
@@ -25,6 +26,8 @@
 import org.drools.spi.InternalReadAccessor;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class CompositeObjectSinkAdapterTest extends TestCase {
     private ReteooRuleBase               ruleBase;
     private BuildContext                 buildContext;
@@ -593,5 +596,15 @@
             // TODO Auto-generated method stub
             return 0;
         }
+
+		/* (non-Javadoc)
+		 * @see org.drools.reteoo.ObjectSink#assertObject(org.drools.common.InternalFactHandle, java.util.Deque, org.drools.spi.PropagationContext, org.drools.common.InternalWorkingMemory)
+		 */
+		public void assertObject(InternalFactHandle factHandle,
+				Deque<IUncertainDegree> truthVal, PropagationContext context,
+				InternalWorkingMemory workingMemory) {
+			// TODO Auto-generated method stub
+			
+		}
     }
 }

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/reteoo/MockObjectSink.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/reteoo/MockObjectSink.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/reteoo/MockObjectSink.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -17,12 +17,15 @@
  */
 
 import java.util.ArrayList;
+import java.util.Deque;
 import java.util.List;
 
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class MockObjectSink
     implements
     ObjectSinkNode,
@@ -104,4 +107,14 @@
         // TODO Auto-generated method stub
         return 0;
     }
+
+	/* (non-Javadoc)
+	 * @see org.drools.reteoo.ObjectSink#assertObject(org.drools.common.InternalFactHandle, java.util.Deque, org.drools.spi.PropagationContext, org.drools.common.InternalWorkingMemory)
+	 */
+	public void assertObject(InternalFactHandle factHandle,
+			Deque<IUncertainDegree> truthVal, PropagationContext context,
+			InternalWorkingMemory workingMemory) {
+		// TODO Auto-generated method stub
+		
+	}
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/spi/MockConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/spi/MockConstraint.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/spi/MockConstraint.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -23,6 +23,9 @@
 import org.drools.rule.ContextEntry;
 import org.drools.rule.Declaration;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 import java.io.ObjectOutput;
 import java.io.IOException;
 import java.io.ObjectInput;
@@ -120,4 +123,20 @@
         return ConstraintType.BETA;
     }
 
+	/* (non-Javadoc)
+	 * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedLeft(org.drools.rule.ContextEntry, org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedLeft(ContextEntry context,
+			InternalFactHandle handle, IDegreeFactory factory) {
+		return factory.fromBoolean(this.isAllowed);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedRight(org.drools.reteoo.LeftTuple, org.drools.rule.ContextEntry, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+			ContextEntry context, IDegreeFactory factory) {
+		return factory.fromBoolean(this.isAllowed);
+	}
+
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/spi/MockObjectType.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/spi/MockObjectType.java	2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/spi/MockObjectType.java	2008-08-12 22:48:36 UTC (rev 21493)
@@ -3,6 +3,9 @@
 import org.drools.base.ClassObjectType;
 import org.drools.base.ValueType;
 
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
 import java.io.ObjectOutput;
 import java.io.ObjectInput;
 import java.io.IOException;
@@ -113,5 +116,19 @@
     public void setEvent(boolean isEvent) {
         this.isEvent = isEvent;
     }
+	/* (non-Javadoc)
+	 * @see org.drools.spi.ObjectType#isAn(java.lang.Object, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree isAn(Object object, IDegreeFactory factory) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+	/* (non-Javadoc)
+	 * @see org.drools.spi.ObjectType#isSubClass(java.lang.Class, uncertainty.factory.IDegreeFactory)
+	 */
+	public IUncertainDegree isSubClass(Class clazz, IDegreeFactory factory) {
+		// TODO Auto-generated method stub
+		return null;
+	}
 
 }
\ No newline at end of file




More information about the jboss-svn-commits mailing list