[jboss-svn-commits] JBL Code SVN: r26190 - in labs/jbossrules/branches/DroolsChance: drools-core/src/main/java/org/drools/base and 11 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Apr 21 12:03:09 EDT 2009


Author: dsotty
Date: 2009-04-21 12:03:09 -0400 (Tue, 21 Apr 2009)
New Revision: 26190

Added:
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/IntervalDegree.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IntervalDegreeFactory.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/DefaultIntervalMergeStrategy.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/DefaultIntervalNullHandlingStrategy.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalEquivOperator.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalExistsOperator.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForAnyOperator.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForallOperator.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalIntersectionOperator.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasAndOperator.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasOrOperator.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMaxOrOperator.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMinAndOperator.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalModusPonensOperator.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalNegationOperator.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/DefaultIntervalFilterStrategy.java
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/chance/TestDegrees.java
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/base/BaseImperfectEvaluator.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/DefaultAgenda.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IDegreeFactory.java
   labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/SimpleDegreeFactory.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/ImperfectAgendaItem.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/spi/KnowledgeHelper.java
   labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/test.packagebuilder.conf
   labs/jbossrules/branches/DroolsChance/drools-guvnor/src/main/java/org/drools/guvnor/public/version.txt
Log:
interval degrees + operators (alpha version)
test on degree combination by operators

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-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -299,6 +299,8 @@
             setMaxThreads( StringUtils.isEmpty( value ) ? -1 : Integer.parseInt( value ) );
         } else if ( name.equals( "drools.eventProcessingMode" ) ) {
             setEventProcessingMode( EventProcessingMode.determineAssertBehaviour( StringUtils.isEmpty( value ) ? "cloud" : value ) );
+        } else if ( name.equals( "drools.imperfect.factory" ) ) {
+            setFactoryName(value);
         }
     }
 

Modified: 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	2009-04-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/BaseImperfectEvaluator.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -16,7 +16,7 @@
 
 
 /**
- * BaseUncertainEvaluator implements the uncertain evaluators
+ * BaseImperfectEvaluator implements the imperfect evaluators
  * by calling the crisp ones and then converting the boolean
  * result into the used truth degree
  * 

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-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/DefaultKnowledgeHelper.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -61,6 +61,7 @@
     private InternalWorkingMemoryActions workingMemory;
     
     private IDegree						 consequenceDegree;
+    private Evaluation					 evaluation;
 
     public DefaultKnowledgeHelper() {
 
@@ -327,6 +328,15 @@
 				 new ConstraintKey(key),
 				 getConsequenceDegree());		
 	}
+	
+	
+	public Evaluation getEvaluation() {
+		return evaluation;
+	}
+	
+	public void setEvaluation(Evaluation eval) {
+		this.evaluation = eval;
+	}
     
     
 }

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-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/base/SequentialKnowledgeHelper.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -245,4 +245,14 @@
 		// TODO Auto-generated method stub
 		
 	}
+
+	public Evaluation getEvaluation() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public void setEvaluation(Evaluation eval) {
+		// TODO Auto-generated method stub
+		
+	}
 }

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/DefaultAgenda.java	2009-04-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/common/DefaultAgenda.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -934,8 +934,10 @@
         	//TODO:
         	//System.out.println(this.getClass()+"Hacked fireActivation to insert consequence degree");
         	
-        	if (activation instanceof ImperfectAgendaItem)
+        	if (activation instanceof ImperfectAgendaItem) {
         		this.knowledgeHelper.setConsequenceDegree(((ImperfectAgendaItem) activation).getDegree());
+        		this.knowledgeHelper.setEvaluation(((ImperfectAgendaItem) activation).getEvaluation());
+        	}
         	
             this.knowledgeHelper.setActivation( activation );
             activation.getRule().getConsequence().evaluate( this.knowledgeHelper,

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/IntervalDegree.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/IntervalDegree.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/IntervalDegree.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,76 @@
+package org.drools.degrees;
+
+public class IntervalDegree implements IDegree {
+	
+	
+	private float tau;
+	private float phi;
+
+	
+	public IntervalDegree(float low, float upp) {
+		this.setTau(low);
+		this.setPhi(1.0f-upp);
+	}
+
+	
+	
+	public SimpleDegree getDegree() {
+		return new SimpleDegree(getTau());
+	}
+
+	
+	//TODO : Consider... beware...
+	public boolean toBoolean() {
+		return getUpp() > 0.5;
+	}
+
+
+	public String toString() {		
+		return new StringBuilder("[").append(getLow()).append(',').append(getUpp()).append(']').toString();
+	}
+	
+
+	/**
+	 * @param phi the phi to set
+	 */
+	protected void setPhi(float phi) {
+		this.phi = phi;
+	}
+
+
+
+	/**
+	 * @return the phi
+	 */
+	public float getPhi() {
+		return phi;
+	}
+
+
+
+	/**
+	 * @param tau the tau to set
+	 */
+	protected void setTau(float tau) {
+		this.tau = tau;
+	}
+
+
+
+	/**
+	 * @return the tau
+	 */
+	public float getTau() {
+		return tau;
+	}
+	
+	
+	public float getLow() {
+		return getTau();
+	}
+	
+	public float getUpp() {
+		return 1.0f - getPhi();
+	}
+
+}

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IDegreeFactory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IDegreeFactory.java	2009-04-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IDegreeFactory.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -13,8 +13,6 @@
 	
 	
 	
-	
-	
 	public IDegree buildDegree(float val);
 	
 	
@@ -24,6 +22,8 @@
 	
 	public IDegree Unknown();
 	
+	public IDegree Random();
+	
 	public IDegree fromBoolean(boolean b);
 	
 	public IDegreeCombiner getAndOperator();

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IntervalDegreeFactory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IntervalDegreeFactory.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/IntervalDegreeFactory.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,114 @@
+package org.drools.degrees.factory;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.operators.IDegreeCombiner;
+import org.drools.degrees.operators.IMergeStrategy;
+import org.drools.degrees.operators.INullHandlingStrategy;
+import org.drools.degrees.operators.intervals.DefaultIntervalMergeStrategy;
+import org.drools.degrees.operators.intervals.DefaultIntervalNullHandlingStrategy;
+import org.drools.degrees.operators.intervals.IntervalEquivOperator;
+import org.drools.degrees.operators.intervals.IntervalExistsOperator;
+import org.drools.degrees.operators.intervals.IntervalForAnyOperator;
+import org.drools.degrees.operators.intervals.IntervalForallOperator;
+import org.drools.degrees.operators.intervals.IntervalIntersectionOperator;
+import org.drools.degrees.operators.intervals.IntervalLukasAndOperator;
+import org.drools.degrees.operators.intervals.IntervalLukasOrOperator;
+import org.drools.degrees.operators.intervals.IntervalMaxOrOperator;
+import org.drools.degrees.operators.intervals.IntervalMinAndOperator;
+import org.drools.degrees.operators.intervals.IntervalModusPonensOperator;
+import org.drools.degrees.operators.intervals.IntervalNegationOperator;
+import org.drools.reteoo.filters.DefaultIntervalFilterStrategy;
+import org.drools.reteoo.filters.IFilterStrategy;
+
+public class IntervalDegreeFactory implements IDegreeFactory {
+
+	
+	public static IDegree FALSE = new IntervalDegree(0,0);
+	public static IDegree TRUE = new IntervalDegree(1,1);
+	public static IDegree UNKNOWN = new IntervalDegree(0,1);
+	
+	public IDegree False() {
+		return FALSE;
+	}
+
+	public IDegree True() {
+		return TRUE;
+	}
+
+	public IDegree Unknown() {
+		return UNKNOWN;
+	}
+	
+	public IDegree Random() {
+		float low = (float) Math.random();
+		float upp = low + (1-low) * ((float) Math.random());
+		return new IntervalDegree(low,upp);
+	}
+
+	public IDegree buildDegree(float val) {
+		return new IntervalDegree(val,val);
+	}
+
+	public IDegree fromBoolean(boolean b) {
+		return b ? True() : False();
+	}
+
+	public IDegreeCombiner getAggregator() {
+		return new IntervalIntersectionOperator();
+	}
+
+	public IDegreeCombiner getAndOperator() {
+		return new IntervalLukasAndOperator();
+	}
+
+	
+	public IFilterStrategy getDefaultStrategy() {
+		return new DefaultIntervalFilterStrategy();
+	}
+
+	public IDegreeCombiner getEquivOperator() {
+		return new IntervalEquivOperator();
+	}
+
+	public IDegreeCombiner getExistsOperator() {
+		return new IntervalExistsOperator();
+	}
+
+	public IDegreeCombiner getForAnyOperator() {
+		return new IntervalForAnyOperator();
+	}
+
+	public IDegreeCombiner getForallOperator() {
+		return new IntervalForallOperator();
+	}
+
+	public IDegreeCombiner getMaxOrOperator() {
+		return new IntervalMaxOrOperator();
+	}
+
+	public IMergeStrategy getMergeStrategy() {
+		return new DefaultIntervalMergeStrategy();
+	}
+
+	public IDegreeCombiner getMinAndOperator() {
+		return new IntervalMinAndOperator();
+	}
+
+	public IDegreeCombiner getModusPonensOp() {
+		return new IntervalModusPonensOperator();
+	}
+
+	public IDegreeCombiner getNegationOperator() {
+		return new IntervalNegationOperator();
+	}
+
+	public INullHandlingStrategy getNullHandlingStrategy() {
+		return new DefaultIntervalNullHandlingStrategy();
+	}
+
+	public IDegreeCombiner getOrOperator() {
+		return new IntervalLukasOrOperator();
+	}
+
+}

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/SimpleDegreeFactory.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/SimpleDegreeFactory.java	2009-04-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/factory/SimpleDegreeFactory.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -1,6 +1,7 @@
 package org.drools.degrees.factory;
 
 import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
 import org.drools.degrees.SimpleDegree;
 import org.drools.degrees.operators.IDegreeCombiner;
 import org.drools.degrees.operators.IMergeStrategy;
@@ -21,21 +22,35 @@
 
 
 public class SimpleDegreeFactory implements IDegreeFactory {
-
 	
-	public IDegree buildDegree(float val) {
-		return new SimpleDegree(val);
+	public static IDegree FALSE = new SimpleDegree(0);
+	public static IDegree TRUE = new SimpleDegree(1);
+	
+	//BEWARE OF CWA
+	public static IDegree UNKNOWN = new SimpleDegree(0);
+	
+	public IDegree False() {
+		return FALSE;
 	}
 
-	public IDegree False() {
-		return new SimpleDegree(0);
+	public IDegree True() {
+		return TRUE;
 	}
 
+	public IDegree Unknown() {
+		return UNKNOWN;
+	}
 
-	public IDegree True() {
-		return new SimpleDegree(1);
+	
+	public IDegree Random() {
+		return new SimpleDegree((float) Math.random());
 	}
+	
+	public IDegree buildDegree(float val) {
+		return new SimpleDegree(val);
+	}
 
+	
 
 	public IDegree fromBoolean(boolean b) {
 		return b ? new SimpleDegree(1) : new SimpleDegree(0);
@@ -59,11 +74,9 @@
 		return new SimpleMaxOr();
 	}
 
-	public IDegree Unknown() {
-		return False();
-	}
 
 
+
 	public IDegreeCombiner getModusPonensOp() {
 		return new SimpleMinAnd();
 	}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/DefaultIntervalMergeStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/DefaultIntervalMergeStrategy.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/DefaultIntervalMergeStrategy.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,44 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.operators.IMergeStrategy;
+import org.drools.degrees.operators.INullHandlingStrategy;
+
+public class DefaultIntervalMergeStrategy implements IMergeStrategy {
+	
+	private IntervalIntersectionOperator op = new IntervalIntersectionOperator();
+
+	public IDegree eval(IDegree[] degrees, INullHandlingStrategy nullStrat) {
+		IDegree[] args = new IDegree[degrees.length];
+		for (int j = 0; j < degrees.length; j++) {
+			args[j] = degrees[j] != null ? degrees[j] : nullStrat.convertNull(); 
+		}
+		return op.eval(args);
+	}
+
+	public IDegree eval(IDegree[] args) {
+		return eval(args, new DefaultIntervalNullHandlingStrategy());
+	}
+
+	public IDegree eval(Collection<? extends IDegree> degrees) {
+		IDegree[] args = new IDegree[degrees.size()];
+		Iterator<? extends IDegree> iter = degrees.iterator();
+		INullHandlingStrategy nullStrat = new DefaultIntervalNullHandlingStrategy();
+		
+		int j = 0;
+		while (iter.hasNext()) {
+			IDegree deg = iter.next();
+			args[j++] = deg != null ? deg : nullStrat.convertNull(); 
+		}
+		return op.eval(args);
+	}
+
+	public String getName() {
+		return "i_intersect";
+	}
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/DefaultIntervalNullHandlingStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/DefaultIntervalNullHandlingStrategy.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/DefaultIntervalNullHandlingStrategy.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,14 @@
+package org.drools.degrees.operators.intervals;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.INullHandlingStrategy;
+
+public class DefaultIntervalNullHandlingStrategy implements
+		INullHandlingStrategy {
+
+	public IDegree convertNull() {
+		return IntervalDegreeFactory.UNKNOWN;
+	}
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalEquivOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalEquivOperator.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalEquivOperator.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,47 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalEquivOperator implements IDegreeCombiner {
+
+	public IDegree eval(IDegree[] args) {
+		if (args == null || args.length < 2)
+			return IntervalDegreeFactory.UNKNOWN;
+		
+		IntervalDegree a1 = (IntervalDegree) args[0];
+		IntervalDegree a2 = (IntervalDegree) args[1];
+		
+		if (a1.getUpp() < a2.getLow() || a2.getUpp() < a1.getLow())
+			return IntervalDegreeFactory.FALSE;
+		
+		float maxDist = Math.max(a2.getUpp()-a1.getLow(),a1.getUpp()-a2.getLow());
+		return new IntervalDegree(1-maxDist,1);
+		
+	}		
+
+	public IDegree eval(Collection<? extends IDegree> args) {
+		if (args == null || args.size() < 2)
+			return IntervalDegreeFactory.UNKNOWN;
+		
+		Iterator<? extends IDegree> iter = args.iterator();
+		IntervalDegree a1 = (IntervalDegree) iter.next();
+		IntervalDegree a2 = (IntervalDegree) iter.next();
+		
+		if (a1.getUpp() < a2.getLow() || a2.getUpp() < a1.getLow())
+			return IntervalDegreeFactory.FALSE;
+		
+		float maxDist = Math.max(a2.getUpp()-a1.getLow(),a1.getUpp()-a2.getLow());
+		return new IntervalDegree(1-maxDist,1);
+	}
+
+	public String getName() {
+		return "i_equiv";
+	}
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalExistsOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalExistsOperator.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalExistsOperator.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,49 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalExistsOperator implements IDegreeCombiner {
+
+	public IDegree eval(IDegree[] args) {
+		if (args == null || args.length == 0)
+			return IntervalDegreeFactory.UNKNOWN;
+		
+		float tau = 0;
+		float phi = 1.0f;
+		for (IDegree deg : args) {
+			IntervalDegree ival = (IntervalDegree) deg;
+			if (ival == null) 
+				continue;
+			tau = Math.max(tau,ival.getTau());
+			phi = Math.min(phi,ival.getPhi());
+		}
+		return new IntervalDegree(tau,1.0f-phi);
+	}
+
+	public IDegree eval(Collection<? extends IDegree> args) {
+		if (args == null || args.size() == 0)
+			return IntervalDegreeFactory.UNKNOWN;
+		
+		float tau = 0;
+		float phi = 1.0f;
+		for (IDegree deg : args) {
+			IntervalDegree ival = (IntervalDegree) deg;
+			if (ival == null) 
+				continue;
+			tau = Math.max(tau,ival.getTau());
+			phi = Math.min(phi,ival.getPhi());
+		}
+		return new IntervalDegree(tau,1.0f-phi);
+		
+	}
+
+	public String getName() {
+		return "i_exists";
+	}
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForAnyOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForAnyOperator.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForAnyOperator.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,50 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalForAnyOperator implements IDegreeCombiner {
+
+	public IDegree eval(IDegree[] args) {		
+		if (args == null || args.length == 0)
+			return IntervalDegreeFactory.UNKNOWN;
+		
+		float low = 0;
+		float upp = 0;
+		for (IDegree deg : args) {
+			IntervalDegree ival = (IntervalDegree) deg;
+			
+			low += ival.getLow();
+			upp += ival.getUpp();
+		}		
+		low /= args.length;
+		upp /= args.length;
+		return new IntervalDegree(low,upp);
+	}
+
+	public IDegree eval(Collection<? extends IDegree> args) {
+		if (args == null || args.size() == 0)
+			return IntervalDegreeFactory.UNKNOWN;
+		
+		float low = 0;
+		float upp = 0;
+		for (IDegree deg : args) {
+			IntervalDegree ival = (IntervalDegree) deg;
+			
+			low += ival.getLow();
+			upp += ival.getUpp();
+		}		
+		low /= args.size();
+		upp /= args.size();
+		return new IntervalDegree(low,upp);
+	}
+
+	public String getName() {
+		return "i_forAny";
+	}
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForallOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForallOperator.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalForallOperator.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,48 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalForallOperator implements IDegreeCombiner {
+
+	public IDegree eval(IDegree[] args) {
+		if (args == null || args.length == 0)
+			return IntervalDegreeFactory.UNKNOWN;
+		
+		float tau = 1.0f;
+		float phi = 0.0f;
+		for (IDegree deg : args) {
+			IntervalDegree ival = (IntervalDegree) deg;
+			if (ival == null) 
+				continue;
+			tau = Math.min(tau,ival.getTau());
+			phi = Math.max(phi,ival.getPhi());
+		}
+		return new IntervalDegree(tau,1.0f-phi);
+	}
+
+	public IDegree eval(Collection<? extends IDegree> args) {
+		if (args == null || args.size() == 0)
+			return IntervalDegreeFactory.UNKNOWN;
+		
+		float tau = 1.0f;
+		float phi = 0.0f;
+		for (IDegree deg : args) {
+			IntervalDegree ival = (IntervalDegree) deg;
+			if (ival == null) 
+				continue;
+			tau = Math.min(tau,ival.getTau());
+			phi = Math.max(phi,ival.getPhi());
+		}
+		return new IntervalDegree(tau,1.0f-phi);
+	}
+
+	public String getName() {
+		return "i_forall";
+	}
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalIntersectionOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalIntersectionOperator.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalIntersectionOperator.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,50 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalIntersectionOperator implements IDegreeCombiner {
+
+	
+	
+	public IDegree eval(IDegree[] args) {
+		if (args == null || args.length == 0)
+			return IntervalDegreeFactory.UNKNOWN;
+		
+		float tau = 0;
+		float phi = 0;
+		for (IDegree deg : args) {
+			IntervalDegree ival = (IntervalDegree) deg;
+			if (ival == null) 
+				continue;
+			tau = Math.max(tau,ival.getTau());
+			phi = Math.max(phi,ival.getPhi());
+		}
+		return new IntervalDegree(tau,1.0f-phi);
+	}
+
+	public IDegree eval(Collection<? extends IDegree> args) {
+		if (args == null || args.size() == 0)
+			return IntervalDegreeFactory.UNKNOWN;
+		
+		float tau = 0;
+		float phi = 0;
+		for (IDegree deg : args) {
+			IntervalDegree ival = (IntervalDegree) deg;
+			if (ival == null) 
+				continue;
+			tau = Math.max(tau,ival.getTau());
+			phi = Math.max(phi,ival.getPhi());
+		}
+		return new IntervalDegree(tau,1.0f-phi);
+	}
+
+	public String getName() {
+		return "i_intersect";
+	}
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasAndOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasAndOperator.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasAndOperator.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,52 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalLukasAndOperator implements IDegreeCombiner {
+
+	
+	
+	public IDegree eval(IDegree[] args) {		
+		if (args == null || args.length == 0)
+			return IntervalDegreeFactory.UNKNOWN;
+		
+		float tau = 0;
+		float phi = 0;
+		for (IDegree deg : args) {
+			IntervalDegree ival = (IntervalDegree) deg;
+			
+			tau += ival.getTau();
+			phi += ival.getPhi();
+		}
+		tau = Math.max(0,tau - args.length + 1);
+		phi = Math.max(0,1.0f - phi);
+		return new IntervalDegree(tau,phi);
+	}
+
+	public IDegree eval(Collection<? extends IDegree> args) {
+		if (args == null || args.size() == 0)
+			return IntervalDegreeFactory.UNKNOWN;
+		
+		float tau = 0;
+		float phi = 0;
+		for (IDegree deg : args) {
+			IntervalDegree ival = (IntervalDegree) deg;
+			
+			tau += ival.getTau();
+			phi += ival.getPhi();
+		}
+		tau = tau - args.size() + 1;
+		phi = 1.0f - phi;
+		return new IntervalDegree(tau,phi);
+	}
+
+	public String getName() {
+		return "i_xand";
+	}
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasOrOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasOrOperator.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalLukasOrOperator.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,49 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalLukasOrOperator implements IDegreeCombiner {
+
+	public IDegree eval(IDegree[] args) {		
+		if (args == null || args.length == 0)
+			return IntervalDegreeFactory.UNKNOWN;
+		
+		float tau = 0;
+		float phi = 0;
+		for (IDegree deg : args) {
+			IntervalDegree ival = (IntervalDegree) deg;
+			
+			tau += ival.getTau();
+			phi += ival.getPhi();
+		}		
+		tau = Math.min(tau, 1);
+		phi = Math.min(args.length - phi,1);
+		return new IntervalDegree(tau,phi);
+	}
+
+	public IDegree eval(Collection<? extends IDegree> args) {
+		if (args == null || args.size() == 0)
+			return IntervalDegreeFactory.UNKNOWN;
+		
+		float tau = 0;
+		float phi = 0;
+		for (IDegree deg : args) {
+			IntervalDegree ival = (IntervalDegree) deg;
+			
+			tau += ival.getTau();
+			phi += ival.getPhi();
+		}
+		phi = args.size() - phi;
+		return new IntervalDegree(tau,phi);
+	}
+
+	public String getName() {
+		return "i_+or";
+	}
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMaxOrOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMaxOrOperator.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMaxOrOperator.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,49 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalMaxOrOperator implements IDegreeCombiner {
+
+	public IDegree eval(IDegree[] args) {
+		if (args == null || args.length == 0)
+			return IntervalDegreeFactory.UNKNOWN;
+		
+		float tau = 0;
+		float phi = 1.0f;
+		for (IDegree deg : args) {
+			IntervalDegree ival = (IntervalDegree) deg;
+			if (ival == null) 
+				continue;
+			tau = Math.max(tau,ival.getTau());
+			phi = Math.min(phi,ival.getPhi());
+		}
+		return new IntervalDegree(tau,1.0f-phi);
+	}
+
+	public IDegree eval(Collection<? extends IDegree> args) {
+		if (args == null || args.size() == 0)
+			return IntervalDegreeFactory.UNKNOWN;
+		
+		float tau = 0;
+		float phi = 1.0f;
+		for (IDegree deg : args) {
+			IntervalDegree ival = (IntervalDegree) deg;
+			if (ival == null) 
+				continue;
+			tau = Math.max(tau,ival.getTau());
+			phi = Math.min(phi,ival.getPhi());
+		}
+		return new IntervalDegree(tau,1.0f-phi);
+		
+	}
+
+	public String getName() {
+		return "i_maxOr";
+	}
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMinAndOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMinAndOperator.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalMinAndOperator.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,48 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalMinAndOperator implements IDegreeCombiner {
+
+	public IDegree eval(IDegree[] args) {
+		if (args == null || args.length == 0)
+			return IntervalDegreeFactory.UNKNOWN;
+		
+		float tau = 1.0f;
+		float phi = 0.0f;
+		for (IDegree deg : args) {
+			IntervalDegree ival = (IntervalDegree) deg;
+			if (ival == null) 
+				continue;
+			tau = Math.min(tau,ival.getTau());
+			phi = Math.max(phi,ival.getPhi());
+		}
+		return new IntervalDegree(tau,1.0f-phi);
+	}
+
+	public IDegree eval(Collection<? extends IDegree> args) {
+		if (args == null || args.size() == 0)
+			return IntervalDegreeFactory.UNKNOWN;
+		
+		float tau = 1.0f;
+		float phi = 0.0f;
+		for (IDegree deg : args) {
+			IntervalDegree ival = (IntervalDegree) deg;
+			if (ival == null) 
+				continue;
+			tau = Math.min(tau,ival.getTau());
+			phi = Math.max(phi,ival.getPhi());
+		}
+		return new IntervalDegree(tau,1.0f-phi);
+	}
+
+	public String getName() {
+		return "i_minAnd";
+	}
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalModusPonensOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalModusPonensOperator.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalModusPonensOperator.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,40 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalModusPonensOperator implements IDegreeCombiner {
+
+	public IDegree eval(IDegree[] args) {
+		if (args == null || args.length < 2)
+			return IntervalDegreeFactory.UNKNOWN;
+		
+		IntervalDegree a1 = (IntervalDegree) args[0];
+		IntervalDegree a2 = (IntervalDegree) args[1];
+		
+		
+		return new IntervalDegree(Math.min(a1.getLow(),a2.getLow()),1);
+	}		
+
+	public IDegree eval(Collection<? extends IDegree> args) {
+		if (args == null || args.size() < 2)
+			return IntervalDegreeFactory.UNKNOWN;
+		
+		Iterator<? extends IDegree> iter = args.iterator();
+		IntervalDegree a1 = (IntervalDegree) iter.next();
+		IntervalDegree a2 = (IntervalDegree) iter.next();
+		
+		
+		return new IntervalDegree(Math.min(a1.getLow(),a2.getLow()),1);
+	}
+
+	public String getName() {
+		return "i_modPon";
+	}
+
+}

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalNegationOperator.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalNegationOperator.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/degrees/operators/intervals/IntervalNegationOperator.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,32 @@
+package org.drools.degrees.operators.intervals;
+
+import java.util.Collection;
+
+import org.drools.degrees.IDegree;
+import org.drools.degrees.IntervalDegree;
+import org.drools.degrees.factory.IntervalDegreeFactory;
+import org.drools.degrees.operators.IDegreeCombiner;
+
+public class IntervalNegationOperator implements IDegreeCombiner {
+
+	public IDegree eval(IDegree[] args) {
+		if (args == null || args.length == 0)
+			return IntervalDegreeFactory.UNKNOWN;
+			
+		IntervalDegree arg = (IntervalDegree) args[0];
+		return new IntervalDegree(arg.getUpp(),arg.getLow());
+	}
+
+	public IDegree eval(Collection<? extends IDegree> args) {
+		if (args == null || args.size() == 0)
+			return IntervalDegreeFactory.UNKNOWN;
+			
+		IntervalDegree arg = (IntervalDegree) args.iterator().next();
+		return new IntervalDegree(arg.getUpp(),arg.getLow());
+	}
+
+	public String getName() {
+		return "i_not";
+	}
+
+}

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-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/Evaluation.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -237,6 +237,9 @@
 		return "("+this.nodeId + ")" + this.key+ " : " + this.aggDegree +" "+ this.getBitS();
 	}
 	
+	public String expand() {
+		return toString();
+	}
 	
 	
 

Modified: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectAgendaItem.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectAgendaItem.java	2009-04-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/ImperfectAgendaItem.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -9,12 +9,14 @@
 public class ImperfectAgendaItem extends AgendaItem {
 
 	private IDegree degree;
+	private Evaluation eval;
 	
 	public ImperfectAgendaItem(long propagationNumber, LeftTuple cloned,
 			int value, PropagationContext context, Rule rule,
-			GroupElement subrule, IDegree degree) {
+			GroupElement subrule, IDegree degree, Evaluation eval) {
 		super(propagationNumber,cloned,value,context,rule,subrule);
 		this.degree = degree;
+		this.eval = eval;
 	}
 	
 	
@@ -22,4 +24,7 @@
 		return degree;
 	}
 
+	public Evaluation getEvaluation() {
+		return eval;
+	}
 }

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-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -199,7 +199,8 @@
                                                 context,
                                                 this.rule,
                                                 this.subrule,
-                                                degree);
+                                                degree,
+                                                record);
 
         item.setSequenence( this.sequence );
 

Added: labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/DefaultIntervalFilterStrategy.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/DefaultIntervalFilterStrategy.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/reteoo/filters/DefaultIntervalFilterStrategy.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,46 @@
+package org.drools.reteoo.filters;
+
+import org.drools.degrees.IntervalDegree;
+import org.drools.reteoo.Evaluation;
+import org.drools.reteoo.filters.IFilterStrategy;
+
+
+public class DefaultIntervalFilterStrategy implements IFilterStrategy {
+
+	private static DefaultIntervalFilterStrategy singleton = null;
+	
+	public static DefaultIntervalFilterStrategy getInstance() {
+		if (singleton == null)
+			singleton = new DefaultIntervalFilterStrategy();
+		return singleton;
+	}
+	
+	
+	public DefaultIntervalFilterStrategy() { }
+	
+	/**
+	 * @deprecated
+	 * Testing purposes
+	 */
+	public int doTry(Evaluation eval) {
+		/*
+		System.out.println(""+eval.getInfoRate());
+		
+		if (eval.getDegree().toBoolean() && eval.getInfoRate() == 1.0f) 
+			return PASS;
+		else if (eval.getDegree().toBoolean() && eval.getInfoRate() < 1.0f)
+			return HOLD;
+		else 
+			return DROP;
+			*/
+		
+		return PASS;
+		
+	}
+
+	
+	public boolean isAllowed(Evaluation eval) {
+		return doTry(eval) == PASS;
+	}
+
+}

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-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-core/src/main/java/org/drools/spi/KnowledgeHelper.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -144,4 +144,10 @@
     public void setConsequenceDegree(IDegree deg);
     
     
+    
+    public Evaluation getEvaluation();
+    
+    public void setEvaluation(Evaluation eval);
+    
+    
 }
\ No newline at end of file

Added: labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/chance/TestDegrees.java
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/chance/TestDegrees.java	                        (rev 0)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/chance/TestDegrees.java	2009-04-21 16:03:09 UTC (rev 26190)
@@ -0,0 +1,313 @@
+package org.drools.examples.chance;
+
+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 TestDegrees {
+
+	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("TestDegrees.drl",
+				TestDegrees.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");
+			rbconf.setProperty("drools.imperfect.factory",
+			 "org.drools.degrees.factory.IntervalDegreeFactory");
+
+		// 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("testDegrees.log");
+		ksession.setGlobal("writer", writer);
+					
+		final Message message = new Message();		
+		message.setStatus(0);		
+			ksession.insert(message);
+			
+		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-examples/drools-examples-drl/src/test.packagebuilder.conf
===================================================================
--- labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/test.packagebuilder.conf	2009-04-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-examples/drools-examples-drl/src/test.packagebuilder.conf	2009-04-21 16:03:09 UTC (rev 26190)
@@ -40,6 +40,6 @@
 
 
 drools.evaluator.seems = org.drools.fuzzy.evaluators.SeemsEvaluatorDefinition
+drools.evaluator.random = org.drools.fuzzy.evaluators.RandomEvaluatorDefinition
 
 
-

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-21 15:25:41 UTC (rev 26189)
+++ labs/jbossrules/branches/DroolsChance/drools-guvnor/src/main/java/org/drools/guvnor/public/version.txt	2009-04-21 16:03:09 UTC (rev 26190)
@@ -1 +1 @@
-5.0.0.SNAPSHOT 26142
\ No newline at end of file
+5.0.0.SNAPSHOT 26142:26163M
\ No newline at end of file




More information about the jboss-svn-commits mailing list