[jboss-svn-commits] JBL Code SVN: r21493 - in labs/jbossrules/branches/uncDrools5x: drools-compiler/src/main/resources/META-INF and 11 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Aug 12 18:48:37 EDT 2008
Author: dsotty
Date: 2008-08-12 18:48:36 -0400 (Tue, 12 Aug 2008)
New Revision: 21493
Modified:
labs/jbossrules/branches/uncDrools5x/drools-compiler/.classpath
labs/jbossrules/branches/uncDrools5x/drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf
labs/jbossrules/branches/uncDrools5x/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
labs/jbossrules/branches/uncDrools5x/drools-core/.classpath
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/RuleBaseFactory.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/WorkingMemoryEntryPoint.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/ClassObjectType.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/AbstractFactHandleFactory.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/BetaConstraints.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InstanceEqualsConstraint.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InstanceNotEqualsConstraint.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InternalWorkingMemoryActions.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/NamedEntryPoint.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/ObjectTypeConfigurationRegistry.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/TupleStartEqualsConstraint.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/facttemplates/FactTemplateObjectType.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/BetaNode.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EmptyLeftTupleSinkAdapter.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EmptyObjectSinkAdapter.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/FactTemplateTypeConf.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LIANodePropagation.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LeftTupleSinkPropagator.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/NotNode.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectSinkPropagator.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/Rete.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ReteooFactHandleFactory.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/SingleObjectSinkAdapter.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/AndCompositeRestriction.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/AndConstraint.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/OrCompositeRestriction.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/OrConstraint.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/VariableConstraint.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/AlphaNodeFieldConstraint.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/BetaNodeFieldConstraint.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/FactHandleFactory.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/ObjectType.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/Restriction.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/reteoo/MockObjectSink.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/spi/MockConstraint.java
labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/spi/MockObjectType.java
Log:
New branch for uncertainty support in 5.x
Modified: labs/jbossrules/branches/uncDrools5x/drools-compiler/.classpath
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-compiler/.classpath 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-compiler/.classpath 2008-08-12 22:48:36 UTC (rev 21493)
@@ -14,5 +14,6 @@
<classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
<classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
<classpathentry kind="var" path="M2_REPO/org/antlr/gunit/1.0.1/gunit-1.0.1.jar"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/Essence"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
Modified: labs/jbossrules/branches/uncDrools5x/drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-compiler/src/main/resources/META-INF/drools.default.packagebuilder.conf 2008-08-12 22:48:36 UTC (rev 21493)
@@ -29,4 +29,8 @@
drools.evaluator.comparable = org.drools.base.evaluators.ComparableEvaluatorsDefinition
drools.evaluator.set = org.drools.base.evaluators.SetEvaluatorsDefinition
drools.evaluator.matches = org.drools.base.evaluators.MatchesEvaluatorsDefinition
-drools.evaluator.soundslike = org.drools.base.evaluators.SoundslikeEvaluatorsDefinition
\ No newline at end of file
+drools.evaluator.soundslike = org.drools.base.evaluators.SoundslikeEvaluatorsDefinition
+
+drools.evaluator.young = org.drools.base.evaluators.YoungEvaluatorDefinition
+drools.evaluator.heavy = org.drools.base.evaluators.HeavyEvaluatorDefinition
+drools.evaluator.nearly = org.drools.base.evaluators.NearlyEvaluatorDefinition
Modified: labs/jbossrules/branches/uncDrools5x/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -3,6 +3,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
+import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -41,6 +42,7 @@
import org.drools.process.instance.timer.TimerManager;
import org.drools.reteoo.LIANodePropagation;
import org.drools.reteoo.ObjectTypeConf;
+import org.drools.rule.ConstraintSignature;
import org.drools.rule.EntryPoint;
import org.drools.rule.Rule;
import org.drools.rule.TimeMachine;
@@ -55,6 +57,8 @@
import org.drools.time.TimerService;
import org.drools.util.ObjectHashMap;
+import uncertainty.truthvals.IUncertainDegree;
+
public class MockWorkingMemory implements InternalWorkingMemory {
List<Object> facts = new ArrayList<Object>();
@@ -546,4 +550,12 @@
return null;
}
+ @Override
+ public FactHandle insert(Object object,
+ Hashtable<ConstraintSignature, IUncertainDegree> priors)
+ throws FactException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/.classpath
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/.classpath 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/.classpath 2008-08-12 22:48:36 UTC (rev 21493)
@@ -1,12 +1,14 @@
-<classpath>
- <classpathentry kind="src" path="src/main/java"/>
- <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
- <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
- <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
- <classpathentry kind="output" path="target/classes"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar"/>
- <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar"/>
- <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
-</classpath>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src/main/java"/>
+ <classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+ <classpathentry excluding="**/*.java" kind="src" output="target/test-classes" path="src/test/resources"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.2.2/xstream-1.2.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.3.4.O/xpp3_min-1.1.3.4.O.jar"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0-dp4/mvel-2.0-dp4.jar"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/Essence"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/RuleBaseFactory.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/RuleBaseFactory.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/RuleBaseFactory.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -56,6 +56,12 @@
case RuleBase.RETEOO :
return new org.drools.reteoo.ReteooRuleBase( UUIDGenerator.getInstance().generateRandomBasedUUID().toString(),
config );
+
+
+ case IUncertainRuleBase.RETEOO_UNCERTAIN :
+ return new org.drools.reteoo.UncertainReteooRuleBase( UUIDGenerator.getInstance().generateRandomBasedUUID().toString(),
+ config );
+
default :
throw new IllegalArgumentException( "Unknown engine type: " + type );
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/WorkingMemoryEntryPoint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/WorkingMemoryEntryPoint.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/WorkingMemoryEntryPoint.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -18,7 +18,13 @@
package org.drools;
import java.io.Serializable;
+import java.util.Hashtable;
+import org.drools.rule.ConstraintSignature;
+import org.drools.spi.Constraint;
+
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* An interface for instances that allow handling of entry-point-scoped
* facts
@@ -39,6 +45,11 @@
*/
FactHandle insert(Object object) throws FactException;
+
+
+
+ FactHandle insert(Object object, Hashtable<ConstraintSignature,IUncertainDegree> priors) throws FactException;
+
/**
* Insert a fact registering JavaBean <code>PropertyChangeListeners</code>
* on the Object to automatically trigger <code>update</code> calls
@@ -58,7 +69,47 @@
FactHandle insert(Object object,
boolean dynamic) throws FactException;
+
+
/**
+ * Assert a fact stating certain properties.
+ *
+ * @param object
+ * The fact object.
+ *
+ * @return The new fact-handle associated with the object.
+ *
+ * @throws FactException
+ * If a RuntimeException error occurs.
+ */
+ //FactHandle insert(Object object, Hashtable<ConstraintSignature, IUncertainDegree> prems) throws FactException;
+
+
+
+ /**
+ * Assert a fact stating certain properties.
+ * Logical assertion allows information to be combined with the existing one
+ * @param object
+ * The fact object.
+ *
+ * @return The new fact-handle associated with the object.
+ *
+ * @throws FactException
+ * If a RuntimeException error occurs.
+ */
+ //FactHandle insertLogical(Object object, Hashtable<ConstraintSignature, IUncertainDegree> prems) throws FactException;
+
+
+
+
+
+
+
+
+
+
+
+ /**
* Retract a fact.
*
* @param handle
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/ClassObjectType.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/ClassObjectType.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/ClassObjectType.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -18,6 +18,9 @@
import org.drools.spi.ObjectType;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
import java.io.ObjectInput;
import java.io.IOException;
import java.io.ObjectOutput;
@@ -187,5 +190,18 @@
public int hashCode() {
return this.objectTypeClass.hashCode();
}
+ /* (non-Javadoc)
+ * @see org.drools.spi.ObjectType#isAn(java.lang.Object)
+ */
+ public IUncertainDegree isAn(Object object, IDegreeFactory factory) {
+ // TODO: May/Should use instance info --> see ontologies??
+ return factory.fromBoolean(isAssignableFrom(object.getClass()));
+ }
+ /* (non-Javadoc)
+ * @see org.drools.spi.ObjectType#isSubClass(java.lang.Class)
+ */
+ public IUncertainDegree isSubClass(Class clazz, IDegreeFactory factory) {
+ return factory.fromBoolean(matchesClass(clazz));
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -20,17 +20,23 @@
import org.drools.FactHandle;
import org.drools.WorkingMemory;
import org.drools.common.InternalWorkingMemoryActions;
+import org.drools.reteoo.UncertainAgendaItem;
+import org.drools.rule.ConstraintSignature;
import org.drools.rule.Declaration;
import org.drools.rule.GroupElement;
import org.drools.rule.Rule;
import org.drools.spi.Activation;
+import org.drools.spi.Constraint;
import org.drools.spi.KnowledgeHelper;
import org.drools.spi.Tuple;
+import uncertainty.truthvals.IUncertainDegree;
+
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectOutput;
import java.io.ObjectInput;
+import java.util.Hashtable;
public class DefaultKnowledgeHelper
implements
@@ -229,4 +235,32 @@
public void halt() {
this.workingMemory.halt();
}
+
+
+ public IUncertainDegree getActivationDegree() {
+ if (this.activation instanceof UncertainAgendaItem) {
+ return ((UncertainAgendaItem) activation).getDegree();
+ }
+ return null;
+ }
+ /* (non-Javadoc)
+ * @see org.drools.spi.KnowledgeHelper#insert(java.lang.Object, java.util.Hashtable)
+ */
+ public void insert(Object object,
+ Hashtable<ConstraintSignature, IUncertainDegree> priors)
+ throws FactException {
+ this.workingMemory.insert(object, priors);
+
+ }
+ /* (non-Javadoc)
+ * @see org.drools.spi.KnowledgeHelper#insertLogical(java.lang.Object, java.util.Hashtable)
+ */
+ public void insertLogical(Object object,
+ Hashtable<ConstraintSignature, IUncertainDegree> priors)
+ throws FactException {
+ this.workingMemory.insertLogical(object, priors, this.rule, this.activation);
+
+ }
+
+
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -16,6 +16,7 @@
* limitations under the License.
*/
+import java.util.Hashtable;
import java.util.List;
import org.drools.FactException;
@@ -23,14 +24,19 @@
import org.drools.QueryResults;
import org.drools.WorkingMemory;
import org.drools.common.InternalWorkingMemoryActions;
+import org.drools.reteoo.UncertainAgendaItem;
+import org.drools.rule.ConstraintSignature;
import org.drools.rule.Declaration;
import org.drools.rule.GroupElement;
import org.drools.rule.Rule;
import org.drools.spi.Activation;
import org.drools.spi.AgendaGroup;
+import org.drools.spi.Constraint;
import org.drools.spi.KnowledgeHelper;
import org.drools.spi.Tuple;
+import uncertainty.truthvals.IUncertainDegree;
+
public class SequentialKnowledgeHelper
implements
KnowledgeHelper {
@@ -179,4 +185,33 @@
public void halt() {
this.workingMemory.halt();
}
+
+
+ public IUncertainDegree getActivationDegree() {
+ if (this.activation instanceof UncertainAgendaItem) {
+ return ((UncertainAgendaItem) activation).getDegree();
+ }
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.KnowledgeHelper#insert(java.lang.Object, java.util.Hashtable)
+ */
+ public void insert(Object object,
+ Hashtable<ConstraintSignature, IUncertainDegree> priors)
+ throws FactException {
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.KnowledgeHelper#insertLogical(java.lang.Object, java.util.Hashtable)
+ */
+ public void insertLogical(Object object,
+ Hashtable<ConstraintSignature, IUncertainDegree> priors)
+ throws FactException {
+
+
+ }
+
+
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/AbstractFactHandleFactory.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/AbstractFactHandleFactory.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/AbstractFactHandleFactory.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -20,6 +20,7 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.util.Hashtable;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
@@ -27,8 +28,12 @@
import org.drools.marshalling.MarshallerReaderContext;
import org.drools.marshalling.MarshallerWriteContext;
import org.drools.reteoo.ObjectTypeConf;
+import org.drools.rule.ConstraintSignature;
+import org.drools.spi.Constraint;
import org.drools.spi.FactHandleFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
public abstract class AbstractFactHandleFactory
implements
FactHandleFactory {
@@ -75,7 +80,22 @@
conf,
workingMemory );
}
+
+
+ public IUncertainInternalFactHandle newUncertainFactHandle(Object object, Hashtable<ConstraintSignature, IUncertainDegree> priors, ObjectTypeConf conf, InternalWorkingMemory workingMemory ) {
+ return newUncertainFactHandle( this.id.incrementAndGet(),
+ object,
+ priors,
+ conf,
+ workingMemory );
+ }
+
+
+ public abstract IUncertainInternalFactHandle newUncertainFactHandle(int id, Object object, Hashtable<ConstraintSignature, IUncertainDegree> priors, ObjectTypeConf conf, InternalWorkingMemory workingMemory );
+
+
+
/* (non-Javadoc)
* @see org.drools.reteoo.FactHandleFactory#newFactHandle(long)
*/
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -24,6 +24,7 @@
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
+import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
@@ -38,6 +39,7 @@
import org.drools.Agenda;
import org.drools.FactException;
import org.drools.FactHandle;
+import org.drools.IUncertainRuleBase;
import org.drools.ObjectFilter;
import org.drools.Otherwise;
import org.drools.QueryResults;
@@ -74,6 +76,7 @@
import org.drools.reteoo.LIANodePropagation;
import org.drools.reteoo.LeftTuple;
import org.drools.reteoo.ObjectTypeConf;
+import org.drools.rule.ConstraintSignature;
import org.drools.rule.Declaration;
import org.drools.rule.EntryPoint;
import org.drools.rule.Rule;
@@ -82,6 +85,7 @@
import org.drools.spi.AgendaFilter;
import org.drools.spi.AgendaGroup;
import org.drools.spi.AsyncExceptionHandler;
+import org.drools.spi.Constraint;
import org.drools.spi.FactHandleFactory;
import org.drools.spi.GlobalResolver;
import org.drools.spi.PropagationContext;
@@ -89,6 +93,8 @@
import org.drools.time.TimerService;
import org.drools.time.TimerServiceFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* Implementation of <code>WorkingMemory</code>.
*
@@ -676,6 +682,14 @@
return this.tms;
}
+
+
+
+
+
+
+
+
/**
* @see WorkingMemory
*/
@@ -953,6 +967,403 @@
this );
}
+
+
+
+
+
+
+
+
+
+
+ /************************************************************************************/
+
+ /* Uncertainty handling methods */
+ /* Uncertain objects have a prior table associated */
+
+
+ /**
+ * Basic insertion
+ */
+ public FactHandle insert(final Object object, Hashtable<ConstraintSignature, IUncertainDegree> priors) throws FactException {
+
+ if (priors == null);
+ priors = new Hashtable<ConstraintSignature, IUncertainDegree>();
+ return insert( EntryPoint.DEFAULT,
+ object,
+ 0,
+ false,
+ false,
+ null,
+ null,
+ priors);
+ }
+
+ /**
+ * Basic logical insertion
+ *
+ * @param object
+ * @param priors
+ * @return
+ * @throws FactException
+ */
+ public FactHandle insertLogical(final Object object, Hashtable<ConstraintSignature, IUncertainDegree> priors, Rule rule, Activation activation) throws FactException {
+ return insert( EntryPoint.DEFAULT,
+ object,
+ 0,
+ false,
+ true,
+ rule,
+ activation,
+ priors);
+ }
+
+
+ public FactHandle insertLogical(Object object,
+ long duration,
+ boolean dynamic, Rule rule, Activation activation,
+ Hashtable<ConstraintSignature, IUncertainDegree> priors)
+ throws FactException {
+
+ return this.insert( EntryPoint.DEFAULT,
+ object,
+ 0,
+ dynamic,
+ true,
+ rule,
+ activation,
+ priors);
+
+ }
+
+
+
+
+
+
+
+ /**
+ * Object insertion with logical uncertain priors
+ *
+ * @param entryPoint
+ * @param object
+ * @param duration
+ * @param dynamic
+ * @param logical
+ * @param rule
+ * @param activation
+ * @param priors
+ * @return
+ * @throws FactException
+ */
+ protected FactHandle insert(final EntryPoint entryPoint,
+ final Object object,
+ final long duration,
+ final boolean dynamic,
+ boolean logical,
+ final Rule rule,
+ final Activation activation,
+ Hashtable<ConstraintSignature, IUncertainDegree> priors) throws FactException {
+
+ System.out.println("AbstractWorkingMemory : Uncertain State / Justify Ordeal");
+
+ if ( object == null ) {
+// you cannot assert a null object
+ return null;
+ }
+
+ ObjectTypeConf typeConf = this.typeConfReg.getUncertainObjectTypeConf( this.entryPoint,
+ object );
+
+ InternalFactHandle handle = null;
+
+ //TODO : Not really supported yet...
+ if ( isSequential() ) {
+ System.out.println("AWM :Sequential mode, buggy. TODO");
+ handle = this.handleFactory.newUncertainFactHandle( object,
+ priors,
+ typeConf,
+ this );
+ this.objectStore.addHandle( handle, object );
+ insert( handle,
+ object,
+ rule,
+ activation,
+ typeConf );
+ return handle;
+ }
+
+
+
+ if ( dynamic ) {
+ addPropertyChangeListener( object );
+ }
+
+
+
+ // The most sensible thing is to start from scratch again...
+
+ try {
+ this.lock.lock();
+ // check for IDENTITY
+ handle = (InternalFactHandle) this.objectStore.getHandleForObject(object);
+
+
+ if ( this.maintainTms ) {
+
+ EqualityKey key;
+
+ if ( handle != null ) {
+ // There is an ID object in memory
+ key = handle.getEqualityKey();
+
+ if ( !logical ) {
+ // This is a STATE. Regardless of the prev state, priors are reset and object
+ // is restated.
+ if (key.getStatus() == EqualityKey.JUSTIFIED)
+ this.tms.removeLogicalDependencies( handle );
+
+ key.setStatus( EqualityKey.STATED );
+ //Restate with true overrides following evaluations.
+ //Starting again from zero, evaluators must contribute
+ System.out.println("AWM : State existing-by-ID statement, which is overridden");
+ return this.reAssert(entryPoint, handle, rule, activation, typeConf, priors, false, false);
+
+ } else {
+ // This is a JUSTIFY.
+ if (key.getStatus() == EqualityKey.STATED) {
+ //If the object is stated, the justification is ignored
+ System.out.println("AWM : Justify existing-by-ID statement, ignored");
+ return handle;
+ } else {
+ //TODO: Priors should enter the dependency, so to be undone
+ if (activation != null) {
+ this.tms.addLogicalDependency( handle,
+ activation,
+ activation.getPropagationContext(),
+ rule );
+ }
+ //Restate with false merges info...
+ // Evaluators contrib already in, so they must be inhibited
+ System.out.println("AWM : Justify existing-by-ID justify, merge but not reeval");
+ return this.reAssert(entryPoint, handle, rule, activation, typeConf,priors, true, true);
+ }
+ }
+
+ } else {
+ // Ok, no ID object in memory.
+ // Maybe there is an EQUAL object:
+ key = this.tms.get(object);
+ if (key != null) {
+ //Yes, there is an EQ object
+
+ if (logical) {
+
+ // Justify an EQUAL obj
+ if ( key.getStatus() == EqualityKey.JUSTIFIED ) {
+ //TODO : again, deps should include priors
+ this.tms.addLogicalDependency( key.getFactHandle(),
+ activation,
+ activation.getPropagationContext(),
+ rule );
+ //Merge new info, but inhibit evaluators
+ System.out.println("AWM : Justify existing-by-EQ justify, merge but not reeval");
+ return reAssert(entryPoint, key.getFactHandle(), rule, activation,typeConf, priors,true,true);
+ //return key.getFactHandle();
+ } else {
+ // Can't justify a stated obj, do nothing
+ System.out.println("AWM : Justify existing-by-EQ statement, do nothing");
+ return key.getFactHandle();
+ }
+
+ } else {
+
+ //STATE about an EQUAL obj
+
+ if ( key.getStatus() == EqualityKey.STATED ) {
+ // The obj was already stated, so reset that other object.
+ // THIS IS A DIFFERENCE WITH THE USUAL SEMANTICS
+ System.out.println("AWM : State existing-by-EQ statement, override with values and new eval");
+ return reAssert(entryPoint, key.getFactHandle(), rule, activation,typeConf, priors,false,false);
+ } else {
+ // Stating an existing equal obj, which is only justified.
+ // Update that object.
+ this.tms.removeLogicalDependencies( key.getFactHandle() );
+
+ key.setStatus( EqualityKey.STATED );
+ //Restate with true overrides following evaluations.
+ //Starting again from zero, evaluators must contribute
+ System.out.println("AWM : State existing-by-EQ justify, cleanup and override");
+ return this.reAssert(entryPoint, key.getFactHandle(), rule, activation, typeConf,priors, false, false);
+ }
+
+
+ }
+
+
+ } else {
+ // Not even an EQ, this is the first time an object enters the mem
+ //Alpha-evaluators must not be inhibited
+ handle = this.handleFactory.newUncertainFactHandle( object,
+ null,
+ typeConf,
+ this );
+ this.objectStore.addHandle( handle, object );
+
+ key = new EqualityKey( handle );
+ handle.setEqualityKey( key );
+ this.tms.put( key );
+ if ( !logical ) {
+ key.setStatus( EqualityKey.STATED );
+ System.out.println("AWM : Brand new statement, eval everything");
+ return reAssert(entryPoint, handle, rule, activation,typeConf, priors,false,false);
+ } else {
+ key.setStatus( EqualityKey.JUSTIFIED );
+ if (activation != null && rule != null)
+ this.tms.addLogicalDependency( handle,
+ activation,
+ activation.getPropagationContext(),
+ rule );
+ System.out.println("AWM : Brand new justification, eval everything");
+ return reAssert(entryPoint, handle, rule, activation ,typeConf,priors,false,false);
+ }
+
+ }
+ }
+
+
+
+ } else {
+
+ // OK, here no TMS:
+ // Logical insertions are ignored, statement exists already.
+ if (logical) {
+ System.out.println("AWM : No TMS, logical insertion ignored");
+ return null;
+ }
+
+ if ( handle != null ) {
+ // Object exists, priors are updated just later
+ //TODO: Check: Obj should be retracted before being inserted again??
+ System.out.println("AWM : No TMS, stated existing object, nothing done");
+ return handle;
+ } else {
+ // No object exists, so we just create. Priors will be set just later
+ handle = this.handleFactory.newUncertainFactHandle( object,
+ null, //priors
+ typeConf,
+ this );
+ this.objectStore.addHandle( handle, object );
+ //Nothing to merge with, let the evaluators play
+ System.out.println("AWM : No TMS, new insertion is evaluated");
+ return reAssert(entryPoint, handle, rule, activation,typeConf,priors,false,false);
+ }
+
+ }
+
+
+
+ } finally {
+ this.lock.unlock();
+ }
+
+
+ }
+
+
+
+
+
+ protected InternalFactHandle reAssert(
+ EntryPoint entryPoint,
+ InternalFactHandle handle,
+ Rule rule,
+ Activation activation,
+ ObjectTypeConf typeConf,
+ Hashtable<ConstraintSignature, IUncertainDegree> priors,
+ boolean mergeWithExisting, boolean inhibitEvaluators) {
+
+ IUncertainInternalFactHandle uHandle = (IUncertainInternalFactHandle) handle;
+ if (mergeWithExisting)
+ uHandle.mergePriors(priors, ((IUncertainRuleBase) this.getRuleBase()).getTruthFactory());
+ else
+ uHandle.setPriors(priors);
+
+
+ uHandle.setOverruling(inhibitEvaluators);
+
+ insertUncertain( entryPoint,
+ handle,
+ handle.getObject(),
+ rule,
+ activation,
+ typeConf
+ );
+
+ return handle;
+ }
+
+
+
+ protected void insertUncertain(final EntryPoint entryPoint,
+ final InternalFactHandle handle,
+ final Object object,
+ final Rule rule,
+ final Activation activation,
+ ObjectTypeConf typeConf
+ ) {
+ this.ruleBase.executeQueuedActions();
+
+ if ( activation != null ) {
+// release resources so that they can be GC'ed
+ activation.getPropagationContext().releaseResources();
+ }
+ final PropagationContext propagationContext = new PropagationContextImpl( getNextPropagationIdCounter(),
+ PropagationContext.ASSERTION,
+ rule,
+ (activation == null) ? null : (LeftTuple) activation.getTuple(),
+ handle,
+ this.agenda.getActiveActivations(),
+ this.agenda.getDormantActivations(),
+ entryPoint );
+
+
+ System.out.println("AbstractWorkingMemory : Wrapped a to-be-inserted obj with a handle");
+ System.out.println("AbstractWorkingMemory : New insert method uses uncValues");
+
+ this.entryPointNode.assertObject( handle,
+ propagationContext,
+ typeConf,
+ this );
+
+ executeQueuedActions();
+
+
+
+ this.workingMemoryEventSupport.fireObjectInserted( propagationContext,
+ handle,
+ object,
+ this );
+ }
+
+
+
+ /************************************************************************************/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
protected void addPropertyChangeListener(final Object object) {
try {
final Method method = object.getClass().getMethod( "addPropertyChangeListener",
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/BetaConstraints.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/BetaConstraints.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/BetaConstraints.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -6,6 +6,9 @@
import org.drools.rule.ContextEntry;
import org.drools.util.LinkedList;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
import java.io.Externalizable;
public interface BetaConstraints
@@ -27,7 +30,16 @@
public boolean isAllowedCachedRight(ContextEntry[] context,
LeftTuple tuple);
+
+
+ public IUncertainDegree matchesCachedLeft(ContextEntry[] context,
+ InternalFactHandle handle, IDegreeFactory factory);
+ public IUncertainDegree matchesCachedRight(ContextEntry[] context,
+ LeftTuple tuple, IDegreeFactory factory);
+
+
+
public LinkedList getConstraints();
public boolean isIndexed();
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -21,6 +21,7 @@
import java.io.ObjectOutput;
import java.util.ArrayList;
import java.util.List;
+import java.util.Vector;
import org.drools.RuleBaseConfiguration;
import org.drools.base.evaluators.Operator;
@@ -40,6 +41,9 @@
import org.drools.util.RightTupleList;
import org.drools.util.AbstractHashTable.FieldIndex;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
public class DefaultBetaConstraints
implements
BetaConstraints {
@@ -304,4 +308,60 @@
return this.constraints.equals( other.constraints );
}
+
+
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#isAllowedCachedLeft(java.lang.Object)
+ */
+ public IUncertainDegree matchesCachedLeft(final ContextEntry[] context,
+ final InternalFactHandle handle,
+ IDegreeFactory factory) {
+ // skip the indexed constraints
+ LinkedListEntry entry = (LinkedListEntry) findNode( this.indexed+1 );
+
+ int i = 1;
+ Vector<IUncertainDegree> degs = new Vector<IUncertainDegree>();
+ while ( entry != null ) {
+
+ BetaNodeFieldConstraint constraint = (BetaNodeFieldConstraint) entry.getObject();
+ degs.add(constraint.matchesCachedLeft(context[this.indexed + i], handle, factory));
+
+ entry = (LinkedListEntry) entry.getNext();
+ i++;
+ }
+
+ if (degs.size() == 0) return factory.True();
+ IUncertainDegree[] ans = new IUncertainDegree[degs.size()];
+ return factory.getAndOperator().eval(degs.toArray(ans));
+
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#isAllowedCachedRight(org.drools.reteoo.ReteTuple)
+ */
+ public IUncertainDegree matchesCachedRight(final ContextEntry[] context,
+ final LeftTuple tuple,
+ IDegreeFactory factory) {
+ // skip the indexed constraints
+ LinkedListEntry entry = (LinkedListEntry) findNode( this.indexed+1 );
+
+ int i = 1;
+ Vector<IUncertainDegree> degs = new Vector<IUncertainDegree>();
+ while ( entry != null ) {
+
+ BetaNodeFieldConstraint constraint = (BetaNodeFieldConstraint) entry.getObject();
+ degs.add(constraint.matchesCachedRight(tuple, context[this.indexed + i], factory));
+
+ entry = (LinkedListEntry) entry.getNext();
+ i++;
+ }
+
+ if (degs.size() == 0) return factory.True();
+ IUncertainDegree[] ans = new IUncertainDegree[degs.size()];
+ return factory.getAndOperator().eval(degs.toArray(ans));
+ }
+
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -33,6 +33,9 @@
import org.drools.util.LeftTupleList;
import org.drools.util.LeftTupleIndexHashTable;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
@@ -299,5 +302,38 @@
public ContextEntry[] createContext() {
return new ContextEntry[]{this.constraint0.createContextEntry(), this.constraint1.createContextEntry()};
}
+
+
+
+
+
+
+
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaConstraints#matchesCachedLeft(org.drools.rule.ContextEntry[], org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedLeft(ContextEntry[] context,
+ InternalFactHandle handle, IDegreeFactory factory) {
+
+
+ IUncertainDegree[] args = new IUncertainDegree[2];
+ args[0] = this.indexed0 ? factory.True() : this.constraint0.matchesCachedLeft( context[0], handle, factory);
+ args[1] = this.indexed1 ? factory.True() : this.constraint1.matchesCachedLeft( context[1], handle, factory);
+ return factory.getAndOperator().eval(args);
+ }
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaConstraints#matchesCachedRight(org.drools.rule.ContextEntry[], org.drools.reteoo.LeftTuple, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedRight(ContextEntry[] context,
+ LeftTuple tuple, IDegreeFactory factory) {
+
+ IUncertainDegree[] args = new IUncertainDegree[2];
+ args[0] = this.constraint0.matchesCachedRight( tuple, context[0], factory);
+ args[1] = this.constraint1.matchesCachedRight( tuple, context[1], factory);
+
+ return factory.getAndOperator().eval(args);
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -25,6 +25,9 @@
import org.drools.util.LinkedList;
import org.drools.util.LeftTupleList;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
@@ -143,5 +146,27 @@
public ContextEntry[] createContext() {
return EMPTY;
}
+
+
+
+
+
+
+ /**
+ */
+ public IUncertainDegree matchesCachedLeft(ContextEntry[] context,
+ InternalFactHandle handle, IDegreeFactory factory) {
+ return factory.True();
+ }
+
+ /**
+ *
+ */
+ public IUncertainDegree matchesCachedRight(ContextEntry[] context,
+ LeftTuple tuple, IDegreeFactory factory) {
+ return factory.True();
+
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InstanceEqualsConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InstanceEqualsConstraint.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InstanceEqualsConstraint.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -22,6 +22,9 @@
import org.drools.rule.Declaration;
import org.drools.spi.BetaNodeFieldConstraint;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
import java.io.ObjectInput;
import java.io.IOException;
import java.io.ObjectOutput;
@@ -177,4 +180,24 @@
public ConstraintType getType() {
return ConstraintType.BETA;
}
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedLeft(org.drools.rule.ContextEntry, org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedLeft(ContextEntry context,
+ InternalFactHandle handle, IDegreeFactory factory) {
+ return factory.fromBoolean(this.isAllowedCachedLeft(context, handle));
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedRight(org.drools.reteoo.LeftTuple, org.drools.rule.ContextEntry, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+ ContextEntry context, IDegreeFactory factory) {
+ return factory.fromBoolean(this.isAllowedCachedRight(tuple, context));
+ }
+
+
+
+
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InstanceNotEqualsConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InstanceNotEqualsConstraint.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InstanceNotEqualsConstraint.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -22,6 +22,9 @@
import org.drools.rule.Pattern;
import org.drools.spi.BetaNodeFieldConstraint;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
import java.io.ObjectOutput;
import java.io.IOException;
import java.io.ObjectInput;
@@ -174,4 +177,20 @@
}
}
+ /* (non-Javadoc)
+ * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedLeft(org.drools.rule.ContextEntry, org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedLeft(ContextEntry context,
+ InternalFactHandle handle, IDegreeFactory factory) {
+ return factory.fromBoolean(this.isAllowedCachedLeft(context, handle));
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedRight(org.drools.reteoo.LeftTuple, org.drools.rule.ContextEntry, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+ ContextEntry context, IDegreeFactory factory) {
+ return factory.fromBoolean(this.isAllowedCachedRight(tuple, context));
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InternalWorkingMemoryActions.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InternalWorkingMemoryActions.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/InternalWorkingMemoryActions.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -16,11 +16,18 @@
* limitations under the License.
*/
+import java.util.Hashtable;
+
import org.drools.FactException;
import org.drools.FactHandle;
+import org.drools.rule.ConstraintSignature;
import org.drools.rule.Rule;
import org.drools.spi.Activation;
+import org.drools.spi.Constraint;
+import uncertainty.truthvals.IUncertainDegree;
+
+
public interface InternalWorkingMemoryActions
extends
InternalWorkingMemory,
@@ -41,10 +48,25 @@
boolean logical,
Rule rule,
Activation activation) throws FactException;
+
+
+
+
+
public FactHandle insertLogical(Object object,
boolean dynamic) throws FactException;
+
+ public FactHandle insertLogical(Object object,
+ Hashtable<ConstraintSignature, IUncertainDegree> priors,
+ Rule rule,
+ Activation activation) throws FactException;
+
+
+
+
+
public void modifyRetract(final FactHandle factHandle,
final Rule rule,
final Activation activation);
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/NamedEntryPoint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/NamedEntryPoint.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/NamedEntryPoint.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -6,6 +6,7 @@
import java.beans.PropertyChangeListener;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.util.Hashtable;
import java.util.concurrent.locks.ReentrantLock;
import org.drools.WorkingMemoryEntryPoint;
@@ -19,12 +20,16 @@
import org.drools.reteoo.EntryPointNode;
import org.drools.reteoo.LeftTuple;
import org.drools.reteoo.ObjectTypeConf;
+import org.drools.rule.ConstraintSignature;
import org.drools.rule.EntryPoint;
import org.drools.rule.Rule;
import org.drools.spi.Activation;
+import org.drools.spi.Constraint;
import org.drools.spi.FactHandleFactory;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
public class NamedEntryPoint
implements
InternalWorkingMemoryEntryPoint {
@@ -82,6 +87,16 @@
null,
null );
}
+
+
+ public FactHandle insert(final Object object, Hashtable<ConstraintSignature, IUncertainDegree> priors) throws FactException {
+ return insert( object, /* Not-Dynamic */
+ priors,
+ false,
+ false,
+ null,
+ null );
+ }
public FactHandle insert(final Object object,
final boolean dynamic) throws FactException {
@@ -127,7 +142,56 @@
}
return handle;
}
+
+
+ protected FactHandle insert(final Object object,
+ Hashtable<ConstraintSignature, IUncertainDegree> priors,
+ final boolean dynamic,
+ boolean logical,
+ final Rule rule,
+ final Activation activation) throws FactException {
+ if ( object == null ) {
+ // you cannot assert a null object
+ return null;
+ }
+ ObjectTypeConf typeConf = this.typeConfReg.getObjectTypeConf( this.entryPoint,
+ object );
+
+ InternalFactHandle handle = this.handleFactory.newUncertainFactHandle( object,
+ priors,
+ typeConf,
+ wm );
+
+ this.objectStore.addHandle( handle,
+ object );
+
+ if ( dynamic ) {
+ addPropertyChangeListener( object );
+ }
+
+ try {
+ this.lock.lock();
+ insert( handle,
+ object,
+ rule,
+ activation );
+ } finally {
+ this.lock.unlock();
+ }
+
+ return handle;
+ }
+
+
+
+
+
+
+
+
+
+
protected void insert(final InternalFactHandle handle,
final Object object,
final Rule rule,
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/ObjectTypeConfigurationRegistry.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/ObjectTypeConfigurationRegistry.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/ObjectTypeConfigurationRegistry.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -10,6 +10,9 @@
import org.drools.reteoo.ClassObjectTypeConf;
import org.drools.reteoo.FactTemplateTypeConf;
import org.drools.reteoo.ObjectTypeConf;
+import org.drools.reteoo.UncertainClassObjectTypeConf;
+import org.drools.reteoo.UncertainFactTemplateTypeConf;
+import org.drools.reteoo.UncertainObjectTypeConf;
import org.drools.rule.EntryPoint;
public class ObjectTypeConfigurationRegistry implements Serializable {
@@ -65,6 +68,44 @@
return objectTypeConf;
}
+
+
+
+ public UncertainObjectTypeConf getUncertainObjectTypeConf(EntryPoint entrypoint,
+ Object object) {
+
+
+ UncertainObjectTypeConf objectTypeConf = null;
+ Class cls = null;
+ if ( object instanceof Fact ) {
+ String key = ((Fact) object).getFactTemplate().getName();
+ objectTypeConf = (UncertainObjectTypeConf) this.typeConfMap.get( key );
+ } else {
+ cls = object.getClass();
+ objectTypeConf = (UncertainObjectTypeConf) this.typeConfMap.get( cls );
+ }
+
+ // it doesn't exist, so create it.
+ if ( objectTypeConf == null ) {
+ if ( object instanceof Fact ) {;
+
+
+ objectTypeConf = new UncertainFactTemplateTypeConf( entrypoint,
+ ((Fact) object).getFactTemplate(),
+ this.ruleBase );
+ this.typeConfMap.put( ((Fact) object).getFactTemplate().getName(),
+ objectTypeConf );
+ } else {
+ objectTypeConf = new UncertainClassObjectTypeConf( entrypoint,
+ cls,
+ this.ruleBase );
+ this.typeConfMap.put( cls, objectTypeConf );
+ }
+ }
+
+
+ return objectTypeConf;
+ }
public Collection<ObjectTypeConf> values() {
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -33,6 +33,9 @@
import org.drools.util.LeftTupleList;
import org.drools.util.LeftTupleIndexHashTable;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
@@ -410,5 +413,40 @@
public ContextEntry[] createContext() {
return new ContextEntry[]{this.constraint0.createContextEntry(), this.constraint1.createContextEntry(), this.constraint2.createContextEntry(), this.constraint3.createContextEntry()};
}
+
+
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaConstraints#matchesCachedLeft(org.drools.rule.ContextEntry[], org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedLeft(ContextEntry[] context,
+ InternalFactHandle handle, IDegreeFactory factory) {
+
+
+ IUncertainDegree[] args = new IUncertainDegree[4];
+ args[0] = this.indexed0 ? factory.True() : this.constraint0.matchesCachedLeft( context[0], handle, factory);
+ args[1] = this.indexed1 ? factory.True() : this.constraint1.matchesCachedLeft( context[1], handle, factory);
+ args[2] = this.indexed2 ? factory.True() : this.constraint2.matchesCachedLeft( context[2], handle, factory);
+ args[3] = this.indexed3 ? factory.True() : this.constraint3.matchesCachedLeft( context[3], handle, factory);
+ return factory.getAndOperator().eval(args);
+ }
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaConstraints#matchesCachedRight(org.drools.rule.ContextEntry[], org.drools.reteoo.LeftTuple, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedRight(ContextEntry[] context,
+ LeftTuple tuple, IDegreeFactory factory) {
+
+ IUncertainDegree[] args = new IUncertainDegree[4];
+ args[0] = this.constraint0.matchesCachedRight( tuple, context[0], factory);
+ args[1] = this.constraint1.matchesCachedRight( tuple, context[1], factory);
+ args[2] = this.constraint2.matchesCachedRight( tuple, context[2], factory);
+ args[3] = this.constraint3.matchesCachedRight( tuple, context[3], factory);
+
+ return factory.getAndOperator().eval(args);
+ }
+
+
+
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -38,6 +38,9 @@
import org.drools.util.LeftTupleIndexHashTable;
import org.drools.util.AbstractHashTable.FieldIndex;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
public class SingleBetaConstraints
implements
BetaConstraints {
@@ -237,5 +240,35 @@
public void resetTuple(ContextEntry[] context) {
context[0].resetTuple();
}
+
+
+
+
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaConstraints#matchesCachedLeft(org.drools.rule.ContextEntry[], org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedLeft(ContextEntry[] context,
+ InternalFactHandle handle, IDegreeFactory factory) {
+
+ if (this.indexed) return factory.True();
+
+ return this.constraint.matchesCachedLeft( context[0],
+ handle, factory );
+
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaConstraints#matchesCachedRight(org.drools.rule.ContextEntry[], org.drools.reteoo.LeftTuple, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedRight(ContextEntry[] context,
+ LeftTuple tuple, IDegreeFactory factory) {
+
+ return this.constraint.matchesCachedRight( tuple,
+ context[0], factory );
+
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -39,6 +39,9 @@
import org.drools.util.LeftTupleIndexHashTable;
import org.drools.util.AbstractHashTable.FieldIndex;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
public class TripleBetaConstraints
implements
BetaConstraints {
@@ -352,4 +355,34 @@
return new ContextEntry[]{this.constraint0.createContextEntry(), this.constraint1.createContextEntry(), this.constraint2.createContextEntry()};
}
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaConstraints#matchesCachedLeft(org.drools.rule.ContextEntry[], org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedLeft(ContextEntry[] context,
+ InternalFactHandle handle, IDegreeFactory factory) {
+
+
+ IUncertainDegree[] args = new IUncertainDegree[3];
+ args[0] = this.indexed0 ? factory.True() : this.constraint0.matchesCachedLeft( context[0], handle, factory);
+ args[1] = this.indexed1 ? factory.True() : this.constraint1.matchesCachedLeft( context[1], handle, factory);
+ args[2] = this.indexed2 ? factory.True() : this.constraint2.matchesCachedLeft( context[2], handle, factory);
+ return factory.getAndOperator().eval(args);
+
+ }
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaConstraints#matchesCachedRight(org.drools.rule.ContextEntry[], org.drools.reteoo.LeftTuple, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedRight(ContextEntry[] context,
+ LeftTuple tuple, IDegreeFactory factory) {
+
+ IUncertainDegree[] args = new IUncertainDegree[3];
+ args[0] = this.constraint0.matchesCachedRight( tuple, context[0], factory);
+ args[1] = this.constraint1.matchesCachedRight( tuple, context[1], factory);
+ args[2] = this.constraint2.matchesCachedRight( tuple, context[2], factory);
+
+ return factory.getAndOperator().eval(args);
+ }
+
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/TupleStartEqualsConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/TupleStartEqualsConstraint.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/common/TupleStartEqualsConstraint.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -21,6 +21,9 @@
import org.drools.rule.Declaration;
import org.drools.spi.BetaNodeFieldConstraint;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
@@ -180,4 +183,22 @@
public ConstraintType getType() {
return ConstraintType.BETA;
}
+
+
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedLeft(org.drools.rule.ContextEntry, org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedLeft(ContextEntry context,
+ InternalFactHandle handle, IDegreeFactory factory) {
+ return factory.fromBoolean(this.isAllowedCachedLeft(context, handle));
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedRight(org.drools.reteoo.LeftTuple, org.drools.rule.ContextEntry, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+ ContextEntry context, IDegreeFactory factory) {
+ return factory.fromBoolean(this.isAllowedCachedRight(tuple, context));
+ }
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/facttemplates/FactTemplateObjectType.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/facttemplates/FactTemplateObjectType.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/facttemplates/FactTemplateObjectType.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -19,6 +19,9 @@
import org.drools.base.ValueType;
import org.drools.spi.ObjectType;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
import java.io.ObjectOutput;
import java.io.IOException;
import java.io.ObjectInput;
@@ -156,4 +159,20 @@
public int hashCode() {
return this.factTemplate.hashCode();
}
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.ObjectType#isAn(java.lang.Object, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree isAn(Object object, IDegreeFactory factory) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.ObjectType#isSubClass(java.lang.Class, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree isSubClass(Class clazz, IDegreeFactory factory) {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -21,6 +21,7 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.Arrays;
+import java.util.Deque;
import org.drools.RuleBaseConfiguration;
import org.drools.RuntimeDroolsException;
@@ -38,6 +39,8 @@
import org.drools.util.Iterator;
import org.drools.util.ObjectHashMap.ObjectEntry;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* AccumulateNode
* A beta node capable of doing accumulate logic.
@@ -230,8 +233,19 @@
}
}
+
+
+ public void assertObject(final InternalFactHandle factHandle,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+
+ assertObject(factHandle,null,context,workingMemory);
+ }
+
/**
* @inheritDoc
+ *
+ * TODO : the effects of an uncertain assertion are to be considered...
*
* When a new object is asserted into an AccumulateNode, do this:
*
@@ -240,6 +254,7 @@
*
*/
public void assertObject(final InternalFactHandle factHandle,
+ Deque<IUncertainDegree> tVal,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -19,6 +19,7 @@
import java.io.ObjectOutput;
import java.io.IOException;
import java.io.Externalizable;
+import java.util.Deque;
import org.drools.FactException;
import org.drools.RuleBaseConfiguration;
@@ -35,6 +36,8 @@
import org.drools.util.RightTupleList;
import org.drools.util.Iterator;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* <code>AlphaNodes</code> are nodes in the <code>Rete</code> network used
* to apply <code>FieldConstraint<.code>s on asserted fact
@@ -312,9 +315,59 @@
workingMemory );
}
}
+
+ public void assertObject(InternalFactHandle factHandle,
+ Deque<IUncertainDegree> truthVal, PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+
+ IUncertainDegree constrDeg = this.constraint.matches( factHandle, workingMemory, this.contextEntry );
+ System.out.println("UNCERTAIN AlphaNode.ObjectSinkUpdateAdapter : Passed object "+factHandle.getObject()+ " with degree "+constrDeg);
+
+ this.sink.assertObject( factHandle,
+ truthVal,
+ context,
+ workingMemory );
+
+ }
public int getId() {
return 0;
}
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /* (non-Javadoc)
+ * @see org.drools.reteoo.ObjectSink#assertObject(org.drools.common.InternalFactHandle, java.util.Deque, org.drools.spi.PropagationContext, org.drools.common.InternalWorkingMemory)
+ */
+ public void assertObject(InternalFactHandle factHandle,
+ Deque<IUncertainDegree> truthVal, PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+
+
+ final AlphaMemory memory = (AlphaMemory) workingMemory.getNodeMemory( this );
+
+ IUncertainDegree constrDeg = this.constraint.matches( factHandle, workingMemory, memory.context );
+ System.out.println("UNCERTAIN AlphaNode : Passed object "+factHandle.getObject()+ " with degree "+constrDeg);
+
+ truthVal.addLast(constrDeg);
+
+
+ this.sink.propagateAssertObject( factHandle,
+ truthVal,
+ context,
+ workingMemory );
+
+ }
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/BetaNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/BetaNode.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/BetaNode.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -409,4 +409,8 @@
this.previousObjectSinkNode = previous;
}
+
+
+
+
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -46,14 +46,14 @@
private static final long serialVersionUID = 8218802585428841926L;
- private Class< ? > cls;
- private transient InternalRuleBase ruleBase;
+ protected Class< ? > cls;
+ protected transient InternalRuleBase ruleBase;
private ObjectTypeNode[] objectTypeNodes;
protected boolean shadowEnabled;
private ObjectTypeNode concreteObjectTypeNode;
- private EntryPoint entryPoint;
+ protected EntryPoint entryPoint;
private TypeDeclaration typeDecl;
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CollectNode.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -23,6 +23,7 @@
import java.io.Serializable;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Deque;
import org.drools.RuleBaseConfiguration;
import org.drools.common.BetaConstraints;
@@ -39,6 +40,8 @@
import org.drools.util.Iterator;
import org.drools.util.ObjectHashMap.ObjectEntry;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* @author etirelli
*
@@ -214,9 +217,19 @@
}
}
+
+
+ public void assertObject(final InternalFactHandle factHandle,
+ Deque<IUncertainDegree> tVal,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+ assertObject(factHandle, context, workingMemory);
+ }
+
/**
* @inheritDoc
*
+ * TODO : Expand with uncertainty...
* When a new object is asserted into a CollectNode, do this:
*
* 1. Select all matching tuples from left memory
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -3,12 +3,15 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.util.Deque;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.common.BaseNode;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
public class CompositeLeftTupleSinkAdapter
implements
LeftTupleSinkPropagator {
@@ -33,10 +36,23 @@
final boolean leftTupleMemoryEnabled) {
for ( LeftTupleSinkNode sink = this.sinks.getFirst(); sink != null; sink = sink.getNextLeftTupleSinkNode() ) {
- sink.assertLeftTuple( new LeftTuple( leftTuple,
- rightTuple,
- sink,
- leftTupleMemoryEnabled ),
+
+ LeftTuple ltuple;
+
+ if (leftTuple instanceof UncertainLeftTuple) {
+ ltuple = new UncertainLeftTuple( leftTuple,
+ rightTuple,
+ sink,
+ leftTupleMemoryEnabled );
+ } else {
+ ltuple = new LeftTuple( leftTuple,
+ rightTuple,
+ sink,
+ leftTupleMemoryEnabled );
+ }
+
+
+ sink.assertLeftTuple( ltuple,
context,
workingMemory );
}
@@ -47,9 +63,20 @@
final InternalWorkingMemory workingMemory,
final boolean leftTupleMemoryEnabled) {
for ( LeftTupleSinkNode sink = this.sinks.getFirst(); sink != null; sink = sink.getNextLeftTupleSinkNode() ) {
- sink.assertLeftTuple( new LeftTuple( tuple,
- sink,
- leftTupleMemoryEnabled ),
+
+ LeftTuple ltuple;
+
+ if (tuple instanceof UncertainLeftTuple) {
+ ltuple = new UncertainLeftTuple( tuple,
+ sink,
+ leftTupleMemoryEnabled );
+ } else {
+ ltuple = new LeftTuple( tuple,
+ sink,
+ leftTupleMemoryEnabled );
+ }
+
+ sink.assertLeftTuple( ltuple,
context,
workingMemory );
}
@@ -147,4 +174,23 @@
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject( this.sinks );
}
+
+ /* (non-Javadoc)
+ * @see org.drools.reteoo.LeftTupleSinkPropagator#createAndPropagateAssertLeftTuple(org.drools.common.InternalFactHandle, java.util.Deque, org.drools.spi.PropagationContext, org.drools.common.InternalWorkingMemory, boolean)
+ */
+ public void createAndPropagateAssertLeftTuple(
+ InternalFactHandle factHandle, Deque<IUncertainDegree> val,
+ PropagationContext context, InternalWorkingMemory workingMemory,
+ boolean leftTupleMemoryEnabled) {
+
+ for ( LeftTupleSinkNode sink = this.sinks.getFirst(); sink != null; sink = sink.getNextLeftTupleSinkNode() ) {
+ sink.assertLeftTuple( new UncertainLeftTuple( factHandle,
+ val,
+ sink,
+ leftTupleMemoryEnabled),
+ context,
+ workingMemory );
+ }
+
+ }
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -5,6 +5,7 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.ArrayList;
+import java.util.Deque;
import java.util.List;
import org.drools.base.ValueType;
@@ -25,6 +26,8 @@
import org.drools.util.ObjectHashMap;
import org.drools.util.ObjectHashMap.ObjectEntry;
+import uncertainty.truthvals.IUncertainDegree;
+
public class CompositeObjectSinkAdapter
implements
ObjectSinkPropagator {
@@ -309,12 +312,19 @@
public void propagateAssertObject(final InternalFactHandle factHandle,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
- final Object object = factHandle.getObject();
-
- // Iterates t he FieldIndex collection, which tells you if particularly field is hashed or not
- // if the field is hashed then it builds the hashkey to return the correct sink for the current objects slot's
- // value, one object may have multiple fields indexed.
- if ( this.hashedFieldIndexes != null ) {
+
+ propagateAssertObject(factHandle, null, context, workingMemory);
+ }
+
+
+ public void propagateAssertObject(final InternalFactHandle factHandle,
+ Deque<IUncertainDegree> tVal,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+
+ final Object object = factHandle.getObject();
+
+ if ( this.hashedFieldIndexes != null ) {
// Iterate the FieldIndexes to see if any are hashed
for ( FieldIndex fieldIndex = (FieldIndex) this.hashedFieldIndexes.getFirst(); fieldIndex != null; fieldIndex = (FieldIndex) fieldIndex.getNext() ) {
if ( !fieldIndex.isHashed() ) {
@@ -329,9 +339,11 @@
final ObjectSink sink = (ObjectSink) this.hashedSinkMap.get( hashKey );
if ( sink != null ) {
// The sink exists so propagate
- sink.assertObject( factHandle,
- context,
- workingMemory );
+ if (tVal != null) {
+ sink.assertObject( factHandle, new java.util.LinkedList<IUncertainDegree>(tVal), context, workingMemory );
+ } else {
+ sink.assertObject( factHandle, context, workingMemory );
+ }
}
}
}
@@ -339,22 +351,31 @@
// propagate unhashed
if ( this.hashableSinks != null ) {
for ( ObjectSinkNode sink = this.hashableSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
- sink.assertObject( factHandle,
- context,
- workingMemory );
+ if (tVal != null) {
+ sink.assertObject( factHandle, new java.util.LinkedList<IUncertainDegree>(tVal), context, workingMemory );
+ } else {
+ sink.assertObject( factHandle, context, workingMemory );
+ }
}
}
if ( this.otherSinks != null ) {
// propagate others
for ( ObjectSinkNode sink = this.otherSinks.getFirst(); sink != null; sink = sink.getNextObjectSinkNode() ) {
- sink.assertObject( factHandle,
- context,
- workingMemory );
+ if (tVal != null) {
+ sink.assertObject( factHandle, new java.util.LinkedList<IUncertainDegree>(tVal), context, workingMemory );
+ } else {
+ sink.assertObject( factHandle, context, workingMemory );
+ }
}
}
}
+
+
+
+
+
public BaseNode getMatchingNode(BaseNode candidate) {
if ( this.otherSinks != null ) {
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EmptyLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EmptyLeftTupleSinkAdapter.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EmptyLeftTupleSinkAdapter.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -5,9 +5,12 @@
import org.drools.common.BaseNode;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
import java.io.ObjectOutput;
import java.io.IOException;
import java.io.ObjectInput;
+import java.util.Deque;
public class EmptyLeftTupleSinkAdapter
implements
@@ -76,4 +79,15 @@
return 0;
}
+ /* (non-Javadoc)
+ * @see org.drools.reteoo.LeftTupleSinkPropagator#createAndPropagateAssertLeftTuple(org.drools.common.InternalFactHandle, java.util.Deque, org.drools.spi.PropagationContext, org.drools.common.InternalWorkingMemory, boolean)
+ */
+ public void createAndPropagateAssertLeftTuple(
+ InternalFactHandle factHandle, Deque<IUncertainDegree> val,
+ PropagationContext context, InternalWorkingMemory workingMemory,
+ boolean leftTupleMemoryEnabled) {
+
+
+ }
+
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EmptyObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EmptyObjectSinkAdapter.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EmptyObjectSinkAdapter.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -5,9 +5,12 @@
import org.drools.common.BaseNode;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
import java.io.ObjectOutput;
import java.io.IOException;
import java.io.ObjectInput;
+import java.util.Deque;
public class EmptyObjectSinkAdapter
implements
@@ -61,4 +64,13 @@
return obj instanceof EmptyObjectSinkAdapter;
}
+ /* (non-Javadoc)
+ * @see org.drools.reteoo.ObjectSinkPropagator#propagateAssertObject(org.drools.common.InternalFactHandle, java.util.Deque, org.drools.spi.PropagationContext, org.drools.common.InternalWorkingMemory)
+ */
+ public void propagateAssertObject(InternalFactHandle factHandle,
+ Deque<IUncertainDegree> truthVal, PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+
+ }
+
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -22,12 +22,17 @@
import java.io.ObjectInput;
import java.io.IOException;
import java.io.ObjectOutput;
+import java.util.Deque;
import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.LinkedList;
import java.util.Map;
+import java.util.Queue;
import org.drools.WorkingMemoryEntryPoint;
import org.drools.base.ShadowProxy;
import org.drools.common.BaseNode;
+import org.drools.common.IUncertainInternalFactHandle;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.common.InternalWorkingMemoryEntryPoint;
@@ -43,6 +48,8 @@
import org.drools.util.Iterator;
import org.drools.util.ObjectHashSet.ObjectEntry;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* A node that is an entry point into the Rete network.
*
@@ -125,7 +132,36 @@
return entryPoint;
}
+
+
+ /**
+ * Dispatches an object to the compliant ObjectTypeNodes
+ *
+ * @param handle
+ * @param context
+ * @param objectTypeConf
+ * @param workingMemory
+ */
public void assertObject(final InternalFactHandle handle,
+ final PropagationContext context,
+ final ObjectTypeConf objectTypeConf,
+ final InternalWorkingMemory workingMemory) {
+
+ assertObject(handle, null, context, objectTypeConf, workingMemory);
+ }
+
+
+ //TODO: Check
+ public void assertObject(InternalFactHandle factHandle,
+ Deque<IUncertainDegree> truthVal, PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+ System.out.println("WARNING : EntryPointNode : Unexpected Direct insertion ??");
+ assertObject(factHandle, truthVal, context, null , workingMemory);
+ }
+
+
+ public void assertObject(final InternalFactHandle handle,
+ Deque<IUncertainDegree> tVal,
final PropagationContext context,
final ObjectTypeConf objectTypeConf,
final InternalWorkingMemory workingMemory) {
@@ -136,12 +172,28 @@
((ShadowProxy) handle.getObject()).updateProxy();
}
- ObjectTypeNode[] cachedNodes = objectTypeConf.getObjectTypeNodes();
+
- for ( int i = 0, length = cachedNodes.length; i < length; i++ ) {
- cachedNodes[i].assertObject( handle,
- context,
- workingMemory );
+ if (handle instanceof IUncertainInternalFactHandle) {
+ Hashtable<ObjectTypeNode, IUncertainDegree> cachedNodes = ((UncertainObjectTypeConf) objectTypeConf).getMatchDegrees();
+
+ for (ObjectTypeNode node : cachedNodes.keySet()) {
+ Deque<IUncertainDegree> truthVal = (tVal != null) ? tVal : new LinkedList<IUncertainDegree>();
+
+ truthVal.addLast(cachedNodes.get(node));
+ System.out.println("EntryPointNode : Dispatching "+handle.getObject() + " to node "+node + "with tval "+cachedNodes.get(node));
+ node.assertObject(handle, truthVal, context, workingMemory);
+ }
+
+ } else {
+ // Standard insertion
+ ObjectTypeNode[] cachedNodes = objectTypeConf.getObjectTypeNodes();
+
+ for ( int i = 0, length = cachedNodes.length; i < length; i++ ) {
+ cachedNodes[i].assertObject( handle,
+ context,
+ workingMemory );
+ }
}
}
@@ -302,4 +354,7 @@
return "[EntryPointNode(" + this.id + ") " + this.entryPoint + " ]";
}
+
+
+
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -16,6 +16,8 @@
package org.drools.reteoo;
+import java.util.Deque;
+
import org.drools.common.BetaConstraints;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
@@ -23,6 +25,8 @@
import org.drools.rule.Behavior;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* <code>ExistsNode</code> extends <code>BetaNode</code> to perform tests for
* the existence of a Fact plus one or more conditions. Where existence
@@ -124,11 +128,24 @@
}
}
+
+
+
+ public void assertObject(final InternalFactHandle factHandle,
+ Deque<IUncertainDegree> tVal,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+ assertObject(factHandle,context,workingMemory);
+ }
+
/**
* Assert a new <code>FactHandleImpl</code> from the right input. If it
* matches any left ReteTuple's that had no matches before, propagate
* tuple as an assertion.
*
+ * TODO: Consider the uncertain assertion
+ *
+ *
* @param factHandle
* The <code>FactHandleImpl</code> being asserted.
* @param context
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/FactTemplateTypeConf.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/FactTemplateTypeConf.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/FactTemplateTypeConf.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -41,7 +41,7 @@
private static final long serialVersionUID = 4493660262148247467L;
private FactTemplate factTemplate;
- private ObjectTypeNode concreteObjectTypeNode;
+ protected ObjectTypeNode concreteObjectTypeNode;
private ObjectTypeNode[] cache;
public FactTemplateTypeConf() {
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/JoinNode.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/JoinNode.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -16,6 +16,9 @@
* limitations under the License.
*/
+import java.util.Deque;
+
+import org.drools.IUncertainRuleBase;
import org.drools.common.BetaConstraints;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
@@ -24,6 +27,9 @@
import org.drools.spi.PropagationContext;
import org.drools.util.Iterator;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* <code>JoinNode</code> extends <code>BetaNode</code> to perform
* <code>ReteTuple</code> and <code>FactHandle</code> joins. Tuples are
@@ -180,6 +186,9 @@
}
this.constraints.resetFactHandle( memory.getContext() );
}
+
+
+
/**
* Retract a FactHandleImpl. Iterates the referenced TupleMatches stored in
@@ -274,4 +283,66 @@
return "[JoinNode(" + this.getId() + ") - " + ((ObjectTypeNode) source).getObjectType() + "]";
}
+
+
+
+
+ /**
+ * TODO : Join with uncertainty IMPERATIVE
+ */
+ public void assertObject(InternalFactHandle factHandle,
+ Deque<IUncertainDegree> truthVal, PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+
+ IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+
+ System.out.println("Beta JOIN Node : Added Object with uncertainty");
+
+ final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
+
+ UncertainRightTuple rightTuple = new UncertainRightTuple( factHandle,
+ truthVal,
+ this );
+
+ if ( !behavior.assertRightTuple( memory.getBehaviorContext(),
+ rightTuple,
+ workingMemory ) ) {
+ // destroy right tuple
+ rightTuple.unlinkFromRightParent();
+ return;
+ }
+
+ memory.getRightTupleMemory().add( rightTuple );
+ if ( !this.tupleMemoryEnabled ) {
+ // do nothing here, as we know there are no left tuples at this stage in sequential mode.
+ return;
+ }
+
+ this.constraints.updateFromFactHandle( memory.getContext(),
+ workingMemory,
+ factHandle );
+ int i = 0;
+ for ( LeftTuple leftTuple = memory.getLeftTupleMemory().getFirst( rightTuple ); leftTuple != null; leftTuple = (LeftTuple) leftTuple.getNext() ) {
+
+ //if ( this.constraints.isAllowedCachedRight( memory.getContext(), leftTuple ) ) {
+ // wm.marshaller.write( i, leftTuple )
+ //}
+
+ IUncertainDegree deg = this.constraints.matchesCachedRight(memory.getContext(), leftTuple, factory);
+ rightTuple.setDegree(deg);
+
+ System.out.println("Join Node : Newly created Right Tuple Updated :"+ rightTuple);
+
+ this.sink.propagateAssertLeftTuple( leftTuple,
+ rightTuple,
+ context,
+ workingMemory,
+ this.tupleMemoryEnabled );
+
+
+ i++;
+ }
+ this.constraints.resetFactHandle( memory.getContext() );
+
+ }
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LIANodePropagation.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LIANodePropagation.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LIANodePropagation.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -12,10 +12,10 @@
public class LIANodePropagation
implements
Externalizable {
- private LeftInputAdapterNode node;
- private InternalFactHandle handle;
- private PropagationContext context;
- private boolean leftTupleMemoryEnabled;
+ protected LeftInputAdapterNode node;
+ protected InternalFactHandle handle;
+ protected PropagationContext context;
+ protected boolean leftTupleMemoryEnabled;
public LIANodePropagation() {
// constructor needed for serialisation
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LeftInputAdapterNode.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -28,9 +28,12 @@
import org.drools.util.RightTupleList;
import org.drools.util.Iterator;
+import uncertainty.truthvals.IUncertainDegree;
+
import java.io.ObjectOutput;
import java.io.IOException;
import java.io.ObjectInput;
+import java.util.Deque;
/**
* All asserting Facts must propagated into the right <code>ObjectSink</code> side of a BetaNode, if this is the first Pattern
@@ -130,7 +133,7 @@
* Takes the asserted <code>FactHandleImpl</code> received from the <code>ObjectSource</code> and puts it
* in a new <code>ReteTuple</code> before propagating to the <code>TupleSinks</code>
*
- * @param factHandle
+ * @param factHandle
* The asserted <code>FactHandle/code>.
* @param context
* The <code>PropagationContext</code> of the <code>WorkingMemory<code> action.
@@ -149,6 +152,28 @@
workingMemory.addLIANodePropagation( new LIANodePropagation(this, factHandle, context) );
}
}
+
+
+
+ public void assertObject(final InternalFactHandle factHandle,
+ Deque<IUncertainDegree> tVal,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+
+ if ( !workingMemory.isSequential() ) {
+ this.sink.createAndPropagateAssertLeftTuple( factHandle,
+ tVal,
+ context,
+ workingMemory,
+ this.leftTupleMemoryEnabled );
+ } else {
+ workingMemory.addLIANodePropagation(
+ new UncertainLIANodePropagation(this, tVal, factHandle, context)
+ );
+ }
+ }
+
+
public void updateSink(final LeftTupleSink sink,
final PropagationContext context,
@@ -263,6 +288,22 @@
context,
workingMemory );
}
+
+
+ public void assertObject(InternalFactHandle factHandle,
+ Deque<IUncertainDegree> truthVal, PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+
+ final LeftTuple tuple = new UncertainLeftTuple( factHandle,
+ truthVal,
+ this.sink,
+ this.leftTupleMemoryEnabled );
+
+ this.sink.assertLeftTuple( tuple,
+ context,
+ workingMemory );
+
+ }
public void retractRightTuple(final RightTuple rightTuple,
final PropagationContext context,
@@ -273,6 +314,9 @@
public int getId() {
return 0;
}
+
+
+
}
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LeftTupleSinkPropagator.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LeftTupleSinkPropagator.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/LeftTupleSinkPropagator.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -1,12 +1,15 @@
package org.drools.reteoo;
import java.io.Externalizable;
+import java.util.Deque;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.common.BaseNode;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
public interface LeftTupleSinkPropagator
extends
Externalizable {
@@ -61,4 +64,19 @@
public int size();
+
+ /**
+ * Uncertain Left Tuple creator
+ *
+ * @param factHandle
+ * @param val
+ * @param context
+ * @param workingMemory
+ * @param leftTupleMemoryEnabled
+ */
+ public void createAndPropagateAssertLeftTuple(
+ InternalFactHandle factHandle, Deque<IUncertainDegree> val,
+ PropagationContext context, InternalWorkingMemory workingMemory,
+ boolean leftTupleMemoryEnabled);
+
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/NotNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/NotNode.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/NotNode.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -16,6 +16,8 @@
* limitations under the License.
*/
+import java.util.Deque;
+
import org.drools.common.BetaConstraints;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
@@ -24,6 +26,8 @@
import org.drools.spi.PropagationContext;
import org.drools.util.Iterator;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* <code>NotNode</code> extends <code>BetaNode</code> to perform tests for
* the non existence of a Fact plus one or more conditions. Where none existence
@@ -125,10 +129,22 @@
}
}
+
+
+
+ public void assertObject(final InternalFactHandle factHandle,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+ assertObject(factHandle,null,context,workingMemory);
+ }
+
+
/**
* Assert a new <code>FactHandleImpl</code> from the right input. If it
* matches any left ReteTuple's that already has propagations then those
* propagations are retracted.
+ *
+ * TODO : The effect of an uncertain prop on this type of node has to be evaluated
*
* @param factHandle
* The <code>FactHandleImpl</code> being asserted.
@@ -138,6 +154,7 @@
* The working memory seesion.
*/
public void assertObject(final InternalFactHandle factHandle,
+ Deque<IUncertainDegree> tVal,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
final RightTuple rightTuple = new RightTuple( factHandle,
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -16,10 +16,14 @@
* limitations under the License.
*/
+import java.util.Deque;
+
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* Receiver of propagated <code>FactHandleImpl</code>s from a
* <code>ObjectSource</code>.
@@ -37,4 +41,14 @@
public void assertObject(InternalFactHandle factHandle,
PropagationContext propagationContext,
InternalWorkingMemory workingMemory);
+
+ /**
+ * @param factHandle
+ * @param truthVal
+ * @param context
+ * @param workingMemory
+ */
+ public void assertObject(InternalFactHandle factHandle,
+ Deque<IUncertainDegree> truthVal, PropagationContext context,
+ InternalWorkingMemory workingMemory);
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectSinkPropagator.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectSinkPropagator.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectSinkPropagator.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -1,12 +1,15 @@
package org.drools.reteoo;
import java.io.Externalizable;
+import java.util.Deque;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.common.BaseNode;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
public interface ObjectSinkPropagator
extends
Externalizable {
@@ -19,4 +22,14 @@
public ObjectSink[] getSinks();
public int size();
+
+ /**
+ * @param factHandle
+ * @param truthVal
+ * @param context
+ * @param workingMemory
+ */
+ public void propagateAssertObject(InternalFactHandle factHandle,
+ Deque<IUncertainDegree> truthVal, PropagationContext context,
+ InternalWorkingMemory workingMemory);
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -21,14 +21,20 @@
import java.io.ObjectOutput;
import java.io.IOException;
import java.io.ObjectInput;
+import java.util.Deque;
+import org.drools.IUncertainRuleBase;
import org.drools.RuleBaseConfiguration;
+import org.drools.base.ClassObjectType;
import org.drools.common.BaseNode;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.common.NodeMemory;
import org.drools.common.PropagationContextImpl;
+import org.drools.common.UncertainFactHandle;
import org.drools.reteoo.builder.BuildContext;
+import org.drools.rule.ClassConstraint;
+import org.drools.rule.ConstraintSignature;
import org.drools.rule.Declaration;
import org.drools.rule.EntryPoint;
import org.drools.rule.EvalCondition;
@@ -41,6 +47,9 @@
import org.drools.util.ObjectHashSet;
import org.drools.util.ObjectHashSet.ObjectEntry;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* <code>ObjectTypeNodes<code> are responsible for filtering and propagating the matching
* fact assertions propagated from the <code>Rete</code> node using <code>ObjectType</code> interface.
@@ -147,7 +156,19 @@
public boolean isAssignableFrom(final Object object) {
return this.objectType.isAssignableFrom( object );
}
-
+
+
+ public IUncertainDegree isAn(final Object object, IDegreeFactory factory) {
+ return this.objectType.isAn( object, factory );
+ }
+
+
+ public IUncertainDegree isSubClass(final Class clazz, IDegreeFactory factory) {
+ return this.objectType.isSubClass( clazz, factory );
+ }
+
+
+
/**
* Propagate the <code>FactHandleimpl</code> through the <code>Rete</code> network. All
* <code>FactHandleImpl</code> should be remembered in the node memory, so that later runtime rule attachmnents
@@ -179,7 +200,92 @@
workingMemory );
}
+
/**
+ * Uncertain version of the assertObject method
+ *
+ * An object enters the method with a truth degree saying how its
+ * class matches the type for this node.
+ *
+ * Here, this is merged with two other truth values
+ * - the priors
+ * - the degree at which the Object is a member of the local typed class
+ *
+ * Since the three degrees are relative to the same constraint,
+ * the operation is the merge-intersection.
+ *
+ * @param factHandle
+ * @param truthVal
+ * @param context
+ * @param workingMemory
+ */
+ public void assertObject(final InternalFactHandle factHandle,
+ Deque<IUncertainDegree> truthVal,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+
+ if ( context.getType() == PropagationContext.MODIFICATION && this.skipOnModify && context.getDormantActivations() == 0 ) {
+ // we do this after the shadowproxy update, just so that its up to date for the future
+ return;
+ }
+
+ if ( this.objectMemoryEnabled ) {
+ final ObjectHashSet memory = (ObjectHashSet) workingMemory.getNodeMemory( this );
+ memory.add( factHandle, false );
+ }
+
+
+ //
+ UncertainFactHandle uncHandle = (UncertainFactHandle) factHandle;
+ if (uncHandle == null) throw new RuntimeException("ObjectTypeNode : Uncertain Information expected here!!");
+
+ Object object = uncHandle.getObject();
+ IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+
+ //ClassConstraint constr = new ClassConstraint( ((ClassObjectType) objectType).getClassType());
+ ConstraintSignature cs = ClassConstraint.buildSignature(((ClassObjectType) objectType).getClassType());
+ IUncertainDegree objectPrior = uncHandle.getPriors().get(cs);
+ IUncertainDegree classPrior = truthVal.removeLast();
+ IUncertainDegree posterior = null;
+
+ System.out.println("ObjectTypeNode : Trying to filter "+object);
+ System.out.println("\t ObjectTypeNode : Object.Class vs class match "+classPrior);
+
+ if (objectPrior == null) {
+ // No external priors, combine class and object compatibility, then set it
+ IUncertainDegree objPost = isAn(object, factory);
+ System.out.println("\t ObjectTypeNode : Object vs class match "+objPost);
+ posterior = factory.mergeIntersect(objPost, classPrior);
+ } else {
+ if (uncHandle.isOverruling()) {
+ System.out.println("\t ObjectTypeNode : Keep priors from table");
+ // Do not change the priors
+ posterior = objectPrior;
+ } else {
+ // Combine everything
+ System.out.println("\t ObjectTypeNode : Prior info "+objectPrior);
+ IUncertainDegree objPost = isAn(object, factory);
+ System.out.println("\t ObjectTypeNode : Object vs class match "+objPost);
+ posterior = factory.mergeIntersect(objPost, classPrior);
+ posterior = factory.mergeIntersect(objectPrior, posterior);
+ }
+ }
+
+ uncHandle.setPrior(cs, posterior);
+ truthVal.addLast(posterior);
+ System.out.println("\t ObjectTypeNode : Global result "+posterior);
+
+ if (posterior.getDegree().getValue() > 0) {
+
+ this.sink.propagateAssertObject( factHandle,
+ truthVal,
+ context,
+ workingMemory );
+ }
+ }
+
+
+ /**
* Retract the <code>FactHandleimpl</code> from the <code>Rete</code> network. Also remove the
* <code>FactHandleImpl</code> from the node memory.
*
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/PropagationQueuingNode.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -19,6 +19,7 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.Externalizable;
+import java.util.Deque;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -34,6 +35,8 @@
import org.drools.reteoo.builder.BuildContext;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* A node that will add the propagation to the working memory actions queue,
* in order to allow multiple threads to concurrently assert objects to multiple
@@ -197,7 +200,24 @@
workingMemory.queueWorkingMemoryAction( this.action );
}
}
+
+
+ public void assertObject(InternalFactHandle factHandle,
+ Deque<IUncertainDegree> tVal,
+ PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+
+ final PropagationQueueingNodeMemory memory = (PropagationQueueingNodeMemory) workingMemory.getNodeMemory( this );
+ memory.addAction( new UncertainAssertAction( factHandle, tVal ,context ) );
+
+ if ( memory.isQueued().compareAndSet( false, true ) ) {
+ workingMemory.queueWorkingMemoryAction( this.action );
+ }
+
+ }
+
+
/**
* @see org.drools.reteoo.ObjectSink#isObjectMemoryEnabled()
*/
@@ -365,7 +385,33 @@
workingMemory );
}
}
+
+
+ private static class UncertainAssertAction extends Action {
+ private static final long serialVersionUID = -8478488926430845209L;
+ private Deque<IUncertainDegree> tVal;
+
+ public UncertainAssertAction(final InternalFactHandle handle,
+ Deque<IUncertainDegree> tVal,
+ final PropagationContext context) {
+ super( handle,
+ context );
+ this.tVal = tVal;
+ }
+
+ public void execute(final ObjectSinkPropagator sink,
+ final InternalWorkingMemory workingMemory) {
+ sink.propagateAssertObject( this.handle,
+ this.tVal,
+ this.context,
+ workingMemory );
+ }
+ }
+
+
+
+
private static class RetractAction extends Action {
private static final long serialVersionUID = -84784886430845209L;
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/Rete.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/Rete.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/Rete.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -20,11 +20,13 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.util.Deque;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import org.drools.RuntimeDroolsException;
import org.drools.common.BaseNode;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalRuleBase;
@@ -34,6 +36,8 @@
import org.drools.spi.ObjectType;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* The Rete-OO network.
*
@@ -112,6 +116,29 @@
typeConf,
workingMemory );
}
+
+
+
+ /**
+ * Rete-level insertion with truth value
+ * This may be used to model an initial confidence or something like that.
+ *
+ */
+ public void assertObject(final InternalFactHandle factHandle,
+ Deque<IUncertainDegree> tVal,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+ EntryPoint entryPoint = context.getEntryPoint();
+ EntryPointNode node = this.entryPoints.get( entryPoint );
+ ObjectTypeConf typeConf = ((InternalWorkingMemoryEntryPoint) workingMemory.getWorkingMemoryEntryPoint( entryPoint.getEntryPointId() )).getObjectTypeConfigurationRegistry().getObjectTypeConf( entryPoint,
+ factHandle.getObject() );
+
+ node.assertObject( factHandle,
+ tVal,
+ context,
+ typeConf,
+ workingMemory );
+ }
/**
* Retract a fact object from this <code>RuleBase</code> and the specified
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ReteooFactHandleFactory.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ReteooFactHandleFactory.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/ReteooFactHandleFactory.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -16,14 +16,24 @@
* limitations under the License.
*/
+import java.util.Hashtable;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.WorkingMemory;
import org.drools.common.AbstractFactHandleFactory;
import org.drools.common.DefaultFactHandle;
import org.drools.common.EventFactHandle;
+import org.drools.common.IUncertainInternalFactHandle;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
+import org.drools.common.UncertainFactHandle;
+import org.drools.rule.ConstraintSignature;
import org.drools.rule.TypeDeclaration;
+import org.drools.spi.Constraint;
import org.drools.spi.FactHandleFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
public class ReteooFactHandleFactory extends AbstractFactHandleFactory {
private static final long serialVersionUID = 400L;
@@ -63,7 +73,35 @@
recency );
}
}
+
+
+ public IUncertainInternalFactHandle newUncertainFactHandle(int id, Object object, Hashtable<ConstraintSignature, IUncertainDegree> priors, ObjectTypeConf conf, InternalWorkingMemory workingMemory ) {
+ if ( conf != null && conf.isEvent() ) {
+ TypeDeclaration type = conf.getTypeDeclaration();
+ long timestamp = workingMemory.getTimerService().getCurrentTime();
+ long duration = 0;
+ if ( type.getDurationExtractor() != null ) {
+ duration = type.getDurationExtractor().getLongValue( workingMemory,
+ object );
+ }
+
+ //TODO : Support Uncertain EVENTS
+
+ /*
+ return new EventFactHandle( id,
+ object,
+ recency,
+ timestamp,
+ duration );
+ */
+ throw new RuntimeDroolsException("TODO : Support uncertain events");
+
+ } else {
+ return new UncertainFactHandle(id, object, priors);
+ }
+ }
+
/* (non-Javadoc)
* @see org.drools.reteoo.FactHandleFactory#newInstance()
*/
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -20,7 +20,10 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.util.Deque;
+import java.util.Vector;
+import org.drools.IUncertainRuleBase;
import org.drools.RuleBaseConfiguration;
import org.drools.common.AgendaItem;
import org.drools.common.BaseNode;
@@ -40,6 +43,10 @@
import org.drools.util.Iterator;
import org.drools.util.LeftTupleList;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+import uncertainty.truthvals.operators.IUncDegCombiner;
+
/**
* Leaf Rete-OO node responsible for enacting <code>Action</code> s on a
* matched <code>Rule</code>.
@@ -52,7 +59,7 @@
implements
LeftTupleSinkNode,
NodeMemory,
- TerminalNode,
+ IUncertainTerminalNode,
Externalizable {
// ------------------------------------------------------------
// Instance members
@@ -200,57 +207,89 @@
final InternalAgenda agenda = (InternalAgenda) workingMemory.getAgenda();
final Duration dur = this.rule.getDuration();
-
- if ( dur != null && dur.getDuration( tuple ) > 0 ) {
- final ScheduledAgendaItem item = new ScheduledAgendaItem( context.getPropagationNumber(),
- cloned,
- agenda,
- context,
- this.rule,
- this.subrule );
- final TerminalNodeMemory memory = (TerminalNodeMemory) workingMemory.getNodeMemory( this );
-
- agenda.scheduleItem( item );
- tuple.setActivation( item );
-
- if ( this.tupleMemoryEnabled ) {
- memory.getTupleMemory().add( tuple );
- }
-
- item.setActivated( true );
- ((EventSupport) workingMemory).getAgendaEventSupport().fireActivationCreated( item,
- workingMemory );
- } else {
- // -----------------
- // Lazy instantiation and addition to the Agenda of AgendGroup
- // implementations
- // ----------------
- final TerminalNodeMemory memory = (TerminalNodeMemory) workingMemory.getNodeMemory( this );
-
- final AgendaItem item = new AgendaItem( context.getPropagationNumber(),
- cloned,
- rule.getSalience().getValue( tuple,
- workingMemory ),
- context,
- this.rule,
- this.subrule );
-
+
+
+
+
+ if (cloned instanceof UncertainLeftTuple) {
+
+ IUncertainDegree degree = combine((UncertainLeftTuple) cloned, ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory() );
+ if (degree.getDegree().getValue() == 0) return;
+
+ final TerminalNodeMemory memory = (TerminalNodeMemory) workingMemory.getNodeMemory( this );
+
+ final AgendaItem item = new UncertainAgendaItem( context.getPropagationNumber(),
+ cloned,
+ rule.getSalience().getValue( tuple, workingMemory ),
+ context,
+ this.rule,
+ this.subrule,
+ degree
+ );
item.setSequenence( this.sequence );
-
tuple.setActivation( item );
- memory.getTupleMemory().add( tuple );
-
+ memory.getTupleMemory().add( tuple );
agenda.addActivation( item );
-
item.setActivated( true );
-
// We only want to fire an event on a truly new Activation and not on an Activation as a result of a modify
if ( fireActivationCreated ) {
((EventSupport) workingMemory).getAgendaEventSupport().fireActivationCreated( item,
workingMemory );
}
+
+ } else {
+
+
+ if ( dur != null && dur.getDuration( tuple ) > 0 ) {
+ final ScheduledAgendaItem item = new ScheduledAgendaItem( context.getPropagationNumber(),
+ cloned,
+ agenda,
+ context,
+ this.rule,
+ this.subrule );
+ final TerminalNodeMemory memory = (TerminalNodeMemory) workingMemory.getNodeMemory( this );
+
+ agenda.scheduleItem( item );
+ tuple.setActivation( item );
+
+ if ( this.tupleMemoryEnabled ) {
+ memory.getTupleMemory().add( tuple );
+ }
+
+ item.setActivated( true );
+ ((EventSupport) workingMemory).getAgendaEventSupport().fireActivationCreated( item,
+ workingMemory );
+ } else {
+ // -----------------
+ // Lazy instantiation and addition to the Agenda of AgendGroup
+ // implementations
+ // ----------------
+ final TerminalNodeMemory memory = (TerminalNodeMemory) workingMemory.getNodeMemory( this );
+
+ final AgendaItem item = new AgendaItem( context.getPropagationNumber(),
+ cloned,
+ rule.getSalience().getValue( tuple,
+ workingMemory ),
+ context,
+ this.rule,
+ this.subrule );
+
+ item.setSequenence( this.sequence );
+
+ tuple.setActivation( item );
+ memory.getTupleMemory().add( tuple );
+
+ agenda.addActivation( item );
+
+ item.setActivated( true );
+
+ // We only want to fire an event on a truly new Activation and not on an Activation as a result of a modify
+ if ( fireActivationCreated ) {
+ ((EventSupport) workingMemory).getAgendaEventSupport().fireActivationCreated( item,
+ workingMemory );
+ }
+ }
}
-
agenda.increaseActiveActivations();
}
@@ -511,4 +550,38 @@
// this.ruleFlowGroup = ruleFlowGroup;
// }
}
+
+
+
+
+ protected IUncertainDegree combine(UncertainLeftTuple leftTuple, IDegreeFactory factory) {
+
+ IUncDegCombiner and = factory.getAndOperator();
+
+ UncertainLeftTuple tuple = leftTuple;
+
+ Vector<IUncertainDegree> argsV = new Vector<IUncertainDegree>();
+ while (tuple != null) {
+ Deque<IUncertainDegree> tVal = tuple.getTruthVal();
+ if (tVal != null) {
+ IUncertainDegree[] degs = new IUncertainDegree[tuple.getTruthVal().size()];
+ tuple.getTruthVal().toArray(degs);
+ IUncertainDegree deg = and.eval(degs);
+
+ argsV.add(deg);
+ }
+
+ tuple = (UncertainLeftTuple) tuple.getParent();
+
+ }
+
+
+ if (argsV.size() == 0)
+ return factory.True();
+
+ IUncertainDegree[] args = new IUncertainDegree[argsV.size()];
+ return factory.getAndOperator().eval(argsV.toArray(args));
+
+ }
+
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -5,9 +5,12 @@
import org.drools.common.BaseNode;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
import java.io.ObjectInput;
import java.io.IOException;
import java.io.ObjectOutput;
+import java.util.Deque;
public class SingleLeftTupleSinkAdapter
implements
@@ -27,10 +30,21 @@
final PropagationContext context,
final InternalWorkingMemory workingMemory,
boolean leftTupleMemoryEnabled) {
- this.sink.assertLeftTuple( new LeftTuple( leftTuple,
- rightTuple,
- this.sink,
- leftTupleMemoryEnabled ),
+ LeftTuple ltuple;
+
+ if (leftTuple instanceof UncertainLeftTuple) {
+ ltuple = new UncertainLeftTuple( leftTuple,
+ rightTuple,
+ this.sink,
+ leftTupleMemoryEnabled );
+ } else {
+ ltuple = new LeftTuple( leftTuple,
+ rightTuple,
+ this.sink,
+ leftTupleMemoryEnabled );
+ }
+
+ this.sink.assertLeftTuple( ltuple,
context,
workingMemory );
}
@@ -39,13 +53,26 @@
final PropagationContext context,
final InternalWorkingMemory workingMemory,
boolean leftTupleMemoryEnabled) {
- this.sink.assertLeftTuple( new LeftTuple( tuple,
- this.sink,
- leftTupleMemoryEnabled ),
+ LeftTuple ltuple;
+
+ if (tuple instanceof UncertainLeftTuple) {
+ ltuple = new UncertainLeftTuple( tuple,
+ this.sink,
+ leftTupleMemoryEnabled );
+ } else {
+ ltuple = new LeftTuple( tuple,
+ this.sink,
+ leftTupleMemoryEnabled );
+ }
+
+ this.sink.assertLeftTuple( ltuple,
context,
workingMemory );
}
+
+
+
public void propagateRetractLeftTuple(final LeftTuple leftTuple,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
@@ -126,4 +153,21 @@
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject( this.sink );
}
+
+ /* (non-Javadoc)
+ * @see org.drools.reteoo.LeftTupleSinkPropagator#createAndPropagateAssertLeftTuple(org.drools.common.InternalFactHandle, java.util.Deque, org.drools.spi.PropagationContext, org.drools.common.InternalWorkingMemory, boolean)
+ */
+ public void createAndPropagateAssertLeftTuple(
+ InternalFactHandle factHandle, Deque<IUncertainDegree> val,
+ PropagationContext context, InternalWorkingMemory workingMemory,
+ boolean leftTupleMemoryEnabled) {
+
+ this.sink.assertLeftTuple( new UncertainLeftTuple( factHandle,
+ val,
+ this.sink,
+ leftTupleMemoryEnabled ),
+ context,
+ workingMemory );
+
+ }
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/SingleObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/SingleObjectSinkAdapter.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/reteoo/SingleObjectSinkAdapter.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -5,10 +5,13 @@
import org.drools.common.BaseNode;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
import java.io.Externalizable;
import java.io.ObjectOutput;
import java.io.IOException;
import java.io.ObjectInput;
+import java.util.Deque;
public class SingleObjectSinkAdapter
implements
@@ -60,4 +63,17 @@
return 1;
}
+ /* (non-Javadoc)
+ * @see org.drools.reteoo.ObjectSinkPropagator#propagateAssertObject(org.drools.common.InternalFactHandle, java.util.Deque, org.drools.spi.PropagationContext, org.drools.common.InternalWorkingMemory)
+ */
+ public void propagateAssertObject(InternalFactHandle factHandle,
+ Deque<IUncertainDegree> truthVal, PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+ this.sink.assertObject( factHandle,
+ truthVal,
+ context,
+ workingMemory );
+
+ }
+
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/AndCompositeRestriction.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/AndCompositeRestriction.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/AndCompositeRestriction.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -1,11 +1,16 @@
package org.drools.rule;
+import org.drools.IUncertainRuleBase;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.reteoo.LeftTuple;
import org.drools.spi.InternalReadAccessor;
import org.drools.spi.Restriction;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+import uncertainty.truthvals.operators.IUncDegCombiner;
+
public class AndCompositeRestriction extends AbstractCompositeRestriction {
private static final long serialVersionUID = 400L;
@@ -31,6 +36,34 @@
}
return true;
}
+
+
+ /**
+ * Uncertain AND for alpha network
+ */
+ public IUncertainDegree matches(InternalReadAccessor extractor,
+ InternalFactHandle handle, InternalWorkingMemory workingMemory,
+ ContextEntry context) {
+
+ IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+
+ if (this.restrictions.length > 0) {
+ IUncertainDegree[] degs = new IUncertainDegree[this.restrictions.length];
+ for ( int i = 0; i < this.restrictions.length; i++ ) {
+ degs[i] = this.restrictions[i].matches(extractor, handle, workingMemory, context);
+ }
+
+ IUncDegCombiner and = factory.getAndOperator();
+ IUncertainDegree ans = and.eval(degs);
+
+ System.out.println("AndCompositeRestriction : Combination yields "+ans);
+ return ans;
+
+ } else return factory.True();
+
+
+ }
+
public boolean isAllowedCachedLeft(final ContextEntry context,
final InternalFactHandle handle) {
@@ -64,4 +97,35 @@
return new AndCompositeRestriction( clone );
}
+ /* (non-Javadoc)
+ * @see org.drools.spi.Restriction#matchesCachedLeft(org.drools.rule.ContextEntry, org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedLeft(ContextEntry context,
+ InternalFactHandle handle, IDegreeFactory factory) {
+
+ CompositeContextEntry contextEntry = (CompositeContextEntry) context;
+ IUncertainDegree[] degs = new IUncertainDegree[this.restrictions.length];
+ for ( int i = 0, ilength = this.restrictions.length; i < ilength; i++ ) {
+ degs[i] = this.restrictions[i].matchesCachedLeft(contextEntry.contextEntries[i], handle, factory);
+ }
+ return factory.getAndOperator().eval(degs);
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.Restriction#matchesCachedRight(org.drools.reteoo.LeftTuple, org.drools.rule.ContextEntry, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+ ContextEntry context, IDegreeFactory factory) {
+
+ CompositeContextEntry contextEntry = (CompositeContextEntry) context;
+ IUncertainDegree[] degs = new IUncertainDegree[this.restrictions.length];
+
+ for ( int i = 0, ilength = this.restrictions.length; i < ilength; i++ ) {
+ degs[i] = this.restrictions[i].matchesCachedRight(tuple, contextEntry.contextEntries[i], factory);
+ }
+ return factory.getAndOperator().eval(degs);
+ }
+
+
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/AndConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/AndConstraint.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/AndConstraint.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -19,6 +19,7 @@
import java.util.Arrays;
+import org.drools.IUncertainRuleBase;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.reteoo.LeftTuple;
@@ -26,6 +27,10 @@
import org.drools.spi.BetaNodeFieldConstraint;
import org.drools.util.ArrayUtils;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+import uncertainty.truthvals.operators.IUncDegCombiner;
+
/**
* AND composite constraint, so the user can do things like:
*
@@ -141,4 +146,87 @@
return clone;
}
+ /**
+ * Uncertain AND for alpha network
+ */
+ public IUncertainDegree matches(InternalFactHandle handle,
+ InternalWorkingMemory workingMemory, ContextEntry context) {
+
+ IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+
+ if (this.alphaConstraints.length > 0) {
+ IUncertainDegree[] degs = new IUncertainDegree[this.alphaConstraints.length];
+ for ( int i = 0; i < this.alphaConstraints.length; i++ ) {
+ degs[i] = this.alphaConstraints[i].matches(handle, workingMemory, context);
+ }
+
+ IUncDegCombiner and = factory.getAndOperator();
+ IUncertainDegree ans = and.eval(degs);
+
+ System.out.println("AndConstraint : Combination yields "+ans);
+ return ans;
+
+ } else return factory.True();
+
+
+ }
+
+
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public IUncertainDegree matchesCachedLeft(ContextEntry context,
+ InternalFactHandle handle,
+ IDegreeFactory factory) {
+
+ int nA = this.alphaConstraints.length;
+ int nB = this.betaConstraints.length;
+ IUncertainDegree[] degs = new IUncertainDegree[nA+nB];
+ for ( int i = 0; i < this.alphaConstraints.length; i++ ) {
+ degs[i] = this.alphaConstraints[i].matches( handle,
+ ((MultiFieldConstraintContextEntry) context).workingMemory,
+ ((MultiFieldConstraintContextEntry) context).alphas[i] );
+ }
+
+ for ( int i = 0; i < this.betaConstraints.length; i++ ) {
+ degs[nA+i] = this.betaConstraints[i].matchesCachedLeft( ((MultiFieldConstraintContextEntry) context).betas[i],
+ handle, factory );
+ }
+
+ if (nA+nB == 0) return factory.True();
+ return factory.getAndOperator().eval(degs);
+
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+ ContextEntry context,
+ IDegreeFactory factory) {
+
+ int nA = this.alphaConstraints.length;
+ int nB = this.betaConstraints.length;
+ IUncertainDegree[] degs = new IUncertainDegree[nA+nB];
+ for ( int i = 0; i < this.alphaConstraints.length; i++ ) {
+ degs[i] = this.alphaConstraints[i].matches( ((MultiFieldConstraintContextEntry) context).handle,
+ ((MultiFieldConstraintContextEntry) context).workingMemory,
+ ((MultiFieldConstraintContextEntry) context).alphas[i] );
+ }
+
+ for ( int i = 0; i < this.betaConstraints.length; i++ ) {
+ degs[nA+i] = this.betaConstraints[i].matchesCachedRight( tuple,
+ ((MultiFieldConstraintContextEntry) context).betas[i], factory );
+ }
+
+ if (nA+nB == 0) return factory.True();
+ return factory.getAndOperator().eval(degs);
+
+ }
+
+
+
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -20,15 +20,28 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.util.Hashtable;
+import org.drools.IUncertainRuleBase;
+import org.drools.base.ClassFieldReader;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.EqualityEvaluatorsDefinition;
+import org.drools.base.evaluators.EvaluatorRegistry;
+import org.drools.base.evaluators.Operator;
+import org.drools.base.field.LongFieldImpl;
+import org.drools.base.field.ObjectFieldImpl;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
+import org.drools.common.UncertainFactHandle;
import org.drools.spi.AlphaNodeFieldConstraint;
import org.drools.spi.Constraint;
import org.drools.spi.Evaluator;
import org.drools.spi.FieldValue;
import org.drools.spi.InternalReadAccessor;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
public class LiteralConstraint
implements
AlphaNodeFieldConstraint, Externalizable {
@@ -41,7 +54,36 @@
public LiteralConstraint() {
this(null, null);
}
-
+
+
+ /*
+ public static LiteralConstraint buildDefaultConstraint(EvaluatorRegistry registry, Object obj, String fieldName, ValueType type, String opName, String opArgs) {
+ return new LiteralConstraint(
+ new ClassFieldReader(obj.getClass(),fieldName),
+ registry.getEvaluator(type, opName,false,opArgs),
+ new ObjectFieldImpl(new Long(1))
+ );
+ }
+ */
+
+ public static ConstraintSignature buildSignature(String fieldName, String op, String value) {
+ ConstraintSignature cs = new ConstraintSignature(fieldName,op, value);
+ System.out.println("LiteralConstraint : Static signature build "+cs);
+ return cs;
+ }
+
+ public ConstraintSignature getSignature() {
+ ClassFieldReader cfr = (ClassFieldReader) this.extractor;
+ ConstraintSignature cs = new ConstraintSignature(
+ cfr.getFieldName(),
+ this.restriction.getEvaluator().getOperator().getOperatorString(),
+ this.restriction.getField().toString());
+
+ System.out.println("LiteralConstraint : transformed to signature "+cs);
+ return cs;
+ }
+
+
public LiteralConstraint(final InternalReadAccessor extractor,
final Evaluator evaluator,
final FieldValue field) {
@@ -112,6 +154,7 @@
int result = 1;
result = PRIME * result + this.extractor.hashCode();
result = PRIME * result + this.restriction.hashCode();
+ System.out.println("LC : Hashcode "+this.toString()+ " " +result);
return result;
}
@@ -123,7 +166,7 @@
return false;
}
final LiteralConstraint other = (LiteralConstraint) object;
-
+
return this.extractor.equals( other.extractor ) && this.restriction.equals( other.restriction );
}
@@ -141,4 +184,67 @@
public ConstraintType getType() {
return Constraint.ConstraintType.ALPHA;
}
+
+
+
+ /**
+ * Uncertain Constraint Evaluator
+ *
+ */
+ public IUncertainDegree matches(InternalFactHandle handle,
+ InternalWorkingMemory workingMemory, ContextEntry context) {
+
+
+ System.out.println("LiteralConstraint :: Trying to evaluate an Alpha-Constraint over Object ..."+handle.getObject().toString());
+ System.out.println("Using extractor of type "+this.extractor.getClass());
+
+ System.out.println("The value to be matched against is "+this.restriction.getField());
+
+ UncertainFactHandle uHandle = (UncertainFactHandle) handle;
+ Hashtable<ConstraintSignature, IUncertainDegree> priors = uHandle.getPriors();
+ IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+
+ ConstraintSignature key = null;
+ if (priors != null && priors.containsKey(this.getSignature())) {
+ key = this.getSignature();
+ } else {
+ LiteralConstraint unbound = this.getGeneralizedLiteralConstraint();
+ if (priors != null && priors.containsKey(unbound.getSignature()))
+ key = unbound.getSignature();
+ }
+
+
+ key = key;
+
+ if (key != null) {
+ // the field has already been evaluated
+ IUncertainDegree prior = priors.get(key);
+ if (uHandle.isOverruling()) {
+ //the local evaluator is to be overruled. Maybe it has been applied earlier.
+ return prior;
+ } else {
+ // Eval the operator, maybe merge with the available prior
+ IUncertainDegree posterior = this.restriction.matches( this.extractor, handle, workingMemory );
+ IUncertainDegree newPrior = factory.mergeIntersect(prior, posterior);
+ uHandle.setPrior(this.getSignature(),newPrior);
+ return newPrior;
+ }
+
+ } else {
+ // no, the field has not
+ // it now becomes the actual prior
+ IUncertainDegree newPrior = this.restriction.matches( this.extractor, handle, workingMemory );
+ uHandle.setPrior(this.getSignature(),newPrior);
+ return newPrior;
+ }
+
+ }
+
+
+ public LiteralConstraint getGeneralizedLiteralConstraint() {
+ return new LiteralConstraint(this.extractor, this.restriction.getGeneralizedRestriction());
+ }
+
+
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -21,14 +21,20 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import org.drools.IUncertainRuleBase;
+import org.drools.base.field.ObjectFieldImpl;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.reteoo.LeftTuple;
import org.drools.spi.Evaluator;
import org.drools.spi.FieldValue;
+import org.drools.spi.IUncertainEvaluator;
import org.drools.spi.InternalReadAccessor;
import org.drools.spi.Restriction;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
public class LiteralRestriction
implements
Restriction, Externalizable {
@@ -76,9 +82,9 @@
public boolean isAllowed(final InternalReadAccessor extractor,
final InternalFactHandle handle,
- final InternalWorkingMemory workingMemoiry,
+ final InternalWorkingMemory workingMemory,
final ContextEntry context ) {
- return this.evaluator.evaluate( null,
+ return this.evaluator.evaluate( workingMemory,
extractor,
handle.getObject(),
this.field );
@@ -133,7 +139,7 @@
return false;
}
final LiteralRestriction other = (LiteralRestriction) object;
-
+
return this.field.equals( other.field ) && this.evaluator.equals( other.evaluator );
}
@@ -147,6 +153,56 @@
this.extractor );
}
+
+
+
+
+
+
+ /**
+ * TODO Nope the generalization works now...
+ * @return
+ */
+ public LiteralRestriction getGeneralizedRestriction() {
+ return new LiteralRestriction(new ObjectFieldImpl(null),this.evaluator, this.extractor);
+ }
+
+
+ public IUncertainDegree matches(InternalReadAccessor extractor,
+ InternalFactHandle handle, InternalWorkingMemory workingMemory) {
+
+
+ if (this.evaluator instanceof IUncertainEvaluator) {
+ IUncertainEvaluator uEval = ((IUncertainEvaluator) this.evaluator);
+ return uEval.evaluateUncertain(workingMemory,
+ extractor,
+ handle.getObject(),
+ this.field );
+ } else {
+ IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+ return factory.fromBoolean(this.evaluator.evaluate(workingMemory, extractor, handle.getObject(), this.field));
+ }
+
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.Restriction#matches(org.drools.spi.InternalReadAccessor, org.drools.common.InternalFactHandle, org.drools.common.InternalWorkingMemory, org.drools.rule.ContextEntry)
+ */
+ public IUncertainDegree matches(InternalReadAccessor extractor,
+ InternalFactHandle handle, InternalWorkingMemory workingMemory,
+ ContextEntry context) {
+
+ return matches(extractor, handle, workingMemory);
+ }
+
+
+
+
+
+
+
+
private static class LiteralContextEntry
implements
ContextEntry {
@@ -210,4 +266,72 @@
}
+
+
+
+
+
+
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.Restriction#matchesCachedLeft(org.drools.rule.ContextEntry, org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedLeft(ContextEntry context,
+ InternalFactHandle handle, IDegreeFactory factory) {
+
+ if (this.evaluator instanceof IUncertainEvaluator) {
+ IUncertainEvaluator uEval = ((IUncertainEvaluator) this.evaluator);
+ return uEval.evaluateUncertain(
+ null,
+ ((LiteralContextEntry) context).getFieldExtractor(),
+ handle.getObject(),
+ this.field );
+ } else {
+
+ return factory.fromBoolean(
+ this.evaluator.evaluate( null,
+ ((LiteralContextEntry) context).getFieldExtractor(),
+ handle.getObject(),
+ this.field )) ;
+
+
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.Restriction#matchesCachedRight(org.drools.reteoo.LeftTuple, org.drools.rule.ContextEntry, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+ ContextEntry context, IDegreeFactory factory) {
+
+ if (this.evaluator instanceof IUncertainEvaluator) {
+ IUncertainEvaluator uEval = ((IUncertainEvaluator) this.evaluator);
+ return uEval.evaluateUncertain(
+ null,
+ ((LiteralContextEntry) context).getFieldExtractor(),
+ ((LiteralContextEntry) context).getObject(),
+ this.field );
+ } else {
+
+ return factory.fromBoolean(
+ this.evaluator.evaluate( null,
+ ((LiteralContextEntry) context).getFieldExtractor(),
+ ((LiteralContextEntry) context).getObject(),
+ this.field )
+ );
+
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -11,6 +11,9 @@
import org.drools.spi.ReadAccessor;
import org.drools.spi.Restriction;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
public class MultiRestrictionFieldConstraint extends MutableTypeConstraint {
private static final long serialVersionUID = 400L;
@@ -109,5 +112,40 @@
return new MultiRestrictionFieldConstraint( this.extractor,
(Restriction) this.restrictions.clone() );
}
+
+
+
+ /**
+ *
+ */
+ public IUncertainDegree matches(InternalFactHandle handle,
+ InternalWorkingMemory workingMemory, ContextEntry context) {
+
+ return this.restrictions.matches( this.extractor,
+ handle,
+ workingMemory,
+ context );
+
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedLeft(org.drools.rule.ContextEntry, org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedLeft(ContextEntry context,
+ InternalFactHandle handle, IDegreeFactory factory) {
+ return this.restrictions.matchesCachedLeft( context,
+ handle, factory );
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedRight(org.drools.reteoo.LeftTuple, org.drools.rule.ContextEntry, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+ ContextEntry context, IDegreeFactory factory) {
+ return this.restrictions.matchesCachedRight( tuple,
+ context, factory );
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/OrCompositeRestriction.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/OrCompositeRestriction.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/OrCompositeRestriction.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -1,11 +1,17 @@
package org.drools.rule;
+import org.drools.IUncertainRuleBase;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.reteoo.LeftTuple;
+import org.drools.rule.AbstractCompositeRestriction.CompositeContextEntry;
import org.drools.spi.InternalReadAccessor;
import org.drools.spi.Restriction;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+import uncertainty.truthvals.operators.IUncDegCombiner;
+
public class OrCompositeRestriction extends AbstractCompositeRestriction {
private static final long serialVersionUID = 400L;
@@ -32,6 +38,34 @@
return false;
}
+
+
+ /**
+ * Uncertain OR for alpha network
+ */
+ public IUncertainDegree matches(InternalReadAccessor extractor,
+ InternalFactHandle handle, InternalWorkingMemory workingMemory,
+ ContextEntry context) {
+
+ IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+
+ if (this.restrictions.length > 0) {
+ IUncertainDegree[] degs = new IUncertainDegree[this.restrictions.length];
+ for ( int i = 0; i < this.restrictions.length; i++ ) {
+ degs[i] = this.restrictions[i].matches(extractor, handle, workingMemory, context);
+ }
+
+ IUncDegCombiner or = factory.getOrOperator();
+ IUncertainDegree ans = or.eval(degs);
+
+ System.out.println("OrCompositeRestriction : Combination yields "+ans);
+ return ans;
+
+ } else return factory.True();
+
+
+ }
+
public boolean isAllowedCachedLeft(final ContextEntry context,
final InternalFactHandle handle) {
CompositeContextEntry contextEntry = (CompositeContextEntry) context;
@@ -63,4 +97,38 @@
}
return new OrCompositeRestriction( clone );
}
+
+
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.Restriction#matchesCachedLeft(org.drools.rule.ContextEntry, org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedLeft(ContextEntry context,
+ InternalFactHandle handle, IDegreeFactory factory) {
+
+ CompositeContextEntry contextEntry = (CompositeContextEntry) context;
+ IUncertainDegree[] degs = new IUncertainDegree[this.restrictions.length];
+ for ( int i = 0, ilength = this.restrictions.length; i < ilength; i++ ) {
+ degs[i] = this.restrictions[i].matchesCachedLeft(contextEntry.contextEntries[i], handle, factory);
+ }
+ return factory.getOrOperator().eval(degs);
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.Restriction#matchesCachedRight(org.drools.reteoo.LeftTuple, org.drools.rule.ContextEntry, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+ ContextEntry context, IDegreeFactory factory) {
+
+ CompositeContextEntry contextEntry = (CompositeContextEntry) context;
+ IUncertainDegree[] degs = new IUncertainDegree[this.restrictions.length];
+
+ for ( int i = 0, ilength = this.restrictions.length; i < ilength; i++ ) {
+ degs[i] = this.restrictions[i].matchesCachedRight(tuple, contextEntry.contextEntries[i], factory);
+ }
+ return factory.getOrOperator().eval(degs);
+ }
+
+
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/OrConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/OrConstraint.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/OrConstraint.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -18,13 +18,19 @@
import java.util.Arrays;
+import org.drools.IUncertainRuleBase;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.reteoo.LeftTuple;
+import org.drools.rule.AbstractCompositeConstraint.MultiFieldConstraintContextEntry;
import org.drools.spi.AlphaNodeFieldConstraint;
import org.drools.spi.BetaNodeFieldConstraint;
import org.drools.util.ArrayUtils;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+import uncertainty.truthvals.operators.IUncDegCombiner;
+
/**
* A class to implement Multi-Field OR constraints, so user can do:
*
@@ -154,4 +160,87 @@
return clone;
}
+
+ /**
+ * Uncertain OR for alpha network
+ */
+ public IUncertainDegree matches(InternalFactHandle handle,
+ InternalWorkingMemory workingMemory, ContextEntry context) {
+
+ IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+
+ if (this.alphaConstraints.length > 0) {
+ IUncertainDegree[] degs = new IUncertainDegree[this.alphaConstraints.length];
+ for ( int i = 0; i < this.alphaConstraints.length; i++ ) {
+ degs[i] = this.alphaConstraints[i].matches(handle, workingMemory, context);
+ }
+
+ IUncDegCombiner or = factory.getOrOperator();
+ IUncertainDegree ans = or.eval(degs);
+
+ System.out.println("OrConstraint : Combination of "+this.alphaConstraints.length+" constraints yields "+ans);
+ return ans;
+
+ } else return factory.True();
+
+
+ }
+
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public IUncertainDegree matchesCachedLeft(ContextEntry context,
+ InternalFactHandle handle,
+ IDegreeFactory factory) {
+
+ int nA = this.alphaConstraints.length;
+ int nB = this.betaConstraints.length;
+ IUncertainDegree[] degs = new IUncertainDegree[nA+nB];
+ for ( int i = 0; i < this.alphaConstraints.length; i++ ) {
+ degs[i] = this.alphaConstraints[i].matches( handle,
+ ((MultiFieldConstraintContextEntry) context).workingMemory,
+ ((MultiFieldConstraintContextEntry) context).alphas[i] );
+ }
+
+ for ( int i = 0; i < this.betaConstraints.length; i++ ) {
+ degs[nA+i] = this.betaConstraints[i].matchesCachedLeft( ((MultiFieldConstraintContextEntry) context).betas[i],
+ handle, factory );
+ }
+
+ if (nA+nB == 0) return factory.True();
+ return factory.getOrOperator().eval(degs);
+
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+ ContextEntry context,
+ IDegreeFactory factory) {
+
+ int nA = this.alphaConstraints.length;
+ int nB = this.betaConstraints.length;
+ IUncertainDegree[] degs = new IUncertainDegree[nA+nB];
+ for ( int i = 0; i < this.alphaConstraints.length; i++ ) {
+ degs[i] = this.alphaConstraints[i].matches( ((MultiFieldConstraintContextEntry) context).handle,
+ ((MultiFieldConstraintContextEntry) context).workingMemory,
+ ((MultiFieldConstraintContextEntry) context).alphas[i] );
+ }
+
+ for ( int i = 0; i < this.betaConstraints.length; i++ ) {
+ degs[nA+i] = this.betaConstraints[i].matchesCachedRight( tuple,
+ ((MultiFieldConstraintContextEntry) context).betas[i], factory );
+ }
+
+ if (nA+nB == 0) return factory.True();
+ return factory.getOrOperator().eval(degs);
+
+ }
+
+
+
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -30,6 +30,9 @@
import org.drools.spi.PredicateExpression;
import org.drools.spi.Restriction;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* A predicate can be written as a top level constraint or be nested
* inside inside a field constraint (and as so, must implement the
@@ -371,4 +374,39 @@
}
}
+ /**
+ * TODO : Unsupported Uncertain PredicateExpression...
+ */
+ public IUncertainDegree matches(InternalFactHandle handle,
+ InternalWorkingMemory workingMemory, ContextEntry context) {
+
+ throw new UnsupportedOperationException("Predicate Constraint Uncertain Eval");
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.Restriction#matches(org.drools.spi.InternalReadAccessor, org.drools.common.InternalFactHandle, org.drools.common.InternalWorkingMemory, org.drools.rule.ContextEntry)
+ */
+ public IUncertainDegree matches(InternalReadAccessor extractor,
+ InternalFactHandle handle, InternalWorkingMemory workingMemory,
+ ContextEntry context) {
+ throw new UnsupportedOperationException("Method not supported. Please contact development team.");
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedLeft(org.drools.rule.ContextEntry, org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedLeft(ContextEntry context,
+ InternalFactHandle handle, IDegreeFactory factory) {
+ throw new UnsupportedOperationException("Method not supported. Please contact development team.");
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedRight(org.drools.reteoo.LeftTuple, org.drools.rule.ContextEntry, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+ ContextEntry context, IDegreeFactory factory) {
+ throw new UnsupportedOperationException("Method not supported. Please contact development team.");
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -30,6 +30,9 @@
import org.drools.spi.InternalReadAccessor;
import org.drools.spi.ReturnValueExpression;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
public class ReturnValueConstraint extends MutableTypeConstraint
implements
Externalizable {
@@ -159,10 +162,64 @@
e );
}
}
+
+
+
+
+ public IUncertainDegree matchesCachedLeft(final ContextEntry context,
+ final InternalFactHandle handle, IDegreeFactory factory) {
+ try {
+ final ReturnValueContextEntry ctx = (ReturnValueContextEntry) context;
+ return this.restriction.matches( this.fieldExtractor,
+ handle,
+ ctx.getTuple(),
+ ctx.getWorkingMemory(),
+ ctx );
+ } catch ( final Exception e ) {
+ throw new RuntimeDroolsException( "Exception executing ReturnValue constraint " + this.restriction + " : " + e.getMessage(),
+ e );
+ }
+ }
+ public IUncertainDegree matchesCachedRight(final LeftTuple tuple,
+ final ContextEntry context, IDegreeFactory factory) {
+ try {
+ final ReturnValueContextEntry ctx = (ReturnValueContextEntry) context;
+ return this.restriction.matches( this.fieldExtractor,
+ ctx.getHandle(),
+ tuple,
+ ctx.getWorkingMemory(),
+ ctx );
+ } catch ( final Exception e ) {
+ throw new RuntimeDroolsException( "Exception executing ReturnValue constraint " + this.restriction + " : " + e.getMessage(),
+ e );
+ }
+ }
+
+
public Object clone() {
return new ReturnValueConstraint( this.fieldExtractor,
(ReturnValueRestriction) this.restriction.clone() );
}
+
+
+ /**
+ *
+ */
+ public IUncertainDegree matches(InternalFactHandle handle,
+ InternalWorkingMemory workingMemory, ContextEntry context) {
+
+ try {
+ return this.restriction.matches( this.fieldExtractor,
+ handle,
+ null,
+ workingMemory,
+ context );
+ } catch ( final Exception e ) {
+ throw new RuntimeDroolsException( "Exception executing ReturnValue constraint " + this.restriction + " : " + e.getMessage(),
+ e );
+ }
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -28,12 +28,16 @@
import org.drools.common.InternalWorkingMemory;
import org.drools.reteoo.LeftTuple;
import org.drools.spi.Evaluator;
+import org.drools.spi.IUncertainEvaluator;
import org.drools.spi.InternalReadAccessor;
import org.drools.spi.ReadAccessor;
import org.drools.spi.Restriction;
import org.drools.spi.ReturnValueExpression;
import org.drools.spi.Tuple;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
public class ReturnValueRestriction
implements
Restriction {
@@ -427,4 +431,61 @@
}
}
+ /**
+ * @param fieldExtractor
+ * @param handle
+ * @param object
+ * @param workingMemory
+ * @param context
+ * @return
+ */
+ public IUncertainDegree matches(final InternalReadAccessor extractor,
+ final InternalFactHandle handle,
+ final Tuple tuple,
+ final WorkingMemory workingMemory,
+ final ContextEntry context) {
+
+
+ try {
+ return ((IUncertainEvaluator) this.evaluator).evaluateUncertain( workingMemory,
+ extractor,
+ handle.getObject(),
+ this.expression.evaluate( handle.getObject(),
+ tuple,
+ this.previousDeclarations,
+ this.localDeclarations,
+ workingMemory,
+ ((ReturnValueContextEntry)context).dialectContext) );
+ } catch ( final Exception e ) {
+ throw new RuntimeDroolsException( e );
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.Restriction#matches(org.drools.spi.InternalReadAccessor, org.drools.common.InternalFactHandle, org.drools.common.InternalWorkingMemory, org.drools.rule.ContextEntry)
+ */
+ public IUncertainDegree matches(InternalReadAccessor extractor,
+ InternalFactHandle handle, InternalWorkingMemory workingMemory,
+ ContextEntry context) {
+ throw new UnsupportedOperationException( "does not support method call matches(Object object, InternalWorkingMemory workingMemoiry)" );
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.Restriction#matchesCachedLeft(org.drools.rule.ContextEntry, org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedLeft(ContextEntry context,
+ InternalFactHandle handle, IDegreeFactory factory) {
+ throw new UnsupportedOperationException( "does not support method call isAllowed(Object object, InternalWorkingMemory workingMemoiry)" );
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.Restriction#matchesCachedRight(org.drools.reteoo.LeftTuple, org.drools.rule.ContextEntry, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+ ContextEntry context, IDegreeFactory factory) {
+ throw new UnsupportedOperationException( "does not support method call isAllowed(Object object, InternalWorkingMemory workingMemoiry)" );
+
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/VariableConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/VariableConstraint.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/VariableConstraint.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -20,13 +20,20 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.util.Hashtable;
+import org.drools.IUncertainRuleBase;
+import org.drools.base.ClassFieldReader;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
+import org.drools.common.UncertainFactHandle;
import org.drools.reteoo.LeftTuple;
import org.drools.spi.Evaluator;
import org.drools.spi.InternalReadAccessor;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
public class VariableConstraint extends MutableTypeConstraint
implements
Externalizable {
@@ -93,6 +100,54 @@
workingMemory,
context );
}
+
+
+ public IUncertainDegree matches(InternalFactHandle handle,
+ InternalWorkingMemory workingMemory, ContextEntry context) {
+
+
+ System.out.println("VariableConstraint :: Trying to evaluate an Alpha-Constraint over Object ..."+handle.getObject().toString());
+
+ UncertainFactHandle uHandle = (UncertainFactHandle) handle;
+ Hashtable<ConstraintSignature, IUncertainDegree> priors = uHandle.getPriors();
+ IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+
+ ConstraintSignature key = null;
+ if (priors != null && priors.containsKey(this.getSignature())) {
+ key = this.getSignature();
+ }
+
+ if (key != null) {
+ // the field has already been evaluated
+ IUncertainDegree prior = priors.get(key);
+ if (uHandle.isOverruling()) {
+ //the local evaluator is to be overruled. Maybe it has been applied earlier.
+ return prior;
+ } else {
+ // Eval the operator, maybe merge with the available prior
+ IUncertainDegree posterior = this.restriction.matches( this.fieldExtractor, handle, workingMemory, context );
+ IUncertainDegree newPrior = factory.mergeIntersect(prior, posterior);
+ uHandle.setPrior(this.getSignature(),newPrior);
+ return newPrior;
+ }
+
+ } else {
+ // no, the field has not
+ // it now becomes the actual prior
+ IUncertainDegree newPrior = this.restriction.matches( this.fieldExtractor, handle, workingMemory, context );
+ uHandle.setPrior(this.getSignature(),newPrior);
+ return newPrior;
+ }
+
+
+
+
+
+
+
+
+
+ }
public boolean isAllowedCachedLeft(final ContextEntry context,
final InternalFactHandle handle) {
@@ -105,7 +160,24 @@
return this.restriction.isAllowedCachedRight( tuple,
context );
}
+
+
+ public IUncertainDegree matchesCachedLeft(final ContextEntry context,
+ final InternalFactHandle handle,
+ IDegreeFactory factory) {
+ return this.restriction.matchesCachedLeft( context,
+ handle, factory );
+ }
+ public IUncertainDegree matchesCachedRight(final LeftTuple tuple,
+ final ContextEntry context,
+ IDegreeFactory factory) {
+ return this.restriction.matchesCachedRight( tuple,
+ context, factory );
+ }
+
+
+
public String toString() {
return "[VariableConstraint fieldExtractor=" + this.fieldExtractor + " declaration=" + getRequiredDeclarations() + "]";
}
@@ -141,4 +213,18 @@
(VariableRestriction) this.restriction.clone() );
}
+
+
+
+ public ConstraintSignature getSignature() {
+ ConstraintSignature cs = new ConstraintSignature(
+ ((ClassFieldReader) this.fieldExtractor).getFieldName(),
+ this.restriction.getEvaluator().getOperator().getOperatorString(),
+ ((ClassFieldReader) ((VariableRestriction) this.restriction).getRequiredDeclarations()[0].getExtractor()).getFieldName()
+ );
+
+ System.out.println("VariableConstraint : transformed to signature "+cs);
+ return cs;
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/VariableRestriction.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/rule/VariableRestriction.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -21,15 +21,20 @@
import java.io.ObjectOutput;
import java.util.Arrays;
+import org.drools.IUncertainRuleBase;
import org.drools.base.ValueType;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.reteoo.LeftTuple;
import org.drools.spi.Evaluator;
+import org.drools.spi.IUncertainEvaluator;
import org.drools.spi.InternalReadAccessor;
import org.drools.spi.ReadAccessor;
import org.drools.spi.Restriction;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
public class VariableRestriction
implements
Restriction {
@@ -96,7 +101,27 @@
this.declaration.getExtractor(),
this.evaluator.prepareObject( handle ) );
}
-
+
+
+ public IUncertainDegree matches(final InternalReadAccessor extractor,
+ final InternalFactHandle handle,
+ final InternalWorkingMemory workingMemory,
+ final ContextEntry context ) {
+
+ if (this.evaluator instanceof IUncertainEvaluator) {
+ return ((IUncertainEvaluator) this.evaluator).evaluateUncertain( workingMemory,
+ this.extractor,
+ this.evaluator.prepareObject( handle ),
+ this.declaration.getExtractor(),
+ this.evaluator.prepareObject( handle ) );
+ } else {
+ IDegreeFactory factory = ((IUncertainRuleBase) workingMemory.getRuleBase()).getTruthFactory();
+ return factory.fromBoolean( this.isAllowed(extractor, handle, workingMemory, context) );
+ }
+
+
+ }
+
public boolean isAllowedCachedLeft(final ContextEntry context,
final InternalFactHandle handle) {
return this.evaluator.evaluateCachedLeft( ((VariableContextEntry) context).workingMemory,
@@ -111,6 +136,59 @@
this.evaluator.prepareObject( tuple.get( this.declaration ) ) );
}
+
+
+
+ /**
+ * @param context
+ * @param handle
+ * @param factory
+ * @return
+ */
+ public IUncertainDegree matchesCachedLeft(ContextEntry context,
+ InternalFactHandle handle, IDegreeFactory factory) {
+
+ if (this.evaluator instanceof IUncertainEvaluator) {
+ IUncertainEvaluator uEval = (IUncertainEvaluator) this.evaluator;
+ return uEval.evaluateUncertainCachedLeft(((VariableContextEntry) context).workingMemory,
+ (VariableContextEntry) context,
+ this.evaluator.prepareObject( handle ) );
+ } else {
+
+ return factory.fromBoolean(
+ this.evaluator.evaluateCachedLeft( ((VariableContextEntry) context).workingMemory,
+ (VariableContextEntry) context,
+ this.evaluator.prepareObject( handle ) ));
+ }
+ }
+
+ /**
+ * @param tuple
+ * @param context
+ * @param factory
+ * @return
+ */
+ public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+ ContextEntry context, IDegreeFactory factory) {
+
+ if (this.evaluator instanceof IUncertainEvaluator) {
+ IUncertainEvaluator uEval = (IUncertainEvaluator) this.evaluator;
+ return uEval.evaluateUncertainCachedRight( ((VariableContextEntry) context).workingMemory,
+ (VariableContextEntry) context,
+ this.evaluator.prepareObject( tuple.get( this.declaration ) ) );
+ } else {
+
+ return factory.fromBoolean(
+ this.evaluator.evaluateCachedRight( ((VariableContextEntry) context).workingMemory,
+ (VariableContextEntry) context,
+ this.evaluator.prepareObject( tuple.get( this.declaration ) ) ));
+ }
+
+ }
+
+
+
+
public String toString() {
return "[VariableRestriction declaration=" + this.declaration + "]";
}
@@ -571,4 +649,6 @@
}
}
}
+
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/AlphaNodeFieldConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/AlphaNodeFieldConstraint.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/AlphaNodeFieldConstraint.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -20,6 +20,8 @@
import org.drools.common.InternalWorkingMemory;
import org.drools.rule.ContextEntry;
+import uncertainty.truthvals.IUncertainDegree;
+
public interface AlphaNodeFieldConstraint
extends
Constraint {
@@ -29,4 +31,9 @@
public boolean isAllowed(InternalFactHandle handle,
InternalWorkingMemory workingMemory,
ContextEntry context);
+
+ public IUncertainDegree matches(InternalFactHandle handle,
+ InternalWorkingMemory workingMemory,
+ ContextEntry context);
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/BetaNodeFieldConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/BetaNodeFieldConstraint.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/BetaNodeFieldConstraint.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -20,6 +20,9 @@
import org.drools.reteoo.LeftTuple;
import org.drools.rule.ContextEntry;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
public interface BetaNodeFieldConstraint
extends
Constraint {
@@ -29,7 +32,17 @@
public boolean isAllowedCachedRight(LeftTuple tuple,
ContextEntry context);
+
+
+ public IUncertainDegree matchesCachedLeft(ContextEntry context,
+ InternalFactHandle handle,
+ IDegreeFactory factory);
+ public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+ ContextEntry context,
+ IDegreeFactory factory);
+
+
public ContextEntry createContextEntry();
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/FactHandleFactory.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/FactHandleFactory.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/FactHandleFactory.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -18,14 +18,20 @@
import java.io.IOException;
import java.io.Serializable;
+import java.util.Hashtable;
import org.drools.FactHandle;
+import org.drools.WorkingMemory;
+import org.drools.common.IUncertainInternalFactHandle;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.marshalling.MarshallerReaderContext;
import org.drools.marshalling.MarshallerWriteContext;
import org.drools.reteoo.ObjectTypeConf;
+import org.drools.rule.ConstraintSignature;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* Factory Interface to return new <code>FactHandle</code>s
*
@@ -42,7 +48,19 @@
*/
public InternalFactHandle newFactHandle(Object object, ObjectTypeConf conf, InternalWorkingMemory workingMemory );
+
+
/**
+ * Construct a uncertainty-based handle with a new id.
+ *
+ * @return The handle.
+ */
+ public IUncertainInternalFactHandle newUncertainFactHandle(Object object, Hashtable<ConstraintSignature, IUncertainDegree> priors, ObjectTypeConf conf, InternalWorkingMemory workingMemory );
+
+
+
+
+ /**
* Increases the recency of the FactHandle
*
* @param factHandle
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -17,13 +17,17 @@
*/
import java.io.Serializable;
+import java.util.Hashtable;
import org.drools.FactException;
import org.drools.FactHandle;
import org.drools.WorkingMemory;
+import org.drools.rule.ConstraintSignature;
import org.drools.rule.Declaration;
import org.drools.rule.Rule;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* KnowledgeHelper implementation types are injected into consequenses
* instrumented at compile time and instances passed at runtime. It provides
@@ -77,6 +81,13 @@
public void insertLogical(Object object,
boolean dynamic) throws FactException;
+
+ public void insertLogical(Object object,
+ Hashtable<ConstraintSignature, IUncertainDegree> priors) throws FactException;
+
+ public void insert(Object object,
+ Hashtable<ConstraintSignature, IUncertainDegree> priors) throws FactException;
+
void update(FactHandle handle,
Object newObject) throws FactException;
@@ -140,5 +151,7 @@
public Declaration getDeclaration(String identifier);
public void halt();
+
+ public IUncertainDegree getActivationDegree();
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/ObjectType.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/ObjectType.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/ObjectType.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -19,6 +19,9 @@
import org.drools.base.ValueType;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
/**
* Semantic object type differentiator.
*
@@ -44,6 +47,13 @@
boolean isAssignableFrom(Object object);
boolean isAssignableFrom(ObjectType objectType);
+
+
+
+ IUncertainDegree isAn(Object object, IDegreeFactory factory);
+
+ IUncertainDegree isSubClass(Class clazz, IDegreeFactory factory);
+
/**
* Returns true if the object type represented by this object
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/Restriction.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/Restriction.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/main/java/org/drools/spi/Restriction.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -9,6 +9,9 @@
import org.drools.rule.ContextEntry;
import org.drools.rule.Declaration;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
public interface Restriction
extends
Externalizable,
@@ -39,5 +42,29 @@
Declaration newDecl);
public Object clone();
+
+
+ public IUncertainDegree matches(InternalReadAccessor extractor,
+ InternalFactHandle handle,
+ InternalWorkingMemory workingMemory,
+ ContextEntry context );
+ /**
+ * @param context
+ * @param handle
+ * @param factory
+ * @return
+ */
+ IUncertainDegree matchesCachedLeft(ContextEntry context,
+ InternalFactHandle handle, IDegreeFactory factory);
+
+ /**
+ * @param tuple
+ * @param context
+ * @param factory
+ * @return
+ */
+ IUncertainDegree matchesCachedRight(LeftTuple tuple, ContextEntry context,
+ IDegreeFactory factory);
+
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -4,6 +4,7 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.lang.reflect.Method;
+import java.util.Deque;
import junit.framework.TestCase;
@@ -25,6 +26,8 @@
import org.drools.spi.InternalReadAccessor;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
public class CompositeObjectSinkAdapterTest extends TestCase {
private ReteooRuleBase ruleBase;
private BuildContext buildContext;
@@ -593,5 +596,15 @@
// TODO Auto-generated method stub
return 0;
}
+
+ /* (non-Javadoc)
+ * @see org.drools.reteoo.ObjectSink#assertObject(org.drools.common.InternalFactHandle, java.util.Deque, org.drools.spi.PropagationContext, org.drools.common.InternalWorkingMemory)
+ */
+ public void assertObject(InternalFactHandle factHandle,
+ Deque<IUncertainDegree> truthVal, PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+ // TODO Auto-generated method stub
+
+ }
}
}
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/reteoo/MockObjectSink.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/reteoo/MockObjectSink.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/reteoo/MockObjectSink.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -17,12 +17,15 @@
*/
import java.util.ArrayList;
+import java.util.Deque;
import java.util.List;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.spi.PropagationContext;
+import uncertainty.truthvals.IUncertainDegree;
+
public class MockObjectSink
implements
ObjectSinkNode,
@@ -104,4 +107,14 @@
// TODO Auto-generated method stub
return 0;
}
+
+ /* (non-Javadoc)
+ * @see org.drools.reteoo.ObjectSink#assertObject(org.drools.common.InternalFactHandle, java.util.Deque, org.drools.spi.PropagationContext, org.drools.common.InternalWorkingMemory)
+ */
+ public void assertObject(InternalFactHandle factHandle,
+ Deque<IUncertainDegree> truthVal, PropagationContext context,
+ InternalWorkingMemory workingMemory) {
+ // TODO Auto-generated method stub
+
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/spi/MockConstraint.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/spi/MockConstraint.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/spi/MockConstraint.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -23,6 +23,9 @@
import org.drools.rule.ContextEntry;
import org.drools.rule.Declaration;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
import java.io.ObjectOutput;
import java.io.IOException;
import java.io.ObjectInput;
@@ -120,4 +123,20 @@
return ConstraintType.BETA;
}
+ /* (non-Javadoc)
+ * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedLeft(org.drools.rule.ContextEntry, org.drools.common.InternalFactHandle, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedLeft(ContextEntry context,
+ InternalFactHandle handle, IDegreeFactory factory) {
+ return factory.fromBoolean(this.isAllowed);
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.spi.BetaNodeFieldConstraint#matchesCachedRight(org.drools.reteoo.LeftTuple, org.drools.rule.ContextEntry, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree matchesCachedRight(LeftTuple tuple,
+ ContextEntry context, IDegreeFactory factory) {
+ return factory.fromBoolean(this.isAllowed);
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/spi/MockObjectType.java
===================================================================
--- labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/spi/MockObjectType.java 2008-08-12 22:48:16 UTC (rev 21492)
+++ labs/jbossrules/branches/uncDrools5x/drools-core/src/test/java/org/drools/spi/MockObjectType.java 2008-08-12 22:48:36 UTC (rev 21493)
@@ -3,6 +3,9 @@
import org.drools.base.ClassObjectType;
import org.drools.base.ValueType;
+import uncertainty.factory.IDegreeFactory;
+import uncertainty.truthvals.IUncertainDegree;
+
import java.io.ObjectOutput;
import java.io.ObjectInput;
import java.io.IOException;
@@ -113,5 +116,19 @@
public void setEvent(boolean isEvent) {
this.isEvent = isEvent;
}
+ /* (non-Javadoc)
+ * @see org.drools.spi.ObjectType#isAn(java.lang.Object, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree isAn(Object object, IDegreeFactory factory) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+ /* (non-Javadoc)
+ * @see org.drools.spi.ObjectType#isSubClass(java.lang.Class, uncertainty.factory.IDegreeFactory)
+ */
+ public IUncertainDegree isSubClass(Class clazz, IDegreeFactory factory) {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
\ No newline at end of file
More information about the jboss-svn-commits
mailing list