[jboss-svn-commits] JBL Code SVN: r18625 - in labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools: base/evaluators and 6 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Feb 28 19:12:56 EST 2008


Author: dsotty
Date: 2008-02-28 19:12:56 -0500 (Thu, 28 Feb 2008)
New Revision: 18625

Modified:
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/BaseEvaluator.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/ClassObjectType.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/evaluators/EqualityEvaluatorsDefinition.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/evaluators/Operator.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/BetaConstraints.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/InternalRuleBase.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/facttemplates/FactTemplateObjectType.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CompositeTupleSinkAdapter.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EmptyObjectSinkAdapter.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EmptyTupleSinkAdapter.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/FactHandleMemory.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/NotNode.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectSinkPropagator.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/Rete.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/SingleObjectSinkAdapter.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/SingleTupleSinkAdapter.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/TupleMemory.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/TupleSinkPropagator.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/AndConstraint.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/OrConstraint.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/VariableConstraint.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/AlphaNodeFieldConstraint.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/Evaluator.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/ObjectType.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/Restriction.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/AbstractHashTable.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactHashTable.java
   labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactList.java
Log:


Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/BaseEvaluator.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/BaseEvaluator.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/BaseEvaluator.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -18,8 +18,15 @@
 
 import org.drools.base.evaluators.Operator;
 import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.rule.VariableRestriction.VariableContextEntry;
 import org.drools.spi.Evaluator;
+import org.drools.spi.Extractor;
+import org.drools.spi.FieldValue;
 
+import uncertainty.truthvals.Degree;
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * BaseEvaluator is an Object Comparator that is operator aware
  * 
@@ -62,6 +69,7 @@
         }
         if ( object == null || !(object instanceof BaseEvaluator) ) {
             return false;
+            
         }
 
         final Evaluator other = (Evaluator) object;
@@ -72,4 +80,34 @@
         return (this.getValueType().hashCode()) ^ (this.getOperator().hashCode()) ^ (this.getClass().hashCode());
     }
 
+    
+    public IUncertainDegree evaluateUnc(InternalWorkingMemory workingMemory,
+            Extractor extractor,
+            Object object1,
+            FieldValue value) {
+        return evaluate(workingMemory,extractor,object1,value) ? new Degree(1) : new Degree(0);
+    }
+
+    public IUncertainDegree evaluateUnc(InternalWorkingMemory workingMemory,
+            Extractor leftExtractor,
+            Object left,
+            Extractor rightExtractor,
+            Object right) {
+        return evaluate(workingMemory,leftExtractor,left,rightExtractor,right) ? new Degree(1) : new Degree(0);
+    }
+
+    public IUncertainDegree evaluateCachedLeftUnc(InternalWorkingMemory workingMemory,
+            VariableContextEntry context,
+            Object object1) {
+        return evaluateCachedLeft(workingMemory,context,object1) ? new Degree(1) : new Degree(0);
+    }
+
+    public IUncertainDegree evaluateCachedRightUnc(InternalWorkingMemory workingMemory,
+            VariableContextEntry context,
+            Object object2) {
+        return evaluateCachedRight(workingMemory,context,object2) ? new Degree(1) : new Degree(0);
+    }
+    
+    
+    
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/ClassObjectType.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/ClassObjectType.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/ClassObjectType.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -18,6 +18,9 @@
 
 import org.drools.spi.ObjectType;
 
+import uncertainty.truthvals.Degree;
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * Java class semantics <code>ObjectType</code>.
  * 
@@ -165,4 +168,30 @@
         return this.objectTypeClass.hashCode();
     }
 
+    
+    /**
+     * Ontological ???? based connection between classes
+     * As this is a method stub, it returns TRUE if the objects
+     * belong to the same class and 0.9-TRUE if the object is a subclass of the given
+     * 
+     * This is purely an example of output behaviour
+     * @author Sotty
+     * 
+     */
+    public IUncertainDegree isCompatibleWith(Object object) {
+        if ( object == null) {
+            return new Degree(0);
+        }
+        
+        Class clazz = object instanceof ShadowProxy ? object.getClass().getSuperclass() : object.getClass();
+        if ( this == object || clazz == objectTypeClass) {
+            return new Degree(1);
+        }
+        if (this.objectTypeClass.isAssignableFrom(object.getClass())) {
+            System.out.println("Deprec: ClassObjectTypeFilter : Object is not a 'full' member of type, lose degree ");
+            return new Degree(0.66);
+        }
+        return new Degree(0);        
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -105,6 +105,7 @@
     
     public void insertLogical(final Object object,
                               final boolean dynamic) throws FactException {
+        System.out.println("DefaultKnwHelper: Insert Logical inf.duration");
         this.workingMemory.insert( object,
         						   0,
                                    dynamic,
@@ -116,6 +117,7 @@
     public void insertLogical(final Object object,
     						  final long duration,
     						  final boolean dynamic) throws FactException {
+        System.out.println("DefaultKnwHelper: Insert Logical duration - ----------- "+duration);
 		this.workingMemory.insert( object,
 								   duration,
 								   dynamic,

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/evaluators/EqualityEvaluatorsDefinition.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/evaluators/EqualityEvaluatorsDefinition.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/evaluators/EqualityEvaluatorsDefinition.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -34,6 +34,9 @@
 import org.drools.spi.FieldValue;
 import org.drools.util.DateUtils;
 
+import uncertainty.truthvals.Degree;
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * This class defines the default built in equality
  * evaluators == and !=
@@ -76,10 +79,13 @@
             addEvaluator( ValueType.FLOAT_TYPE,         Operator.NOT_EQUAL,     FloatNotEqualEvaluator.INSTANCE );
             addEvaluator( ValueType.PFLOAT_TYPE,        Operator.EQUAL,         FloatEqualEvaluator.INSTANCE );
             addEvaluator( ValueType.PFLOAT_TYPE,        Operator.NOT_EQUAL,     FloatNotEqualEvaluator.INSTANCE );
-            addEvaluator( ValueType.INTEGER_TYPE,       Operator.EQUAL,         IntegerEqualEvaluator.INSTANCE );
+            
+            addEvaluator( ValueType.INTEGER_TYPE,       Operator.EQUAL,         IntegerAlmostEqualEvaluator.INSTANCE );
             addEvaluator( ValueType.INTEGER_TYPE,       Operator.NOT_EQUAL,     IntegerNotEqualEvaluator.INSTANCE );
-            addEvaluator( ValueType.PINTEGER_TYPE,      Operator.EQUAL,         IntegerEqualEvaluator.INSTANCE );
+            addEvaluator( ValueType.PINTEGER_TYPE,      Operator.EQUAL,         IntegerAlmostEqualEvaluator.INSTANCE );
             addEvaluator( ValueType.PINTEGER_TYPE,      Operator.NOT_EQUAL,     IntegerNotEqualEvaluator.INSTANCE );
+            
+            
             addEvaluator( ValueType.LONG_TYPE,          Operator.EQUAL,         LongEqualEvaluator.INSTANCE );
             addEvaluator( ValueType.LONG_TYPE,          Operator.NOT_EQUAL,     LongNotEqualEvaluator.INSTANCE );
             addEvaluator( ValueType.PLONG_TYPE,         Operator.EQUAL,         LongEqualEvaluator.INSTANCE );
@@ -92,6 +98,7 @@
             addEvaluator( ValueType.PSHORT_TYPE,        Operator.NOT_EQUAL,     ShortNotEqualEvaluator.INSTANCE );
             addEvaluator( ValueType.STRING_TYPE,        Operator.EQUAL,         StringEqualEvaluator.INSTANCE );
             addEvaluator( ValueType.STRING_TYPE,        Operator.NOT_EQUAL,     StringNotEqualEvaluator.INSTANCE );
+                                   
         }
     };
     
@@ -1422,6 +1429,85 @@
         }
     }
 
+    
+    static class IntegerAlmostEqualEvaluator extends IntegerEqualEvaluator {
+
+        
+        
+        private static final long     serialVersionUID = 400L;
+        public final static Evaluator INSTANCE         = new IntegerAlmostEqualEvaluator();
+
+                
+        private IntegerAlmostEqualEvaluator() {
+            super( ValueType.PINTEGER_TYPE,
+                   Operator.AEQUAL );
+        }
+        
+        public String toString() {
+            return "Integer ~==";
+        }
+        
+        
+        public IUncertainDegree evaluateUnc(InternalWorkingMemory workingMemory,
+                final Extractor extractor,
+                final Object object1, final FieldValue object2) {
+            if ( extractor.isNullValue( workingMemory, object1 ) ) {
+                return Degree.fromBoolean(object2.isNull());
+            } else if ( object2.isNull() ) {
+                return new Degree(0);
+            }
+
+            return eval(extractor.getIntValue( workingMemory, object1 ), object2.getIntValue());
+        }
+
+        public IUncertainDegree evaluateCachedRightUnc(InternalWorkingMemory workingMemory,
+                final VariableContextEntry context, final Object left) {
+            if ( context.declaration.getExtractor().isNullValue( workingMemory, left ) ) {
+                return Degree.fromBoolean(context.isRightNull());
+            } else if ( context.isRightNull() ) {
+                return new Degree(0);
+            }
+
+            return eval(context.declaration.getExtractor().getIntValue( workingMemory, left ) , ((LongVariableContextEntry) context).right); 
+        }
+
+        public IUncertainDegree evaluateCachedLeftUnc(InternalWorkingMemory workingMemory,
+                final VariableContextEntry context, final Object object2) {
+            if ( context.extractor.isNullValue( workingMemory, object2 )) {
+                return Degree.fromBoolean(context.isLeftNull());
+            } else if ( context.isLeftNull() ) {
+                return new Degree(0);
+            }
+
+            return eval(context.extractor.getIntValue( workingMemory, object2 ),((LongVariableContextEntry) context).left);
+        }
+
+        public IUncertainDegree evaluateUnc(InternalWorkingMemory workingMemory,
+                final Extractor extractor1,
+                final Object object1,
+                final Extractor extractor2, final Object object2) {            
+            if (extractor1.isNullValue( workingMemory, object1 )) {
+                return Degree.fromBoolean(extractor2.isNullValue( workingMemory, object2 ));
+            } else if (extractor2.isNullValue( workingMemory, object2 )) {
+                return new Degree(0);
+            }
+
+            return eval(extractor1.getIntValue( workingMemory, object1 ),extractor2.getIntValue( workingMemory, object2 ));
+        }
+        
+        private IUncertainDegree eval(long i1, long i2) {            
+            double den = (Math.abs(i1)+Math.abs(i2));
+            double num = Math.abs(i1-i2);               
+            
+            double ans = (den == 0) ? 1 : 1 - num / den;
+                
+            return new Degree(ans);
+        }
+        
+        
+    }
+    
+    
     static class IntegerEqualEvaluator extends BaseEvaluator {
         /**
          * 
@@ -1433,6 +1519,11 @@
             super( ValueType.PINTEGER_TYPE,
                    Operator.EQUAL );
         }
+        
+        protected IntegerEqualEvaluator(ValueType valueType, Operator op) {
+            super( valueType,
+                   op );
+        }
 
         public boolean evaluate(InternalWorkingMemory workingMemory,
                                 final Extractor extractor,

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/evaluators/Operator.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/evaluators/Operator.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/base/evaluators/Operator.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -19,9 +19,10 @@
 
     // these static operator constants are kept here just to make it easier for the engine
     // to reference common used operators. The addition of new constants here is not
-    // advisable though.
     public static final Operator               EQUAL            = addOperatorToRegistry( "==",
                                                                                          false );
+    public static final Operator               AEQUAL           = addOperatorToRegistry( "~==",
+                                                                                         false );
     public static final Operator               NOT_EQUAL        = addOperatorToRegistry( "!=",
                                                                                          false );
     public static final Operator               LESS             = addOperatorToRegistry( "<",

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -80,6 +80,9 @@
 import org.drools.spi.PropagationContext;
 import org.drools.temporal.SessionClock;
 
+import uncertainty.truthvals.Degree;
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * Implementation of <code>WorkingMemory</code>.
  * 
@@ -614,6 +617,7 @@
      * @see WorkingMemory
      */
     public FactHandle insertLogical(final Object object) throws FactException {
+        System.out.println("Called insertLogical I");
         return insert( object, //Not-Dynamic 
                        0,
                        false,
@@ -624,6 +628,7 @@
 
     public FactHandle insertLogical(final Object object,
                                     final long duration) throws FactException {
+        System.out.println("Called insertLogical III");
         return insert( object, /* Not-Dynamic */
                        duration,
                        false,
@@ -633,7 +638,7 @@
     }
 
     public FactHandle insert(final Object object,
-                             final boolean dynamic) throws FactException {
+                             final boolean dynamic) throws FactException {        
         return insert( object,
                        0,
                        dynamic,
@@ -644,7 +649,7 @@
 
     public FactHandle insert(final Object object,
                              final long duration,
-                             final boolean dynamic) throws FactException {
+                             final boolean dynamic) throws FactException {        
         return insert( object,
                        duration,
                        dynamic,
@@ -655,6 +660,7 @@
 
     public FactHandle insertLogical(final Object object,
                                     final boolean dynamic) throws FactException {
+        System.out.println("Called insertLogical II");
         return insert( object,
                        0,
                        dynamic,
@@ -666,6 +672,7 @@
     public FactHandle insertLogical(final Object object,
                                     final long duration,
                                     final boolean dynamic) throws FactException {
+        System.out.println("Called insertLogical IV");
         return insert( object,
                        duration,
                        dynamic,
@@ -726,6 +733,9 @@
                                 boolean logical,
                                 final Rule rule,
                                 final Activation activation) throws FactException {
+        
+        System.out.println("AbstractWorkingMemory :  State / Justify Ordeal");
+        
         if ( object == null ) {
             // you cannot assert a null object
             return null;
@@ -750,6 +760,10 @@
             return handle;
         }
 
+        
+        
+        
+        
         try {
             this.lock.lock();
             // check if the object already exists in the WM
@@ -932,9 +946,11 @@
                                                                                   this.agenda.getActiveActivations(),
                                                                                   this.agenda.getDormantActivations(),
                                                                                   entryPoint );
-
+            System.out.println("AbstractWorkingMemory : Wrapped a to-be-inserted obj with a handle");
+            System.out.println("AbstractWorkingMemory : Hijacked insert method to use uncValues");
         doInsert( handle,
                   object,
+                  new Degree(1),
                   propagationContext );
 
         if ( !this.actionQueue.isEmpty() ) {
@@ -973,6 +989,11 @@
     public abstract void doInsert(InternalFactHandle factHandle,
                                   Object object,
                                   PropagationContext propagationContext) throws FactException;
+    
+    public abstract void doInsert(InternalFactHandle factHandle,
+            Object object, 
+            IUncertainDegree tDegree,
+            PropagationContext propagationContext) throws FactException;
 
     protected void removePropertyChangeListener(final FactHandle handle) {
         Object object = null;

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/BetaConstraints.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/BetaConstraints.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/BetaConstraints.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -7,6 +7,8 @@
 import org.drools.reteoo.ReteTuple;
 import org.drools.util.LinkedList;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public interface BetaConstraints
     extends
     Serializable {
@@ -15,7 +17,7 @@
                                 ReteTuple tuple);
 
     public void updateFromFactHandle(InternalWorkingMemory workingMemory,
-                                     InternalFactHandle handle);
+                                     InternalFactHandle handle);       
 
     public boolean isAllowedCachedLeft(InternalFactHandle handle);
 

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/DefaultAgenda.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/DefaultAgenda.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -547,6 +547,10 @@
 
         try {
             this.knowledgeHelper.setActivation( activation );
+            
+            //TODO: KnowledgeHelpers are good starting points to inject the uncDegrees epsilon
+            // And the policies as well. Evaluation should take epsilon into account
+            System.out.println("DefaultAgenda: Firing rule consequence "+activation.getRule());
             activation.getRule().getConsequence().evaluate( this.knowledgeHelper,
                                                             this.workingMemory );
             this.knowledgeHelper.reset();

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/InternalRuleBase.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/InternalRuleBase.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/common/InternalRuleBase.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -33,6 +33,8 @@
 import org.drools.spi.FactHandleFactory;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public interface InternalRuleBase
     extends
     RuleBase {
@@ -77,6 +79,29 @@
                              Object object,
                              PropagationContext context,
                              InternalWorkingMemory workingMemory) throws FactException;
+    
+    
+    /**
+     * Assert a fact object.
+     * @author Sotty
+     * 
+     * @param handle
+     *            The handle.
+     * @param object
+     *            The fact.
+     * @param tDegree
+     *            The truth (confidence) degree associated with the fact
+     * @param workingMemory
+     *            The working-memory.
+     * 
+     * @throws FactException
+     *             If an error occurs while performing the assertion.
+     */
+    public void assertObject(FactHandle handle,
+                             Object object,
+                             IUncertainDegree tDegree,
+                             PropagationContext context,
+                             InternalWorkingMemory workingMemory) throws FactException;
 
     /**
      * Retract a fact object.

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/facttemplates/FactTemplateObjectType.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/facttemplates/FactTemplateObjectType.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/facttemplates/FactTemplateObjectType.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -19,6 +19,9 @@
 import org.drools.base.ValueType;
 import org.drools.spi.ObjectType;
 
+import uncertainty.truthvals.Degree;
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * Java class semantics <code>ObjectType</code>.
  * 
@@ -146,4 +149,15 @@
     public int hashCode() {
         return this.factTemplate.hashCode();
     }
+
+    
+    
+    /**
+     * TODO: Compatibility between fact templates is to be considered...
+     * @author Sotty
+     */
+    public IUncertainDegree isCompatibleWith(Object object) {
+        boolean ans = this.isAssignableFrom(object);
+        return ans ? new Degree(1) : new Degree(0);
+    }
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -33,6 +33,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.
@@ -479,5 +481,12 @@
         // keeping attributes public just for performance
         public InternalFactHandle handle;
         public Object             context;
+    }
+
+    public void assertObject(InternalFactHandle handle,
+            IUncertainDegree degree, PropagationContext context,
+            InternalWorkingMemory workingMemory) {
+        // TODO Auto-generated method stub
+        
     }      
 }

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -29,6 +29,9 @@
 import org.drools.util.FactHashTable;
 import org.drools.util.Iterator;
 
+import uncertainty.truthvals.Degree;
+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 
@@ -51,6 +54,7 @@
     private static final long              serialVersionUID = 400L;
 
     /** The <code>FieldConstraint</code> */
+    //TODO : ANFC should be uncertain evaluators, thus yielding 
     private final AlphaNodeFieldConstraint constraint;
 
     private ObjectSinkNode                 previousObjectSinkNode;
@@ -126,22 +130,71 @@
         }
     }
 
+    /**
+     * Alpha node propagation under uncertainty.
+     * The incoming truth degree is merged (and-ed) with that resulting from the constraint
+     * @author Sotty 
+     */
     public void assertObject(final InternalFactHandle handle,
+                             IUncertainDegree tDegree,
                              final PropagationContext context,
                              final InternalWorkingMemory workingMemory) throws FactException {
-        if ( this.constraint.isAllowed( handle,
-                                        workingMemory ) ) {
+        
+        IUncertainDegree constrDeg = this.constraint.matches(handle, workingMemory);
+        
+        IUncertainDegree ansDeg = AlphaNode.combineDegs(tDegree,constrDeg);  
+            
+            System.out.println("UNCERTAIN AlphaNode : Passed object "+handle.getObject()+ " with degree "+ansDeg);
             if ( isObjectMemoryEnabled() ) {
                 final FactHashTable memory = (FactHashTable) workingMemory.getNodeMemory( this );
                 memory.add( handle,
                             false );
             }
-
+                       
             this.sink.propagateAssertObject( handle,
+                                             ansDeg,
                                              context,
                                              workingMemory );
+        
+    }
+    
+    /**
+     * Degree combining strategy
+     * This method combines the degree of the evaluation so-far with the
+     * degree due to the evaluation of the local constraint.
+     * TODO : Parametrize by operator, extend to more general truth values
+     * 
+     * @param degree        The degree so far
+     * @param constrDeg     The degree up to which the object satisfies the node's constraint
+     * @return              degree*constrDeg (product and over real valued degrees)  
+     */
+    public static IUncertainDegree combineDegs(final IUncertainDegree degree,
+            final IUncertainDegree constrDeg) {
+        return new Degree(constrDeg.getDegree().getValue()*degree.getDegree().getValue());
+    }
+
+    public void assertObject(final InternalFactHandle handle,
+            final PropagationContext context,
+            final InternalWorkingMemory workingMemory) throws FactException {
+        if ( this.constraint.isAllowed( handle,
+                workingMemory ) ) {
+
+            System.out.println("AlphaNode : Passed object "+handle.getObject());
+            if ( isObjectMemoryEnabled() ) {
+                final FactHashTable memory = (FactHashTable) workingMemory.getNodeMemory( this );
+                memory.add( handle,
+                        false );
+            }
+
+            this.sink.propagateAssertObject( handle,
+                    context,
+                    workingMemory );
         }
+        else {
+            System.out.println("AlphaNode : Blocked object "+handle.getObject());
+        }
     }
+    
 
     public void retractObject(final InternalFactHandle handle,
                               final PropagationContext context,
@@ -318,6 +371,26 @@
                                         workingMemory );
             }
         }
+        
+        
+        public void assertObject(final InternalFactHandle handle,
+                IUncertainDegree tDegree,
+                final PropagationContext context,
+                final InternalWorkingMemory workingMemory) {
+            
+            
+            IUncertainDegree constrDeg;
+            
+            //TODO: pluggable evaluators here...
+            constrDeg = this.constraint.matches(handle, workingMemory);
+            
+            IUncertainDegree ansDeg = AlphaNode.combineDegs(tDegree,constrDeg);  
+                    this.sink.assertObject( handle,
+                        ansDeg,
+                        context,
+                        workingMemory );
+            
+        }
 
         public void modifyObject(final InternalFactHandle handle,
                                  final PropagationContext context,

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -283,7 +283,9 @@
                 cache.add( node );
             }
         }
-
+            //TODO: objects are assignable in a degree
+            // Here, the degree should be added to the cache
+            // Unless the degree is uselessly low
         return (ObjectTypeNode[]) cache.toArray( new ObjectTypeNode[cache.size()] );
     }
 

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -32,6 +32,8 @@
 import org.drools.util.Iterator;
 import org.drools.util.ObjectHashMap.ObjectEntry;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * @author etirelli
  *
@@ -383,4 +385,11 @@
         public InternalFactHandle handle;
         public boolean            propagated;
     }
+
+    public void assertObject(InternalFactHandle handle,
+            IUncertainDegree degree, PropagationContext context,
+            InternalWorkingMemory workingMemory) {
+        // TODO Auto-generated method stub
+        
+    }
 }

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -21,6 +21,8 @@
 import org.drools.util.ObjectHashMap;
 import org.drools.util.ObjectHashMap.ObjectEntry;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class CompositeObjectSinkAdapter
     implements
     ObjectSinkPropagator {
@@ -323,6 +325,60 @@
 
     }
 
+    public void propagateAssertObject(final InternalFactHandle handle,
+            IUncertainDegree tDegree,
+            final PropagationContext context,
+            final InternalWorkingMemory workingMemory) {
+        final Object object = handle.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 ) {
+//          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() ) {
+                    continue;
+                }
+//              this field is hashed so set the existing hashKey and see if there is a sink for it
+                final int index = fieldIndex.getIndex();
+                final FieldExtractor extractor = fieldIndex.getFieldExtactor();
+                HashKey hashKey = new HashKey( index,
+                        object,
+                        fieldIndex.getFieldExtractor() );
+                final ObjectSink sink = (ObjectSink) this.hashedSinkMap.get( hashKey );
+                if ( sink != null ) {
+//                  The sink exists so propagate
+                    sink.assertObject( handle,
+                            tDegree,
+                            context,
+                            workingMemory );
+                }
+            }
+        }
+
+//      propagate unhashed
+        if ( this.hashableSinks != null ) {
+            for ( ObjectSinkNode sink = this.hashableSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
+                sink.assertObject( handle,
+                        tDegree,
+                        context,
+                        workingMemory );
+            }
+        }
+
+        if ( this.otherSinks != null ) {
+//          propagate others
+            for ( ObjectSinkNode sink = this.otherSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
+                sink.assertObject( handle,
+                        tDegree,
+                        context,
+                        workingMemory );
+            }
+        }
+
+    }
+    
     public void propagateRetractObject(final InternalFactHandle handle,
                                        final PropagationContext context,
                                        final InternalWorkingMemory workingMemory,

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CompositeTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CompositeTupleSinkAdapter.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/CompositeTupleSinkAdapter.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -4,6 +4,8 @@
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class CompositeTupleSinkAdapter
     implements
     TupleSinkPropagator {
@@ -33,6 +35,19 @@
                               workingMemory );
         }
     }
+    
+    public void propagateAssertTuple(ReteTuple tuple,
+            InternalFactHandle handle, IUncertainDegree degree,
+            PropagationContext context, InternalWorkingMemory workingMemory) {
+        
+        for ( TupleSinkNode sink = this.sinks.getFirst(); sink != null; sink = sink.getNextTupleSinkNode() ) {
+            sink.assertTuple( new UncReteTuple( tuple,
+                                             handle, degree ),
+                              context,
+                              workingMemory );
+        }
+        
+    }
 
     public void propagateAssertTuple(final ReteTuple tuple,
                                      final PropagationContext context,
@@ -75,6 +90,18 @@
                               workingMemory );
         }
     }
+    
+    
+    public void createAndPropagateAssertTuple(final InternalFactHandle handle,
+            IUncertainDegree tDegree,
+            final PropagationContext context,
+            final InternalWorkingMemory workingMemory) {
+        for ( TupleSinkNode sink = this.sinks.getFirst(); sink != null; sink = sink.getNextTupleSinkNode() ) {
+            sink.assertTuple( new UncReteTuple( handle, tDegree ),
+                    context,
+                    workingMemory );
+        }
+    }
 
     public void createAndPropagateRetractTuple(final InternalFactHandle handle,
                                                final PropagationContext context,
@@ -165,4 +192,6 @@
     public int size() {
         return this.sinks.size();
     }
+
+   
 }

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EmptyObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EmptyObjectSinkAdapter.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EmptyObjectSinkAdapter.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -4,6 +4,8 @@
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class EmptyObjectSinkAdapter
     implements
     ObjectSinkPropagator {
@@ -26,7 +28,14 @@
                                       final InternalWorkingMemory workingMemory) {
 
     }
+    
+    public void propagateAssertObject(final InternalFactHandle handle,
+            IUncertainDegree tDegree,
+            final PropagationContext context,
+            final InternalWorkingMemory workingMemory) {
 
+    }
+
     public void propagateRetractObject(final InternalFactHandle handle,
                                        final PropagationContext context,
                                        final InternalWorkingMemory workingMemory,

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EmptyTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EmptyTupleSinkAdapter.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EmptyTupleSinkAdapter.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -4,6 +4,8 @@
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class EmptyTupleSinkAdapter
     implements
     TupleSinkPropagator {
@@ -56,4 +58,16 @@
     public int size() {
         return 0;
     }
+
+    public void createAndPropagateAssertTuple(InternalFactHandle handle,
+            IUncertainDegree degree, PropagationContext context,
+            InternalWorkingMemory workingMemory) {
+        
+    }
+
+    public void propagateAssertTuple(ReteTuple tuple,
+            InternalFactHandle handle, IUncertainDegree degree,
+            PropagationContext context, InternalWorkingMemory workingMemory) {
+        
+    }
 }

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -36,6 +36,8 @@
 import org.drools.util.FactHashTable;
 import org.drools.util.Iterator;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * A node that is an entry point into the Rete network.
  *
@@ -136,12 +138,68 @@
         ObjectTypeNode[] cachedNodes = objectTypeConf.getObjectTypeNodes();
 
         for ( int i = 0, length = cachedNodes.length; i < length; i++ ) {
+            System.out.println("EntrypointNode : Dispatch to "+cachedNodes[i].toString());
             cachedNodes[i].assertObject( handle,
                                          context,
                                          workingMemory );
         }
     }
+    
+    
+    
+    /**
+     * This is the entry point into the network for all asserted Facts. Iterates a cache
+     * of matching <code>ObjectTypdeNode</code>s asserting the Fact. If the cache does not
+     * exist it first iterates and builds the cache.
+     * This method allows a propagation to be seeded with a truth value. At this point, it
+     * is mostly useful to condition the confidence in the propagation
+     *   
+     * @author Sotty
+     *
+     * @param handle
+     *            The FactHandle of the fact to assert
+     * @param tval
+     *            The global, initial truth value for the object insertion
+     * @param context
+     *            The <code>PropagationContext</code> of the <code>WorkingMemory</code> action     *            
+     * @param workingMemory
+     *            The working memory session.
+     */
+    public void assertObject(final InternalFactHandle handle,
+                             IUncertainDegree tval,
+                             final PropagationContext context,
+                             final InternalWorkingMemory workingMemory) {
 
+        ObjectTypeConf objectTypeConf = workingMemory.getObjectTypeConf( this.entryPoint,
+                                                                         handle.getObject() );
+
+        // checks if shadow is enabled
+        if ( objectTypeConf.isShadowEnabled() ) {
+            // need to improve this
+            if ( !(handle.getObject() instanceof ShadowProxy) ) {
+                // replaces the actual object by its shadow before propagating
+                handle.setObject( objectTypeConf.getShadow( handle.getObject() ) );
+                handle.setShadowFact( true );
+            } else {
+                ((ShadowProxy) handle.getObject()).updateProxy();
+            }
+        }
+
+        ObjectTypeNode[] cachedNodes = objectTypeConf.getObjectTypeNodes();
+
+        for ( int i = 0, length = cachedNodes.length; i < length; i++ ) {
+            System.out.println("UNCERTAIN EntrypointNode : Dispatch to "+cachedNodes[i].toString());
+            cachedNodes[i].assertObject( handle,
+                                         tval,
+                                         context,
+                                         workingMemory );
+        }
+    }
+    
+    
+    
+    
+
     /**
      * Retract a fact object from this <code>RuleBase</code> and the specified
      * <code>WorkingMemory</code>.

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -24,6 +24,8 @@
 import org.drools.util.FactEntry;
 import org.drools.util.Iterator;
 
+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
@@ -267,4 +269,11 @@
         return "[ExistsNode - " + ((ObjectTypeNode) source).getObjectType() + "]";
     }
 
+    public void assertObject(InternalFactHandle handle,
+            IUncertainDegree degree, PropagationContext context,
+            InternalWorkingMemory workingMemory) {
+        // TODO Auto-generated method stub
+        
+    }
+
 }

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/FactHandleMemory.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/FactHandleMemory.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/FactHandleMemory.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -4,6 +4,8 @@
 import org.drools.util.Entry;
 import org.drools.util.Iterator;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public interface FactHandleMemory {
     public Iterator iterator();
 
@@ -13,6 +15,10 @@
                        boolean checkExists);
 
     public boolean add(InternalFactHandle handle);
+    
+    public void setUncDeg(InternalFactHandle handle, IUncertainDegree degree);
+    
+    public IUncertainDegree getUncDeg(InternalFactHandle handle);
 
     public boolean remove(InternalFactHandle handle);
 

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/JoinNode.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -24,6 +24,8 @@
 import org.drools.util.FactEntry;
 import org.drools.util.Iterator;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * <code>JoinNode</code> extends <code>BetaNode</code> to perform
  * <code>ReteTuple</code> and <code>FactHandle</code> joins. Tuples are
@@ -104,10 +106,20 @@
         for ( FactEntry entry = (FactEntry) it.next(); entry != null; entry = (FactEntry) it.next() ) {
             final InternalFactHandle handle = entry.getFactHandle();
             if ( this.constraints.isAllowedCachedLeft( handle ) ) {
-                this.sink.propagateAssertTuple( leftTuple,
-                                                handle,
-                                                context,
-                                                workingMemory );
+                
+                IUncertainDegree deg = memory.getFactHandleMemory().getUncDeg(handle);
+                if (deg == null) {
+                    this.sink.propagateAssertTuple( leftTuple,
+                            handle,
+                            context,
+                            workingMemory );
+                } else {
+                    this.sink.propagateAssertTuple( leftTuple,
+                            handle,
+                            deg,
+                            context,
+                            workingMemory );
+                }
             }
         }
         
@@ -156,7 +168,40 @@
         }
         this.constraints.resetFactHandle();
     }
+    
+    
+    public void assertObject(InternalFactHandle handle,
+            IUncertainDegree degree,
+            PropagationContext context,
+            InternalWorkingMemory workingMemory) {
+        final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
 
+        memory.getFactHandleMemory().add( handle );
+        memory.getFactHandleMemory().setUncDeg(handle, degree);
+        
+        if ( ! this.tupleMemoryEnabled ) {
+            // do nothing here, as we know there are no left tuples at this stage in sequential mode.
+            return;
+        }
+
+        final Iterator it = memory.getTupleMemory().iterator( handle );
+        this.constraints.updateFromFactHandle( workingMemory,
+                                               handle );
+        for ( ReteTuple tuple = (ReteTuple) it.next(); tuple != null; tuple = (ReteTuple) it.next() ) {
+            if ( this.constraints.isAllowedCachedRight( tuple ) ) {
+                this.sink.propagateAssertTuple( tuple,
+                                                handle,
+                                                degree,
+                                                context,
+                                                workingMemory );
+            }
+        }
+        this.constraints.resetFactHandle();
+        
+        
+    }
+    
+
     /**
      * Retract a FactHandleImpl. Iterates the referenced TupleMatches stored in
      * the handle's ObjectMatches retracting joined tuples.
@@ -264,4 +309,6 @@
 
         return "[JoinNode - " + ((ObjectTypeNode) source).getObjectType() + "]";
     }
+
+    
 }

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -28,6 +28,8 @@
 import org.drools.util.FactHashTable;
 import org.drools.util.Iterator;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * All asserting Facts must propagated into the right <code>ObjectSink</code> side of a BetaNode, if this is the first Pattern
  * then there are no BetaNodes to propagate to. <code>LeftInputAdapter</code> is used to adapt an ObjectSink propagation into a 
@@ -126,7 +128,31 @@
             workingMemory.addLIANodePropagation( new LIANodePropagation(this, handle, context) );
         }
     }
+    
+    public void assertObject(InternalFactHandle handle,
+            IUncertainDegree degree, PropagationContext context,
+            InternalWorkingMemory workingMemory) {
+        
+        if ( !workingMemory.isSequential() ) {
+            this.sink.createAndPropagateAssertTuple( handle,
+                                                     degree,
+                                                     context,
+                                                     workingMemory );
 
+            if ( this.objectMemoryEnabled ) {
+                final FactHashTable memory = (FactHashTable) workingMemory.getNodeMemory( this );
+                memory.add( handle,
+                            false );
+            }
+        } else {
+            workingMemory.addLIANodePropagation( new LIANodePropagation(this, handle, context) );
+        }
+        
+    }
+    
+    
+    
+
     /**
      * Retract an existing <code>FactHandleImpl</code> by placing it in a new <code>ReteTuple</code> before 
      * proagating to the <code>TupleSinks</code>
@@ -279,6 +305,17 @@
                                    context,
                                    workingMemory );
         }
+        
+        
+        public void assertObject(final InternalFactHandle handle,
+                IUncertainDegree tDegree,
+                final PropagationContext context,
+                final InternalWorkingMemory workingMemory) {
+            final UncReteTuple tuple = new UncReteTuple( handle,tDegree );
+            this.sink.assertTuple( tuple,
+                    context,
+                    workingMemory );
+        }
 
         public void modifyObject(final InternalFactHandle handle,
                                  final PropagationContext context,
@@ -301,4 +338,6 @@
         }        
     }
 
+    
+
 }

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/NotNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/NotNode.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/NotNode.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -25,6 +25,8 @@
 import org.drools.util.FactEntry;
 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
@@ -264,4 +266,11 @@
 
         return "[NotNode - " + ((ObjectTypeNode) source).getObjectType() + "]";
     }
+
+    public void assertObject(InternalFactHandle handle,
+            IUncertainDegree degree, PropagationContext context,
+            InternalWorkingMemory workingMemory) {
+        // TODO Auto-generated method stub
+        
+    }
 }

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -20,6 +20,8 @@
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.*;
+
 /**
  * Receiver of propagated <code>FactHandleImpl</code>s from a
  * <code>ObjectSource</code>.
@@ -48,7 +50,27 @@
                       PropagationContext context,
                       InternalWorkingMemory workingMemory);
 
+    
     /**
+     * Assert a new <code>FactHandleImpl</code>.
+     * This fact is annotated by a truth degree
+     * @author Sotty
+     * 
+     * @param handle
+     *            The asserted <code>FactHandle/code>.
+     * @param tDegree
+     *            The actual truth degree, in any implementation of <code>IUncertainDegree</code>           
+     * @param context
+     *             The <code>PropagationContext</code> of the <code>WorkingMemory<code> action.           
+     * @param workingMemory
+     *            the <code>WorkingMemory</code> session.
+     */
+    void assertObject(InternalFactHandle handle,
+                      IUncertainDegree tDegree,
+                      PropagationContext context,
+                      InternalWorkingMemory workingMemory);
+    
+    /**
      * Retract an existing <code>FactHandleImpl</code>.
      * 
      * @param handle

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectSinkPropagator.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectSinkPropagator.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectSinkPropagator.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -6,12 +6,19 @@
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public interface ObjectSinkPropagator
     extends
     Serializable {
     public void propagateAssertObject(InternalFactHandle handle,
                                       PropagationContext context,
                                       InternalWorkingMemory workingMemory);
+    
+    public void propagateAssertObject(InternalFactHandle handle,
+            IUncertainDegree tDeg,
+            PropagationContext context,
+            InternalWorkingMemory workingMemory);
 
     public void propagateRetractObject(InternalFactHandle handle,
                                        PropagationContext context,

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -34,6 +34,9 @@
 import org.drools.util.FactHashTable;
 import org.drools.util.Iterator;
 
+import uncertainty.truthvals.Degree;
+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.
@@ -114,7 +117,7 @@
      * @return
      *      boolean value indicating whether the <code>ObjectTypeNode</code> can receive the object.
      */
-    public boolean matches(final Object object) {
+    public boolean matches(final Object object) {       
         return this.objectType.matches( object );
     }
 
@@ -123,20 +126,47 @@
     }
 
     /**
+     * Uncertain Class Matching.
+     * @author Sotty
+     *  
+     * @param object    The actual object whose class is to be evaluated
+     * @return
+     */
+    public IUncertainDegree isCompatibleWith(final Object object) {
+        return this.objectType.isCompatibleWith(object);
+    }
+    
+    
+    /**
      * 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
      * can have the matched facts propagated to them.
      * 
+     * Under uncertainty, this method receives an object which can pass
+     * through this node, but only in some degree. Moreover, the caller
+     * entrypoint may have an initial "confidence" degree which must be taken into account
+     * 
+     * @author Sotty
+     * 
      * @param handle
      *            The fact handle.
+     * @param tDegree
+     *            The incoming truth degree
      * @param object
      *            The object to assert.
      * @param workingMemory
      *            The working memory session.
      */
     public void assertObject(final InternalFactHandle handle,
+                             IUncertainDegree tDegree,
                              final PropagationContext context,
                              final InternalWorkingMemory workingMemory) {
+        
+        System.out.println("UNCERTAIN ObjectTypeNode: received object");
+        //TODO: Here the node has been extracted from a cache
+        // of TypeNodes filters which are known to let the object pass
+        // In case of partial filter, the degree should be extracted
+        
         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;
@@ -147,12 +177,55 @@
             memory.add( handle,
                         false );
         }
+        
+        IUncertainDegree tMatch = isCompatibleWith(handle.getObject());
 
         this.sink.propagateAssertObject( handle,
+                                         ObjectTypeNode.combineDegrees(tDegree,tMatch),
                                          context,
                                          workingMemory );
     }
+    
+    
+    
+    
+    /**
+     * 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
+     * can have the matched facts propagated to them.
+     * 
+     * @param handle
+     *            The fact handle.
+     * @param object
+     *            The object to assert.
+     * @param workingMemory
+     *            The working memory session.
+     */
+    public void assertObject(final InternalFactHandle handle,
+                             final PropagationContext context,
+                             final InternalWorkingMemory workingMemory) {
+        
+        System.out.println("ObjectTypeNode: received object");
+        //TODO: Here the node has been extracted from a cache
+        // of TypeNodes filters which are known to let the object pass
+        // In case of partial filter, the degree should be extracted
+        
+        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 FactHashTable memory = (FactHashTable) workingMemory.getNodeMemory( this );
+            memory.add( handle,
+                        false );
+        }
+
+        this.sink.propagateAssertObject( handle,
+                                         context,
+                                         workingMemory );
+    }
+
     /**
      * Retract the <code>FactHandleimpl</code> from the <code>Rete</code> network. Also remove the 
      * <code>FactHandleImpl</code> from the node memory.
@@ -349,4 +422,21 @@
     public EntryPoint getEntryPoint() {
         return ((EntryPointNode)this.objectSource).getEntryPoint();
     }
+    
+    
+    
+    /**
+     * Degree combining strategy
+     * This method combines the initial degree with the ontologic compatibility
+     * of the actual class.     * 
+     * TODO : Parametrize by operator, extend to more general truth values
+     * 
+     * @param degree        The degree so far
+     * @param matchDeg     The degree up to which the object satisfies the node's constraint
+     * @return              degree*constrDeg (product and over real valued degrees)  
+     */
+    public static IUncertainDegree combineDegrees(final IUncertainDegree degree,
+            final IUncertainDegree matchDeg) {
+        return new Degree(matchDeg.getDegree().getValue()*degree.getDegree().getValue());
+    }
 }

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -29,6 +29,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
@@ -354,4 +356,11 @@
             this.node.propagateActions( workingMemory );
         }
     }
+
+    public void assertObject(InternalFactHandle handle,
+            IUncertainDegree degree, PropagationContext context,
+            InternalWorkingMemory workingMemory) {
+        // TODO Auto-generated method stub
+        
+    }
 }

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/Rete.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/Rete.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/Rete.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -37,6 +37,8 @@
 import org.drools.util.FactHashTable;
 import org.drools.util.Iterator;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * The Rete-OO network.
  *
@@ -113,6 +115,39 @@
                            context,
                            workingMemory );
     }
+    
+    
+    /**
+     * This is the entry point into the network for all asserted Facts. Iterates a cache
+     * of matching <code>ObjectTypdeNode</code>s asserting the Fact. If the cache does not
+     * exist it first iteraes and builds the cache.
+     * @author Sotty
+     *
+     * @param handle
+     *            The FactHandle of the fact to assert
+     * @param tDegree
+     *            The uncertain Degree
+     * @param context
+     *            The <code>PropagationContext</code> of the <code>WorkingMemory</code> action
+     * @param workingMemory
+     *            The working memory session.
+     */
+    public void assertObject(final InternalFactHandle handle,
+                             IUncertainDegree tDegree,
+                             final PropagationContext context,
+                             final InternalWorkingMemory workingMemory) {
+        EntryPointNode node = this.entryPoints.get( context.getEntryPoint() );
+        node.assertObject( handle,
+                            tDegree,
+                           context,
+                           workingMemory );
+    }
+    
+    
+    
+    
+    
+    
 
     /**
      * Retract a fact object from this <code>RuleBase</code> and the specified
@@ -166,7 +201,7 @@
         removeObjectSink( entryPointNode );
     }
     
-    public EntryPointNode getEntryPointNode( final EntryPoint entryPoint ) {
+    public EntryPointNode getEntryPointNode( final EntryPoint entryPoint ) {        
         return this.entryPoints.get( entryPoint );
     }
 

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -109,6 +109,10 @@
         return this.recency;
     }
         
+    
+    public ReteTuple getParent() {
+        return parent;
+    }
 
     public InternalFactHandle getMatch() {
         return match;

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -47,6 +47,8 @@
 import org.drools.spi.FactHandleFactory;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * Implementation of <code>RuleBase</code>.
  * 
@@ -209,7 +211,21 @@
                                 context,
                                 workingMemory );
     }
+    
+    public void assertObject(final FactHandle handle,
+            final Object object,
+            IUncertainDegree tDegree,
+            final PropagationContext context,
+            final InternalWorkingMemory workingMemory) throws FactException {
+        
+        getRete().assertObject( (DefaultFactHandle) handle,
+                tDegree,
+                context,
+                workingMemory );
+    }
 
+    
+
     /**
      * Retract a fact object.
      * 

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -38,6 +38,8 @@
 import org.drools.spi.Activation;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * Implementation of <code>WorkingMemory</code>.
  * 
@@ -69,12 +71,25 @@
     public void doInsert(final InternalFactHandle handle,
                                final Object object,
                                final PropagationContext propagationContext) throws FactException {
+        
         this.ruleBase.assertObject( handle,
                                     object,
                                     propagationContext,
                                     this );
     }
+    
+    public void doInsert(final InternalFactHandle handle,
+            final Object object,
+            IUncertainDegree tDegree,
+            final PropagationContext propagationContext) throws FactException {
 
+        this.ruleBase.assertObject( handle,
+                object,
+                tDegree,
+                propagationContext,
+                this );
+    }
+
     public void doRetract(final InternalFactHandle handle,
                           final PropagationContext propagationContext) {
         this.ruleBase.retractObject( handle,

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -45,6 +45,9 @@
 import org.drools.util.LinkedList;
 import org.drools.util.TupleHashTable;
 
+import uncertainty.truthvals.Degree;
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * Leaf Rete-OO node responsible for enacting <code>Action</code> s on a
  * matched <code>Rule</code>.
@@ -155,12 +158,16 @@
                             final PropagationContext context,
                             final InternalWorkingMemory workingMemory,
                             final boolean fireActivationCreated) {
-
+        
         //check if the rule is effective
         if ( !this.rule.isEffective(workingMemory.getTimeMachine()) ) {
             return;
         }
 
+        IUncertainDegree ansDeg = evaluateOperator(tuple);
+        
+        System.out.println("RuleTerminalNode for " +this.rule + " : Received joined tuple "+tuple+ " with degree "+ansDeg);
+        
         // if the current Rule is no-loop and the origin rule is the same and its the same set of facts (tuple) then return
         if ( context.getType() == PropagationContext.MODIFICATION ) {
             if ( this.rule.isNoLoop() && this.rule.equals( context.getRuleOrigin() ) && context.getActivationOrigin().getTuple().equals( tuple ) ) {
@@ -333,9 +340,13 @@
             }
         }
 
+        //TODO: Here the premise's truth value should have been calculated
+        System.out.println("RuleTerminalNode: A rule has been fired and added to the agenda\n\n");
         agenda.increaseActiveActivations();
     }
 
+    
+
     private void copyLogicalDependencies(final PropagationContext context,
                                          final InternalWorkingMemory workingMemory,
                                          final AgendaItem item,
@@ -531,6 +542,29 @@
         final RuleTerminalNode other = (RuleTerminalNode) object;
         return this.rule.equals( other.rule );
     }
+    
+    
+    
+    
+    private IUncertainDegree evaluateOperator(ReteTuple tuple) {
+        Degree ans = new Degree(1);
+        
+        ReteTuple tup = tuple;
+        while (tup != null) {
+            if (tup instanceof UncReteTuple) {
+                UncReteTuple ut = (UncReteTuple) tup;
+                Degree deg = (Degree) ut.getDegree();
+                ans.setValue(ans.getValue()*deg.getValue());
+            }
+            tup = tup.getParent();
+        }
+        
+        return ans;
+    }
+    
+    
+    
+    
 
     class TerminalNodeMemory
         implements

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/SingleObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/SingleObjectSinkAdapter.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/SingleObjectSinkAdapter.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -4,6 +4,8 @@
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class SingleObjectSinkAdapter
     implements
     ObjectSinkPropagator {
@@ -24,7 +26,19 @@
                                 workingMemory );
 
     }
+    
+    
+    public void propagateAssertObject(final InternalFactHandle handle,
+            IUncertainDegree tDegree,
+            final PropagationContext context,
+            final InternalWorkingMemory workingMemory) {
+        this.sink.assertObject( handle,
+                tDegree,
+                context,
+                workingMemory );
 
+    }
+
     public void propagateRetractObject(final InternalFactHandle handle,
                                        final PropagationContext context,
                                        final InternalWorkingMemory workingMemory,

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/SingleTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/SingleTupleSinkAdapter.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/SingleTupleSinkAdapter.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -4,6 +4,8 @@
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class SingleTupleSinkAdapter
     implements
     TupleSinkPropagator {
@@ -22,6 +24,17 @@
                                context,
                                workingMemory );
     }
+    
+    public void propagateAssertTuple(final ReteTuple tuple,
+            final InternalFactHandle handle,
+            IUncertainDegree tDegree,
+            final PropagationContext context,
+            final InternalWorkingMemory workingMemory) {
+        this.sink.assertTuple( new UncReteTuple( tuple,
+                handle, tDegree ),
+                context,
+                workingMemory );
+    }
 
     public void propagateAssertTuple(final ReteTuple tuple,
                                      final PropagationContext context,
@@ -52,10 +65,23 @@
     public void createAndPropagateAssertTuple(final InternalFactHandle handle,
                                               final PropagationContext context,
                                               final InternalWorkingMemory workingMemory) {
+        System.out.println("SingleTupleSinkAdapter : create initial tuple from handle "+handle);
         this.sink.assertTuple( new ReteTuple( handle ),
                                context,
                                workingMemory );
     }
+    
+    
+    public void createAndPropagateAssertTuple(final InternalFactHandle handle,
+            IUncertainDegree tDegree,
+            final PropagationContext context,
+            final InternalWorkingMemory workingMemory) {
+        
+        System.out.println("Uncertain SingleTupleSinkAdapter : create initial tuple from handle "+handle);
+        this.sink.assertTuple( new UncReteTuple( handle, tDegree ),
+                context,
+                workingMemory );
+    }
 
     public void createAndPropagateRetractTuple(final InternalFactHandle handle,
                                                final PropagationContext context,

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/TupleMemory.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/TupleMemory.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/TupleMemory.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -9,7 +9,7 @@
 
     public Iterator iterator(InternalFactHandle handle);
 
-    public void add(ReteTuple tuple);
+    public void add(ReteTuple tuple);    
 
     public ReteTuple remove(ReteTuple tuple);
 

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/TupleSinkPropagator.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/TupleSinkPropagator.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/reteoo/TupleSinkPropagator.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -6,6 +6,8 @@
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.PropagationContext;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public interface TupleSinkPropagator
     extends
     Serializable {
@@ -13,6 +15,13 @@
                                      InternalFactHandle handle,
                                      PropagationContext context,
                                      InternalWorkingMemory workingMemory);
+    
+    
+    public void propagateAssertTuple(ReteTuple tuple,
+            InternalFactHandle handle,
+            IUncertainDegree tDegree,
+            PropagationContext context,
+            InternalWorkingMemory workingMemory);
 
     public void propagateAssertTuple(ReteTuple tuple,
                                      PropagationContext context,
@@ -30,6 +39,11 @@
     public void createAndPropagateAssertTuple(InternalFactHandle handle,
                                               PropagationContext context,
                                               InternalWorkingMemory workingMemory);
+    
+    public void createAndPropagateAssertTuple(InternalFactHandle handle,
+            IUncertainDegree tDegree,
+            PropagationContext context,
+            InternalWorkingMemory workingMemory);
 
     public void createAndPropagateRetractTuple(InternalFactHandle handle,
                                                PropagationContext context,

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/AndConstraint.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/AndConstraint.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/AndConstraint.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -26,6 +26,9 @@
 import org.drools.spi.BetaNodeFieldConstraint;
 import org.drools.util.ArrayUtils;
 
+import uncertainty.truthvals.Degree;
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * AND composite constraint, so the user can do things like:
  * 
@@ -129,6 +132,17 @@
         
         return clone;
     }
+
+    public IUncertainDegree matches(InternalFactHandle handle,
+            InternalWorkingMemory workingMemory) {
+        double eps = 1;
+        if ( this.alphaConstraints.length > 0 ) {
+            for ( int i = 0; i < this.alphaConstraints.length; i++ ) {
+                eps *= ((Degree) this.alphaConstraints[i].matches(handle, workingMemory)).getValue();                
+            }
+        }
+        return new Degree(eps);
+    }
     
 
 }

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -23,6 +23,8 @@
 import org.drools.spi.FieldExtractor;
 import org.drools.spi.FieldValue;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class LiteralConstraint
     implements
     AlphaNodeFieldConstraint {
@@ -114,4 +116,11 @@
                                       this.getEvaluator(),
                                       this.getField() );
     }
+
+    public IUncertainDegree matches(InternalFactHandle handle,
+            InternalWorkingMemory workingMemory) {
+        return this.restriction.matches( this.extractor,
+                handle,
+                workingMemory );
+    }
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -25,6 +25,8 @@
 import org.drools.spi.FieldValue;
 import org.drools.spi.Restriction;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class LiteralRestriction
     implements
     Restriction {
@@ -175,4 +177,12 @@
 
     }
 
+    public IUncertainDegree matches(FieldExtractor extractor,
+            InternalFactHandle handle, InternalWorkingMemory workingMemory) {
+        return this.evaluator.evaluateUnc( null,
+                extractor,
+                handle.getObject(),
+                this.field );
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -8,6 +8,8 @@
 import org.drools.spi.FieldExtractor;
 import org.drools.spi.Restriction;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class MultiRestrictionFieldConstraint
     implements
     AlphaNodeFieldConstraint,
@@ -94,4 +96,9 @@
                                                     (Restriction) this.restrictions.clone() );
     }
 
+    public IUncertainDegree matches(InternalFactHandle handle,
+            InternalWorkingMemory workingMemory) {
+        throw new UnsupportedOperationException("To be done...");
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/OrConstraint.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/OrConstraint.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/OrConstraint.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -25,6 +25,9 @@
 import org.drools.spi.BetaNodeFieldConstraint;
 import org.drools.util.ArrayUtils;
 
+import uncertainty.truthvals.Degree;
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * A class to implement Multi-Field OR constraints, so user can do:
  * 
@@ -134,4 +137,20 @@
         
         return clone;
     }
+
+    public IUncertainDegree matches(InternalFactHandle handle,
+            InternalWorkingMemory workingMemory) {        
+        if ( this.alphaConstraints.length > 0 ) {
+            double eps = 0;
+            for ( int i = 0; i < this.alphaConstraints.length; i++ ) {
+                double ei = ((Degree) this.alphaConstraints[i].matches( handle,
+                                                         workingMemory )).getValue(); 
+                eps = eps + ei - eps*ei;
+                }
+            return new Degree(eps);
+            }                    
+        return new Degree(1);
+    }
+    
+    
 }

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -28,6 +28,8 @@
 import org.drools.spi.PredicateExpression;
 import org.drools.spi.Restriction;
 
+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 
@@ -325,4 +327,11 @@
         }        
     }
 
+    public IUncertainDegree matches(InternalFactHandle handle,
+            InternalWorkingMemory workingMemory) {
+        throw new UnsupportedOperationException("Method not supported. Please contact development team.");
+    }
+
+    
+    
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -27,6 +27,8 @@
 import org.drools.spi.FieldExtractor;
 import org.drools.spi.ReturnValueExpression;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class ReturnValueConstraint
     implements
     BetaNodeFieldConstraint,
@@ -143,4 +145,16 @@
         return new ReturnValueConstraint( this.fieldExtractor, (ReturnValueRestriction) this.restriction.clone() );
     }
 
+    public IUncertainDegree matches(final InternalFactHandle handle,
+            final InternalWorkingMemory workingMemory) {
+        try {
+            return this.restriction.matches( this.fieldExtractor,
+                    handle,
+                    null,
+                    workingMemory );
+        } 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/uncertainDrools/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -30,6 +30,8 @@
 import org.drools.spi.ReturnValueExpression;
 import org.drools.spi.Tuple;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class ReturnValueRestriction
     implements
     Restriction {
@@ -368,4 +370,10 @@
         }        
     }
 
+    public IUncertainDegree matches(FieldExtractor fieldExtractor,
+            InternalFactHandle handle, Object object,
+            InternalWorkingMemory workingMemory) {
+        throw new UnsupportedOperationException( "does not support method call isAllowed(Object object, InternalWorkingMemory workingMemoiry)" );
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/VariableConstraint.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/VariableConstraint.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/VariableConstraint.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -24,6 +24,8 @@
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldExtractor;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class VariableConstraint
     implements
     AlphaNodeFieldConstraint,
@@ -120,5 +122,13 @@
         return new VariableConstraint( this.fieldExtractor,
                                        (VariableRestriction) this.restriction.clone() );
     }
+    
+    
+    public IUncertainDegree matches(final InternalFactHandle handle,
+            final InternalWorkingMemory workingMemory) {
+        return this.restriction.matches( this.fieldExtractor,
+                handle,
+                workingMemory );
+    }
 
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/VariableRestriction.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/rule/VariableRestriction.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -27,6 +27,8 @@
 import org.drools.spi.FieldExtractor;
 import org.drools.spi.Restriction;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class VariableRestriction
     implements
     Restriction {
@@ -449,4 +451,17 @@
             }
         }
     }
+    
+    
+    
+    public IUncertainDegree matches(final Extractor extractor,
+            final InternalFactHandle handle,
+            final InternalWorkingMemory workingMemory) {
+        return this.evaluator.evaluateUnc( workingMemory,
+                this.contextEntry.extractor,
+                this.evaluator.prepareObject( handle ),
+                this.contextEntry.declaration.getExtractor(),
+                this.evaluator.prepareObject( handle ) );
+    }
+    
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/AlphaNodeFieldConstraint.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/AlphaNodeFieldConstraint.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/AlphaNodeFieldConstraint.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -19,10 +19,15 @@
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public interface AlphaNodeFieldConstraint
     extends
     Constraint {
 
     public boolean isAllowed(InternalFactHandle handle,
                              InternalWorkingMemory workingMemory);
+    
+    public IUncertainDegree matches(InternalFactHandle handle,
+            InternalWorkingMemory workingMemory);
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/Evaluator.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/Evaluator.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/Evaluator.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -24,6 +24,8 @@
 import org.drools.common.InternalWorkingMemory;
 import org.drools.rule.VariableRestriction.VariableContextEntry;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * A public interface to be implemented by all evaluators
  */
@@ -101,4 +103,25 @@
                                        VariableContextEntry context,
                                        Object object2);
 
+    
+    public IUncertainDegree evaluateUnc(InternalWorkingMemory workingMemory,
+            Extractor extractor,
+            Object object1,
+            FieldValue value);
+
+    public IUncertainDegree evaluateUnc(InternalWorkingMemory workingMemory,
+            Extractor leftExtractor,
+            Object left,
+            Extractor rightExtractor,
+            Object right);
+
+    public IUncertainDegree evaluateCachedLeftUnc(InternalWorkingMemory workingMemory,
+            VariableContextEntry context,
+            Object object1);
+
+    public IUncertainDegree evaluateCachedRightUnc(InternalWorkingMemory workingMemory,
+            VariableContextEntry context,
+            Object object2);
+
+    
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/ObjectType.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/ObjectType.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/ObjectType.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -20,6 +20,8 @@
 
 import org.drools.base.ValueType;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 /**
  * Semantic object type differentiator.
  * 
@@ -46,7 +48,18 @@
     
     boolean isAssignableFrom(ObjectType objectType);
     
+    
     /**
+     * The method tests for (onto)logical compatibility
+     * between a given type and this type.
+     * @author Sotty
+     * 
+     * 
+     */
+    IUncertainDegree isCompatibleWith(Object object);
+    
+    
+    /**
      * Returns true if the object type represented by this object
      * is an event object type. False otherwise.
      * @return

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/Restriction.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/Restriction.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/spi/Restriction.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -8,6 +8,8 @@
 import org.drools.rule.ContextEntry;
 import org.drools.rule.Declaration;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public interface Restriction
     extends
     Serializable,
@@ -38,4 +40,6 @@
 
     public Object clone();
 
+    
+
 }

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/AbstractHashTable.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/AbstractHashTable.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/AbstractHashTable.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -11,6 +11,8 @@
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldExtractor;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public abstract class AbstractHashTable
     implements
     Serializable {
@@ -358,6 +360,8 @@
         public int                hashCode;
 
         public Entry              next;
+        
+        protected IUncertainDegree degree;
 
         //        private LinkedList              list;
 
@@ -377,6 +381,14 @@
         public InternalFactHandle getFactHandle() {
             return this.handle;
         }
+        
+        public IUncertainDegree getDegree() {
+            return degree;
+        }
+        
+        public void setDegree(IUncertainDegree deg) {
+            degree = deg;
+        }
 
         public Entry getNext() {
             return this.next;

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -8,6 +8,8 @@
 import org.drools.reteoo.ReteTuple;
 import org.drools.util.TupleIndexHashTable.FieldIndexEntry;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class FactHandleIndexHashTable extends AbstractHashTable
     implements
     FactHandleMemory {
@@ -363,4 +365,45 @@
             return "FieldIndexEntry( hashCode=" + this.hashCode + " first=" + this.first + " )";
         }
     }
+
+    public IUncertainDegree getUncDeg(InternalFactHandle handle) {
+        final Object object = handle.getObject();
+        //this.index.setCachedValue( object );
+
+        final int hashCode = this.index.hashCodeOf( object );
+
+        final int index = indexOf( hashCode,
+                                   this.table.length );
+
+        FieldIndexEntry current = (FieldIndexEntry) this.table[index];
+        while ( current != null ) {
+            if ( current.matches( object,
+                                  hashCode ) ) {
+                return current.first.getDegree();
+            }
+            current = (FieldIndexEntry) current.next;
+        }
+        return null;
+    }
+
+    public void setUncDeg(InternalFactHandle handle, IUncertainDegree degree) {
+        final Object object = handle.getObject();
+        //this.index.setCachedValue( object );
+
+        final int hashCode = this.index.hashCodeOf( object );
+
+        final int index = indexOf( hashCode,
+                                   this.table.length );
+
+        FieldIndexEntry current = (FieldIndexEntry) this.table[index];
+        while ( current != null ) {
+            if ( current.matches( object,
+                                  hashCode ) ) {
+                current.first.setDegree(degree);
+                return;
+            }
+            current = (FieldIndexEntry) current.next;
+        }        
+        
+    }
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactHashTable.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactHashTable.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactHashTable.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -7,6 +7,8 @@
 import org.drools.reteoo.FactHandleMemory;
 import org.drools.reteoo.ReteTuple;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class FactHashTable extends AbstractHashTable
     implements
     FactHandleMemory {
@@ -112,4 +114,35 @@
     public boolean isIndexed() {
         return false;
     }
+
+    public IUncertainDegree getUncDeg(InternalFactHandle handle) {
+        final int hashCode = this.comparator.hashCodeOf( handle );
+        final int index = indexOf( hashCode,
+                                   this.table.length );
+
+        FactEntryImpl current = (FactEntryImpl) this.table[index];
+        while ( current != null ) {
+            if ( hashCode == current.hashCode && handle.getId() == current.handle.getId() ) {
+                return current.getDegree();
+            }
+            current = (FactEntryImpl) current.getNext();
+        }
+        return null;
+    }
+
+    public void setUncDeg(InternalFactHandle handle, IUncertainDegree degree) {
+        final int hashCode = this.comparator.hashCodeOf( handle );
+        final int index = indexOf( hashCode,
+                                   this.table.length );
+
+        FactEntryImpl current = (FactEntryImpl) this.table[index];
+        while ( current != null ) {
+            if ( hashCode == current.hashCode && handle.getId() == current.handle.getId() ) {
+                current.setDegree(degree);
+                return;
+            }
+            current = (FactEntryImpl) current.getNext();
+        }
+        
+    }
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactList.java
===================================================================
--- labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactList.java	2008-02-28 22:03:58 UTC (rev 18624)
+++ labs/jbossrules/branches/uncertainDrools/drools-core/src/main/java/org/drools/util/FactList.java	2008-02-29 00:12:56 UTC (rev 18625)
@@ -9,6 +9,8 @@
 import org.drools.reteoo.FactHandleMemory;
 import org.drools.reteoo.ReteTuple;
 
+import uncertainty.truthvals.IUncertainDegree;
+
 public class FactList
     implements
     FactHandleMemory {
@@ -56,6 +58,37 @@
         return false;
     }
     
+    public IUncertainDegree getUncDeg(InternalFactHandle handle) {
+        Iterator it = this.list.iterator();
+        for ( Object object = it.next(); object != null; object = it.next() ) {
+            if (object instanceof FactEntryImpl) {
+                FactEntryImpl fei = (FactEntryImpl) object;
+                if (handle.equals(fei.getObject())) {
+                    return fei.getDegree();
+                }
+            }            
+        }
+        return null;
+    }
+    
+    
+
+    public void setUncDeg(InternalFactHandle handle, IUncertainDegree degree) {
+        Iterator it = this.list.iterator();
+        for ( Object object = it.next(); object != null; object = it.next() ) {
+            if (object instanceof FactEntryImpl) {
+                FactEntryImpl fei = (FactEntryImpl) object;
+                if (handle.equals(fei.getObject())) {
+                    fei.setDegree(degree);
+                }
+            }            
+        }        
+    }
+    
+    
+    
+    
+    
     public Iterator iterator() {
         return this.list.iterator();
     }
@@ -68,7 +101,17 @@
         return false;
     }
     
-    public static class FactEntryImpl extends LinkedListEntry implements FactEntry, Serializable {    
+    
+    
+    
+    public static class FactEntryImpl extends LinkedListEntry implements FactEntry, Serializable {
+        
+        IUncertainDegree degree;
+        
+        public IUncertainDegree getDegree() { return degree; }
+        
+        public void setDegree(IUncertainDegree deg) { degree = deg; }
+        
         public FactEntryImpl(InternalFactHandle handle) {
             super(handle);
         }
@@ -78,4 +121,9 @@
         }
         
     }
+
+
+
+
+    
 }
\ No newline at end of file




More information about the jboss-svn-commits mailing list