[jboss-svn-commits] JBL Code SVN: r21604 - in labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools: rule and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Aug 18 08:15:49 EDT 2008


Author: dsotty
Date: 2008-08-18 08:15:48 -0400 (Mon, 18 Aug 2008)
New Revision: 21604

Added:
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/IUncertainTerminalNode.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainAgendaItem.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainFactTemplateTypeConf.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainLIANodePropagation.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainLeftTuple.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainObjectTypeConf.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainReteooRuleBase.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainRightTuple.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ClassConstraint.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ConstraintSignature.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/FalseAgendaFilter.java
   labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/IUncertainEvaluator.java
Log:
New branch for uncertainty support in 5.x

Added: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/IUncertainTerminalNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/IUncertainTerminalNode.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/IUncertainTerminalNode.java	2008-08-18 12:15:48 UTC (rev 21604)
@@ -0,0 +1,18 @@
+/**
+ * 
+ */
+package org.drools.reteoo;
+
+import uncertainty.truthvals.operators.IUncDegCombiner;
+
+/**
+ * @author davide
+ *
+ */
+public interface IUncertainTerminalNode extends TerminalNode {
+	
+	
+	
+	
+
+}

Added: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainAgendaItem.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainAgendaItem.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainAgendaItem.java	2008-08-18 12:15:48 UTC (rev 21604)
@@ -0,0 +1,48 @@
+/**
+ * 
+ */
+package org.drools.reteoo;
+
+import org.drools.common.AgendaItem;
+import org.drools.rule.GroupElement;
+import org.drools.rule.Rule;
+import org.drools.spi.PropagationContext;
+
+import uncertainty.truthvals.IUncertainDegree;
+
+/**
+ * @author davide
+ *
+ */
+public class UncertainAgendaItem extends AgendaItem {
+
+	
+	protected IUncertainDegree deg;
+	
+	public IUncertainDegree getDegree() { return deg; }
+	
+	
+	/**
+	 * @param propagationNumber
+	 * @param cloned
+	 * @param value
+	 * @param context
+	 * @param rule
+	 * @param subrule
+	 * @param degree
+	 */
+	public UncertainAgendaItem(long propagationNumber, LeftTuple cloned,
+			int value, PropagationContext context, Rule rule,
+			GroupElement subrule, IUncertainDegree degree) {
+		
+		super(propagationNumber, cloned, value, context, rule, subrule);
+		
+		
+		this.deg = degree;
+	}
+
+	
+	public boolean isNotFalse() {
+		return deg.toBoolean();
+	}
+}

Added: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainFactTemplateTypeConf.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainFactTemplateTypeConf.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainFactTemplateTypeConf.java	2008-08-18 12:15:48 UTC (rev 21604)
@@ -0,0 +1,45 @@
+/**
+ * 
+ */
+package org.drools.reteoo;
+
+import java.util.Hashtable;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.common.InternalRuleBase;
+import org.drools.facttemplates.FactTemplate;
+import org.drools.rule.EntryPoint;
+
+import uncertainty.truthvals.IUncertainDegree;
+
+/**
+ * @author davide
+ *
+ */
+public class UncertainFactTemplateTypeConf extends FactTemplateTypeConf
+		implements UncertainObjectTypeConf {
+
+	private Hashtable<ObjectTypeNode, IUncertainDegree> matchMap = null;
+	
+	
+	
+	
+	/**
+	 * @param entrypoint
+	 * @param factTemplate
+	 * @param ruleBase
+	 */
+	public UncertainFactTemplateTypeConf(EntryPoint entrypoint,
+			FactTemplate factTemplate, InternalRuleBase ruleBase) {
+		super(entrypoint, factTemplate, ruleBase);
+	}
+
+
+
+
+	// TODO : WHAT matches here?
+	public Hashtable<ObjectTypeNode, IUncertainDegree> getMatchDegrees() {
+		throw new RuntimeDroolsException("Still unimplemented");
+	}
+
+}

Added: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainLIANodePropagation.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainLIANodePropagation.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainLIANodePropagation.java	2008-08-18 12:15:48 UTC (rev 21604)
@@ -0,0 +1,45 @@
+/**
+ * 
+ */
+package org.drools.reteoo;
+
+import java.util.Deque;
+
+import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.spi.PropagationContext;
+
+import uncertainty.truthvals.IUncertainDegree;
+
+/**
+ * @author davide
+ *
+ */
+public class UncertainLIANodePropagation extends LIANodePropagation {
+
+	
+	protected Deque<IUncertainDegree> tVal;
+	/**
+	 * @param leftInputAdapterNode
+	 * @param val
+	 * @param factHandle
+	 * @param context
+	 */
+	public UncertainLIANodePropagation(
+			LeftInputAdapterNode leftInputAdapterNode,
+			Deque<IUncertainDegree> val, InternalFactHandle factHandle,
+			PropagationContext context) {
+		super(leftInputAdapterNode, factHandle, context);
+		tVal = val;
+	}
+
+	
+	public void doPropagation(InternalWorkingMemory workingMemory) {
+        node.getSinkPropagator().createAndPropagateAssertLeftTuple( handle,
+        															tVal,
+                                                                    context,
+                                                                    workingMemory,
+                                                                    false  );
+    }
+	
+}

Added: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainLeftTuple.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainLeftTuple.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainLeftTuple.java	2008-08-18 12:15:48 UTC (rev 21604)
@@ -0,0 +1,78 @@
+/**
+ * 
+ */
+package org.drools.reteoo;
+
+import java.util.Deque;
+
+import org.drools.common.InternalFactHandle;
+
+import uncertainty.truthvals.IUncertainDegree;
+
+/**
+ * @author sotty
+ *
+ */
+public class UncertainLeftTuple extends LeftTuple {
+	
+	protected Deque<IUncertainDegree> tVal;
+	
+	public Deque<IUncertainDegree> getTruthVal() {
+		if (tVal != null)
+			return tVal;
+		
+		if (this.getRightParent() != null) 			
+			return ((UncertainRightTuple) this.getRightParent()).getTruthVal();
+		
+		return null;
+	}
+	
+	/**
+	 * @param factHandle
+	 * @param truthVal
+	 * @param sink
+	 * @param leftTupleMemoryEnabled
+	 */
+	public UncertainLeftTuple(InternalFactHandle factHandle,
+			Deque<IUncertainDegree> truthVal, LeftTupleSink sink,
+			boolean leftTupleMemoryEnabled) {
+		
+
+		super(factHandle, sink, leftTupleMemoryEnabled);
+		
+		this.tVal = truthVal;
+		
+		System.out.println("UncertainLeftTuple : U.Left Tuple has been created");
+			for (IUncertainDegree deg : tVal) {
+				System.out.print("\t"+deg+" ");
+			}
+			System.out.println();
+	}
+
+	/**
+	 * @param leftTuple
+	 * @param rightTuple
+	 * @param sink
+	 * @param leftTupleMemoryEnabled
+	 */
+	public UncertainLeftTuple(LeftTuple leftTuple, RightTuple rightTuple,
+			LeftTupleSink sink, boolean leftTupleMemoryEnabled) {
+		super(leftTuple,rightTuple,sink,leftTupleMemoryEnabled);
+	}
+
+	/**
+	 * @param tuple
+	 * @param sink
+	 * @param leftTupleMemoryEnabled
+	 */
+	public UncertainLeftTuple(LeftTuple tuple, LeftTupleSink sink,
+			boolean leftTupleMemoryEnabled) {
+		super(tuple, sink, leftTupleMemoryEnabled);
+	}
+
+	
+	
+	
+	
+
+}

Added: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainObjectTypeConf.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainObjectTypeConf.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainObjectTypeConf.java	2008-08-18 12:15:48 UTC (rev 21604)
@@ -0,0 +1,19 @@
+/**
+ * 
+ */
+package org.drools.reteoo;
+
+import java.util.Hashtable;
+
+import uncertainty.truthvals.IUncertainDegree;
+
+/**
+ * @author davide
+ *
+ */
+public interface UncertainObjectTypeConf extends ObjectTypeConf {
+
+			
+	public Hashtable<ObjectTypeNode, IUncertainDegree> getMatchDegrees();
+	
+}

Added: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainReteooRuleBase.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainReteooRuleBase.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainReteooRuleBase.java	2008-08-18 12:15:48 UTC (rev 21604)
@@ -0,0 +1,70 @@
+/**
+ * 
+ */
+package org.drools.reteoo;
+
+import org.drools.reteoo.ReteooRuleBase;
+import uncertainty.factory.SimpleDegreeFactory;
+
+import org.drools.IUncertainRuleBase;
+import org.drools.RuleBaseConfiguration;
+
+import uncertainty.factory.IDegreeFactory;
+
+
+
+/**
+ * @author sotty
+ *
+ *	Uncertain Rule Bases add a factory to build the uncertain truth degrees for the rules
+ */
+public class UncertainReteooRuleBase extends ReteooRuleBase implements IUncertainRuleBase {
+
+	
+	
+	
+	/** 
+	 * Each RuleBase uses one factory for all the rules
+	 */
+	private IDegreeFactory truthFactory = null;
+
+    /**
+	 * @param string
+	 * @param config
+	 */
+	public UncertainReteooRuleBase(String string, RuleBaseConfiguration config) {
+		super(string, config);		
+		
+		//TODO : Instantiate the factory from the config
+		this.setTruthFactory(new SimpleDegreeFactory());
+	}
+	
+	
+	
+
+	/**
+     * Getter
+     * If the factory has not been initialized, it instantiates a <code>SimpleDegreeFactory</code>
+     * @return The factory associated to the rule base
+     */
+    public IDegreeFactory getTruthFactory() {
+    	if (truthFactory == null)
+    		truthFactory = new SimpleDegreeFactory();
+		return truthFactory;
+	}
+    
+    /**
+     * Setter
+     * TODO : better not to mess like this...
+     * @deprecated
+     */   
+    protected void setTruthFactory(IDegreeFactory factory) {
+    	truthFactory = factory;
+    }
+	
+	
+	
+	
+	
+	
+}

Added: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainRightTuple.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainRightTuple.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/UncertainRightTuple.java	2008-08-18 12:15:48 UTC (rev 21604)
@@ -0,0 +1,55 @@
+/**
+ * 
+ */
+package org.drools.reteoo;
+
+import java.util.Deque;
+
+import org.drools.common.InternalFactHandle;
+
+import uncertainty.truthvals.IUncertainDegree;
+
+/**
+ * @author sotty
+ *
+ */
+public class UncertainRightTuple extends RightTuple {
+	
+	protected Deque<IUncertainDegree> tVal;
+	
+	public Deque<IUncertainDegree> getTruthVal() { return tVal; }
+	
+	
+	
+	public UncertainRightTuple(InternalFactHandle handle,
+			Deque<IUncertainDegree> truthVal,
+            RightTupleSink sink) {
+		super(handle,sink);
+		
+		this.tVal = truthVal;
+		
+		System.out.println("UncertainRightTuple : U.Right Tuple has been created");
+		System.out.println(this);
+	}
+	
+	
+	public void setDegree(IUncertainDegree deg) {
+		tVal.addLast(deg);
+	}
+	
+	
+	public void resetDegree() {
+		tVal.removeLast();
+	}
+	
+	public String toString() {
+		StringBuilder sb = new StringBuilder("Uncertain Right Tuple : ");
+		for (IUncertainDegree deg : tVal) {
+			sb.append("\t "+deg);
+		}
+		return sb.toString();
+	}
+	
+	
+
+}

Added: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ClassConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ClassConstraint.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ClassConstraint.java	2008-08-18 12:15:48 UTC (rev 21604)
@@ -0,0 +1,96 @@
+package org.drools.rule;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+import org.drools.spi.Constraint;
+import org.drools.spi.InternalReadAccessor;
+
+public class ClassConstraint implements Constraint {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 400L;
+
+	private Class clazz;
+	
+	public ClassConstraint(Class cl) {
+		clazz = cl;
+	}
+	
+	
+	public Declaration[] getRequiredDeclarations() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void replaceDeclaration(Declaration oldDecl, Declaration newDecl) {
+		// TODO Auto-generated method stub
+
+	}
+	
+	
+	public boolean equals(Object other) {
+		if (other == null) return false;
+		if (! (other instanceof ClassConstraint)) return false;
+		
+		ClassConstraint o = (ClassConstraint) other;
+		
+		String cl1 = o.clazz.getName();
+		String cl2 = clazz.getName();
+		
+		if (cl1.endsWith("ShadowProxy")) cl1 = cl1.substring(0,cl1.lastIndexOf("ShadowProxy"));
+		if (cl2.endsWith("ShadowProxy")) cl2 = cl2.substring(0,cl2.lastIndexOf("ShadowProxy"));
+		
+		return cl1.equals(cl2);
+		
+	}
+	
+	public int hashCode() {		
+		String cl = clazz.getName();
+		
+		if (cl.endsWith("ShadowProxy")) cl = cl.substring(0,cl.lastIndexOf("ShadowProxy"));
+				
+		return cl.hashCode();
+		
+	}
+	
+	
+	
+	
+	
+	public Object clone() {
+		return new ClassConstraint(this.clazz);
+	}
+	
+	
+	public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        clazz   = (Class) in.readObject();        
+    }
+
+    public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeObject(clazz);        
+    }
+
+
+	/* (non-Javadoc)
+	 * @see org.drools.spi.Constraint#getType()
+	 */
+	public ConstraintType getType() {
+		return Constraint.ConstraintType.ALPHA;
+	}
+	
+	
+	public ConstraintSignature getSignature() {
+		return new ConstraintSignature("class","==",this.clazz.getName());
+	}
+	
+	public static ConstraintSignature buildSignature(Class clazz) {
+		return new ConstraintSignature("class","==",clazz.getName());
+	}
+
+	
+
+}

Added: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ConstraintSignature.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ConstraintSignature.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ConstraintSignature.java	2008-08-18 12:15:48 UTC (rev 21604)
@@ -0,0 +1,45 @@
+/**
+ * 
+ */
+package org.drools.rule;
+
+/**
+ * @author davide
+ *
+ */
+public class ConstraintSignature {
+
+	
+	private String sign;
+	
+	/**
+	 * @param string
+	 * @param op
+	 * @param value
+	 */
+	public ConstraintSignature(String left, String op, String right) {
+		StringBuilder sb = new StringBuilder(left);
+		sb.append(' ').append(op);
+		sb.append(' ').append(right);
+		
+		
+		this.sign = sb.toString();
+		System.out.println("ConstraintSignature Built a ConstrSignature :  "+sign);
+	}
+
+	public boolean equals(Object o) {
+		if (o == null) return false;
+		if (! (o instanceof ConstraintSignature)) return false;
+		
+		return this.sign.equals(((ConstraintSignature) o).sign);
+	}
+	
+	public int hashCode() {
+		return sign.hashCode();
+	}
+	
+	public String toString() {
+		return this.sign;
+	}
+	
+}

Added: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/FalseAgendaFilter.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/FalseAgendaFilter.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/FalseAgendaFilter.java	2008-08-18 12:15:48 UTC (rev 21604)
@@ -0,0 +1,12 @@
+package org.drools.spi;
+
+import org.drools.reteoo.UncertainAgendaItem;
+
+public class FalseAgendaFilter implements AgendaFilter {
+
+	@Override
+	public boolean accept(Activation activation) {	
+		return activation.isNotFalse();				
+	}
+
+}

Added: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/IUncertainEvaluator.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/IUncertainEvaluator.java	                        (rev 0)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/IUncertainEvaluator.java	2008-08-18 12:15:48 UTC (rev 21604)
@@ -0,0 +1,60 @@
+package org.drools.spi;
+
+import org.drools.WorkingMemory;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.rule.VariableRestriction.VariableContextEntry;
+
+import uncertainty.truthvals.IUncertainDegree;
+
+public interface IUncertainEvaluator extends Evaluator {
+
+	/**
+	 * Evaluate field vs literal
+	 * 
+	 * @param workingMemory
+	 * @param extractor
+	 * @param object1
+	 * @param value
+	 * @return
+	 */
+	public IUncertainDegree evaluateUncertain(WorkingMemory workingMemory,
+			InternalReadAccessor extractor, Object object1, FieldValue value);
+    
+	
+	/**
+	 * Evaluate field vs literal
+	 * 
+	 * @param workingMemory
+	 * @param extractor
+	 * @param object1
+	 * @param value
+	 * @return
+	 */
+	public IUncertainDegree evaluateUncertain(WorkingMemory workingMemory,
+			InternalReadAccessor leftExtractor, Object left,
+			InternalReadAccessor rightExtractor, Object right);
+
+	/**
+	 * Left cache evaluation
+	 * 
+	 * @param workingMemory
+	 * @param context
+	 * @param object1
+	 * @return
+	 */
+	public IUncertainDegree evaluateUncertainCachedLeft(WorkingMemory workingMemory,
+			VariableContextEntry context, Object object1);
+	
+
+	/**
+	 * Right cache evaluation
+	 * 
+	 * @param workingMemory
+	 * @param context
+	 * @param object2
+	 * @return
+	 */
+	public IUncertainDegree evaluateUncertainCachedRight(WorkingMemory workingMemory,
+			VariableContextEntry context, Object object2);
+	
+}




More information about the jboss-svn-commits mailing list