[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