[jboss-svn-commits] JBL Code SVN: r26123 - in labs/jbossrules/branches/DroolsChance: drools-api/src/main/java/org/drools/degrees and 27 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Apr 17 13:02:02 EDT 2009
Author: dsotty
Date: 2009-04-17 13:02:02 -0400 (Fri, 17 Apr 2009)
New Revision: 26123
Added:
labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/degrees/
labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/degrees/Degree.java
labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/degrees/IDegree.java
labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/degrees/SimpleDegree.java
labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/reteoo/
labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/reteoo/ArgList.java
labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/reteoo/ConstraintKey.java
labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/reteoo/DynamicConstraintKey.java
labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/rule/
labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/spi/
labs/jbossrules/branches/DroolsChance/drools-chance/src/
labs/jbossrules/branches/DroolsChance/drools-chance/src/main/
labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/
labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/
labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/
labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/
labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/Fan.java
labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/FuzzyTest0.java
labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/FuzzyTest1.java
labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/Room.java
labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/SpeedDomain.java
labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/TemperatureDomain.java
labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/Test.java
labs/jbossrules/branches/DroolsChance/drools-chance/src/main/resources/
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/BaseImperfectEvaluator.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ImperfectFactHandle.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ImplicationBetaConstraint.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ModusPonensNode.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/AlwaysPassFilterStrategy.java
Modified:
labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/runtime/rule/WorkingMemoryEntryPoint.java
labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java
labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/DescrBuilderTree.java
labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/DroolsTree.java
labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/BaseDescr.java
labs/jbossrules/branches/DroolsChance/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/BetaConstraints.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/InstanceEqualsConstraint.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/InstanceNotEqualsConstraint.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/NamedEntryPoint.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/TupleStartEqualsConstraint.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/IDegreeCombiner.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleAverage.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDotAnd.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleEquiv.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMaxOr.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMergeStrategy.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMinAnd.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleNot.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/process/command/impl/CommandBasedStatefulKnowledgeSession.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluation.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluationTemplate.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvalRecord.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Evaluation.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/GammaMemory.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/IGammaNode.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectRuleBase.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/builder/ReteooRuleBuilder.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/FuzzyFilterStrategy.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/SimpleFilterStrategy.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/AndConstraint.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/OrConstraint.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/VariableConstraint.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/spi/BetaNodeFieldConstraint.java
labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java
labs/jbossrules/branches/DroolsChance/drools-guvnor/src/main/java/org/drools/guvnor/public/version.txt
labs/jbossrules/branches/DroolsChance/drools-templates/src/test/java/org/drools/template/parser/ExternalSheetListenerTest.java
Log:
Treed Record + Beta Synch + Modus Ponens + Exceptions + Many BugFixes
Added: labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/degrees/Degree.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/degrees/Degree.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/degrees/Degree.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -0,0 +1,8 @@
+package org.drools.degrees;
+
+public abstract class Degree implements IDegree {
+
+ public abstract boolean toBoolean();
+
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/degrees/IDegree.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/degrees/IDegree.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/degrees/IDegree.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -0,0 +1,10 @@
+package org.drools.degrees;
+
+public interface IDegree {
+
+
+ public boolean toBoolean();
+
+ public SimpleDegree getDegree();
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/degrees/SimpleDegree.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/degrees/SimpleDegree.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/degrees/SimpleDegree.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -0,0 +1,65 @@
+package org.drools.degrees;
+
+public class SimpleDegree extends Degree {
+
+ private float value;
+
+ /**
+ * @param degree the degree to set
+ */
+ public void setValue(float value) {
+ this.value = value;
+ }
+
+ /**
+ * @return the degree
+ */
+ public float getValue() {
+ return value;
+ }
+
+
+
+ public boolean equals(Object other) {
+ if (other == null) return false;
+ if (! (other instanceof SimpleDegree)) return false;
+ return this.value == ((SimpleDegree) other).value;
+ }
+
+
+
+ public static IDegree TRUE() {
+ return new SimpleDegree(1);
+ }
+
+ public static IDegree FALSE() {
+ return new SimpleDegree(0);
+ }
+
+ public static IDegree UNKNOWN() {
+ return null;
+ }
+
+
+
+ public SimpleDegree(float degree) {
+ this.value = degree;
+ }
+
+
+
+
+ public boolean toBoolean() {
+ return value > 0.5;
+ }
+
+ public SimpleDegree getDegree() {
+ return this;
+ }
+
+
+ public String toString() {
+ return ""+value;
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/reteoo/ArgList.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/reteoo/ArgList.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/reteoo/ArgList.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -0,0 +1,95 @@
+package org.drools.reteoo;
+
+public class ArgList {
+
+ private Object[] args;
+
+ private boolean isPersistent = false;
+
+ public ArgList(Object[] args) {
+ this.args = args;
+ for (int j = 0; j < args.length; j++)
+ if (args[j] instanceof Jolly)
+ isPersistent = true;
+ }
+
+ public ArgList(Object arg) {
+ this.args = new Object[] {arg};
+ if (arg instanceof Jolly)
+ isPersistent = true;
+ }
+
+ public ArgList(Object[] args, Object arg) {
+ this.args = new Object[args.length+1];
+ for (int j = 0; j < args.length; j++) {
+ if (args[j] instanceof Jolly)
+ isPersistent = true;
+ this.args[j] = args[j];
+ }
+ this.args[args.length] = arg;
+ if (arg instanceof Jolly)
+ isPersistent = true;
+ }
+
+
+
+
+ public Object getObject() {
+ return args[args.length-1];
+ }
+
+
+
+
+
+
+
+ public int hashCode() {
+ int ans = 2131;
+ for (int j = 0; j < args.length; j++)
+ ans ^= args[j].hashCode();
+ return ans;
+ }
+
+ public boolean equals(Object other) {
+ if (other == null) return false;
+ if (other == this) return true;
+
+ ArgList otherArgs = (ArgList) other;
+
+ if (otherArgs != null) {
+ if (this.args.length != otherArgs.args.length)
+ return false;
+
+ boolean ans = true;
+ for (int j = 0; j < this.args.length; j++) {
+ if (this.args[j] instanceof Jolly || otherArgs.args[j] instanceof Jolly) {
+ ans = ans && true;
+ } else {
+ ans = ans && this.args[j].equals(otherArgs.args[j]);
+ }
+ }
+
+ return ans;
+ } else {
+ return false;
+ }
+
+
+ }
+
+ public boolean isPersistent() {
+ return isPersistent;
+ }
+
+
+
+
+ public static class Jolly {
+
+ public Jolly() {
+
+ }
+ }
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/reteoo/ConstraintKey.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/reteoo/ConstraintKey.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/reteoo/ConstraintKey.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -0,0 +1,65 @@
+package org.drools.reteoo;
+
+
+public class ConstraintKey {
+
+ protected String key;
+
+
+ public ConstraintKey(String field, String op, String value) {
+ this.key = op+"("+field+","+value+")";
+ }
+
+ public ConstraintKey(String op,ConstraintKey[] args) {
+ this.key = op+"(";
+ for (int j = 0; j < args.length; j++) {
+ this.key += args[j].toString();
+ if (j != args.length -1)
+ this.key += ",";
+ }
+
+ this.key += ")";
+ }
+
+
+
+
+ public ConstraintKey(String op, String arg) {
+ this.key = op+"("+arg+")";
+ }
+
+ public ConstraintKey(String key) {
+ this.key = key;
+ }
+
+ /**
+ * @return the key
+ */
+ public String toString() {
+ return key;
+ }
+
+
+
+ public boolean equals(Object other) {
+ if (other == null) return false;
+ if (other instanceof ConstraintKey)
+ return this.key.equals(((ConstraintKey) other).key);
+ else
+ return false;
+ }
+
+ public int hashCode() {
+ return key.hashCode();
+ }
+
+// /**
+// * @param constr the constr to set
+// */
+// public void setConstr(Constraint constr) {
+// this.constr = constr;
+// }
+
+
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/reteoo/DynamicConstraintKey.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/reteoo/DynamicConstraintKey.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/reteoo/DynamicConstraintKey.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -0,0 +1,24 @@
+package org.drools.reteoo;
+
+public class DynamicConstraintKey extends ConstraintKey {
+
+ public DynamicConstraintKey(String op) {
+ super(op, "");
+ }
+
+
+ public void addArg(ConstraintKey arg) {
+
+
+ StringBuilder sb = new StringBuilder(this.key.substring(0,this.key.length()-1));
+ if (key.indexOf("()") == -1)
+ sb.append(',');
+ sb.append(arg.key);
+ sb.append(')');
+
+ this.key = sb.toString();
+
+ System.out.println("KEY EXPANDED "+arg+" into "+key);
+ }
+
+}
Modified: labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/runtime/rule/WorkingMemoryEntryPoint.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/runtime/rule/WorkingMemoryEntryPoint.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-api/src/main/java/org/drools/runtime/rule/WorkingMemoryEntryPoint.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -2,6 +2,7 @@
import org.drools.degrees.IDegree;
import org.drools.reteoo.ConstraintKey;
+import org.drools.reteoo.ArgList;
/**
@@ -63,7 +64,7 @@
- void inject(String ruleName, Object object, ConstraintKey key, IDegree degree);
+ void inject(String ruleName, ArgList args, ConstraintKey key, IDegree degree);
Added: labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/Fan.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/Fan.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/Fan.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -0,0 +1,65 @@
+package org.drools.examples;
+
+import org.drools.degrees.IDegree;
+import org.drools.fuzzy.evaluators.IDynamicEvaluable;
+import org.drools.spi.Evaluator;
+
+
+public class Fan implements IDynamicEvaluable {
+
+ private SpeedDomain speed = new SpeedDomain();
+
+ private float price = 100.0f;
+
+ public float getPrice() {
+ return price;
+ }
+
+
+
+
+
+
+
+
+
+
+ public boolean equals(Object other) {
+ return (other != null && other instanceof Fan);
+ }
+
+ public int hashCode() {
+ return 37;
+ }
+
+
+ public Fan() {
+
+ }
+
+ /**
+ * @param speed the speed to set
+ */
+ public void setSpeed(Double speed) {
+ this.speed.setValue(speed);
+ }
+
+ public void setSpeed(String set, IDegree deg) {
+ this.speed.setValue(set,deg);
+ }
+
+
+ /**
+ * @return the speed
+ */
+ public Double getSpeed() {
+ return speed.getValue();
+ }
+
+
+ public Evaluator getPred(String opId) {
+ return speed.getEvaluator(opId);
+ }
+
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/FuzzyTest0.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/FuzzyTest0.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/FuzzyTest0.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -0,0 +1,188 @@
+package org.drools.examples;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.drools.FactHandle;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.RuleBaseConfiguration;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceConfiguration;
+import org.drools.builder.ResourceType;
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.definition.KnowledgePackage;
+import org.drools.event.rule.DebugAgendaEventListener;
+import org.drools.event.rule.DebugWorkingMemoryEventListener;
+import org.drools.io.ResourceFactory;
+import org.drools.logger.KnowledgeRuntimeLogger;
+import org.drools.logger.KnowledgeRuntimeLoggerFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+
+public class FuzzyTest0 {
+
+
+ public static final void main(final String[] args) throws Exception {
+
+
+ Properties props = new Properties();
+ props.load(new FileInputStream("src/fuzzyTest.packagebuilder.conf"));
+ KnowledgeBuilderConfiguration conf = new PackageBuilderConfiguration(props);
+ conf.setProperty("drools.assertBehaviour","equality");
+
+
+
+ final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
+ .newKnowledgeBuilder(conf);
+
+
+
+
+ //EXAMPLE 1
+ kbuilder.add(ResourceFactory.newClassPathResource("FuzzyTest0.drl",
+ FuzzyTest0.class), ResourceType.DRL );
+
+
+ // Check the builder for errors
+ if (kbuilder.hasErrors()) {
+ System.out.println(kbuilder.getErrors().toString());
+ throw new RuntimeException("Unable to compile \"Fyzzytest.drl\".");
+ }
+
+ // get the compiled packages (which are serializable)
+ final Collection<KnowledgePackage> pkgs = kbuilder
+ .getKnowledgePackages();
+
+
+
+ RuleBaseConfiguration rbconf = new RuleBaseConfiguration(props);
+ rbconf.setProperty("drools.assertBehaviour","equality");
+ //rbconf.setProperty("drools.imperfect.factory", "org.drools.degrees.factory.SimpleDegreeFactory");
+
+ // add the packages to a knowledgebase (deploy the knowledge packages).
+ final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(rbconf);
+ kbase.addKnowledgePackages(pkgs);
+
+
+
+ final StatefulKnowledgeSession ksession = kbase
+ .newStatefulKnowledgeSession();
+
+ FileWriter writer = new FileWriter("fuzzyTest0.log");
+ ksession.setGlobal("writer", writer);
+
+ Room r = new Room(27.5f);
+
+ ksession.insert(r);
+ ksession.fireAllRules();
+
+ writer.close();
+
+// ksession.addEventListener(new DebugAgendaEventListener());
+// ksession.addEventListener(new DebugWorkingMemoryEventListener());
+
+ // setup the audit logging
+// KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory
+// .newFileLogger(ksession, "log/helloworld");
+
+//
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// logger.close();
+
+ ksession.dispose();
+ }
+
+ public static class Message {
+ public static final int HELLO = 0;
+ public static final int GOODBYE = 1;
+ public static final int FUFF = 3;
+
+ public String message = "";
+
+ private int status;
+
+ public Message() {
+
+ }
+
+ public String getMessage() {
+ return this.message;
+ }
+
+ public void setMessage(final String message) {
+ this.message = message;
+ }
+
+ public int getStatus() {
+ return this.status;
+ }
+
+ public void setStatus(final int status) {
+ this.status = status;
+ }
+
+ public static Message doSomething(Message message) {
+ return message;
+ }
+
+ public boolean isSomething(String msg, List<Object> list) {
+ list.add(this);
+ return this.message.equals(msg);
+ }
+
+ public boolean equals(Object other) {
+ if (other == null) return false;
+ if (other instanceof Message) {
+ Message o = (Message) other;
+ return o.message.equals(this.message) && o.status == this.status;
+ }
+ return false;
+
+ }
+
+ public int hashCode() {
+ return this.message.hashCode()+this.status;
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/FuzzyTest1.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/FuzzyTest1.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/FuzzyTest1.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -0,0 +1,188 @@
+package org.drools.examples;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.drools.FactHandle;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.RuleBaseConfiguration;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceConfiguration;
+import org.drools.builder.ResourceType;
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.definition.KnowledgePackage;
+import org.drools.event.rule.DebugAgendaEventListener;
+import org.drools.event.rule.DebugWorkingMemoryEventListener;
+import org.drools.io.ResourceFactory;
+import org.drools.logger.KnowledgeRuntimeLogger;
+import org.drools.logger.KnowledgeRuntimeLoggerFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+
+public class FuzzyTest1 {
+
+
+ public static final void main(final String[] args) throws Exception {
+
+
+ Properties props = new Properties();
+ props.load(new FileInputStream("src/fuzzyTest.packagebuilder.conf"));
+ KnowledgeBuilderConfiguration conf = new PackageBuilderConfiguration(props);
+ conf.setProperty("drools.assertBehaviour","equality");
+
+
+
+ final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
+ .newKnowledgeBuilder(conf);
+
+
+
+
+ //EXAMPLE 1
+ kbuilder.add(ResourceFactory.newClassPathResource("FuzzyTest1.drl",
+ FuzzyTest1.class), ResourceType.DRL );
+
+ //EXAMPLE 2
+// kbuilder.add(ResourceFactory.newClassPathResource("FuzzyTest0.drl",
+// FuzzyTest.class), ResourceType.DRL );
+
+ // Check the builder for errors
+ if (kbuilder.hasErrors()) {
+ System.out.println(kbuilder.getErrors().toString());
+ throw new RuntimeException("Unable to compile \"Fyzzytest.drl\".");
+ }
+
+ // get the compiled packages (which are serializable)
+ final Collection<KnowledgePackage> pkgs = kbuilder
+ .getKnowledgePackages();
+
+
+
+ RuleBaseConfiguration rbconf = new RuleBaseConfiguration(props);
+ rbconf.setProperty("drools.assertBehaviour","equality");
+
+ // add the packages to a knowledgebase (deploy the knowledge packages).
+ final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(rbconf);
+ kbase.addKnowledgePackages(pkgs);
+
+
+
+ final StatefulKnowledgeSession ksession = kbase
+ .newStatefulKnowledgeSession();
+
+ FileWriter writer = new FileWriter("fuzzyTest1.log");
+ ksession.setGlobal("writer", writer);
+
+ Room r = new Room(27.5f);
+ Fan f = new Fan();
+
+ ksession.insert(f);
+ ksession.insert(r);
+ ksession.fireAllRules();
+
+
+//
+//
+ writer.write("\n\n\n\nULTIMATE ANSWER : FAN speed is "+f.getSpeed()+"\n\n");
+
+ writer.close();
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// logger.close();
+
+ ksession.dispose();
+ }
+
+ public static class Message {
+ public static final int HELLO = 0;
+ public static final int GOODBYE = 1;
+ public static final int FUFF = 3;
+
+ public String message = "";
+
+ private int status;
+
+ public Message() {
+
+ }
+
+ public String getMessage() {
+ return this.message;
+ }
+
+ public void setMessage(final String message) {
+ this.message = message;
+ }
+
+ public int getStatus() {
+ return this.status;
+ }
+
+ public void setStatus(final int status) {
+ this.status = status;
+ }
+
+ public static Message doSomething(Message message) {
+ return message;
+ }
+
+ public boolean isSomething(String msg, List<Object> list) {
+ list.add(this);
+ return this.message.equals(msg);
+ }
+
+ public boolean equals(Object other) {
+ if (other == null) return false;
+ if (other instanceof Message) {
+ Message o = (Message) other;
+ return o.message.equals(this.message) && o.status == this.status;
+ }
+ return false;
+
+ }
+
+ public int hashCode() {
+ return this.message.hashCode()+this.status;
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/Room.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/Room.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/Room.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -0,0 +1,46 @@
+package org.drools.examples;
+
+import org.drools.fuzzy.RealDomain;
+import org.drools.fuzzy.evaluators.IDynamicEvaluable;
+import org.drools.spi.Evaluator;
+
+
+public class Room implements IDynamicEvaluable{
+
+ private TemperatureDomain temperature = new TemperatureDomain();
+
+
+
+ public Room(double temp) {
+ this.setTemperature(temp);
+ }
+
+
+ /**
+ * @param temperature the temperature to set
+ */
+ public void setTemperature(Double temperature) {
+ this.temperature.setValue(temperature);
+ }
+
+ /**
+ * @return the temperature
+ */
+ public Double getTemperature() {
+ return temperature.getValue();
+ }
+
+
+ public Evaluator getHot() {
+ return temperature.getEvaluator(TemperatureDomain.HOT);
+ }
+
+
+
+ public Evaluator getPred(String opId) {
+ return temperature.getEvaluator(opId);
+ }
+
+
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/SpeedDomain.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/SpeedDomain.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/SpeedDomain.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -0,0 +1,95 @@
+package org.drools.examples;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.EvaluatorDefinition;
+import org.drools.base.evaluators.Operator;
+import org.drools.fuzzy.FuzzySet;
+import org.drools.fuzzy.NumericDomainFuzzySet;
+import org.drools.fuzzy.RealDomain;
+import org.drools.fuzzy.evaluators.FuzzyNumericEvaluator;
+import org.drools.fuzzy.evaluators.membership.TriangleMembership;
+import org.drools.spi.Evaluator;
+
+
+public class SpeedDomain extends RealDomain {
+
+
+ public static final String STOP = "stop";
+ public static final String SLOW = "slow";
+ public static final String FAST = "fast";
+
+
+
+
+ public static final Operator stopOp = Operator.addOperatorToRegistry( SpeedDomain.STOP,false );
+ public static final Operator notStopOp = Operator.addOperatorToRegistry( SpeedDomain.STOP,true );
+
+ public static final Operator slowOp = Operator.addOperatorToRegistry( SpeedDomain.SLOW,false );
+ public static final Operator notSlowOp = Operator.addOperatorToRegistry( SpeedDomain.SLOW,true );
+
+ public static final Operator fastOp = Operator.addOperatorToRegistry( SpeedDomain.FAST,false );
+ public static final Operator notFastOp = Operator.addOperatorToRegistry( SpeedDomain.FAST,true );
+
+ protected static String[] SUPPORTED_IDS = { stopOp.getOperatorString(),
+ slowOp.getOperatorString(),
+ fastOp.getOperatorString(),
+
+ };
+
+
+ public SpeedDomain() {
+ this.addGranule(new NumericDomainFuzzySet(STOP,
+ new FuzzyNumericEvaluator(
+ stopOp,
+ ValueType.DOUBLE_TYPE,
+ false,
+ "org.drools.fuzzy.evaluators.membership.TriangleMembership, 0, 50"
+ )
+ ));
+ this.addGranule(new NumericDomainFuzzySet(SLOW,
+ new FuzzyNumericEvaluator(
+ slowOp,
+ ValueType.DOUBLE_TYPE,
+ false,
+ "org.drools.fuzzy.evaluators.membership.TriangleMembership, 50, 50"
+ )
+ ));
+ this.addGranule(new NumericDomainFuzzySet(FAST,
+ new FuzzyNumericEvaluator(
+ fastOp,
+ ValueType.DOUBLE_TYPE,
+ false,
+ "org.drools.fuzzy.evaluators.membership.TriangleMembership, 100, 50"
+ )
+ ));
+ }
+
+
+ public String[] getEvaluatorIds() {
+ return SUPPORTED_IDS;
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/TemperatureDomain.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/TemperatureDomain.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/TemperatureDomain.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -0,0 +1,107 @@
+package org.drools.examples;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.EvaluatorDefinition;
+import org.drools.base.evaluators.Operator;
+import org.drools.fuzzy.FuzzySet;
+import org.drools.fuzzy.NumericDomainFuzzySet;
+import org.drools.fuzzy.RealDomain;
+import org.drools.fuzzy.evaluators.FuzzyNumericEvaluator;
+import org.drools.fuzzy.evaluators.membership.TriangleMembership;
+import org.drools.spi.Evaluator;
+
+
+public class TemperatureDomain extends RealDomain {
+
+
+ public static final String COLD = "cold";
+ public static final String COOL = "cool";
+ public static final String WARM = "warm";
+ public static final String HOT = "hot";
+
+
+
+ public static final Operator coldOp = Operator.addOperatorToRegistry( TemperatureDomain.COLD,false );
+ public static final Operator notColdOp = Operator.addOperatorToRegistry( TemperatureDomain.COLD,true );
+
+ public static final Operator coolOp = Operator.addOperatorToRegistry( TemperatureDomain.COOL,false );
+ public static final Operator notCoolOp = Operator.addOperatorToRegistry( TemperatureDomain.COOL,true );
+
+ public static final Operator warmOp = Operator.addOperatorToRegistry( TemperatureDomain.WARM,false );
+ public static final Operator notWarmOp = Operator.addOperatorToRegistry( TemperatureDomain.WARM,true );
+
+ public static final Operator hotOp = Operator.addOperatorToRegistry( TemperatureDomain.HOT,false );
+ public static final Operator notHotOp = Operator.addOperatorToRegistry( TemperatureDomain.HOT,true );
+
+ protected static String[] SUPPORTED_IDS = { coldOp.getOperatorString(),
+ coolOp.getOperatorString(),
+ warmOp.getOperatorString(),
+ hotOp.getOperatorString(),
+ };
+
+
+ public TemperatureDomain() {
+ this.addGranule(new NumericDomainFuzzySet(COLD,
+ new FuzzyNumericEvaluator(
+ coldOp,
+ ValueType.DOUBLE_TYPE,
+ false,
+ "org.drools.fuzzy.evaluators.membership.TriangleMembership, 0, 10"
+ )
+ ));
+ this.addGranule(new NumericDomainFuzzySet(COOL,
+ new FuzzyNumericEvaluator(
+ coolOp,
+ ValueType.DOUBLE_TYPE,
+ false,
+ "org.drools.fuzzy.evaluators.membership.TriangleMembership, 10, 10"
+ )
+ ));
+ this.addGranule(new NumericDomainFuzzySet(WARM,
+ new FuzzyNumericEvaluator(
+ warmOp,
+ ValueType.DOUBLE_TYPE,
+ false,
+ "org.drools.fuzzy.evaluators.membership.TriangleMembership, 20, 10"
+ )
+ ));
+ this.addGranule(new NumericDomainFuzzySet(HOT,
+ new FuzzyNumericEvaluator(
+ hotOp,
+ ValueType.DOUBLE_TYPE,
+ false,
+ "org.drools.fuzzy.evaluators.membership.TriangleMembership, 30, 10"
+ )
+ ));
+
+ }
+
+
+ public String[] getEvaluatorIds() {
+ return SUPPORTED_IDS;
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/Test.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/Test.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-chance/src/main/java/org/drools/examples/Test.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -0,0 +1,353 @@
+package org.drools.examples;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.drools.FactHandle;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseConfiguration;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.RuleBaseConfiguration;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.definition.KnowledgePackage;
+import org.drools.event.rule.DebugAgendaEventListener;
+import org.drools.event.rule.DebugWorkingMemoryEventListener;
+import org.drools.io.ResourceFactory;
+import org.drools.logger.KnowledgeRuntimeLogger;
+import org.drools.logger.KnowledgeRuntimeLoggerFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+
+public class Test {
+
+ public static final void main(final String[] args) throws Exception {
+
+
+
+ // this will parse and compile in one step
+
+// kbuilder.add(ResourceFactory.newFileResource(new File("/home/davide/Projects/Eclipse_Drools/Test/target/classes/org/drools/examples/HelloWorld.drl")), ResourceType.DRL);
+
+ Properties props = new Properties();
+ props.load(new FileInputStream("src/test.packagebuilder.conf"));
+ KnowledgeBuilderConfiguration conf = new PackageBuilderConfiguration(props);
+ conf.setProperty("drools.assertBehaviour","equality");
+
+ final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
+ .newKnowledgeBuilder(conf);
+
+
+ kbuilder.add(ResourceFactory.newClassPathResource("HelloWorld.drl",
+ Test.class), ResourceType.DRL);
+
+ // Check the builder for errors
+ if (kbuilder.hasErrors()) {
+ System.out.println(kbuilder.getErrors().toString());
+ throw new RuntimeException("Unable to compile \"HelloWorld.drl\".");
+ }
+
+ // get the compiled packages (which are serializable)
+ final Collection<KnowledgePackage> pkgs = kbuilder
+ .getKnowledgePackages();
+
+
+ RuleBaseConfiguration rbconf = new RuleBaseConfiguration(props);
+ rbconf.setProperty("drools.assertBehaviour","equality");
+ // add the packages to a knowledgebase (deploy the knowledge packages).
+ final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(rbconf);
+ kbase.addKnowledgePackages(pkgs);
+
+ final StatefulKnowledgeSession ksession = kbase
+ .newStatefulKnowledgeSession();
+
+//
+ FileWriter writer = new FileWriter("test.log");
+ ksession.setGlobal("writer", writer);
+
+
+ //Start the session
+ // Will say something about next message
+ ksession.insert(new Trigger());
+
+ // Message is empty, only has status
+ // Message content comes from previous rule
+ final Message message = new Message();
+ message.setStatus(Message.HELLO);
+
+ ksession.insert(message);
+ ksession.fireAllRules();
+
+ // book has no a-priori known owner
+ // Info on BETA constraint comes from previous rule
+ Person pers = new Person("davide",27);
+ Book book = new Book("Drools Manual",null);
+
+ ksession.insert(pers);
+ ksession.insert(book);
+ ksession.fireAllRules();
+//
+
+ //NO WAY to do these exercises
+ Exercise x1 = new Exercise("Maths");
+ ksession.insert(x1);
+ ksession.fireAllRules();
+
+ Exercise x2 = new Exercise("Geometry");
+ ksession.insert(x2);
+ ksession.fireAllRules();
+
+ // THIS one is an EXCEPTION
+ Exercise x3 = new Exercise("Rule Programming");
+ ksession.insert(x3);
+ ksession.fireAllRules();
+
+
+ writer.close();
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// logger.close();
+
+ ksession.dispose();
+ }
+
+ public static class Message {
+ public static final int HELLO = 0;
+ public static final int GOODBYE = 1;
+ public static final int IDK = 3;
+
+ public String message = "";
+
+ private int status;
+
+ public Message() {
+
+ }
+
+ public Message(int status) {
+ this.status = status;
+ }
+
+ public String getMessage() {
+ return this.message;
+ }
+
+ public void setMessage(final String message) {
+ this.message = message;
+ }
+
+ public int getStatus() {
+ return this.status;
+ }
+
+ public void setStatus(final int status) {
+ this.status = status;
+ }
+
+ public static Message doSomething(Message message) {
+ return message;
+ }
+
+ public boolean isSomething(String msg, List<Object> list) {
+ list.add(this);
+ return this.message.equals(msg);
+ }
+
+ public boolean equals(Object other) {
+ if (other == null) return false;
+ if (other instanceof Message) {
+ Message o = (Message) other;
+ //return o.message.equals(this.message) && o.status == this.status;
+ return o.status == this.status;
+ }
+ return false;
+
+ }
+
+ public int hashCode() {
+ //return this.message.hashCode()+this.status;
+ return this.status;
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+ public static class Person {
+
+ private String name;
+ private int age;
+ /**
+ * @param name the name to set
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+ /**
+ * @param age the age to set
+ */
+ public void setAge(int age) {
+ this.age = age;
+ }
+ /**
+ * @return the age
+ */
+ public int getAge() {
+ return age;
+ }
+
+ public Person(String name, int age) {
+ this.name = name;
+ this.age = age;
+ }
+
+ public boolean equals(Object other) {
+ if (other == null) return false;
+ Person p = (Person) other;
+ if (p == null) return false;
+ return this.name.equals(p.name);
+ }
+
+ public int hashCode() {
+ return name.hashCode();
+ }
+
+
+
+ }
+
+
+
+ public static class Book {
+
+ private String title;
+ private Person owner;
+
+
+ public Book() {
+ }
+
+
+ public Book(String t, Person p) {
+ setTitle(t);
+ setOwner(p);
+ }
+
+ /**
+ * @param title the title to set
+ */
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ /**
+ * @return the title
+ */
+ public String getTitle() {
+ return title;
+ }
+
+ /**
+ * @param owner the owner to set
+ */
+ public void setOwner(Person owner) {
+ this.owner = owner;
+ }
+
+ /**
+ * @return the owner
+ */
+ public Person getOwner() {
+ return owner;
+ }
+
+
+ public boolean equals(Object other) {
+ if (other == null) return false;
+ Book b = (Book) other;
+ if (b == null) return false;
+ return this.title.equals(b.title);
+ }
+
+ public int hashCode() {
+ return title.hashCode();
+ }
+
+
+
+
+
+ }
+
+ public static class Trigger {
+
+ }
+
+
+ public static class Exercise {
+
+ private String topic;
+ public String getTopic() {
+ return topic;
+ }
+
+ public Exercise(String top) {
+ topic = top;
+ }
+
+ public int hashCode() {
+ return topic.hashCode();
+
+ }
+
+
+
+ public boolean equals(Object other) {
+ if (other == null) return false;
+ if (other == this) return true;
+
+
+ if (other instanceof Exercise)
+ return getTopic().equals(((Exercise) other).getTopic());
+ else
+ return false;
+ }
+
+ }
+
+}
Modified: labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -236,6 +236,12 @@
parser.enableEditorInterface();
}
DroolsTree resultTree = (DroolsTree) parser.compilation_unit().getTree();
+
+ System.out.println(this.getClass().toString() + " HACKED TO GET DROOLSTREE");
+ //System.out.println((((DroolsTree) resultTree.getChild(9)).toIndentedStringTree()));
+//
+
+
editorSentences = parser.getEditorInterface();
makeErrorList( parser );
if ( isEditor || !this.hasErrors() ) {
Modified: labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/compiler/PackageBuilder.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -1564,19 +1564,28 @@
int idx = cons.indexOf("inject");
while (idx != -1) {
+
int endIdx = cons.indexOf(';', idx);
+ if (idx < 10 || (cons.charAt(idx-8) != '/' && cons.charAt(idx-9) != '/')) {
+
- StringTokenizer tok = new StringTokenizer(cons.substring(idx,endIdx),",)");
- tok.nextToken();
- ConstraintKey ck = new ConstraintKey(tok.nextToken().replaceAll("\"", ""),tok.nextToken().replaceAll("\"", ""),tok.nextToken().replaceAll("\"", ""));
+ StringTokenizer tok = new StringTokenizer(cons.substring(idx,endIdx),",)");
+ tok.nextToken();
+ ConstraintKey ck = null;
+ if (tok.countTokens() >= 3)
+ ck = new ConstraintKey(tok.nextToken().replaceAll("\"", ""),
+ tok.nextToken().replaceAll("\"", ""),
+ tok.nextToken().replaceAll("\"", ""));
+ else
+ ck = new ConstraintKey(tok.nextToken().replaceAll("\"", ""));
- Set<String> deps = ans.get(ck);
- if (deps == null) {
- deps = new HashSet<String>();
- ans.put(ck,deps);
+ Set<String> deps = ans.get(ck);
+ if (deps == null) {
+ deps = new HashSet<String>();
+ ans.put(ck,deps);
+ }
+ deps.add(r.getName());
}
- deps.add(r.getName());
-
idx = cons.indexOf("inject",endIdx);
}
Modified: labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/DescrBuilderTree.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/DescrBuilderTree.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/DescrBuilderTree.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -385,6 +385,8 @@
// $ANTLR start "statement"
// src/main/resources/org/drools/lang/DescrBuilderTree.g:66:1: statement : (a= rule_attribute | fi= function_import_statement | is= import_statement | gl= global | fn= function | tp= template | rl= rule | qr= query | td= type_declaration );
public final void statement() throws RecognitionException {
+
+
AttributeDescr a = null;
FunctionImportDescr fi = null;
@@ -548,7 +550,12 @@
// src/main/resources/org/drools/lang/DescrBuilderTree.g:79:4: rl= rule
{
pushFollow(FOLLOW_rule_in_statement185);
+
+ System.out.println(this.getClass()+" HACKED statement() calls rule ");
rl=rule();
+
+
+ System.out.println(this.getClass()+".statement() "+rl.ruleDescr.toString());
state._fsp--;
Modified: labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/DroolsTree.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/DroolsTree.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/DroolsTree.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -100,4 +100,40 @@
public void setEditorElementType(DroolsEditorType editorElementType) {
this.editorElementType = editorElementType;
}
+
+
+
+ public String toIndentedStringTree() {
+ String ts = new String(this.toStringTree());
+
+// System.out.println(this.toStringTree().hashCode());
+// System.out.println(ts.hashCode());
+// System.out.println(ts == this.toStringTree());
+
+ ts = ts.substring(0, ts.indexOf("then"));
+ StringBuilder sb = new StringBuilder();
+ int dep = 0;
+ for (int j = 0; j < ts.length(); j++) {
+ if (ts.charAt(j) == '(') {
+ dep++;
+
+ sb.append("\n");
+ for (int k = 0; k < dep; k++)
+ sb.append("\t");
+ sb.append(ts.charAt(j));
+
+ } else
+ if (ts.charAt(j) == ')') {
+ sb.append("\n");
+ for (int k = 0; k < dep; k++)
+ sb.append("\t");
+ sb.append(ts.charAt(j));
+ dep--;
+ } else {
+ sb.append(ts.charAt(j));
+ }
+ }
+
+ return sb.toString();
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/BaseDescr.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/BaseDescr.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/src/main/java/org/drools/lang/descr/BaseDescr.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -36,7 +36,19 @@
private int endLine = -1;
private int endColumn = -1;
private String text = "";
-
+ private int id = -1;
+
+
+
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int newId) {
+ id = newId;
+ }
+
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
startCharacter = in.readInt();
endCharacter = in.readInt();
Modified: labs/jbossrules/branches/DroolsChance/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -41,6 +41,7 @@
import org.drools.process.instance.WorkItemManager;
import org.drools.process.instance.event.SignalManager;
import org.drools.process.instance.timer.TimerManager;
+import org.drools.reteoo.ArgList;
import org.drools.reteoo.ConstraintKey;
import org.drools.reteoo.LIANodePropagation;
import org.drools.reteoo.PartitionTaskManager;
@@ -544,7 +545,7 @@
}
- public void inject(String premise, Object object,
+ public void inject(String premise, ArgList args,
ConstraintKey key, IDegree degree) {
// TODO Auto-generated method stub
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -133,6 +133,8 @@
private String executorService;
private String consequenceExceptionHandler;
private String ruleBaseUpdateHandler;
+
+
private EventProcessingMode eventProcessingMode;
@@ -151,6 +153,8 @@
private ProcessInstanceFactoryRegistry processInstanceFactoryRegistry;
private NodeInstanceFactoryRegistry processNodeInstanceFactoryRegistry;
+ private String imperfectFactoryName;
+
private transient ClassLoader classLoader;
public void writeExternal(ObjectOutput out) throws IOException {
@@ -177,6 +181,7 @@
out.writeBoolean( multithread );
out.writeInt( maxThreads );
out.writeObject( eventProcessingMode );
+ out.writeObject(imperfectFactoryName);
}
public void readExternal(ObjectInput in) throws IOException,
@@ -204,6 +209,7 @@
multithread = in.readBoolean();
maxThreads = in.readInt();
eventProcessingMode = (EventProcessingMode) in.readObject();
+ imperfectFactoryName = (String) in.readObject();
}
/**
@@ -342,12 +348,22 @@
return Integer.toString( getMaxThreads() );
} else if ( name.equals( "drools.eventProcessingMode" ) ) {
return getEventProcessingMode().toExternalForm();
+ } else if ( name.equals( "drools.imperfect.factory" ) ) {
+ return getFactoryName();
}
return null;
}
- /**
+ private String getFactoryName() {
+ return imperfectFactoryName;
+ }
+
+ private void setFactoryName(String fName) {
+ imperfectFactoryName = fName;
+ }
+
+ /**
* A constructor that sets the classloader to be used as the parent classloader
* of this rule base classloaders, and the properties to be used
* as base configuration options
@@ -435,6 +451,8 @@
"-1" ) ) );
setEventProcessingMode( EventProcessingMode.determineAssertBehaviour( this.chainedProperties.getProperty( "drools.eventProcessingMode",
"cloud" ) ) );
+
+ setFactoryName(this.chainedProperties.getProperty("drools.imperfect.factory", "org.drools.degrees.factory.SimpleDegreeFactory"));
}
/**
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/BaseImperfectEvaluator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/BaseImperfectEvaluator.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/BaseImperfectEvaluator.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -0,0 +1,47 @@
+/**
+ *
+ */
+package org.drools.base;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.WorkingMemory;
+import org.drools.base.evaluators.Operator;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.degrees.IDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.reteoo.ImperfectRuleBase;
+import org.drools.rule.VariableRestriction.VariableContextEntry;
+import org.drools.spi.FieldValue;
+import org.drools.spi.InternalReadAccessor;
+
+
+/**
+ * BaseUncertainEvaluator implements the uncertain evaluators
+ * by calling the crisp ones and then converting the boolean
+ * result into the used truth degree
+ *
+ * @author sotty
+ *
+ */
+public abstract class BaseImperfectEvaluator extends BaseEvaluator {
+
+
+ public BaseImperfectEvaluator(final ValueType type, final Operator operator) {
+ super(type,operator);
+ }
+
+
+ protected IDegreeFactory getFactory(WorkingMemory workingMemory) {
+ ImperfectRuleBase irb = (ImperfectRuleBase) workingMemory.getRuleBase();
+ if (irb == null)
+ throw new RuntimeDroolsException(this.getClass()+ " Abstract BaseUncertainEvaluator : trying to use uncertain evaluators with crisp rule base");
+ return irb.getDegreeFactory();
+ }
+
+
+
+
+
+
+
+}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -27,6 +27,7 @@
import org.drools.common.InternalWorkingMemoryActions;
import org.drools.degrees.IDegree;
import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.reteoo.ArgList;
import org.drools.reteoo.ConstraintKey;
import org.drools.reteoo.Evaluation;
import org.drools.reteoo.ReteooStatefulSession;
@@ -289,14 +290,43 @@
this.consequenceDegree = deg;
}
- public void inject(Object object, String field, String op, String value) {
+ public void inject(ArgList args, String field, String op, String value) {
System.out.println(this.getClass()+" : KH injects a rule for degree "+getConsequenceDegree());
- workingMemory.inject(this.getRule().getName(), object, new ConstraintKey(field,op,value),getConsequenceDegree());
+ workingMemory.inject(this.getRule().getName(),
+ args,
+ new ConstraintKey(field,op,value),
+ getConsequenceDegree());
}
+
+
public IDegree getConsequenceDegree() {
return consequenceDegree;
}
+
+ public void inject(Object arg, String field, String op, String value) {
+ this.inject(new ArgList(arg), field, op, value);
+ }
+
+ public void inject(Object[] args, String field, String op, String value) {
+ this.inject(new ArgList(args), field, op, value);
+
+ }
+
+ public void inject(Object arg, String key) {
+ workingMemory.inject(this.getRule().getName(),
+ new ArgList(arg),
+ new ConstraintKey(key),
+ getConsequenceDegree());
+
+ }
+
+ public void inject(Object[] args, String key) {
+ workingMemory.inject(this.getRule().getName(),
+ new ArgList(args),
+ new ConstraintKey(key),
+ getConsequenceDegree());
+ }
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -23,6 +23,7 @@
import org.drools.common.InternalWorkingMemoryActions;
import org.drools.degrees.IDegree;
import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.reteoo.ArgList;
import org.drools.reteoo.ConstraintKey;
import org.drools.reteoo.Evaluation;
import org.drools.reteoo.ReteooStatefulSession;
@@ -211,7 +212,7 @@
- public void inject(Object object, String field, String op, String value) {
+ public void inject(ArgList args, String field, String op, String value) {
// TODO Auto-generated method stub
}
@@ -225,4 +226,23 @@
// TODO Auto-generated method stub
}
+
+ public void inject(Object arg, String field, String op, String value) {
+ this.inject(new ArgList(arg), field, op, value);
+ }
+
+ public void inject(Object[] args, String field, String op, String value) {
+ this.inject(new ArgList(args), field, op, value);
+
+ }
+
+ public void inject(Object arg, String key) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void inject(Object[] args, String key) {
+ // TODO Auto-generated method stub
+
+ }
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -74,6 +74,7 @@
import org.drools.process.instance.context.variable.VariableScopeInstance;
import org.drools.process.instance.event.SignalManager;
import org.drools.process.instance.timer.TimerManager;
+import org.drools.reteoo.ArgList;
import org.drools.reteoo.ConstraintKey;
import org.drools.reteoo.EntryPointNode;
import org.drools.reteoo.Evaluation;
@@ -1945,8 +1946,8 @@
- public void inject(String ruleName, Object object, ConstraintKey key, IDegree degree) {
- Object factHandle = this.getObjectStore().getHandleForObject(object);
+ public void inject(String ruleName, ArgList args, ConstraintKey key, IDegree degree) {
+ Object factHandle = this.getObjectStore().getHandleForObject(args.getObject());
IGammaNode node = this.ruleBase.getRete().getNode(key);
@@ -1954,7 +1955,7 @@
//Object does not exist, YET
//Prepare eval to be collected...
if (node != null)
- node.storeEvaluation(object, prepareEval(ruleName,object,key,degree,node));
+ node.storeEvaluation(args, prepareEval(ruleName,args,key,degree,node));
} else {
if (factHandle instanceof ImperfectFactHandle) {
@@ -1965,18 +1966,21 @@
if (eval == null && node != null) {
// Object exsits, but its prop hasn't been evaluated yet
// Prepare eval to be collected at the node...
- node.storeEvaluation(object,prepareEval(ruleName,object,key,degree,node));
+ node.storeEvaluation(args,prepareEval(ruleName,args,key,degree,node));
- } else {
+ } else if (eval != null) {
// Object exists and has already been eval'ed
// Add new degree to evaluation
- //TODO: 1 should be confidence!
+ //TODO: 1 should be confidence!
eval.addDegree(ruleName, degree,1);
//Notification is implicit in the record...
+ } else if (node == null) {
+ System.out.println("Warning - injected USELESS eval");
+ //throw new RuntimeDroolsException("Injected useless fact - check the key "+key);
}
} else {
- throw new RuntimeException("Tried to inject a crisp fact!!");
+ throw new RuntimeDroolsException("Tried to inject a crisp fact!!");
}
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/BetaConstraints.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/BetaConstraints.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/BetaConstraints.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -1,13 +1,20 @@
package org.drools.common;
import java.io.Externalizable;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
import org.drools.RuleBaseConfiguration;
import org.drools.degrees.IDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.reteoo.BetaMemory;
import org.drools.reteoo.ConstraintKey;
+import org.drools.reteoo.Evaluation;
+import org.drools.reteoo.EvaluationTemplate;
import org.drools.reteoo.LeftTuple;
+import org.drools.reteoo.SingleEvaluationTemplate;
import org.drools.rule.ContextEntry;
import org.drools.util.LinkedList;
@@ -31,10 +38,10 @@
public boolean isAllowedCachedRight(ContextEntry[] context,
LeftTuple tuple);
- public IDegree isSatisfiedCachedLeft(ContextEntry[] context,
+ public Evaluation[] isSatisfiedCachedLeft(ContextEntry[] context,
InternalFactHandle handle, IDegreeFactory factory);
- public IDegree isSatisfiedCachedRight(ContextEntry[] context,
+ public Evaluation[] isSatisfiedCachedRight(ContextEntry[] context,
LeftTuple tuple, IDegreeFactory factory);
public LinkedList getConstraints();
@@ -51,6 +58,12 @@
public void resetFactHandle(final ContextEntry[] context);
- public ConstraintKey getConstraintKey();
+ public ConstraintKey[] getConstraintKeys();
+
+ public EvaluationTemplate[] buildEvaluationTemplates(int id, Map<ConstraintKey, Set<String>> dependencies, IDegreeFactory factory);
+ public Collection<ConstraintKey> getAllConstraintKeys();
+
+ public EvaluationTemplate getEvalTemplate(ConstraintKey key);
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/DefaultBetaConstraints.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -20,8 +20,13 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
import org.drools.RuleBaseConfiguration;
import org.drools.base.evaluators.Operator;
@@ -29,9 +34,12 @@
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.reteoo.BetaMemory;
import org.drools.reteoo.ConstraintKey;
+import org.drools.reteoo.Evaluation;
+import org.drools.reteoo.EvaluationTemplate;
import org.drools.reteoo.LeftTuple;
import org.drools.reteoo.LeftTupleMemory;
import org.drools.reteoo.RightTupleMemory;
+import org.drools.reteoo.SingleEvaluationTemplate;
import org.drools.rule.ContextEntry;
import org.drools.rule.VariableConstraint;
import org.drools.spi.BetaNodeFieldConstraint;
@@ -57,6 +65,8 @@
private LinkedList constraints;
private int indexed;
+
+ private EvaluationTemplate[] template;
public DefaultBetaConstraints() {
@@ -192,22 +202,23 @@
return true;
}
- public IDegree isSatisfiedCachedLeft(ContextEntry[] context,
+ public Evaluation[] isSatisfiedCachedLeft(ContextEntry[] context,
InternalFactHandle handle, IDegreeFactory factory) {
// skip the indexed constraints
LinkedListEntry entry = (LinkedListEntry) findNode( this.indexed+1 );
- java.util.LinkedList<IDegree> degs = new java.util.LinkedList<IDegree>();
+
+ Evaluation[] ans = new Evaluation[constraints.size()];
- int i = 1;
+ int i = 0;
while ( entry != null ) {
- IDegree deg = ((BetaNodeFieldConstraint) entry.getObject()).isSatisfiedCachedLeft( context[this.indexed + i],
- handle, factory );
- degs.add(deg);
+ ans[i] = ((BetaNodeFieldConstraint) entry.getObject()).isSatisfiedCachedLeft( context[this.indexed + i],
+ handle, factory );
entry = (LinkedListEntry) entry.getNext();
i++;
}
- return factory.getAndOperator().eval(degs);
+
+ return ans;
}
@@ -232,23 +243,26 @@
return true;
}
- public IDegree isSatisfiedCachedRight(ContextEntry[] context,
+ public Evaluation[] isSatisfiedCachedRight(ContextEntry[] context,
LeftTuple tuple, IDegreeFactory factory) {
+
LinkedListEntry entry = (LinkedListEntry) findNode( this.indexed+1 );
- java.util.LinkedList<IDegree> degs = new java.util.LinkedList<IDegree>();
- int i = 1;
+ Evaluation[] ans = new Evaluation[constraints.size()];
+
+ int i = 0;
while ( entry != null ) {
- IDegree deg = ((BetaNodeFieldConstraint) entry.getObject()).isSatisfiedCachedRight(tuple,
- context[this.indexed + i],
- factory );
- degs.add(deg);
+ ans[i] = ((BetaNodeFieldConstraint) entry.getObject()).isSatisfiedCachedRight(tuple,
+ context[this.indexed + i],
+ factory );
entry = (LinkedListEntry) entry.getNext();
i++;
}
- return factory.getAndOperator().eval(degs);
- }
+
+ return ans;
+
+ }
public boolean isIndexed() {
// false if -1
@@ -348,10 +362,10 @@
}
- private ConstraintKey singletonKey = null;
+ private ConstraintKey[] singletonKeys = null;
- public ConstraintKey getConstraintKey() {
- if (singletonKey == null) {
+ public ConstraintKey[] getConstraintKeys() {
+ if (singletonKeys == null) {
int N = this.constraints.size();
ConstraintKey[] cks = new ConstraintKey[N];
LinkedListEntry entry = (LinkedListEntry) this.constraints.getFirst();
@@ -360,10 +374,46 @@
cks[j++] = ((BetaNodeFieldConstraint) entry.getObject()).getConstraintKey();
}
- singletonKey = new ConstraintKey("and",cks);
+ singletonKeys = cks;
}
- return singletonKey;
+ return singletonKeys;
}
+ public EvaluationTemplate[] buildEvaluationTemplates(int id, Map<ConstraintKey, Set<String>> dependencies, IDegreeFactory factory) {
+ int N = this.constraints.size();
+ org.drools.util.Iterator iter = this.constraints.iterator();
+ template = new EvaluationTemplate[N];
+
+ for (int j = 0; j < N; j++) {
+ template[j] = ((BetaNodeFieldConstraint) iter.next()).buildEvaluationTemplate(id, dependencies, factory);
+ }
+ return template;
+ }
+
+ public Collection<ConstraintKey> getAllConstraintKeys() {
+ Collection<ConstraintKey> ans = new HashSet<ConstraintKey>();
+
+ org.drools.util.Iterator iter = this.constraints.iterator();
+ for (int j = 0; j < this.constraints.size(); j++) {
+ ans.addAll(((BetaConstraints) iter.next()).getAllConstraintKeys());
+ }
+
+ return ans;
+ }
+
+ public EvaluationTemplate getEvalTemplate(ConstraintKey key) {
+ EvaluationTemplate ans;
+
+ org.drools.util.Iterator iter = this.constraints.iterator();
+ for (int j = 0; j < this.constraints.size(); j++) {
+ ans = ((BetaConstraints) iter.next()).getEvalTemplate(key);
+ if (ans != null)
+ return ans;
+ }
+
+ return null;
+ }
+
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/DoubleBetaConstraints.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -20,7 +20,12 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
import org.drools.RuleBaseConfiguration;
import org.drools.base.evaluators.Operator;
@@ -28,9 +33,12 @@
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.reteoo.BetaMemory;
import org.drools.reteoo.ConstraintKey;
+import org.drools.reteoo.Evaluation;
+import org.drools.reteoo.EvaluationTemplate;
import org.drools.reteoo.LeftTuple;
import org.drools.reteoo.LeftTupleMemory;
import org.drools.reteoo.RightTupleMemory;
+import org.drools.reteoo.SingleEvaluationTemplate;
import org.drools.rule.ContextEntry;
import org.drools.rule.VariableConstraint;
import org.drools.spi.BetaNodeFieldConstraint;
@@ -56,6 +64,10 @@
private boolean indexed0;
private boolean indexed1;
+
+
+
+ private EvaluationTemplate[] template;
public DoubleBetaConstraints() {
@@ -176,24 +188,22 @@
handle ));
}
- public IDegree isSatisfiedCachedLeft(ContextEntry[] context,
+ public Evaluation[] isSatisfiedCachedLeft(ContextEntry[] context,
InternalFactHandle handle, IDegreeFactory factory) {
- IDegree[] degs = new IDegree[2];
- degs[0] = this.constraint0.isSatisfiedCachedLeft(context[0], handle, factory);
- degs[1] = this.constraint1.isSatisfiedCachedLeft(context[1], handle, factory);
-
- return factory.getAndOperator().eval(degs);
+ return new Evaluation[] {
+ this.constraint0.isSatisfiedCachedLeft(context[0], handle, factory),
+ this.constraint1.isSatisfiedCachedLeft(context[1], handle, factory)
+ };
}
-
-
- public IDegree isSatisfiedCachedRight(ContextEntry[] context,
+
+ public Evaluation[] isSatisfiedCachedRight(ContextEntry[] context,
LeftTuple tuple, IDegreeFactory factory) {
- IDegree[] degs = new IDegree[2];
- degs[0] = this.constraint0.isSatisfiedCachedRight(tuple, context[0], factory);
- degs[1] = this.constraint0.isSatisfiedCachedRight(tuple, context[1], factory);
- return factory.getAndOperator().eval(degs);
+ return new Evaluation[] {
+ this.constraint0.isSatisfiedCachedRight(tuple, context[0], factory),
+ this.constraint1.isSatisfiedCachedRight(tuple, context[1], factory)
+ };
}
@@ -325,14 +335,41 @@
}
+ private ConstraintKey[] singletonKeys = null;
- private ConstraintKey singletonKey = null;
-
- public ConstraintKey getConstraintKey() {
- if (singletonKey == null) {
- singletonKey = new ConstraintKey("and",new ConstraintKey[] {constraint0.getConstraintKey(),constraint1.getConstraintKey()});
+ public ConstraintKey[] getConstraintKeys() {
+ if (singletonKeys == null) {
+ singletonKeys = new ConstraintKey[2];
+ singletonKeys[0] = constraint0.getConstraintKey();
+ singletonKeys[1] = constraint1.getConstraintKey();
+
}
- return singletonKey;
+ return singletonKeys;
}
+ public EvaluationTemplate[] buildEvaluationTemplates(int id, Map<ConstraintKey, Set<String>> dependencies, IDegreeFactory factory) {
+ template = new EvaluationTemplate[2];
+
+ template[0] = constraint0.buildEvaluationTemplate(id, dependencies, factory);
+ template[1] = constraint1.buildEvaluationTemplate(id, dependencies, factory);
+
+ return template;
+ }
+
+
+ public Collection<ConstraintKey> getAllConstraintKeys() {
+ Collection<ConstraintKey> ans = new HashSet<ConstraintKey>();
+ ans.addAll(constraint0.getAllConstraintKeys());
+ ans.addAll(constraint1.getAllConstraintKeys());
+ return ans;
+ }
+
+ public EvaluationTemplate getEvalTemplate(ConstraintKey key) {
+ EvaluationTemplate ans;
+ ans = constraint0.getEvalTemplate(key);
+ if (ans == null)
+ ans = constraint1.getEvalTemplate(key);
+ return ans;
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/EmptyBetaConstraints.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -19,13 +19,20 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
import org.drools.RuleBaseConfiguration;
import org.drools.degrees.IDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.reteoo.BetaMemory;
import org.drools.reteoo.ConstraintKey;
+import org.drools.reteoo.Evaluation;
+import org.drools.reteoo.EvaluationTemplate;
import org.drools.reteoo.LeftTuple;
+import org.drools.reteoo.SingleEvaluationTemplate;
import org.drools.rule.ContextEntry;
import org.drools.util.LeftTupleList;
import org.drools.util.LinkedList;
@@ -146,23 +153,33 @@
return EMPTY;
}
- public IDegree isSatisfiedCachedLeft(ContextEntry[] context,
+ public Evaluation[] isSatisfiedCachedLeft(ContextEntry[] context,
InternalFactHandle handle, IDegreeFactory factory) {
- return factory.True();
+ return null;
}
- public IDegree isSatisfiedCachedRight(ContextEntry[] context,
+ public Evaluation[] isSatisfiedCachedRight(ContextEntry[] context,
LeftTuple tuple, IDegreeFactory factory) {
- return factory.True();
+ return null;
}
- private ConstraintKey singletonKey = null;
+ private ConstraintKey[] singletonKeys = null;
- public ConstraintKey getConstraintKey() {
- if (singletonKey == null) {
- singletonKey = new ConstraintKey("and",new ConstraintKey[] {});
- }
- return singletonKey;
+ public ConstraintKey[] getConstraintKeys() {
+ return singletonKeys;
}
+ public EvaluationTemplate[] buildEvaluationTemplates(int id, Map<ConstraintKey, Set<String>> dependencies, IDegreeFactory factory) {
+
+ return null;
+ }
+
+ public Collection<ConstraintKey> getAllConstraintKeys() {
+ return Collections.emptySet();
+ }
+
+ public EvaluationTemplate getEvalTemplate(ConstraintKey key) {
+ return null;
+ }
+
}
\ No newline at end of file
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ImperfectFactHandle.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ImperfectFactHandle.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ImperfectFactHandle.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -0,0 +1,61 @@
+package org.drools.common;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.reteoo.ConstraintKey;
+import org.drools.reteoo.Evaluation;
+
+public class ImperfectFactHandle extends DefaultFactHandle {
+
+
+ private Map<ConstraintKey, Evaluation> properties = null;
+
+ public Evaluation getPropertyDegree(ConstraintKey key) {
+ return properties.get(key);
+ }
+
+ public void addPropertyDegree(Evaluation eval) {
+ properties.put(eval.getKey(),eval);
+ }
+
+ public void addPropertyDegrees(Collection<Evaluation> storedEvals) {
+ for (Evaluation eval : storedEvals)
+ addPropertyDegree(eval);
+
+ }
+
+
+
+
+
+ public ImperfectFactHandle() {
+ properties = new HashMap<ConstraintKey, Evaluation>();
+ }
+
+ public ImperfectFactHandle(final int id,
+ final Object object) {
+ this( id,
+ object,
+ id );
+ properties = new HashMap<ConstraintKey, Evaluation>();
+ }
+
+ /**
+ * Construct.
+ *
+ * @param id
+ * Handle id.
+ */
+ public ImperfectFactHandle(final int id,
+ final Object object,
+ final long recency) {
+ super(id,object,recency);
+ properties = new HashMap<ConstraintKey, Evaluation>();
+ System.out.println(this.getClass().getName() + ": hacked fact handle to hold object "+object);
+
+ }
+
+
+}
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ImplicationBetaConstraint.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ImplicationBetaConstraint.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/ImplicationBetaConstraint.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -0,0 +1,250 @@
+package org.drools.common;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.Vector;
+
+import org.drools.RuleBaseConfiguration;
+import org.drools.degrees.IDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.reteoo.BetaMemory;
+import org.drools.reteoo.ConstraintKey;
+import org.drools.reteoo.Evaluation;
+import org.drools.reteoo.EvaluationTemplate;
+import org.drools.reteoo.LeftTuple;
+import org.drools.reteoo.SingleEvaluationTemplate;
+import org.drools.reteoo.builder.BuildContext;
+import org.drools.rule.ContextEntry;
+import org.drools.util.LeftTupleList;
+import org.drools.util.LinkedList;
+import org.drools.util.RightTupleList;
+
+public class ImplicationBetaConstraint implements BetaConstraints {
+
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 400L;
+
+
+ private IDegree priorDegree;
+
+ public ImplicationBetaConstraint(IDegreeFactory factory,
+ IDegree priorDegree,
+ BuildContext context) {
+
+ this.priorDegree = priorDegree;
+// singletonKeys = new ConstraintKey[] {new ConstraintKey(
+// factory.getModusPonensOp().getName(),
+// context.getRule().getName())};
+
+ singletonKeys = new ConstraintKey[] {new ConstraintKey(context.getRule().getName())};
+// factory.getModusPonensOp().getName(),
+// context.getRule().getName())};
+
+ }
+
+
+
+
+
+
+
+
+
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ //TODO: Implement...
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ //TODO: Implement...
+
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#updateFromTuple(org.drools.reteoo.ReteTuple)
+ */
+ public void updateFromTuple(final ContextEntry[] context,
+ final InternalWorkingMemory workingMemory,
+ final LeftTuple tuple) {
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#updateFromFactHandle(org.drools.common.InternalFactHandle)
+ */
+ public void updateFromFactHandle(final ContextEntry[] context,
+ final InternalWorkingMemory workingMemory,
+ final InternalFactHandle handle) {
+ }
+
+
+ public void resetTuple(final ContextEntry[] context) {
+
+ }
+
+ public void resetFactHandle(final ContextEntry[] context) {
+
+ }
+
+
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#isAllowedCachedLeft(java.lang.Object)
+ */
+ public boolean isAllowedCachedLeft(final ContextEntry[] context,
+ final InternalFactHandle handle) {
+ return priorDegree.toBoolean();
+ }
+
+
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#isAllowedCachedRight(org.drools.reteoo.ReteTuple)
+ */
+ public boolean isAllowedCachedRight(final ContextEntry[] context,
+ final LeftTuple tuple) {
+ return priorDegree.toBoolean();
+ }
+
+ public boolean isIndexed() {
+ return false;
+ }
+
+ public int getIndexCount() {
+ return 0;
+ }
+
+ public boolean isEmpty() {
+ return false;
+ }
+
+ public BetaMemory createBetaMemory(final RuleBaseConfiguration config) {
+ final BetaMemory memory = new BetaMemory( config.isSequential() ? null : new LeftTupleList(),
+ new RightTupleList(),
+ this.createContext() );
+
+ return memory;
+ }
+
+ public int hashCode() {
+ return singletonKeys[0].hashCode() ^ priorDegree.hashCode();
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.common.BetaNodeConstraints#getConstraints()
+ */
+ public LinkedList getConstraints() {
+ final LinkedList list = new LinkedList();
+ return list;
+ }
+
+
+
+ /**
+ * Determine if another object is equal to this.
+ *
+ * @param object
+ * The object to test.
+ *
+ * @return <code>true</code> if <code>object</code> is equal to this,
+ * otherwise <code>false</code>.
+ */
+ public boolean equals(final Object object) {
+ if ( this == object ) {
+ return true;
+ }
+
+ if (object == null)
+ return false;
+ if (! (object instanceof ImplicationBetaConstraint))
+ return false;
+
+ ImplicationBetaConstraint otherIBC = (ImplicationBetaConstraint) object;
+ return this.singletonKeys[0].equals(otherIBC.singletonKeys[0])
+ && this.priorDegree.equals(otherIBC.priorDegree);
+ }
+
+
+
+
+ public ContextEntry[] createContext() {
+ return new ContextEntry[0];
+ }
+
+
+
+
+
+
+
+
+
+
+ public Evaluation[] isSatisfiedCachedLeft(ContextEntry[] context,
+ InternalFactHandle handle, IDegreeFactory factory) {
+ Evaluation eval = template[0].spawn(factory.Unknown());
+ eval.addDegree(Evaluation.PRIOR, this.priorDegree, 1);
+ return new Evaluation[] {eval};
+ }
+
+ public Evaluation[] isSatisfiedCachedRight(ContextEntry[] context,
+ LeftTuple tuple, IDegreeFactory factory) {
+ Evaluation eval = template[0].spawn(factory.Unknown());
+ eval.addDegree(Evaluation.PRIOR, this.priorDegree, 1);
+ return new Evaluation[] {eval};
+ }
+
+
+
+
+
+
+ private EvaluationTemplate[] template ;
+
+ private ConstraintKey[] singletonKeys = null;
+
+ public ConstraintKey[] getConstraintKeys() {
+ return singletonKeys;
+ }
+
+ public EvaluationTemplate[] buildEvaluationTemplates(int id, Map<ConstraintKey, Set<String>> dependencies, IDegreeFactory factory) {
+ template = new EvaluationTemplate[1];
+ template[0] = new SingleEvaluationTemplate(id,singletonKeys[0],dependencies.get(singletonKeys[0]),factory.getMergeStrategy(),factory.getNullHandlingStrategy());
+ return template;
+ }
+
+
+ public Collection<ConstraintKey> getAllConstraintKeys() {
+ Vector<ConstraintKey> ans = new Vector<ConstraintKey>(1);
+ ans.add(singletonKeys[0]);
+ return ans;
+ }
+
+ public EvaluationTemplate getEvalTemplate(ConstraintKey key) {
+ if (template[0].getConstraintKey().equals(key))
+ return template[0];
+ return null;
+ }
+
+
+
+ public void setPriorDegree(IDegree buildDegree) {
+ priorDegree = buildDegree;
+ }
+
+
+
+
+
+
+
+
+}
\ No newline at end of file
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/InstanceEqualsConstraint.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/InstanceEqualsConstraint.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/InstanceEqualsConstraint.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -21,12 +21,16 @@
import java.io.ObjectOutput;
import java.util.Collection;
import java.util.LinkedList;
+import java.util.Map;
+import java.util.Set;
import org.drools.degrees.IDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.reteoo.ConstraintKey;
+import org.drools.reteoo.Evaluation;
import org.drools.reteoo.EvaluationTemplate;
import org.drools.reteoo.LeftTuple;
+import org.drools.reteoo.SingleEvaluationTemplate;
import org.drools.rule.ContextEntry;
import org.drools.rule.Declaration;
import org.drools.rule.Pattern;
@@ -93,9 +97,9 @@
return ((InstanceEqualsConstraintContextEntry) context).left == handle.getObject();
}
- public IDegree isSatisfiedCachedLeft(ContextEntry context,
+ public Evaluation isSatisfiedCachedLeft(ContextEntry context,
InternalFactHandle handle, IDegreeFactory factory) {
- return factory.fromBoolean(isAllowedCachedLeft(context, handle));
+ return template.spawn(factory.fromBoolean(isAllowedCachedLeft(context, handle)));
}
public boolean isAllowedCachedRight(final LeftTuple tuple,
@@ -103,9 +107,9 @@
return tuple.get( this.otherPattern.getOffset() ).getObject() == ((InstanceEqualsConstraintContextEntry) context).right;
}
- public IDegree isSatisfiedCachedRight(LeftTuple tuple,
+ public Evaluation isSatisfiedCachedRight(LeftTuple tuple,
ContextEntry context, IDegreeFactory factory) {
- return factory.fromBoolean(isAllowedCachedRight(tuple, context));
+ return template.spawn(factory.fromBoolean(isAllowedCachedRight(tuple, context)));
}
@@ -201,6 +205,8 @@
private ConstraintKey singletonKey = null;
+ private EvaluationTemplate template;
+
public ConstraintKey getConstraintKey() {
if (singletonKey == null) {
singletonKey = new ConstraintKey("this","equals","other");
@@ -211,12 +217,23 @@
public Collection<ConstraintKey> getAllConstraintKeys() {
Collection<ConstraintKey> ans = new LinkedList<ConstraintKey>();
ans.add(getConstraintKey());
- return ans;
+ return ans;
}
public EvaluationTemplate getEvalTemplate(ConstraintKey key) {
- // TODO Auto-generated method stub
+ if (this.template.getConstraintKey().equals(key))
+ return template;
return null;
}
+ public EvaluationTemplate buildEvaluationTemplate(int id,
+ Map<ConstraintKey, Set<String>> dependencies, IDegreeFactory factory) {
+ template = new SingleEvaluationTemplate(id,
+ this.getConstraintKey(),
+ dependencies.get(this.getConstraintKey()),
+ factory.getMergeStrategy(),
+ factory.getNullHandlingStrategy());
+ return template;
+ }
+
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/InstanceNotEqualsConstraint.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/InstanceNotEqualsConstraint.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/InstanceNotEqualsConstraint.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -21,12 +21,16 @@
import java.io.ObjectOutput;
import java.util.Collection;
import java.util.LinkedList;
+import java.util.Map;
+import java.util.Set;
import org.drools.degrees.IDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.reteoo.ConstraintKey;
+import org.drools.reteoo.Evaluation;
import org.drools.reteoo.EvaluationTemplate;
import org.drools.reteoo.LeftTuple;
+import org.drools.reteoo.SingleEvaluationTemplate;
import org.drools.rule.ContextEntry;
import org.drools.rule.Declaration;
import org.drools.rule.Pattern;
@@ -92,9 +96,9 @@
return ((InstanceNotEqualsConstraintContextEntry) context).left != handle.getObject();
}
- public IDegree isSatisfiedCachedLeft(ContextEntry context,
+ public Evaluation isSatisfiedCachedLeft(ContextEntry context,
InternalFactHandle handle, IDegreeFactory factory) {
- return factory.fromBoolean(isAllowedCachedLeft(context, handle));
+ return getTemplate().spawn(factory.fromBoolean(isAllowedCachedLeft(context, handle)));
}
@@ -104,9 +108,9 @@
return tuple.get( this.otherPattern.getOffset() ).getObject() != ((InstanceNotEqualsConstraintContextEntry) context).right;
}
- public IDegree isSatisfiedCachedRight(LeftTuple tuple,
+ public Evaluation isSatisfiedCachedRight(LeftTuple tuple,
ContextEntry context, IDegreeFactory factory) {
- return factory.fromBoolean(isAllowedCachedRight(tuple, context));
+ return getTemplate().spawn(factory.fromBoolean(isAllowedCachedRight(tuple, context)));
}
public String toString() {
@@ -200,6 +204,8 @@
private ConstraintKey singletonKey = null;
+
+ private EvaluationTemplate template;
public ConstraintKey getConstraintKey() {
if (singletonKey == null) {
@@ -214,10 +220,27 @@
return ans;
}
+
+ public EvaluationTemplate getTemplate() {
+ return null;
+ }
+
public EvaluationTemplate getEvalTemplate(ConstraintKey key) {
- // TODO Auto-generated method stub
+ if (this.template.getConstraintKey().equals(key))
+ return template;
return null;
}
+
+ public EvaluationTemplate buildEvaluationTemplate(int id,
+ Map<ConstraintKey, Set<String>> dependencies, IDegreeFactory factory) {
+ template = new SingleEvaluationTemplate(id,
+ this.getConstraintKey(),
+ dependencies.get(this.getConstraintKey()),
+ factory.getMergeStrategy(),
+ factory.getNullHandlingStrategy());
+ return template;
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/NamedEntryPoint.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/NamedEntryPoint.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/NamedEntryPoint.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -13,6 +13,7 @@
import org.drools.WorkingMemoryEntryPoint;
import org.drools.RuleBaseConfiguration.AssertBehaviour;
import org.drools.degrees.IDegree;
+import org.drools.reteoo.ArgList;
import org.drools.reteoo.ConstraintKey;
import org.drools.reteoo.EntryPointNode;
import org.drools.reteoo.Evaluation;
@@ -487,7 +488,7 @@
}
- public void inject(String premise, Object object,
+ public void inject(String premise, ArgList args,
ConstraintKey key, IDegree degree) {
// TODO Auto-generated method stub
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/QuadroupleBetaConstraints.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -20,7 +20,12 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
import org.drools.RuleBaseConfiguration;
import org.drools.base.evaluators.Operator;
@@ -28,9 +33,12 @@
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.reteoo.BetaMemory;
import org.drools.reteoo.ConstraintKey;
+import org.drools.reteoo.Evaluation;
+import org.drools.reteoo.EvaluationTemplate;
import org.drools.reteoo.LeftTuple;
import org.drools.reteoo.LeftTupleMemory;
import org.drools.reteoo.RightTupleMemory;
+import org.drools.reteoo.SingleEvaluationTemplate;
import org.drools.rule.ContextEntry;
import org.drools.rule.VariableConstraint;
import org.drools.spi.BetaNodeFieldConstraint;
@@ -60,6 +68,8 @@
private boolean indexed1;
private boolean indexed2;
private boolean indexed3;
+
+ private EvaluationTemplate[] template;
public QuadroupleBetaConstraints() {
}
@@ -414,36 +424,76 @@
return new ContextEntry[]{this.constraint0.createContextEntry(), this.constraint1.createContextEntry(), this.constraint2.createContextEntry(), this.constraint3.createContextEntry()};
}
- public IDegree isSatisfiedCachedLeft(ContextEntry[] context,
+ public Evaluation[] isSatisfiedCachedLeft(ContextEntry[] context,
InternalFactHandle handle, IDegreeFactory factory) {
- IDegree[] degs = new IDegree[4];
- degs[0] = this.constraint0.isSatisfiedCachedLeft(context[0], handle, factory);
- degs[1] = this.constraint1.isSatisfiedCachedLeft(context[1], handle, factory);
- degs[2] = this.constraint1.isSatisfiedCachedLeft(context[2], handle, factory);
- degs[3] = this.constraint1.isSatisfiedCachedLeft(context[3], handle, factory);
-
- return factory.getAndOperator().eval(degs);
+
+ return new Evaluation[] {
+ this.constraint0.isSatisfiedCachedLeft(context[0], handle, factory),
+ this.constraint1.isSatisfiedCachedLeft(context[1], handle, factory),
+ this.constraint2.isSatisfiedCachedLeft(context[2], handle, factory),
+ this.constraint3.isSatisfiedCachedLeft(context[3], handle, factory)
+ };
}
- public IDegree isSatisfiedCachedRight(ContextEntry[] context,
+ public Evaluation[] isSatisfiedCachedRight(ContextEntry[] context,
LeftTuple tuple, IDegreeFactory factory) {
- IDegree[] degs = new IDegree[4];
- degs[0] = this.constraint0.isSatisfiedCachedRight(tuple, context[0], factory);
- degs[1] = this.constraint0.isSatisfiedCachedRight(tuple, context[1], factory);
- degs[2] = this.constraint0.isSatisfiedCachedRight(tuple, context[2], factory);
- degs[3] = this.constraint0.isSatisfiedCachedRight(tuple, context[3], factory);
-
- return factory.getAndOperator().eval(degs);
+ return new Evaluation[] {
+ this.constraint0.isSatisfiedCachedRight(tuple, context[0], factory),
+ this.constraint1.isSatisfiedCachedRight(tuple, context[1], factory),
+ this.constraint2.isSatisfiedCachedRight(tuple, context[2], factory),
+ this.constraint3.isSatisfiedCachedRight(tuple, context[3], factory)
+ };
}
-
- private ConstraintKey singletonKey = null;
+
+
+
+
+ private ConstraintKey[] singletonKeys = null;
- public ConstraintKey getConstraintKey() {
- if (singletonKey == null) {
- singletonKey = new ConstraintKey("and",new ConstraintKey[] {constraint0.getConstraintKey(),constraint1.getConstraintKey(),constraint2.getConstraintKey(),constraint3.getConstraintKey()});
+ public ConstraintKey[] getConstraintKeys() {
+ if (singletonKeys == null) {
+ singletonKeys = new ConstraintKey[4];
+ singletonKeys[0] = constraint0.getConstraintKey();
+ singletonKeys[1] = constraint1.getConstraintKey();
+ singletonKeys[2] = constraint2.getConstraintKey();
+ singletonKeys[3] = constraint3.getConstraintKey();
+
}
- return singletonKey;
+ return singletonKeys;
}
+ public EvaluationTemplate[] buildEvaluationTemplates(int id, Map<ConstraintKey, Set<String>> dependencies, IDegreeFactory factory) {
+ template = new EvaluationTemplate[4];
+
+ template[0] = constraint0.buildEvaluationTemplate(id, dependencies, factory);
+ template[1] = constraint1.buildEvaluationTemplate(id, dependencies, factory);
+ template[2] = constraint2.buildEvaluationTemplate(id, dependencies, factory);
+ template[3] = constraint3.buildEvaluationTemplate(id, dependencies, factory);
+
+ return template;
+ }
+
+ public Collection<ConstraintKey> getAllConstraintKeys() {
+ Collection<ConstraintKey> ans = new HashSet<ConstraintKey>();
+ ans.addAll(constraint0.getAllConstraintKeys());
+ ans.addAll(constraint1.getAllConstraintKeys());
+ ans.addAll(constraint2.getAllConstraintKeys());
+ ans.addAll(constraint3.getAllConstraintKeys());
+ return ans;
+ }
+
+ public EvaluationTemplate getEvalTemplate(ConstraintKey key) {
+ EvaluationTemplate ans;
+ ans = constraint0.getEvalTemplate(key);
+ if (ans == null)
+ ans = constraint1.getEvalTemplate(key);
+ if (ans == null)
+ ans = constraint2.getEvalTemplate(key);
+ if (ans == null)
+ ans = constraint3.getEvalTemplate(key);
+ return ans;
+ }
+
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -18,6 +18,10 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
import org.drools.RuleBaseConfiguration;
import org.drools.base.evaluators.Operator;
@@ -25,9 +29,12 @@
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.reteoo.BetaMemory;
import org.drools.reteoo.ConstraintKey;
+import org.drools.reteoo.Evaluation;
+import org.drools.reteoo.EvaluationTemplate;
import org.drools.reteoo.LeftTuple;
import org.drools.reteoo.LeftTupleMemory;
import org.drools.reteoo.RightTupleMemory;
+import org.drools.reteoo.SingleEvaluationTemplate;
import org.drools.rule.ContextEntry;
import org.drools.rule.VariableConstraint;
import org.drools.spi.BetaNodeFieldConstraint;
@@ -48,11 +55,13 @@
*/
private static final long serialVersionUID = 400L;
- private BetaNodeFieldConstraint constraint;
+ private BetaNodeFieldConstraint constraint;
private boolean indexed;
private RuleBaseConfiguration conf;
+
+ private EvaluationTemplate[] template;
public SingleBetaConstraints() {
@@ -239,26 +248,45 @@
context[0].resetTuple();
}
- public IDegree isSatisfiedCachedLeft(ContextEntry[] context,
+ public Evaluation[] isSatisfiedCachedLeft(ContextEntry[] context,
InternalFactHandle handle, IDegreeFactory factory) {
- return this.constraint.isSatisfiedCachedLeft( context[0],
- handle, factory );
+
+ return new Evaluation[] { this.constraint.isSatisfiedCachedLeft( context[0],
+ handle, factory ) };
}
- public IDegree isSatisfiedCachedRight(ContextEntry[] context,
+ public Evaluation[] isSatisfiedCachedRight(ContextEntry[] context,
LeftTuple tuple, IDegreeFactory factory) {
- return this.constraint.isSatisfiedCachedRight(tuple, context[0], factory);
+ return new Evaluation[] { this.constraint.isSatisfiedCachedRight(tuple, context[0], factory) };
}
- private ConstraintKey singletonKey = null;
+ private ConstraintKey[] singletonKeys = null;
- public ConstraintKey getConstraintKey() {
- if (singletonKey == null) {
- singletonKey = new ConstraintKey("and",new ConstraintKey[] {constraint.getConstraintKey()});
+ public ConstraintKey[] getConstraintKeys() {
+ if (singletonKeys == null) {
+ singletonKeys = new ConstraintKey[1];
+ singletonKeys[0] = constraint.getConstraintKey();
+
}
- return singletonKey;
+ return singletonKeys;
}
+ public EvaluationTemplate[] buildEvaluationTemplates(int id, Map<ConstraintKey, Set<String>> dependencies, IDegreeFactory factory) {
+ template = new EvaluationTemplate[1];
+
+ template[0] = this.constraint.buildEvaluationTemplate(id, dependencies, factory);
+
+ return template;
+ }
+
+ public Collection<ConstraintKey> getAllConstraintKeys() {
+ return this.constraint.getAllConstraintKeys();
+ }
+
+ public EvaluationTemplate getEvalTemplate(ConstraintKey key) {
+ return this.constraint.getEvalTemplate(key);
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/TripleBetaConstraints.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -20,7 +20,12 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
import org.drools.RuleBaseConfiguration;
import org.drools.base.evaluators.Operator;
@@ -28,9 +33,12 @@
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.reteoo.BetaMemory;
import org.drools.reteoo.ConstraintKey;
+import org.drools.reteoo.Evaluation;
+import org.drools.reteoo.EvaluationTemplate;
import org.drools.reteoo.LeftTuple;
import org.drools.reteoo.LeftTupleMemory;
import org.drools.reteoo.RightTupleMemory;
+import org.drools.reteoo.SingleEvaluationTemplate;
import org.drools.rule.ContextEntry;
import org.drools.rule.VariableConstraint;
import org.drools.spi.BetaNodeFieldConstraint;
@@ -58,6 +66,8 @@
private boolean indexed0;
private boolean indexed1;
private boolean indexed2;
+
+ private EvaluationTemplate[] template;
public TripleBetaConstraints() {
}
@@ -355,37 +365,67 @@
return new ContextEntry[]{this.constraint0.createContextEntry(), this.constraint1.createContextEntry(), this.constraint2.createContextEntry()};
}
- public IDegree isSatisfiedCachedLeft(ContextEntry[] context,
+ public Evaluation[] isSatisfiedCachedLeft(ContextEntry[] context,
InternalFactHandle handle, IDegreeFactory factory) {
- IDegree[] degs = new IDegree[3];
- degs[0] = this.constraint0.isSatisfiedCachedLeft(context[0], handle, factory);
- degs[1] = this.constraint1.isSatisfiedCachedLeft(context[1], handle, factory);
- degs[2] = this.constraint1.isSatisfiedCachedLeft(context[2], handle, factory);
-
- return factory.getAndOperator().eval(degs);
+ return new Evaluation[] {
+ this.constraint0.isSatisfiedCachedLeft(context[0], handle, factory),
+ this.constraint1.isSatisfiedCachedLeft(context[1], handle, factory),
+ this.constraint2.isSatisfiedCachedLeft(context[2], handle, factory)
+ };
}
- public IDegree isSatisfiedCachedRight(ContextEntry[] context,
+ public Evaluation[] isSatisfiedCachedRight(ContextEntry[] context,
LeftTuple tuple, IDegreeFactory factory) {
- IDegree[] degs = new IDegree[3];
- degs[0] = this.constraint0.isSatisfiedCachedRight(tuple, context[0], factory);
- degs[1] = this.constraint0.isSatisfiedCachedRight(tuple, context[1], factory);
- degs[2] = this.constraint0.isSatisfiedCachedRight(tuple, context[2], factory);
-
- return factory.getAndOperator().eval(degs);
+ return new Evaluation[] {
+ this.constraint0.isSatisfiedCachedRight(tuple, context[0], factory),
+ this.constraint1.isSatisfiedCachedRight(tuple, context[1], factory),
+ this.constraint2.isSatisfiedCachedRight(tuple, context[2], factory)
+ };
}
- private ConstraintKey singletonKey = null;
+ private ConstraintKey[] singletonKeys = null;
- public ConstraintKey getConstraintKey() {
- if (singletonKey == null) {
- singletonKey = new ConstraintKey("and",new ConstraintKey[] {constraint0.getConstraintKey(),constraint1.getConstraintKey(),constraint2.getConstraintKey()});
+ public ConstraintKey[] getConstraintKeys() {
+ if (singletonKeys == null) {
+ singletonKeys = new ConstraintKey[3];
+ singletonKeys[0] = constraint0.getConstraintKey();
+ singletonKeys[1] = constraint1.getConstraintKey();
+ singletonKeys[2] = constraint2.getConstraintKey();
+
}
- return singletonKey;
+ return singletonKeys;
}
+ public EvaluationTemplate[] buildEvaluationTemplates(int id, Map<ConstraintKey, Set<String>> dependencies, IDegreeFactory factory) {
+ template = new EvaluationTemplate[3];
+
+ template[0] = constraint0.buildEvaluationTemplate(id, dependencies, factory);
+ template[1] = constraint1.buildEvaluationTemplate(id, dependencies, factory);
+ template[2] = constraint2.buildEvaluationTemplate(id, dependencies, factory);
+
+ return template;
+ }
+
+ public Collection<ConstraintKey> getAllConstraintKeys() {
+ Collection<ConstraintKey> ans = new HashSet<ConstraintKey>();
+ ans.addAll(constraint0.getAllConstraintKeys());
+ ans.addAll(constraint1.getAllConstraintKeys());
+ ans.addAll(constraint2.getAllConstraintKeys());
+ return ans;
+ }
+
+ public EvaluationTemplate getEvalTemplate(ConstraintKey key) {
+ EvaluationTemplate ans;
+ ans = constraint0.getEvalTemplate(key);
+ if (ans == null)
+ ans = constraint1.getEvalTemplate(key);
+ if (ans == null)
+ ans = constraint2.getEvalTemplate(key);
+ return ans;
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/TupleStartEqualsConstraint.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/TupleStartEqualsConstraint.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/TupleStartEqualsConstraint.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -21,12 +21,16 @@
import java.io.ObjectOutput;
import java.util.Collection;
import java.util.LinkedList;
+import java.util.Map;
+import java.util.Set;
import org.drools.degrees.IDegree;
import org.drools.degrees.factory.IDegreeFactory;
import org.drools.reteoo.ConstraintKey;
+import org.drools.reteoo.Evaluation;
import org.drools.reteoo.EvaluationTemplate;
import org.drools.reteoo.LeftTuple;
+import org.drools.reteoo.SingleEvaluationTemplate;
import org.drools.rule.ContextEntry;
import org.drools.rule.Declaration;
import org.drools.spi.BetaNodeFieldConstraint;
@@ -102,9 +106,9 @@
return ((TupleStartEqualsConstraintContextEntry) context).left.equals( tuple );
}
- public IDegree isSatisfiedCachedLeft(ContextEntry context,
+ public Evaluation isSatisfiedCachedLeft(ContextEntry context,
InternalFactHandle handle, IDegreeFactory factory) {
- return factory.fromBoolean(isAllowedCachedLeft(context, handle));
+ return template.spawn(factory.fromBoolean(isAllowedCachedLeft(context, handle)));
}
@@ -113,9 +117,9 @@
return tuple.equals( ((TupleStartEqualsConstraintContextEntry) context).right.getSubTuple( tuple.size() ) );
}
- public IDegree isSatisfiedCachedRight(LeftTuple tuple,
+ public Evaluation isSatisfiedCachedRight(LeftTuple tuple,
ContextEntry context, IDegreeFactory factory) {
- return factory.fromBoolean(isAllowedCachedRight(tuple, context));
+ return template.spawn(factory.fromBoolean(isAllowedCachedRight(tuple, context)));
}
public String toString() {
@@ -203,6 +207,8 @@
}
private ConstraintKey singletonKey = null;
+
+ private EvaluationTemplate template;
public ConstraintKey getConstraintKey() {
if (singletonKey == null)
@@ -217,9 +223,20 @@
}
public EvaluationTemplate getEvalTemplate(ConstraintKey key) {
- // TODO Auto-generated method stub
+ if (this.template.getConstraintKey().equals(key))
+ return template;
return null;
}
+ public EvaluationTemplate buildEvaluationTemplate(int id,
+ Map<ConstraintKey, Set<String>> dependencies, IDegreeFactory factory) {
+ template = new SingleEvaluationTemplate(id,
+ this.getConstraintKey(),
+ dependencies.get(this.getConstraintKey()),
+ factory.getMergeStrategy(),
+ factory.getNullHandlingStrategy());
+ return template;
+ }
+
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/IDegreeCombiner.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/IDegreeCombiner.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/IDegreeCombiner.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -30,4 +30,6 @@
public IDegree eval(Collection<? extends IDegree> args);
+ public String getName();
+
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleAverage.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleAverage.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleAverage.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -39,6 +39,10 @@
// TODO Auto-generated method stub
return null;
}
+
+ public String getName() {
+ return "avg";
+ }
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDotAnd.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDotAnd.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleDotAnd.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -25,4 +25,8 @@
return null;
}
+ public String getName() {
+ return "dotAnd";
+ }
+
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleEquiv.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleEquiv.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleEquiv.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -22,4 +22,11 @@
return null;
}
+
+ public String getName() {
+ return "distEquiv";
+ }
+
+
+
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMaxOr.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMaxOr.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMaxOr.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -25,4 +25,8 @@
return null;
}
+ public String getName() {
+ return "maxOr";
+ }
+
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMergeStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMergeStrategy.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMergeStrategy.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -31,4 +31,8 @@
return null;
}
+ public String getName() {
+ return "max";
+ }
+
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMinAnd.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMinAnd.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleMinAnd.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -24,4 +24,8 @@
return null;
}
+ public String getName() {
+ return "minAnd";
+ }
+
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleNot.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleNot.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/simple/SimpleNot.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -17,4 +17,8 @@
}
+ public String getName() {
+ return "not";
+ }
+
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -51,6 +51,7 @@
import org.drools.event.rule.impl.ObjectInsertedEventImpl;
import org.drools.event.rule.impl.ObjectRetractedEventImpl;
import org.drools.event.rule.impl.ObjectUpdatedEventImpl;
+import org.drools.reteoo.ArgList;
import org.drools.reteoo.ConstraintKey;
import org.drools.reteoo.Evaluation;
import org.drools.reteoo.ReteooWorkingMemory;
@@ -666,7 +667,7 @@
- public void inject(String rule, Object object, ConstraintKey key,
+ public void inject(String rule, ArgList args, ConstraintKey key,
IDegree degree) {
// TODO Auto-generated method stub
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/process/command/impl/CommandBasedStatefulKnowledgeSession.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/process/command/impl/CommandBasedStatefulKnowledgeSession.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/process/command/impl/CommandBasedStatefulKnowledgeSession.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -50,6 +50,7 @@
import org.drools.process.command.StartProcessCommand;
import org.drools.process.command.UnregisterExitPointCommand;
import org.drools.process.command.UpdateCommand;
+import org.drools.reteoo.ArgList;
import org.drools.reteoo.ConstraintKey;
import org.drools.reteoo.Evaluation;
import org.drools.reteoo.ReteooWorkingMemory;
@@ -390,7 +391,7 @@
- public void inject(String premise, Object object, ConstraintKey key,
+ public void inject(String premise, ArgList args, ConstraintKey key,
IDegree degree) {
// TODO Auto-generated method stub
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/AlphaNode.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -204,7 +204,7 @@
System.out.println("-------------- Passing by alpha" + id);
//Collect any provided info
- Collection<Evaluation> storedEvals = this.gammaMemory.retrieve(factHandle.getObject());
+ Collection<Evaluation> storedEvals = this.gammaMemory.retrieve(new ArgList(factHandle.getObject()));
if (storedEvals != null) {
record.addEvaluations(storedEvals);
factHandle.addPropertyDegrees(storedEvals);
@@ -220,13 +220,14 @@
memory.context,
factory
);
- Collection<Evaluation> useless = eval.getEvalTree();
+
+
for (Evaluation subEval : eval.getEvalTree()) {
factHandle.addPropertyDegree(subEval);
- record.addEvaluation(subEval);
}
-
+ record.addEvaluation(eval);
+
} else {
if (eval.getDegreeBit(Evaluation.EVAL) == null) {
Evaluation localEval = this.constraint.isSatisfied(factHandle,
@@ -238,17 +239,18 @@
}
}
- //IMPORTANT: LAST ADDITION IS MAIN NOW
+ System.out.println("Alpha evaluation trial "+record.expand());
- System.out.println("Answer is given by " + record.getMainEval().toString()+ " info : " +record.getMainEval().getInfoRate());
//Merge is automatical, so now we decide what to do
- switch (this.filterStrat.doTry(record.getMainEval())) {
+ switch (this.filterStrat.doTry(record)) {
case IFilterStrategy.DROP :
//time to die
+ System.out.println("Alpha FAIL : DROP record");
return;
case IFilterStrategy.HOLD :
- System.out.println("WARNING::::::::::::::::::::::::::: OBJECT HELD AT NODE "+this.constraint.getConstraintKey());
+ System.out.println("WARNING::::::::::::::::::::::::::: OBJECT HELD AT ALPHA NODE "+this.constraint.getConstraintKey());
+ System.out.println("Situation is "+record.expand());
record.setFactHandle(factHandle);
record.setFactory(factory);
record.setPropagationContext(propagationContext);
@@ -273,8 +275,8 @@
public void update(Observable watcher, Object info) {
EvalRecord record = (EvalRecord) watcher;
-System.out.println("**************************************************************UPDATE");
- switch (this.filterStrat.doTry(record.getMainEval())) {
+System.out.println("**************************************************************UPDATE @ALPHA NODE");
+ switch (this.filterStrat.doTry(record)) {
case IFilterStrategy.DROP :
record.deleteObserver(this);
return;
@@ -564,13 +566,12 @@
- public Collection<Evaluation> getStoredEvals(Object o) {
- // TODO Auto-generated method stub
- return null;
+ public Collection<Evaluation> getStoredEvals(ArgList args) {
+ return this.gammaMemory.retrieve(args);
}
- public void storeEvaluation(Object object, Evaluation prepareEval) {
- this.gammaMemory.store(object, prepareEval);
+ public void storeEvaluation(ArgList args, Evaluation prepareEval) {
+ this.gammaMemory.store(args, prepareEval);
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluation.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluation.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluation.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -15,17 +15,19 @@
public class CompositeEvaluation extends Evaluation implements Observer {
private IDegreeCombiner operator;
- private Evaluation[] operands;
+ protected Evaluation[] operands;
private float opRate;
public CompositeEvaluation(int id, ConstraintKey key, Set<String> deps,
Evaluation[] evalDegrees, IDegreeCombiner operator, IMergeStrategy mergeStrat, INullHandlingStrategy nullStrat) {
super(id,key,deps,mergeStrat,nullStrat);
- this.operands = new Evaluation[evalDegrees.length];
- for (int j = 0; j < evalDegrees.length; j++) {
- setOperand(j,evalDegrees[j]);
- }
+ if (evalDegrees != null) {
+ this.operands = new Evaluation[evalDegrees.length];
+ for (int j = 0; j < evalDegrees.length; j++) {
+ setOperand(j,evalDegrees[j]);
+ }
+ }
this.operator = operator;
@@ -34,26 +36,29 @@
- public CompositeEvaluation(int id, ConstraintKey key, Set<String> deps,
- Map<ConstraintKey, EvaluationTemplate> children,
- IDegreeCombiner operator, IMergeStrategy mergeStrat,
- INullHandlingStrategy nullStrat) {
-
- super(id,key,deps,mergeStrat,nullStrat);
-
- this.operands = new Evaluation[children.size()];
- int j = 0;
- for (EvaluationTemplate temp : children.values()) {
- setOperand(j++,temp.spawn());
- }
-
- this.operator = operator;
-
- this.combine();
-
- }
+// public CompositeEvaluation(int id, ConstraintKey key, Set<String> deps,
+// Map<ConstraintKey, EvaluationTemplate> children,
+// IDegreeCombiner operator, IMergeStrategy mergeStrat,
+// INullHandlingStrategy nullStrat) {
+//
+// super(id,key,deps,mergeStrat,nullStrat);
+//
+// this.operands = new Evaluation[children.size()];
+// int j = 0;
+// for (EvaluationTemplate temp : children.values()) {
+// setOperand(j++,temp.spawn());
+// }
+//
+// this.operator = operator;
+//
+// this.combine();
+//
+// }
protected void combine() {
+ if (operands == null)
+ return;
+
int N = operands.length;
IDegree[] args = new IDegree[N];
@@ -130,9 +135,29 @@
combine();
}
+ protected IDegreeCombiner getOperator() {
+ return operator;
+ }
+
-
+ public String toStringTree(int depth) {
+ StringBuilder sb = new StringBuilder();
+
+// if (depth > 0)
+// sb.append(this.toString());
+ if (getOperands() != null) {
+ for (Evaluation eval : getOperands()) {
+ for (int j = 0; j <= depth; j++)
+ sb.append("\t");
+ sb.append(eval.toString()+"\n");
+ if (eval instanceof CompositeEvaluation)
+ sb.append(((CompositeEvaluation) eval).toStringTree(depth+1));
+ }
+ }
+ return sb.toString();
+ }
+
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluationTemplate.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluationTemplate.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeEvaluationTemplate.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -49,12 +49,17 @@
}
public Evaluation spawn() {
- return new CompositeEvaluation(id,key,deps,children,operator,mergeStrat,nullStrat);
+ return new CompositeEvaluation(id,key,deps,children.values().toArray(new Evaluation[children.values().size()]),operator,mergeStrat,nullStrat);
}
+ protected IDegreeCombiner getOperator() {
+ return operator;
+ }
+
+
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -94,8 +94,11 @@
boolean leftTupleMemoryEnabled) {
for( LeftTupleSinkNode sink = this.sinks.getFirst(); sink != null; sink = sink.getNextLeftTupleSinkNode() ) {
+
+ EvalRecord masterRecord = new EvalRecord(-1,factory.getAndOperator(),factory.getMergeStrategy(),factory.getNullHandlingStrategy());
+ masterRecord.addEvaluation(record);
doPropagateAssertLeftTuple( context, workingMemory, factory, sink,
- new ImperfectLeftTuple( factHandle, sink, leftTupleMemoryEnabled, record ) );
+ new ImperfectLeftTuple( factHandle, sink, leftTupleMemoryEnabled, masterRecord ) );
}
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EntryPointNode.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -331,7 +331,7 @@
for ( int i = 0, length = cachedNodes.length; i < length; i++ ) {
System.out.println(this.getClass() + " dispatching obj to node "+i);
- EvalRecord record = new EvalRecord();
+ EvalRecord record = new EvalRecord(this.getId(),factory.getAndOperator(),factory.getMergeStrategy(),factory.getNullHandlingStrategy());
cachedNodes[i].assertObject(handle,
context,
workingMemory,
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -20,6 +20,7 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.util.Collections;
import org.drools.RuleBaseConfiguration;
import org.drools.common.BaseNode;
@@ -72,6 +73,8 @@
private LeftTupleSinkNode previousTupleSinkNode;
private LeftTupleSinkNode nextTupleSinkNode;
+
+ private EvaluationTemplate template;
// ------------------------------------------------------------
// Constructors
@@ -99,6 +102,7 @@
this.condition = eval;
this.tupleSource = tupleSource;
this.tupleMemoryEnabled = context.isTupleMemoryEnabled();
+
}
public void readExternal(ObjectInput in) throws IOException,
@@ -197,7 +201,8 @@
-
+ //TODO: Do for good
+ //@FIXME : Not Implemented
public void assertLeftTuple(ImperfectLeftTuple leftTuple,
PropagationContext context, InternalWorkingMemory workingMemory,
IDegreeFactory factory) {
@@ -211,7 +216,9 @@
EvalRecord record = leftTuple.getRecord();
ConstraintKey key = new ConstraintKey("eval",this.condition.getEvalExpression().toString());
- Evaluation eval = new Evaluation(this.getId(),ans,key,factory.getMergeStrategy(),factory.getNullHandlingStrategy());
+ EvaluationTemplate templ = new SingleEvaluationTemplate(this.getId(),key,Collections.EMPTY_SET,factory.getMergeStrategy(),factory.getNullHandlingStrategy());
+
+ Evaluation eval = templ.spawn(ans);
record.addEvaluation(eval);
//TODO: Imperfect strategy here!
@@ -228,7 +235,7 @@
this.tupleMemoryEnabled );
//}
-
+
}
public void retractLeftTuple(final LeftTuple leftTuple,
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvalRecord.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvalRecord.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/EvalRecord.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -1,6 +1,7 @@
package org.drools.reteoo;
+import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
@@ -8,26 +9,33 @@
import java.util.Map;
import java.util.Observable;
import java.util.Observer;
+import java.util.Set;
+import java.util.Vector;
import org.drools.common.ImperfectFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.degrees.IDegree;
import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+import org.drools.degrees.operators.IMergeStrategy;
+import org.drools.degrees.operators.INullHandlingStrategy;
import org.drools.spi.PropagationContext;
-public class EvalRecord extends Observable implements Observer {
+public class EvalRecord extends CompositeEvaluation implements Observer {
private Map<ConstraintKey, Evaluation> evalMap;
- private ConstraintKey mainKey;
+ //private ConstraintKey mainKey;
- private IDegree overallDegree;
+ // private IDegree overallDegree;
private ImperfectFactHandle factHandle;
+ private ImperfectLeftTuple leftTuple;
+ private ImperfectRightTuple rightTuple;
private PropagationContext propagationContext;
private InternalWorkingMemory workingMemory;
private IDegreeFactory factory;
@@ -35,11 +43,16 @@
+// public EvalRecord() {
+// mainKey = null;
+// evalMap = new HashMap<ConstraintKey, Evaluation>();
+// }
-
- public EvalRecord() {
- mainKey = null;
+ public EvalRecord(int id,IDegreeCombiner operator,IMergeStrategy mergeStrat,INullHandlingStrategy nullStrat) {
+ super(id,new DynamicConstraintKey(operator.getName()),null,null,operator,mergeStrat,nullStrat);
+
+ //mainKey = null;
evalMap = new HashMap<ConstraintKey, Evaluation>();
}
@@ -75,27 +88,56 @@
return prevEval;
}
+
+
+
+
+
+
public void addEvaluation(Evaluation eval) {
+ boolean newEval = ! this.evalMap.containsKey(eval.getKey());
- Evaluation addedEval = insert(eval);
+ Evaluation addedEval = insert(eval);
+ if (newEval) {
+ if (operands == null) {
+ operands = new Evaluation[1];
+ operands[0] = addedEval;
+ } else {
+ int N = operands.length;
+ Evaluation[] temp = new Evaluation[N+1];
+ for (int j = 0; j < N; j++)
+ temp[j] = operands[j];
+
+ operands = temp;
+
+ operands[N] = addedEval;
+ }
+ }
- if (mainKey != null && mainKey.equals(addedEval.getKey()) /*&& ! prevEval.getDegree().equals(overallDegree)*/) {
- mainKey = addedEval.getKey();
- overallDegree = addedEval.getDegree();
- this.setChanged();
- this.notifyObservers(null);
- } else {
- mainKey = addedEval.getKey();
- overallDegree = addedEval.getDegree();
- }
+ ((DynamicConstraintKey) this.getKey()).addArg(eval.getKey());
+
+ combine();
+ this.setChanged();
+ this.notifyObservers(null);
+
+// if (mainKey != null && mainKey.equals(addedEval.getKey()) /*&& ! prevEval.getDegree().equals(overallDegree)*/) {
+// mainKey = addedEval.getKey();
+// overallDegree = addedEval.getDegree();
+// this.setChanged();
+// this.notifyObservers(null);
+// } else {
+// mainKey = addedEval.getKey();
+// overallDegree = addedEval.getDegree();
+// }
}
public void addEvaluations(EvalRecord other) {
- for (Evaluation eval : other.getEvaluations())
+ //for (Evaluation eval : other.getEvaluations())
+ for (Evaluation eval : other.getOperands())
this.addEvaluation(eval);
}
@@ -105,34 +147,33 @@
}
- public IDegree getOverallDegree() {
- //return getMainEval().getDegree();
- return overallDegree;
- }
+
public EvalRecord clone() {
- EvalRecord ans = new EvalRecord();
- ans.addEvaluations(this.getEvaluations());
+ EvalRecord ans = new EvalRecord(this.getNodeId(),this.getOperator(),this.getMergeStrat(),this.getNullHandlingStrat());
+ ans.addEvaluations(this);
return ans;
}
- public Evaluation getMainEval() {
- return evalMap.get(mainKey);
- }
+
+// public Evaluation getMainEval() {
+// //return evalMap.get(mainKey);
+// return this;
+// }
- public void update(Observable obsEval, Object newDeg) {
- Evaluation eval = (Evaluation) obsEval;
- if (eval.getKey().equals(mainKey)) {
- overallDegree = eval.getDegree();
- this.setChanged();
- this.notifyObservers(null);
- }
- }
+// public void update(Observable obsEval, Object newDeg) {
+// Evaluation eval = (Evaluation) obsEval;
+// if (eval.getKey().equals(mainKey)) {
+// overallDegree = eval.getDegree();
+// this.setChanged();
+// this.notifyObservers(null);
+// }
+// }
@@ -141,18 +182,28 @@
- public String toString() {
- StringBuilder sb = new StringBuilder("Eval Record: \n");
- for (Evaluation ev : getEvaluations())
- sb.append(ev.toString()+"\n");
- sb.append("\n");
+ public String expand() {
+ StringBuilder sb = new StringBuilder("Eval Record :"+this.getInfoRate()+"\n");
+//
+
+ sb.append("AND{\n");
+ if (getOperands() != null)
+ for (Evaluation ev : getOperands())
+ sb.append(ev.toString()+"\n");
+ sb.append("}\n\n");
+
+ sb.append(toString()+"\n");
+ sb.append(toStringTree(0));
+
return sb.toString();
+
}
+
/**
* @param factHandle the factHandle to set
*/
@@ -209,5 +260,35 @@
return factory;
}
+ /**
+ * @param leftTuple the leftTuple to set
+ */
+ public void setLeftTuple(ImperfectLeftTuple leftTuple) {
+ this.leftTuple = leftTuple;
+ }
+
+ /**
+ * @return the leftTuple
+ */
+ public ImperfectLeftTuple getLeftTuple() {
+ return leftTuple;
+ }
+
+ /**
+ * @param rightTuple the rightTuple to set
+ */
+ public void setRightTuple(ImperfectRightTuple rightTuple) {
+ this.rightTuple = rightTuple;
+ }
+
+ /**
+ * @return the rightTuple
+ */
+ public ImperfectRightTuple getRightTuple() {
+ return rightTuple;
+ }
+
+
+
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Evaluation.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Evaluation.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Evaluation.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -67,19 +67,19 @@
}
- /**
- * TODO : remove it and its dependencies
- * @param id
- * @param evalDeg
- * @param key
- *
- * @deprecated
- */
- public Evaluation(int id, IDegree evalDeg, ConstraintKey key, IMergeStrategy mergeStrat, INullHandlingStrategy nullStrat) {
- this(id,key, new HashSet<String>(),mergeStrat,nullStrat);
-
- this.addDegree(Evaluation.EVAL,evalDeg,1);
- }
+// /**
+// * TODO : remove it and its dependencies
+// * @param id
+// * @param evalDeg
+// * @param key
+// *
+// * @deprecated
+// */
+// public Evaluation(int id, IDegree evalDeg, ConstraintKey key, IMergeStrategy mergeStrat, INullHandlingStrategy nullStrat) {
+// this(id,key, new HashSet<String>(),mergeStrat,nullStrat);
+//
+// this.addDegree(Evaluation.EVAL,evalDeg,1);
+// }
@@ -98,12 +98,9 @@
boolean newContrib = false;
for (String source : moreDegrees.keySet()) {
- System.out.println("Added degrees for source "+ source + "+1");
+ System.out.println("Trying to merge degrees for source "+ source + "+1");
IDegree evalDeg = moreDegrees.get(source);
- if (evalDeg == null) {
- newContrib = newContrib || clearDegree(source);
- } else {
-
+ if (evalDeg != null) {
confidence.put(source, conf.get(source));
@@ -207,12 +204,15 @@
public String toString() {
- return "("+this.nodeId + ")" + this.key+ " : " + this.aggDegree.toString();
+ return "("+this.nodeId + ")" + this.key+ " : " + this.aggDegree +" "+ this.getBitS();
}
+
+
+
/**
* @param id the id to set
*/
@@ -273,13 +273,19 @@
StringBuilder sb = new StringBuilder("[");
for (String s : degrees.keySet()) {
if (degrees.get(s) != null)
- sb.append(s+",");
+ sb.append(s+" " + this.degrees.get(s) +",");
}
return sb.append("]").toString();
}
+ protected IMergeStrategy getMergeStrat() {
+ return mergeStrat;
+ }
+ protected INullHandlingStrategy getNullHandlingStrat() {
+ return nullStrat;
+ }
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/GammaMemory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/GammaMemory.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/GammaMemory.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -7,17 +7,24 @@
public class GammaMemory {
- private Map<Object, Collection<Evaluation>> store;
+ private Map<ArgList, Collection<Evaluation>> store;
public GammaMemory() {
- store = new HashMap<Object, Collection<Evaluation>>();
+ store = new HashMap<ArgList, Collection<Evaluation>>();
}
- public Collection<Evaluation> retrieve(Object o) {
- return this.store.remove(o);
+ public Collection<Evaluation> retrieve(ArgList o) {
+ if (o.isPersistent())
+ return this.store.get(o);
+ else
+ return this.store.remove(o);
}
- public void store(Object o, Evaluation eval) {
+ public Collection<ArgList> getKeys() {
+ return store.keySet();
+ }
+
+ public void store(ArgList o, Evaluation eval) {
Collection<Evaluation> coll = store.get(o);
if (coll == null) {
coll = new LinkedList<Evaluation>();
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/IGammaNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/IGammaNode.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/IGammaNode.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -6,9 +6,9 @@
EvaluationTemplate getEvaluationTemplate(ConstraintKey key);
- void storeEvaluation(Object object, Evaluation prepareEval);
+ void storeEvaluation(ArgList args, Evaluation prepareEval);
- public Collection<Evaluation> getStoredEvals(Object o);
+ public Collection<Evaluation> getStoredEvals(ArgList args);
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectRuleBase.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectRuleBase.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectRuleBase.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -70,27 +70,45 @@
final RuleBaseConfiguration config,
final FactHandleFactory factHandleFactory
) {
- this( id,
+ super( id,
config,
- factHandleFactory,
- new SimpleFuzzyDegreeFactory());
+ factHandleFactory
+ );
+
+ String factoryName = config.getProperty("drools.imperfect.factory");
+ IDegreeFactory factory = null;
+ try {
+ factory = (IDegreeFactory) Class.forName(factoryName).newInstance();
+ System.out.println("Created instance of "+factoryName);
+ } catch (InstantiationException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (ClassNotFoundException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ setDegreeFactory(factory);
}
- /**
- * Construct.
- *
- * @param id
- * The rete network.
- */
- public ImperfectRuleBase(final String id,
- final RuleBaseConfiguration config,
- final FactHandleFactory factHandleFactory,
- final IDegreeFactory degreeFactory) {
- super( id,
- config,
- factHandleFactory );
- this.degreeFactory = degreeFactory;
- }
+// /**
+// * Construct.
+// *
+// * @param id
+// * The rete network.
+// */
+// public ImperfectRuleBase(final String id,
+// final RuleBaseConfiguration config,
+// final FactHandleFactory factHandleFactory,
+// final IDegreeFactory degreeFactory) {
+// super( id,
+// config,
+// factHandleFactory );
+// this.degreeFactory = degreeFactory;
+// }
/**
* @param degreeFactory the degreeFactory to set
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/JoinNode.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/JoinNode.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -16,6 +16,10 @@
* limitations under the License.
*/
+import java.util.Collection;
+import java.util.Observable;
+import java.util.Observer;
+
import org.drools.common.BetaConstraints;
import org.drools.common.ImperfectFactHandle;
import org.drools.common.InternalFactHandle;
@@ -54,7 +58,7 @@
* @author <a href="mailto:bob at werken.com">Bob McWhirter</a>
*
*/
-public class JoinNode extends BetaNode {
+public class JoinNode extends BetaNode implements IGammaNode, Observer {
// ------------------------------------------------------------
// Instance methods
// ------------------------------------------------------------
@@ -64,6 +68,12 @@
*/
private static final long serialVersionUID = 400L;
+
+ private GammaMemory gammaMemory;
+
+
+
+
public JoinNode() {
}
@@ -83,12 +93,23 @@
behaviors );
tupleMemoryEnabled = context.isTupleMemoryEnabled();
+ this.gammaMemory = new GammaMemory();
+
InternalRuleBase ruleBase = context.getRuleBase();
if (ruleBase instanceof ImperfectRuleBase) {
IDegreeFactory factory = ((ImperfectRuleBase) ruleBase).getDegreeFactory();
this.filterStrat = factory.getDefaultStrategy();
+
+ this.constraints.buildEvaluationTemplates(this.id,context.getRule().getDependencies(), factory);
+
+ Collection<ConstraintKey> keys = this.constraints.getAllConstraintKeys();
+ for (ConstraintKey key : keys)
+ context.getRuleBase().getRete().indexGammaNode(key,this);
}
System.out.println(this.getClass().getName() + "(id "+id+") constructor hacked to add filter strategy");
+
+
+
}
@@ -152,38 +173,102 @@
workingMemory,
leftTuple );
for ( ImperfectRightTuple rightTuple = (ImperfectRightTuple) memory.getRightTupleMemory().getFirst( leftTuple ); rightTuple != null; rightTuple = (ImperfectRightTuple) rightTuple.getNext() ) {
- final InternalFactHandle handle = rightTuple.getFactHandle();
- //TODO : Imperfect beta constraint
- IDegree ans = this.constraints.isSatisfiedCachedLeft( memory.getContext(), handle,factory );
-
- EvalRecord record = new EvalRecord();
- ConstraintKey key = this.constraints.getConstraintKey();
- Evaluation eval = new Evaluation(this.getId(),ans,key,factory.getMergeStrategy(),factory.getNullHandlingStrategy());
- record.addEvaluation(eval);
- record.addEvaluations(leftTuple.getRecord());
- record.addEvaluations(rightTuple.getRecord());
-
-
- switch (this.filterStrat.doTry(record.getMainEval())) {
- case IFilterStrategy.DROP : return;
+ final ImperfectFactHandle factHandle = (ImperfectFactHandle) rightTuple.getFactHandle();
+ EvalRecord record = rightTuple.getRecord();
+
+ EvalRecord mainRecord = leftTuple.getRecord().clone();
+
+
+ Collection<Evaluation> storedEvals = this.gammaMemory.retrieve(new ArgList(leftTuple.toObjectArray(),factHandle.getObject()));
+ if (storedEvals != null) {
+ record.addEvaluations(storedEvals);
+ factHandle.addPropertyDegrees(storedEvals);
+ }
+
+
+
+
+ //Call internal evaluator, if not done before
+ ConstraintKey[] keys = this.constraints.getConstraintKeys();
+ if (keys != null) {
+ Evaluation evalTest = factHandle.getPropertyDegree(keys[0]);
+ if (evalTest == null) {
+ Evaluation[] evals = this.constraints.isSatisfiedCachedRight( memory.getContext(),
+ leftTuple,
+ factory );
+ //B-constraints are 0 to N
+ //Each is evaluated and, if it is the first time, added to the object's handle
+ if (evals != null) {
+ for (Evaluation eval : evals) {
+ for (Evaluation subEval : eval.getEvalTree()) {
+ factHandle.addPropertyDegree(subEval);
+ }
+ record.addEvaluation(eval);
+ }
+ }
+
+ } else {
+
+ if (evalTest.getDegreeBit(Evaluation.EVAL) == null) {
+
+ //B-constraints are 0 to N
+ //As above, in case EVAL hasn't been called yet, but no need to add to the handle
+ Evaluation[] evals = this.constraints.isSatisfiedCachedRight( memory.getContext(),
+ leftTuple,
+ factory );
- case IFilterStrategy.HOLD : //TODO: HOLD
- break;
-
- case IFilterStrategy.PASS :
- this.sink.propagateAssertLeftTuple( leftTuple,
- rightTuple,
- context,
- workingMemory,
- factory,
- record,
- this.tupleMemoryEnabled );
+ if (evals != null) {
+ for (Evaluation eval : evals) {
+ record.addEvaluation(eval);
+ }
+ }
+
+ }
+ }
+ } else {
+ //EMPTY BETA CONSTRAINT!
+ }
+
+ //KEY MOVE, AND-ING THE PATTERN EVALS
+ mainRecord.addEvaluation(record);
+
+
+ System.out.println("Situation at join eval"+mainRecord.expand());
+
+
+ switch (this.filterStrat.doTry(mainRecord)) {
+ case IFilterStrategy.DROP : return;
+
+ case IFilterStrategy.HOLD : //TODO: HOLD
+ System.out.println("HOLD RULES @JOIN NODE"+this.getId());
+ System.out.println("Situation is "+mainRecord.expand());
+
+ mainRecord.setLeftTuple(leftTuple);
+ mainRecord.setRightTuple(rightTuple);
+ mainRecord.setFactory(factory);
+ mainRecord.setPropagationContext(context);
+ mainRecord.setWorkingMemory(workingMemory);
+ mainRecord.addObserver(this);
+
+ break;
+
+ case IFilterStrategy.PASS :
+ this.sink.propagateAssertLeftTuple( leftTuple,
+ rightTuple,
+ context,
+ workingMemory,
+ factory,
+ mainRecord,
+ this.tupleMemoryEnabled );
- break;
- default : return;
- }
-
+ break;
+ default : return;
+ }
+
+
+
+
}
this.constraints.resetTuple( memory.getContext() );
@@ -280,21 +365,82 @@
factHandle );
int i = 0;
for ( ImperfectLeftTuple leftTuple = (ImperfectLeftTuple) memory.getLeftTupleMemory().getFirst( rightTuple ); leftTuple != null; leftTuple = (ImperfectLeftTuple) leftTuple.getNext() ) {
- IDegree ans = this.constraints.isSatisfiedCachedRight( memory.getContext(),
- leftTuple, factory );
- ConstraintKey key = this.constraints.getConstraintKey();
- EvalRecord clonedRecord = record.clone();
- Evaluation eval = new Evaluation(this.getId(),ans,key,factory.getMergeStrategy(),factory.getNullHandlingStrategy());
- clonedRecord.addEvaluation(eval);
- clonedRecord.addEvaluations(leftTuple.getRecord());
+ EvalRecord mainRecord = leftTuple.getRecord().clone();
- switch (this.filterStrat.doTry(record.getMainEval())) {
+
+ Collection<Evaluation> storedEvals = this.getGammaMemory().retrieve(new ArgList(leftTuple.toObjectArray(),factHandle.getObject()));
+ if (storedEvals != null) {
+ record.addEvaluations(storedEvals);
+ factHandle.addPropertyDegrees(storedEvals);
+ }
+
+
+
+
+ //Call internal evaluator, if not done before
+ ConstraintKey[] keys = this.constraints.getConstraintKeys();
+ if (keys != null) {
+ Evaluation evalTest = factHandle.getPropertyDegree(keys[0]);
+ if (evalTest == null) {
+ Evaluation[] evals = this.constraints.isSatisfiedCachedRight( memory.getContext(),
+ leftTuple,
+ factory );
+ //B-constraints are 0 to N
+ //Each is evaluated and, if it is the first time, added to the object's handle
+ if (evals != null) {
+ for (Evaluation eval : evals) {
+ for (Evaluation subEval : eval.getEvalTree()) {
+ factHandle.addPropertyDegree(subEval);
+ }
+ record.addEvaluation(eval);
+ }
+ }
+
+ } else {
+
+ if (evalTest.getDegreeBit(Evaluation.EVAL) == null) {
+
+ //B-constraints are 0 to N
+ //As above, in case EVAL hasn't been called yet, but no need to add to the handle
+ Evaluation[] evals = this.constraints.isSatisfiedCachedRight( memory.getContext(),
+ leftTuple,
+ factory );
+
+ if (evals != null) {
+ for (Evaluation eval : evals) {
+ record.addEvaluation(eval);
+ }
+ }
+
+ }
+ }
+ } else {
+ //EMPTY BETA CONSTRAINT!
+ }
+
+ //KEY MOVE, AND-ING THE PATTERN EVALS
+ mainRecord.addEvaluation(record);
+
+
+ System.out.println("Situation at join eval"+mainRecord.expand());
+
+ switch (this.filterStrat.doTry(mainRecord)) {
case IFilterStrategy.DROP : return;
case IFilterStrategy.HOLD : //TODO: HOLD
+ System.out.println("HOLD RULES @JOIN NODE"+this.getId());
+ System.out.println("Situation is "+mainRecord.expand());
+
+ mainRecord.setLeftTuple(leftTuple);
+ mainRecord.setRightTuple(rightTuple);
+ mainRecord.setFactory(factory);
+ mainRecord.setPropagationContext(context);
+ mainRecord.setWorkingMemory(workingMemory);
+ mainRecord.addObserver(this);
+
break;
case IFilterStrategy.PASS :
@@ -303,7 +449,7 @@
context,
workingMemory,
factory,
- clonedRecord,
+ mainRecord,
this.tupleMemoryEnabled );
break;
@@ -319,6 +465,59 @@
+
+
+
+
+
+ public void update(Observable watcher, Object info) {
+ EvalRecord record = (EvalRecord) watcher;
+ System.out.println("**************************************************************UPDATE @JOIN NODE");
+ switch (this.filterStrat.doTry(record)) {
+ case IFilterStrategy.DROP :
+ record.deleteObserver(this);
+ return;
+
+ case IFilterStrategy.HOLD :
+ //do nothing
+ return;
+
+ case IFilterStrategy.PASS :
+ //go on
+ record.deleteObserver(this);
+ //throw new RuntimeException("Awakened objeect");
+ //TODO
+ if (record.getRightTuple() != null)
+ this.sink.propagateAssertLeftTuple( record.getLeftTuple(),
+ record.getRightTuple(),
+ record.getPropagationContext(),
+ record.getWorkingMemory(),
+ record.getFactory(),
+ record,
+ this.tupleMemoryEnabled );
+ else
+ this.sink.propagateAssertLeftTuple( record.getLeftTuple(),
+ record.getPropagationContext(),
+ record.getWorkingMemory(),
+ record.getFactory(),
+ record,
+ this.tupleMemoryEnabled );
+ //break;
+ default : return;
+
+ }
+
+
+ // propagate
+ }
+
+
+ protected GammaMemory getGammaMemory() {
+ return this.gammaMemory;
+ }
+
+
+
/**
* Retract a FactHandleImpl. Iterates the referenced TupleMatches stored in
* the handle's ObjectMatches retracting joined tuples.
@@ -413,6 +612,22 @@
return "[JoinNode(" + this.getId() + ") - " + ((ObjectTypeNode) source).getObjectType() + "]";
}
+
+
+
+ public EvaluationTemplate getEvaluationTemplate(ConstraintKey key) {
+ return this.constraints.getEvalTemplate(key);
+ }
+
+
+ public Collection<Evaluation> getStoredEvals(ArgList args) {
+ return getGammaMemory().retrieve(args);
+ }
+
+ public void storeEvaluation(ArgList args, Evaluation prepareEval) {
+ getGammaMemory().store(args, prepareEval);
+ }
+
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ModusPonensNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ModusPonensNode.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ModusPonensNode.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -0,0 +1,152 @@
+package org.drools.reteoo;
+
+import java.util.Collection;
+import java.util.Map;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.common.BetaConstraints;
+import org.drools.common.EmptyBetaConstraints;
+import org.drools.common.ImperfectFactHandle;
+import org.drools.common.ImplicationBetaConstraint;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.degrees.IDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.reteoo.builder.BuildContext;
+import org.drools.reteoo.filters.IFilterStrategy;
+import org.drools.rule.Behavior;
+import org.drools.spi.PropagationContext;
+
+public class ModusPonensNode extends JoinNode {
+
+
+
+ public ModusPonensNode(final int id,
+ final LeftTupleSource leftInput,
+ final Behavior[] behaviors,
+ IDegreeFactory factory,
+ final BuildContext context) {
+ super(id,
+ leftInput,
+ //new ImplicationObjectSource(),
+ null,
+ new ImplicationBetaConstraint(factory, factory.True(), context),
+ behaviors,
+ context);
+
+ Map<String,String> ruleDetails = context.getRule().getMetaAttributes();
+
+ String dstr = ruleDetails.get("degree");
+ if (dstr != null)
+ ((ImplicationBetaConstraint) this.constraints).setPriorDegree(factory.buildDegree(Float.parseFloat(dstr)));
+
+ String fstr = ruleDetails.get("filterStrat");
+ try {
+ if (fstr != null) {
+ IFilterStrategy overrideStrat = (IFilterStrategy) Class.forName(fstr).newInstance();
+ if (overrideStrat != null)
+ filterStrat = overrideStrat;
+ }
+ } catch (Exception e) {
+ throw new RuntimeDroolsException(e);
+ }
+
+
+ }
+
+ public void attach() {
+ this.leftInput.addTupleSink( this );
+ }
+
+
+
+
+
+
+
+
+ public void assertLeftTuple(ImperfectLeftTuple leftTuple,
+ PropagationContext context, InternalWorkingMemory workingMemory,
+ IDegreeFactory factory) {
+
+ final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
+
+ if ( this.tupleMemoryEnabled ) {
+ memory.getLeftTupleMemory().add( leftTuple );
+ }
+
+
+
+
+ EvalRecord premiseRecord = leftTuple.getRecord().clone();
+
+ Evaluation implEval = this.constraints.isSatisfiedCachedRight( memory.getContext(),
+ leftTuple,
+ factory )[0];
+
+ ArgList args = new ArgList(leftTuple.toObjectArray());
+ Collection<Evaluation> storedEvals = this.getGammaMemory().retrieve(args);
+
+ if (storedEvals != null) {
+ for (Evaluation e : storedEvals)
+ implEval.merge(e);
+ }
+
+
+
+ EvalRecord mpRecord = new EvalRecord(this.id,factory.getModusPonensOp(),factory.getMergeStrategy(),factory.getNullHandlingStrategy());
+ mpRecord.addEvaluation(premiseRecord);
+ mpRecord.addEvaluation(implEval);
+
+
+
+
+ switch (this.filterStrat.doTry(mpRecord)) {
+ case IFilterStrategy.DROP : return;
+
+ case IFilterStrategy.HOLD : //TODO: HOLD
+ System.out.println("HOLD RULES @MP NODE"+this.getId());
+ System.out.println("Situation is "+mpRecord.expand());
+
+ mpRecord.setLeftTuple(leftTuple);
+ mpRecord.setFactory(factory);
+ mpRecord.setPropagationContext(context);
+ mpRecord.setWorkingMemory(workingMemory);
+ mpRecord.addObserver(this);
+
+ break;
+
+ case IFilterStrategy.PASS :
+ this.sink.propagateAssertLeftTuple( leftTuple,
+ context,
+ workingMemory,
+ factory,
+ mpRecord,
+ this.tupleMemoryEnabled );
+
+ break;
+ default : return;
+ }
+
+
+
+ this.constraints.resetTuple( memory.getContext() );
+ }
+
+
+
+
+
+
+
+
+ public void networkUpdated() {
+ //this.rightInput.networkUpdated();
+ this.leftInput.networkUpdated();
+ }
+
+
+
+
+
+
+}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -103,7 +103,8 @@
final LeftTupleSource source,
final Rule rule,
final GroupElement subrule,
- final BuildContext context) {
+ final BuildContext context
+ ) {
super( id,
context.getPartitionId(),
context.getRuleBase().getConfiguration().isMultithreadEvaluation() );
@@ -177,10 +178,12 @@
IDegreeFactory factory) {
EvalRecord record = tuple.getRecord();
+ record.setNodeId(this.getId());
+
System.out.println(this.rule);
- System.out.println(""+this.hashCode() + record);
+ System.out.println(""+this.hashCode() + record.expand());
- IDegree degree = record.getOverallDegree();
+ IDegree degree = record.getDegree();
// @FIXME
final LeftTuple cloned = tuple;//new LeftTuple( tuple );
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -115,8 +115,17 @@
InternalWorkingMemory workingMemory, IDegreeFactory factory,
EvalRecord record, boolean leftTupleMemoryEnabled) {
- doPropagateAssertLeftTuple( context, workingMemory, factory, record,
- new ImperfectLeftTuple( factHandle, this.sink, leftTupleMemoryEnabled, record ) );
+ EvalRecord masterRecord = new EvalRecord(-1,factory.getAndOperator(),factory.getMergeStrategy(),factory.getNullHandlingStrategy());
+ masterRecord.addEvaluation(record);
+
+// System.out.println("--------------------------------------");
+// System.out.println(record.expand());
+// System.out.println("--------------------------------------");
+// System.out.println(masterRecord.expand());
+// System.out.println("--------------------------------------");
+// if (1 == 1) throw new RuntimeException();
+ doPropagateAssertLeftTuple( context, workingMemory, factory, masterRecord,
+ new ImperfectLeftTuple( factHandle, this.sink, leftTupleMemoryEnabled, masterRecord ) );
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/builder/ReteooRuleBuilder.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/builder/ReteooRuleBuilder.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/builder/ReteooRuleBuilder.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -20,16 +20,23 @@
import java.util.List;
import org.drools.InitialFact;
+import org.drools.RuleBase;
import org.drools.RuleIntegrationException;
import org.drools.RuleBaseConfiguration.EventProcessingMode;
import org.drools.base.ClassObjectType;
import org.drools.common.BaseNode;
+import org.drools.common.EmptyBetaConstraints;
import org.drools.common.InternalRuleBase;
+import org.drools.degrees.IDegree;
+import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.reteoo.ImperfectRuleBase;
+import org.drools.reteoo.ModusPonensNode;
import org.drools.reteoo.QueryTerminalNode;
import org.drools.reteoo.ReteooBuilder;
import org.drools.reteoo.RuleTerminalNode;
import org.drools.reteoo.TerminalNode;
import org.drools.rule.Accumulate;
+import org.drools.rule.Behavior;
import org.drools.rule.Collect;
import org.drools.rule.EntryPoint;
import org.drools.rule.EvalCondition;
@@ -155,26 +162,56 @@
subrule );
TerminalNode terminal = null;
+ ModusPonensNode mpNode = null;
if ( !(rule instanceof Query) ) {
- terminal = new RuleTerminalNode( context.getNextId(),
- context.getTupleSource(),
- rule,
- subrule,
- context );
- } else {
+
+
+ RuleBase ruleBase = context.getRuleBase();
+ if (ruleBase instanceof ImperfectRuleBase) {
+ IDegreeFactory factory = ((ImperfectRuleBase) ruleBase).getDegreeFactory();
+
+
+ mpNode = new ModusPonensNode(context.getNextId(),
+ context.getTupleSource(),
+ context.getBehaviors().toArray(new Behavior[context.getBehaviors().size()]),
+ factory,
+ context);
+ }
+
+ context.setTupleSource((ModusPonensNode) this.utils.attachNode(context, mpNode));
+
+
+
+ terminal = new RuleTerminalNode( context.getNextId(),
+ context.getTupleSource(),
+ rule,
+ subrule,
+ context );
+
+ } else {
+
terminal = new QueryTerminalNode( context.getNextId(),
context.getTupleSource(),
rule,
subrule,
context );
}
+
+
if ( context.getWorkingMemories().length == 0 ) {
+
((BaseNode) terminal).attach();
+
} else {
+
((BaseNode) terminal).attach( context.getWorkingMemories() );
+
}
+
+
+
((BaseNode) terminal).networkUpdated();
// adds the terminal no to the list of nodes created/added by this sub-rule
Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/AlwaysPassFilterStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/AlwaysPassFilterStrategy.java (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/AlwaysPassFilterStrategy.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -0,0 +1,30 @@
+package org.drools.reteoo.filters;
+
+import org.drools.reteoo.Evaluation;
+
+public class AlwaysPassFilterStrategy extends ImperfectFilterStrategy {
+
+
+ private static AlwaysPassFilterStrategy singleton = null;
+
+ public static AlwaysPassFilterStrategy getInstance() {
+ if (singleton == null)
+ singleton = new AlwaysPassFilterStrategy();
+ return singleton;
+ }
+
+
+ public AlwaysPassFilterStrategy() { }
+
+ @Override
+ public int doTry(Evaluation eval) {
+ return PASS;
+
+ }
+
+ @Override
+ public boolean isAllowed(Evaluation eval) {
+ return doTry(eval) == PASS;
+ }
+
+}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/FuzzyFilterStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/FuzzyFilterStrategy.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/FuzzyFilterStrategy.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -13,7 +13,7 @@
return singleton;
}
- protected FuzzyFilterStrategy() {
+ public FuzzyFilterStrategy() {
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/SimpleFilterStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/SimpleFilterStrategy.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/SimpleFilterStrategy.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -14,7 +14,7 @@
}
- protected SimpleFilterStrategy() { }
+ public SimpleFilterStrategy() { }
@Override
public int doTry(Evaluation eval) {
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/AndConstraint.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/AndConstraint.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/AndConstraint.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -108,7 +108,7 @@
return true;
}
- public IDegree isSatisfiedCachedLeft(ContextEntry context,
+ public Evaluation isSatisfiedCachedLeft(ContextEntry context,
InternalFactHandle handle, IDegreeFactory factory) {
int N1 = this.alphaConstraints.length;
@@ -123,15 +123,12 @@
factory);
for ( int i = 0; i < N2; i++ )
//TODO: Extend BetaConstraints as well..
- evals[N1+i] = new Evaluation(0,
- this.betaConstraints[i].isSatisfiedCachedLeft(
+ evals[N1+i] = this.betaConstraints[i].isSatisfiedCachedLeft(
((MultiFieldConstraintContextEntry) context).betas[i],
handle,
- factory),
- null,factory.getMergeStrategy(),factory.getNullHandlingStrategy());
+ factory);
-
- return getTemplate().spawn(evals).getDegree();
+ return getTemplate().spawn(evals);
}
@@ -158,7 +155,7 @@
}
- public IDegree isSatisfiedCachedRight(LeftTuple tuple,
+ public Evaluation isSatisfiedCachedRight(LeftTuple tuple,
ContextEntry context, IDegreeFactory factory) {
int N1 = this.alphaConstraints.length;
@@ -173,16 +170,13 @@
factory);
for ( int i = 0; i < N2; i++ )
//TODO: Extend Beta as well
- evals[N1+i] = new Evaluation(0,
+ evals[N1+i] =
this.betaConstraints[i].isSatisfiedCachedRight(
tuple,
((MultiFieldConstraintContextEntry) context).betas[i],
- factory),
-
- null,factory.getMergeStrategy(),factory.getNullHandlingStrategy());
-
+ factory);
- return getTemplate().spawn(evals).getDegree();
+ return getTemplate().spawn(evals);
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/LiteralConstraint.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -193,15 +193,16 @@
- public EvaluationTemplate buildEvaluationTemplate(int id, Map<ConstraintKey, Set<String>> dependencies, IDegreeFactory factory) {
+ public EvaluationTemplate buildEvaluationTemplate(int id, Map<ConstraintKey, Set<String>> dependencies, IDegreeFactory factory) {
Set<String> deps;
if (dependencies == null)
deps = Collections.emptySet();
else
deps = dependencies.get(this.getConstraintKey());
- this.template = new SingleEvaluationTemplate(id,this.getConstraintKey(),deps,factory.getMergeStrategy(),factory.getNullHandlingStrategy());
- return template;
- }
+
+ this.template = new SingleEvaluationTemplate(id,this.getConstraintKey(),deps,factory.getMergeStrategy(),factory.getNullHandlingStrategy());
+ return template;
+ }
public EvaluationTemplate getEvalTemplate(ConstraintKey key) {
if (this.template.getConstraintKey().equals(key))
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/LiteralRestriction.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -265,7 +265,7 @@
public ConstraintKey getConstraintKey() {
if (singletonKey == null) {
- singletonKey = new ConstraintKey(((ClassFieldReader) this.readAccessor).getFieldName(),this.getEvaluator().toString(),this.getField().toString());
+ singletonKey = new ConstraintKey(((ClassFieldReader) this.readAccessor).getClassName()+"."+((ClassFieldReader) this.readAccessor).getFieldName(),this.getEvaluator().toString(),this.getField().toString());
}
return singletonKey;
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/MultiRestrictionFieldConstraint.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -133,10 +133,10 @@
handle );
}
- public IDegree isSatisfiedCachedLeft(ContextEntry context,
+ public Evaluation isSatisfiedCachedLeft(ContextEntry context,
InternalFactHandle handle, IDegreeFactory factory) {
- return this.restrictions.isSatisfiedCachedLeft( context,
- handle, factory );
+ return this.getTemplate().spawn(this.restrictions.isSatisfiedCachedLeft( context,
+ handle, factory ));
}
public boolean isAllowedCachedRight(final LeftTuple tuple,
@@ -145,10 +145,10 @@
context );
}
- public IDegree isSatisfiedCachedRight(LeftTuple tuple,
+ public Evaluation isSatisfiedCachedRight(LeftTuple tuple,
ContextEntry context, IDegreeFactory factory) {
- return this.restrictions.isSatisfiedCachedRight( tuple,
- context, factory );
+ return this.getTemplate().spawn(this.restrictions.isSatisfiedCachedRight( tuple,
+ context, factory ));
}
public Object clone() {
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/OrConstraint.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/OrConstraint.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/OrConstraint.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -205,7 +205,7 @@
return getTemplate().spawn(evals);
}
- public IDegree isSatisfiedCachedLeft(ContextEntry context,
+ public Evaluation isSatisfiedCachedLeft(ContextEntry context,
InternalFactHandle handle, IDegreeFactory factory) {
int N1 = this.alphaConstraints.length;
@@ -220,19 +220,18 @@
factory);
for ( int i = 0; i < N2; i++ )
//TODO : beta...
- evals[N1+i] = new Evaluation(0,
+ evals[N1+i] =
this.betaConstraints[i].isSatisfiedCachedLeft(
((MultiFieldConstraintContextEntry) context).betas[i],
handle,
- factory)
- , null,factory.getMergeStrategy(),factory.getNullHandlingStrategy());
+ factory);
- return getTemplate().spawn(evals).getDegree();
+ return getTemplate().spawn(evals);
}
- public IDegree isSatisfiedCachedRight(LeftTuple tuple,
+ public Evaluation isSatisfiedCachedRight(LeftTuple tuple,
ContextEntry context, IDegreeFactory factory) {
int N1 = this.alphaConstraints.length;
@@ -247,15 +246,14 @@
factory);
for ( int i = 0; i < N2; i++ )
//TODO: beta...
- evals[N1+i] = new Evaluation(0,
+ evals[N1+i] =
this.betaConstraints[i].isSatisfiedCachedRight(
tuple,
((MultiFieldConstraintContextEntry) context).betas[i],
- factory),
- null,factory.getMergeStrategy(),factory.getNullHandlingStrategy());
+ factory);
- return getTemplate().spawn(evals).getDegree();
+ return getTemplate().spawn(evals);
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/PredicateConstraint.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -49,8 +49,7 @@
* @author etirelli
*/
public class PredicateConstraint extends MutableTypeConstraint
- implements
- Restriction,
+ implements
Wireable,
Externalizable {
@@ -326,9 +325,9 @@
}
}
- public IDegree isSatisfiedCachedLeft(ContextEntry context,
+ public Evaluation isSatisfiedCachedLeft(ContextEntry context,
InternalFactHandle handle, IDegreeFactory factory) {
- return factory.fromBoolean(this.isAllowedCachedLeft(context, handle));
+ return this.getTemplate().spawn(factory.fromBoolean(this.isAllowedCachedLeft(context, handle)));
}
@@ -348,9 +347,9 @@
}
}
- public IDegree isSatisfiedCachedRight(LeftTuple tuple,
+ public Evaluation isSatisfiedCachedRight(LeftTuple tuple,
ContextEntry context, IDegreeFactory factory) {
- return factory.fromBoolean(this.isAllowedCachedRight(tuple, context));
+ return getTemplate().spawn(factory.fromBoolean(this.isAllowedCachedRight(tuple, context)));
}
public Object clone() {
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/ReturnValueConstraint.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -180,16 +180,16 @@
}
}
- public IDegree isSatisfiedCachedLeft(ContextEntry context,
+ public Evaluation isSatisfiedCachedLeft(ContextEntry context,
InternalFactHandle handle, IDegreeFactory factory) {
try {
final ReturnValueContextEntry ctx = (ReturnValueContextEntry) context;
- return this.restriction.isSatisfied( this.readAccessor,
+ return getTemplate().spawn(this.restriction.isSatisfied( this.readAccessor,
handle,
ctx.getTuple(),
ctx.getWorkingMemory(),
ctx,
- factory);
+ factory));
} catch ( final Exception e ) {
throw new RuntimeDroolsException( "Exception executing ReturnValue constraint " + this.restriction + " : " + e.getMessage(),
e );
@@ -213,16 +213,16 @@
}
- public IDegree isSatisfiedCachedRight(LeftTuple tuple,
+ public Evaluation isSatisfiedCachedRight(LeftTuple tuple,
ContextEntry context, IDegreeFactory factory) {
try {
final ReturnValueContextEntry ctx = (ReturnValueContextEntry) context;
- return this.restriction.isSatisfied( this.readAccessor,
+ return this.getTemplate().spawn(this.restriction.isSatisfied( this.readAccessor,
ctx.getHandle(),
tuple,
ctx.getWorkingMemory(),
ctx,
- factory);
+ factory));
} catch ( final Exception e ) {
throw new RuntimeDroolsException( "Exception executing ReturnValue constraint " + this.restriction + " : " + e.getMessage(),
e );
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/VariableConstraint.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/VariableConstraint.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/VariableConstraint.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -134,18 +134,18 @@
return getTemplate().spawn(deg);
}
- public IDegree isSatisfiedCachedLeft(ContextEntry context,
+ public Evaluation isSatisfiedCachedLeft(ContextEntry context,
InternalFactHandle handle, IDegreeFactory factory) {
- return this.restriction.isSatisfiedCachedLeft( context,
+ return this.getTemplate().spawn(this.restriction.isSatisfiedCachedLeft( context,
handle,
- factory);
+ factory));
}
- public IDegree isSatisfiedCachedRight(LeftTuple tuple,
+ public Evaluation isSatisfiedCachedRight(LeftTuple tuple,
ContextEntry context, IDegreeFactory factory) {
- return this.restriction.isSatisfiedCachedRight( tuple,
+ return this.getTemplate().spawn(this.restriction.isSatisfiedCachedRight( tuple,
context,
- factory);
+ factory));
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/VariableRestriction.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/VariableRestriction.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/rule/VariableRestriction.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -23,6 +23,8 @@
import java.util.Collection;
import java.util.LinkedList;
+import org.drools.base.ClassFieldAccessor;
+import org.drools.base.ClassFieldReader;
import org.drools.base.ValueType;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
@@ -635,8 +637,10 @@
private ConstraintKey singletonKey = null;
public ConstraintKey getConstraintKey() {
- if (singletonKey == null)
- singletonKey = new ConstraintKey(readAccessor.toString(),evaluator.toString(),declaration.toString());
+ if (singletonKey == null) {
+ ClassFieldReader cfa = (ClassFieldReader) readAccessor;
+ singletonKey = new ConstraintKey(cfa.getClassName()+"."+cfa.getFieldName(),evaluator.toString(),declaration.getIdentifier());
+ }
return singletonKey;
}
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/spi/BetaNodeFieldConstraint.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/spi/BetaNodeFieldConstraint.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/spi/BetaNodeFieldConstraint.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -16,9 +16,15 @@
* limitations under the License.
*/
+import java.util.Map;
+import java.util.Set;
+
import org.drools.common.InternalFactHandle;
import org.drools.degrees.IDegree;
import org.drools.degrees.factory.IDegreeFactory;
+import org.drools.reteoo.ConstraintKey;
+import org.drools.reteoo.Evaluation;
+import org.drools.reteoo.EvaluationTemplate;
import org.drools.reteoo.LeftTuple;
import org.drools.rule.ContextEntry;
@@ -29,17 +35,19 @@
public boolean isAllowedCachedLeft(ContextEntry context,
InternalFactHandle handle);
- public IDegree isSatisfiedCachedLeft(ContextEntry context,
+ public Evaluation isSatisfiedCachedLeft(ContextEntry context,
InternalFactHandle handle,
IDegreeFactory factory);
public boolean isAllowedCachedRight(LeftTuple tuple,
ContextEntry context);
- public IDegree isSatisfiedCachedRight(LeftTuple tuple,
+ public Evaluation isSatisfiedCachedRight(LeftTuple tuple,
ContextEntry context,
IDegreeFactory factory);
public ContextEntry createContextEntry();
+
+ public EvaluationTemplate buildEvaluationTemplate(int id, Map<ConstraintKey, Set<String>> dependencies, IDegreeFactory factory);
}
\ No newline at end of file
Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -23,6 +23,7 @@
import org.drools.FactHandle;
import org.drools.WorkingMemory;
import org.drools.degrees.IDegree;
+import org.drools.reteoo.ArgList;
import org.drools.reteoo.Evaluation;
import org.drools.rule.Declaration;
import org.drools.rule.Rule;
@@ -132,7 +133,13 @@
public IDegree getConsequenceDegree();
- public void inject(Object object, String field, String op, String value);
+ public void inject(Object arg, String field, String op, String value);
+
+ public void inject(Object[] args, String field, String op, String value);
+
+ public void inject(Object arg, String key);
+
+ public void inject(Object[] args, String key);
public void setConsequenceDegree(IDegree deg);
Modified: labs/jbossrules/branches/DroolsChance/drools-guvnor/src/main/java/org/drools/guvnor/public/version.txt
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-guvnor/src/main/java/org/drools/guvnor/public/version.txt 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-guvnor/src/main/java/org/drools/guvnor/public/version.txt 2009-04-17 17:02:02 UTC (rev 26123)
@@ -1 +1 @@
-5.0.0.SNAPSHOT 25662M
\ No newline at end of file
+5.0.0.SNAPSHOT 25662:25943M
\ No newline at end of file
Modified: labs/jbossrules/branches/DroolsChance/drools-templates/src/test/java/org/drools/template/parser/ExternalSheetListenerTest.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-templates/src/test/java/org/drools/template/parser/ExternalSheetListenerTest.java 2009-04-17 15:26:54 UTC (rev 26122)
+++ labs/jbossrules/branches/DroolsChance/drools-templates/src/test/java/org/drools/template/parser/ExternalSheetListenerTest.java 2009-04-17 17:02:02 UTC (rev 26123)
@@ -35,6 +35,7 @@
import org.drools.spi.GlobalResolver;
import org.drools.time.SessionClock;
import org.drools.degrees.IDegree;
+import org.drools.reteoo.ArgList;
public class ExternalSheetListenerTest extends TestCase {
@@ -442,7 +443,7 @@
- public void inject(String rule, Object object, ConstraintKey key, IDegree degree) {
+ public void inject(String rule, ArgList args, ConstraintKey key, IDegree degree) {
// TODO Auto-generated method stub
}
More information about the jboss-svn-commits
mailing list