[jboss-svn-commits] JBL Code SVN: r16297 - in labs/jbossrules/trunk/drools-analytics: src/main/java/org/drools/analytics and 14 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Nov 3 08:32:57 EDT 2007


Author: Rikkola
Date: 2007-11-03 08:32:56 -0400 (Sat, 03 Nov 2007)
New Revision: 16297

Added:
   labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/missingEquality/
   labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/missingEquality/MissingEquality.drl
   labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/missingEquality/
   labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/missingEquality/MissingEqualityTest.java
   labs/jbossrules/trunk/drools-analytics/src/test/resources/org/drools/analytics/missingEquality/
   labs/jbossrules/trunk/drools-analytics/src/test/resources/org/drools/analytics/missingEquality/MissingEqualityTest.drl
Modified:
   labs/jbossrules/trunk/drools-analytics/.classpath
   labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/Analyzer.java
   labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/PackageDescrFlattener.java
   labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/LiteralRestriction.java
   labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/Restriction.java
   labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/VariableRestriction.java
   labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/dao/AnalyticsDataMaps.java
   labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/components/AnalyticsMessageBase.java
   labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/components/Gap.java
   labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/components/MissingNumberPattern.java
   labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/components/MissingRange.java
   labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/components/RangeCheckCause.java
   labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/html/MissingRangesReportVisitor.java
   labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/optimisation/PatternOrder.drl
   labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/optimisation/RestrictionOrder.drl
   labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Clean.drl
   labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Dates.drl
   labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Doubles.drl
   labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Integers.drl
   labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Patterns.drl
   labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Restrictions.drl
   labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/ConsequenceTest.java
   labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/RangeCheckCleanTest.java
   labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/RangeCheckIntegersTest.java
   labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/optimisation/RestrictionOrderTest.java
Log:
Operators in restrictions now use the Operator class, before they were just strings. Missing equality tests are 

Modified: labs/jbossrules/trunk/drools-analytics/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-analytics/.classpath	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/.classpath	2007-11-03 12:32:56 UTC (rev 16297)
@@ -6,5 +6,7 @@
 	<classpathentry excluding="**" kind="src" output="src/test/resources" path="src/test/resources"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+	<classpathentry kind="var" path="AGITAR_TEST_LIB"/>
+	<classpathentry kind="var" path="AGITAR_MOCK_OBJECTS5"/>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>

Modified: labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/Analyzer.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/Analyzer.java	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/Analyzer.java	2007-11-03 12:32:56 UTC (rev 16297)
@@ -100,7 +100,12 @@
 
 		Collection<Package> packages = RuleLoader.loadPackages();
 		for (Package pkg : packages) {
-			ruleBase.addPackage(pkg);
+			try {
+				ruleBase.addPackage(pkg);
+			} catch (Exception e) {
+				throw new Exception("Adding package " + pkg.getName()
+						+ " caused an error.", e);
+			}
 		}
 
 		return ruleBase;

Modified: labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/PackageDescrFlattener.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/PackageDescrFlattener.java	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/PackageDescrFlattener.java	2007-11-03 12:32:56 UTC (rev 16297)
@@ -29,6 +29,7 @@
 import org.drools.analytics.components.VariableRestriction;
 import org.drools.analytics.dao.AnalyticsData;
 import org.drools.analytics.dao.AnalyticsDataFactory;
+import org.drools.base.evaluators.Operator;
 import org.drools.lang.descr.AccessorDescr;
 import org.drools.lang.descr.AccumulateDescr;
 import org.drools.lang.descr.AndDescr;
@@ -446,6 +447,7 @@
 		if (descr.getIdentifier() != null) {
 			Variable variable = new Variable();
 			variable.setRuleId(currentRule.getId());
+			variable.setRuleName(currentRule.getRuleName());
 			variable.setName(descr.getIdentifier());
 
 			variable.setObjectType(AnalyticsComponentType.CLASS);
@@ -519,6 +521,7 @@
 
 		Variable variable = new Variable();
 		variable.setRuleId(currentRule.getId());
+		variable.setRuleName(currentRule.getRuleName());
 		variable.setName(descr.getIdentifier());
 		variable.setOrderNumber(orderNumber);
 		variable.setParent(parent);
@@ -550,9 +553,9 @@
 		restriction.setPatternIsNot(currentPattern.isPatternNot());
 		restriction.setConstraintId(currentConstraint.getId());
 		restriction.setFieldId(currentConstraint.getFieldId());
-		restriction.setEvaluator(descr.getEvaluator());
-		restriction.setVariableId(variable.getId());
-		restriction.setVariableName(descr.getIdentifier());
+		restriction.setOperator(Operator
+				.determineOperator(descr.getEvaluator()));
+		restriction.setVariable(variable);
 		restriction.setOrderNumber(orderNumber);
 		restriction.setParent(parent);
 
@@ -580,7 +583,8 @@
 		restriction.setPatternIsNot(currentPattern.isPatternNot());
 		restriction.setConstraintId(currentConstraint.getId());
 		restriction.setFieldId(currentConstraint.getFieldId());
-		restriction.setEvaluator(descr.getEvaluator());
+		restriction.setOperator(Operator
+				.determineOperator(descr.getEvaluator()));
 		restriction.setClassMethodName(descr.getClassMethodName());
 		restriction.setContent(descr.getContent());
 		restriction.setDeclarations(descr.getDeclarations());
@@ -610,7 +614,8 @@
 		restriction.setPatternIsNot(currentPattern.isPatternNot());
 		restriction.setConstraintId(currentConstraint.getId());
 		restriction.setFieldId(currentConstraint.getFieldId());
-		restriction.setEvaluator(descr.getEvaluator());
+		restriction.setOperator(Operator
+				.determineOperator(descr.getEvaluator()));
 		restriction.setValue(descr.getText());
 		restriction.setOrderNumber(orderNumber);
 		restriction.setParent(parent);
@@ -642,7 +647,8 @@
 		restriction.setPatternIsNot(currentPattern.isPatternNot());
 		restriction.setConstraintId(currentConstraint.getId());
 		restriction.setFieldId(currentConstraint.getFieldId());
-		restriction.setEvaluator(descr.getEvaluator());
+		restriction.setOperator(Operator
+				.determineOperator(descr.getEvaluator()));
 		restriction.setVariableId(variable.getId());
 		restriction.setVariableName(text.substring(0, text.indexOf(".")));
 		restriction.setVariablePath(text.substring(text.indexOf(".")));

Modified: labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/LiteralRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/LiteralRestriction.java	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/LiteralRestriction.java	2007-11-03 12:32:56 UTC (rev 16297)
@@ -119,6 +119,6 @@
 	@Override
 	public String toString() {
 		return "LiteralRestriction from rule '" + ruleName + "' value '"
-				+ evaluator + " " + stringValue + "'";
+				+ operator.getOperatorString() + " " + stringValue + "'";
 	}
 }

Modified: labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/Restriction.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/Restriction.java	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/Restriction.java	2007-11-03 12:32:56 UTC (rev 16297)
@@ -1,12 +1,14 @@
 package org.drools.analytics.components;
 
 import org.drools.analytics.report.components.Cause;
+import org.drools.base.evaluators.Operator;
 
 /**
  * 
  * @author Toni Rikkola
  */
 public abstract class Restriction extends AnalyticsComponent implements Cause {
+
 	public static enum RestrictionType {
 		LITERAL, VARIABLE, QUALIFIED_IDENTIFIER, RETURN_VALUE_RESTRICTION
 	}
@@ -20,7 +22,7 @@
 	// Id of the field that this restriction is related to.
 	private int fieldId;
 
-	protected String evaluator;
+	protected Operator operator;
 
 	public Restriction() {
 		super(index++);
@@ -37,12 +39,12 @@
 
 	public abstract RestrictionType getRestrictionType();
 
-	public String getEvaluator() {
-		return evaluator;
+	public Operator getOperator() {
+		return operator;
 	}
 
-	public void setEvaluator(String evaluator) {
-		this.evaluator = evaluator;
+	public void setOperator(Operator operator) {
+		this.operator = operator;
 	}
 
 	public int getConstraintId() {

Modified: labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/VariableRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/VariableRestriction.java	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/components/VariableRestriction.java	2007-11-03 12:32:56 UTC (rev 16297)
@@ -8,32 +8,23 @@
  */
 public class VariableRestriction extends Restriction implements Cause {
 
-	protected String variableName;
-	protected int variableId;
+	protected Variable variable;
 
-	public int getVariableId() {
-		return variableId;
+	public Variable getVariable() {
+		return variable;
 	}
 
-	public void setVariableId(int variableId) {
-		this.variableId = variableId;
+	public void setVariable(Variable variable) {
+		this.variable = variable;
 	}
 
-	public String getVariableName() {
-		return variableName;
-	}
-
-	public void setVariableName(String variableName) {
-		this.variableName = variableName;
-	}
-
 	public RestrictionType getRestrictionType() {
 		return Restriction.RestrictionType.VARIABLE;
 	}
 
 	@Override
 	public String toString() {
-		return "VariableRestriction from rule '" + ruleName + "' name '"
-				+ variableName + "'";
+		return "VariableRestriction from rule '" + ruleName + "' variable '"
+				+ variable + "'";
 	}
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/dao/AnalyticsDataMaps.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/dao/AnalyticsDataMaps.java	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/dao/AnalyticsDataMaps.java	2007-11-03 12:32:56 UTC (rev 16297)
@@ -72,9 +72,7 @@
 	}
 
 	public void save(Variable variable) {
-		AnalyticsRule rule = rulesById.get(Integer
-				.valueOf(variable.getRuleId()));
-		variablesByRuleAndVariableName.put(rule.getRuleName() + "."
+		variablesByRuleAndVariableName.put(variable.getRuleName() + "."
 				+ variable.getName(), variable);
 	}
 

Modified: labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/components/AnalyticsMessageBase.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/components/AnalyticsMessageBase.java	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/components/AnalyticsMessageBase.java	2007-11-03 12:32:56 UTC (rev 16297)
@@ -39,7 +39,7 @@
 	}
 
 	public static enum MessageType {
-		NOT_SPECIFIED, RANGE_CHECK, REDUNDANCY, SUBSUMPTION, MISSING_COMPONENT, OPTIMISATION
+		NOT_SPECIFIED, RANGE_CHECK, MISSING_EQUALITY, REDUNDANCY, SUBSUMPTION, MISSING_COMPONENT, OPTIMISATION
 	}
 
 	protected Severity severity;

Modified: labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/components/Gap.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/components/Gap.java	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/components/Gap.java	2007-11-03 12:32:56 UTC (rev 16297)
@@ -2,38 +2,17 @@
 
 import org.drools.analytics.components.Field;
 import org.drools.analytics.components.LiteralRestriction;
+import org.drools.base.evaluators.Operator;
 
 /**
  * 
  * @author Toni Rikkola
  */
-public class Gap extends MissingRange implements RangeCheckCause, Comparable<MissingRange> {
+public class Gap extends MissingRange implements RangeCheckCause,
+		Comparable<MissingRange> {
 
 	private LiteralRestriction restriction;
 
-	/**
-	 * Takes the given evaluator e, and returns a reversed version of it.
-	 * 
-	 * @return evaluator
-	 */
-	public static String getReversedEvaluator(String e) {
-		if (e.equals("!=")) {
-			return "==";
-		} else if (e.equals("==")) {
-			return "!=";
-		} else if (e.equals(">")) {
-			return "<=";
-		} else if (e.equals("<")) {
-			return ">=";
-		} else if (e.equals(">=")) {
-			return "<";
-		} else if (e.equals("<=")) {
-			return ">";
-		}
-
-		return e;
-	}
-
 	public int compareTo(MissingRange another) {
 		return super.compareTo(another);
 	}
@@ -51,9 +30,9 @@
 	 * @param cause
 	 *            The restriction that the gap begins from.
 	 */
-	public Gap(Field field, String evaluator, LiteralRestriction restriction) {
+	public Gap(Field field, Operator operator, LiteralRestriction restriction) {
 		this.field = field;
-		this.evaluator = evaluator;
+		this.operator = operator;
 		this.restriction = restriction;
 	}
 
@@ -79,7 +58,7 @@
 
 	@Override
 	public String toString() {
-		return "Gap: (" + field + ") " + getEvaluator() + " "
+		return "Gap: (" + field + ") " + getOperator() + " "
 				+ getValueAsString();
 	}
 }

Modified: labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/components/MissingNumberPattern.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/components/MissingNumberPattern.java	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/components/MissingNumberPattern.java	2007-11-03 12:32:56 UTC (rev 16297)
@@ -5,6 +5,7 @@
 import java.util.Locale;
 
 import org.drools.analytics.components.Field;
+import org.drools.base.evaluators.Operator;
 
 /**
  * 
@@ -25,10 +26,10 @@
 		return Cause.CauseType.RANGE_CHECK_CAUSE;
 	}
 
-	public MissingNumberPattern(Field field, String evaluator,
+	public MissingNumberPattern(Field field, Operator operator,
 			Field.FieldType valueType, String value) {
 		this.field = field;
-		this.evaluator = evaluator;
+		this.operator = operator;
 		this.valueType = valueType;
 		this.value = value;
 	}
@@ -79,6 +80,6 @@
 
 	@Override
 	public String toString() {
-		return "Missing restriction " + evaluator + " " + value;
+		return "Missing restriction " + operator + " " + value;
 	}
 }

Modified: labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/components/MissingRange.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/components/MissingRange.java	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/components/MissingRange.java	2007-11-03 12:32:56 UTC (rev 16297)
@@ -1,6 +1,7 @@
 package org.drools.analytics.report.components;
 
 import org.drools.analytics.components.Field;
+import org.drools.base.evaluators.Operator;
 
 public abstract class MissingRange implements Comparable<MissingRange> {
 
@@ -8,10 +9,45 @@
 	protected int id = index++;
 
 	protected Field field;
-	protected String evaluator;
+	protected Operator operator;
 
 	private String firedRuleName;
 
+	/**
+	 * Takes the given operator e, and returns a reversed version of it.
+	 * 
+	 * @return operator
+	 */
+	public static Operator getReversedOperator(Operator e) {
+		if (e.equals(Operator.NOT_EQUAL)) {
+			return Operator.EQUAL;
+		} else if (e.equals(Operator.EQUAL)) {
+			return Operator.NOT_EQUAL;
+		} else if (e.equals(Operator.GREATER)) {
+			return Operator.LESS_OR_EQUAL;
+		} else if (e.equals(Operator.LESS)) {
+			return Operator.GREATER_OR_EQUAL;
+		} else if (e.equals(Operator.GREATER_OR_EQUAL)) {
+			return Operator.LESS;
+		} else if (e.equals(Operator.LESS_OR_EQUAL)) {
+			return Operator.GREATER;
+		} else if (e.equals(Operator.MATCHES)) {
+			return Operator.NOT_MATCHES;
+		} else if (e.equals(Operator.NOT_MATCHES)) {
+			return Operator.MATCHES;
+		} else if (e.equals(Operator.CONTAINS)) {
+			return Operator.NOT_CONTAINS;
+		} else if (e.equals(Operator.NOT_CONTAINS)) {
+			return Operator.CONTAINS;
+		} else if (e.equals(Operator.MEMBEROF)) {
+			return Operator.NOTMEMBEROF;
+		} else if (e.equals(Operator.NOTMEMBEROF)) {
+			return Operator.MEMBEROF;
+		}
+
+		return e;
+	}
+
 	public int compareTo(MissingRange another) {
 		MissingRange anotherMissingRange = ((MissingRange) another);
 
@@ -30,8 +66,8 @@
 		this.field = field;
 	}
 
-	public String getEvaluator() {
-		return evaluator;
+	public Operator getOperator() {
+		return operator;
 	}
 
 	public String getFiredRuleName() {

Modified: labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/components/RangeCheckCause.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/components/RangeCheckCause.java	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/components/RangeCheckCause.java	2007-11-03 12:32:56 UTC (rev 16297)
@@ -1,6 +1,7 @@
 package org.drools.analytics.report.components;
 
 import org.drools.analytics.components.Field;
+import org.drools.base.evaluators.Operator;
 
 /**
  * 
@@ -14,5 +15,5 @@
 
 	public String getValueAsString();
 
-	public String getEvaluator();
+	public Operator getOperator();
 }

Modified: labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/html/MissingRangesReportVisitor.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/html/MissingRangesReportVisitor.java	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/main/java/org/drools/analytics/report/html/MissingRangesReportVisitor.java	2007-11-03 12:32:56 UTC (rev 16297)
@@ -14,6 +14,7 @@
 import org.drools.analytics.dao.DataTree;
 import org.drools.analytics.report.components.AnalyticsRangeCheckMessage;
 import org.drools.analytics.report.components.RangeCheckCause;
+import org.drools.base.evaluators.Operator;
 import org.mvel.TemplateInterpreter;
 
 public class MissingRangesReportVisitor extends ReportVisitor {
@@ -26,7 +27,7 @@
 
 		for (RangeCheckCause cause : causes) {
 			dt.put(cause.getValueAsObject(), new DataRow(null, null, cause
-					.getEvaluator(), cause.getValueAsString()));
+					.getOperator(), cause.getValueAsString()));
 		}
 
 		for (Restriction r : restrictions) {
@@ -36,7 +37,7 @@
 
 					dt.put(restriction.getValueAsObject(), new DataRow(
 							restriction.getRuleId(), restriction.getRuleName(),
-							restriction.getEvaluator(), restriction
+							restriction.getOperator(), restriction
 									.getValueAsString()));
 				} catch (Exception e) {
 					e.printStackTrace();
@@ -52,10 +53,10 @@
 			if (previous != null) {
 				// Check if previous and current are from the same rule.
 				if (previous.ruleId == null && current.ruleId == null
-						&& !previous.evaluator.equals("==")
-						&& !previous.evaluator.equals("!=")
-						&& !current.evaluator.equals("==")
-						&& !current.evaluator.equals("!=")) {
+						&& !previous.operator.equals(Operator.EQUAL)
+						&& !previous.operator.equals(Operator.NOT_EQUAL)
+						&& !current.operator.equals(Operator.EQUAL)
+						&& !current.operator.equals(Operator.NOT_EQUAL)) {
 					// Combine these two.
 					stringRows.add("Missing : " + previous + " .. " + current);
 
@@ -155,22 +156,23 @@
 class DataRow implements Comparable<DataRow> {
 	public String ruleName;
 	protected Integer ruleId;
-	protected String evaluator;
+	protected Operator operator;
 	protected String value;
 
 	public int compareTo(DataRow o) {
-		return evaluator.compareTo(o.evaluator);
+		return operator.getOperatorString().compareTo(
+				o.operator.getOperatorString());
 	}
 
-	public DataRow(Integer ruleId, String ruleName, String evaluator,
+	public DataRow(Integer ruleId, String ruleName, Operator operator,
 			String valueAsString) {
 		this.ruleId = ruleId;
 		this.ruleName = ruleName;
-		this.evaluator = evaluator;
+		this.operator = operator;
 		this.value = valueAsString;
 	}
 
 	public String toString() {
-		return evaluator + " " + value;
+		return operator.getOperatorString() + " " + value;
 	}
 }

Added: labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/missingEquality/MissingEquality.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/missingEquality/MissingEquality.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/missingEquality/MissingEquality.drl	2007-11-03 12:32:56 UTC (rev 16297)
@@ -0,0 +1,218 @@
+#created on: 31.10.2007
+package org.drools.analytics.missingEquality
+
+#list any import classes here.
+import org.drools.base.evaluators.Operator;
+
+import org.drools.analytics.components.VariableRestriction;
+import org.drools.analytics.components.LiteralRestriction;	
+import org.drools.analytics.report.components.MissingRange;
+import org.drools.analytics.report.components.AnalyticsMessage;
+import org.drools.analytics.dao.AnalyticsResult;
+
+
+
+#declare any global variables here
+global AnalyticsResult result;
+
+#
+# Informs that there are inequalities, but not equality being catered for.
+# 
+# Type: Warning
+# Example: val != 10 when val == 10 is missing. 
+#
+rule "Missing restriction in LiteralRestrictions"
+	when
+		#
+		# == and !=
+		#
+		(
+				$r :LiteralRestriction(
+					operator == Operator.EQUAL
+				)
+			and
+				not LiteralRestriction(
+					fieldId == $r.fieldId,
+					operator == Operator.NOT_EQUAL,
+					patternIsNot == $r.patternIsNot,
+					valueAsString matches $r.valueAsString
+				)
+		) or (
+				$r :LiteralRestriction(
+					operator == Operator.NOT_EQUAL
+				)
+			and
+				not LiteralRestriction(
+					fieldId == $r.fieldId,
+					operator == Operator.EQUAL,
+					patternIsNot == $r.patternIsNot,
+					valueAsString matches $r.valueAsString
+				)
+		#
+		# matches and not matches
+		#
+		) or (
+				$r :LiteralRestriction(
+					operator == Operator.MATCHES,
+					valueAsString matches $r.valueAsString
+				)
+			and
+				not LiteralRestriction(
+					fieldId == $r.fieldId,
+					operator == Operator.NOT_MATCHES,
+					patternIsNot == $r.patternIsNot,
+					valueAsString matches $r.valueAsString
+				)
+		) or (
+				$r :LiteralRestriction(
+					operator == Operator.NOT_MATCHES,
+					valueAsString matches $r.valueAsString
+				)
+			and
+				not LiteralRestriction(
+					fieldId == $r.fieldId,
+					operator == Operator.MATCHES,
+					patternIsNot == $r.patternIsNot,
+					valueAsString matches $r.valueAsString
+				)
+		)
+	then
+		result.save( new AnalyticsMessage(
+								AnalyticsMessage.Severity.WARNING, 
+								AnalyticsMessage.MessageType.MISSING_EQUALITY, 
+								$r, 
+								"Rule base covers " + 
+								$r.getOperator().getOperatorString() + " " + $r.getValueAsString() +
+								", but it is missing " + MissingRange.getReversedOperator( $r.getOperator() ).getOperatorString() +
+								" " + $r.getValueAsString()
+								) );		
+end
+
+#
+# Informs that there are inequalities, but not equality being catered for.
+# 
+# Type: Warning
+# Example: val != $var when val == $var is missing. 
+#
+rule "Missing restriction in VariableRestrictions"
+	when
+		#
+		# == and !=
+		#
+		(
+				$r :VariableRestriction(
+					operator == Operator.EQUAL
+				)
+			and
+				not VariableRestriction(
+					fieldId == $r.fieldId,
+					operator == Operator.NOT_EQUAL,
+					patternIsNot == $r.patternIsNot,
+					variable.objectId == $r.variable.objectId,
+					variable.objectType == $r.variable.objectType
+				)
+		) or (
+				$r :VariableRestriction(
+					operator == Operator.NOT_EQUAL
+				)
+			and
+				not VariableRestriction(
+					fieldId == $r.fieldId,
+					operator == Operator.EQUAL,
+					patternIsNot == $r.patternIsNot,
+					variable.objectId == $r.variable.objectId,
+					variable.objectType == $r.variable.objectType  
+				)
+		#
+		# matches and not matches
+		#
+		) or (
+				$r :VariableRestriction(
+					operator == Operator.MATCHES 
+				)
+			and
+				not VariableRestriction(
+					fieldId == $r.fieldId,
+					operator == Operator.NOT_MATCHES,
+					patternIsNot == $r.patternIsNot,
+					variable.objectId == $r.variable.objectId,
+					variable.objectType == $r.variable.objectType
+				)
+		) or (
+				$r :VariableRestriction(
+					operator == Operator.NOT_MATCHES
+				)
+			and
+				not VariableRestriction(
+					fieldId == $r.fieldId,
+					operator == Operator.MATCHES,
+					patternIsNot == $r.patternIsNot,
+					variable.objectId == $r.variable.objectId,
+					variable.objectType == $r.variable.objectType 
+				)
+		#
+		# memberof and not memberof
+		#
+		) or (
+				$r :VariableRestriction(
+					operator == Operator.MEMBEROF
+				)
+			and
+				not VariableRestriction(
+					fieldId == $r.fieldId,
+					operator == Operator.NOTMEMBEROF,
+					patternIsNot == $r.patternIsNot,
+					variable.objectId == $r.variable.objectId,
+					variable.objectType == $r.variable.objectType
+				)
+		) or (
+				$r :VariableRestriction(
+					operator == Operator.NOTMEMBEROF
+				)
+			and
+				not VariableRestriction(
+					fieldId == $r.fieldId,
+					operator == Operator.MEMBEROF,
+					patternIsNot == $r.patternIsNot,
+					variable.objectId == $r.variable.objectId,
+					variable.objectType == $r.variable.objectType
+				)
+		#
+		# contains and not contains
+		#
+		) or (
+				$r :VariableRestriction(
+					operator == Operator.CONTAINS
+				)
+			and
+				not VariableRestriction(
+					fieldId == $r.fieldId,
+					operator == Operator.NOT_CONTAINS,
+					patternIsNot == $r.patternIsNot,
+					variable.objectId == $r.variable.objectId,
+					variable.objectType == $r.variable.objectType
+				)
+		) or (
+				$r :VariableRestriction(
+					operator == Operator.NOT_CONTAINS
+				)
+			and
+				not VariableRestriction(
+					fieldId == $r.fieldId,
+					operator == Operator.CONTAINS,
+					patternIsNot == $r.patternIsNot,
+					variable.objectId == $r.variable.objectId,
+					variable.objectType == $r.variable.objectType
+				)
+		)
+	then
+		result.save( new AnalyticsMessage(
+								AnalyticsMessage.Severity.WARNING, 
+								AnalyticsMessage.MessageType.MISSING_EQUALITY, 
+								$r, 
+								"Rule base covers " + 
+								$r.getOperator().getOperatorString() + " " + $r.getVariable().getName() +
+								", but it is missing " + MissingRange.getReversedOperator( $r.getOperator() ).getOperatorString() +
+								" " + $r.getVariable().getName()
+								) );		
+end

Modified: labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/optimisation/PatternOrder.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/optimisation/PatternOrder.drl	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/optimisation/PatternOrder.drl	2007-11-03 12:32:56 UTC (rev 16297)
@@ -21,6 +21,12 @@
 
 
 
+# Informs that rule would be more effective if eval
+# was after fact patterns.
+# 
+# Type: Note
+# Example: eval(function( $something )) Pattern() 
+#
 rule "Optimise evals inside pattern"
 	when
 		$operator :OperatorDescr()

Modified: labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/optimisation/RestrictionOrder.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/optimisation/RestrictionOrder.drl	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/optimisation/RestrictionOrder.drl	2007-11-03 12:32:56 UTC (rev 16297)
@@ -5,6 +5,8 @@
 import java.util.Collection;
 import java.util.ArrayList;
 
+import org.drools.base.evaluators.Operator;
+
 import org.drools.analytics.components.Restriction;
 import org.drools.analytics.components.Pattern;
 import org.drools.analytics.components.AnalyticsRule;
@@ -29,78 +31,78 @@
 rule "Optimise restrictions inside operator"
 	when
 		$operator :OperatorDescr()
-	
+		
 		(
 				$r1 :Restriction(
 					parent.parent == $operator,
-					( evaluator == "==" || == "matches" )
+					( operator == Operator.EQUAL || == Operator.MATCHES )
 				)
 			and
 				# There is no reason to check if there is a less expensive constraint
 				# if this one has a restriction that is more expensive.
 				not Restriction(
 					parent == $r1.parent,
-					( evaluator == ">" || == "<" || == ">=" || == "<=" || == "not matches" || == "!=" ) 
+					( operator == Operator.GREATER || == Operator.LESS || == Operator.GREATER_OR_EQUAL || == Operator.LESS_OR_EQUAL || == Operator.NOT_MATCHES || == Operator.NOT_EQUAL ) 
 				)
 			and
 				$r2 :Restriction(
 					parent.parent == $operator,
 					parent.orderNumber < $r1.parent.orderNumber,
-					( evaluator == ">" || == "<" || == ">=" || == "<=" || == "not matches" || == "!=" ) 
+					( operator == Operator.GREATER || == Operator.LESS || == Operator.GREATER_OR_EQUAL || == Operator.LESS_OR_EQUAL || == Operator.NOT_MATCHES || == Operator.NOT_EQUAL ) 
 				)
 			and
 				# The other restriction should not have any less expensive restrictions. 
 				not Restriction(
 					parent == $r2.parent,
-					( evaluator == "==" || == "matches" )
+					( operator == Operator.EQUAL || == Operator.MATCHES )
 				)
 		) or (
 				$r1 :Restriction(
 					parent.parent == $operator,
-					( evaluator == ">" || == "<" )
+					( operator == Operator.GREATER || == Operator.LESS )
 				)
 			and
 				# There is no reason to check if there is a less expensive constraint
 				# if this one has a restriction that is more expensive.
 				not Restriction(
 					parent == $r1.parent,
-					( evaluator == ">=" || == "<=" || == "not matches" || == "!=" ) 
+					( operator == Operator.GREATER_OR_EQUAL || == Operator.LESS_OR_EQUAL || == Operator.NOT_MATCHES || == Operator.NOT_EQUAL ) 
 				)
 			and
 				$r2 :Restriction(
 					parent.parent == $operator,
 					parent.orderNumber < $r1.parent.orderNumber,
-					( evaluator == ">=" || == "<=" || == "not matches" || == "!=" ) 
+					( operator == Operator.GREATER_OR_EQUAL || == Operator.LESS_OR_EQUAL || == Operator.NOT_MATCHES || == Operator.NOT_EQUAL ) 
 				)
 			and
 				# The other restriction should not have any less expensive restrictions. 
 				not Restriction(
 					parent == $r2.parent,
-					( evaluator == "==" || == "matches" || == ">" || == "<" )
+					( operator == Operator.EQUAL || == Operator.MATCHES || == Operator.GREATER || == Operator.LESS )
 				)
 		) or (
 				$r1 :Restriction(
 					parent.parent == $operator,
-					( evaluator == ">=" || == "<=" )
+					( operator == Operator.GREATER_OR_EQUAL || == Operator.LESS_OR_EQUAL )
 				)
 			and
 				# There is no reason to check if there is a less expensive constraint
 				# if this one has a restriction that is more expensive.
 				not Restriction(
 					parent == $r1.parent,
-					( evaluator == "not matches" || == "!=" ) 
+					( operator == Operator.NOT_MATCHES || == Operator.NOT_EQUAL ) 
 				)
 			and
 				$r2 :Restriction(
 					parent.parent == $operator,
 					parent.orderNumber < $r1.parent.orderNumber,
-					( evaluator == "not matches" || == "!=" ) 
+					( operator == Operator.NOT_MATCHES || == Operator.NOT_EQUAL ) 
 				)
 			and
 				# The other restriction should not have any less expensive restrictions. 
 				not Restriction(
 					parent == $r2.parent,
-					( evaluator == "==" || == "matches" || == ">" || == "<" || == ">" || == "<" || == ">=" || == "<=" )
+					( operator == Operator.EQUAL || == Operator.MATCHES || == Operator.GREATER || == Operator.LESS || == Operator.GREATER_OR_EQUAL || == Operator.LESS_OR_EQUAL )
 				)
 		)
 		
@@ -133,33 +135,33 @@
 	when
 		(
 				$r1 :Restriction(
-					( evaluator == "==" || == "matches" )
+					( operator == Operator.EQUAL || == Operator.MATCHES )
 				)
 			and
 				$r2 :Restriction(
 					parent == $r1.parent,
 					orderNumber < $r1.orderNumber,
-					( evaluator == ">" || == "<" || == ">=" || == "<=" || == "not matches" || == "!=" ) 
+					( operator == Operator.GREATER || == Operator.LESS || == Operator.GREATER_OR_EQUAL || == Operator.LESS_OR_EQUAL || == Operator.NOT_MATCHES || == Operator.NOT_EQUAL ) 
 				)
 		) or (
 				$r1 :Restriction(
-					( evaluator == ">" || == "<" )
+					( operator == Operator.GREATER || == Operator.LESS )
 				)
 			and
 				$r2 :Restriction(
 					parent == $r1.parent,
 					orderNumber < $r1.orderNumber,
-					( evaluator == ">=" || == "<=" || == "not matches" || == "!=" ) 
+					( operator == Operator.GREATER_OR_EQUAL || == Operator.LESS_OR_EQUAL || == Operator.NOT_MATCHES || == Operator.NOT_EQUAL ) 
 				)
 		) or (
 				$r1 :Restriction(
-					( evaluator == ">=" || == "<=" )
+					( operator == Operator.GREATER_OR_EQUAL || == Operator.LESS_OR_EQUAL )
 				)
 			and
 				$r2 :Restriction(
 					parent == $r1.parent,
 					orderNumber < $r1.orderNumber,
-					( evaluator == "not matches" || == "!=" ) 
+					( operator == Operator.NOT_MATCHES || == Operator.NOT_EQUAL ) 
 				)
 		)
 		
@@ -219,4 +221,4 @@
 								"), could be before (" + 
 								$predicate + ").", 
 								list ) );
-end
\ No newline at end of file
+end

Modified: labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Clean.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Clean.drl	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Clean.drl	2007-11-03 12:32:56 UTC (rev 16297)
@@ -1,6 +1,8 @@
 #created on: 24.9.2007
 package org.drools.analytics.rangeChecks.cleanUp
 
+import org.drools.base.evaluators.Operator;
+
 import org.drools.analytics.components.*;  
 import org.drools.analytics.report.components.Gap;  
 import org.drools.analytics.report.components.MissingNumberPattern;
@@ -16,12 +18,12 @@
 rule "Merge gaps"
 	when
 		$g1 :Gap(
-			evaluator == ">="
+			operator == Operator.GREATER_OR_EQUAL
 		)
 		$g2 :Gap( 
 			id != $g1.id,
 			field == $g1.field,
-			evaluator == "<=",
+			operator == Operator.LESS_OR_EQUAL,
 			valueAsString == $g1.valueAsString
 		)		
 	then	
@@ -32,7 +34,7 @@
 		
 		MissingNumberPattern mnp = new MissingNumberPattern( 
 											$g1.getField(), 
-											"==", 
+											Operator.EQUAL, 
 											$g1.getField().getFieldType(), 
 											$g1.getValueAsString() );
 		mnp.setFiredRuleName( drools.getRule().getName() );
@@ -49,7 +51,7 @@
 		# Covered x > 10
 		$lower :LiteralRestriction( 
 			valueType == Field.FieldType.INT,
-			( evaluator == ">" || == ">=")
+			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL)
 		)
 
 		# Covered x < 100
@@ -57,12 +59,12 @@
 			fieldId == $lower.fieldId,
 			intValue > $lower.intValue,
 			patternIsNot == $lower.patternIsNot,
-			( evaluator == "<" || == "<=")
+			( operator == Operator.LESS || == Operator.LESS_OR_EQUAL)
 		)
 		
 		# No "<" or "<=" restrictions between these two
 		not LiteralRestriction( 
-			( evaluator == "<=" || == "<" ),
+			( operator == Operator.LESS_OR_EQUAL || == Operator.LESS ),
 			fieldId == $lower.fieldId,
 			patternIsNot == $lower.patternIsNot, 
 			intValue > $lower.intValue,
@@ -91,7 +93,7 @@
 		# Covered x > 10
 		$lower :LiteralRestriction( 
 			valueType == Field.FieldType.INT,
-			( evaluator == ">" || == ">=")
+			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL)
 		)
 
 		# Covered x < 100
@@ -99,12 +101,12 @@
 			fieldId == $lower.fieldId,
 			intValue > $lower.intValue,
 			patternIsNot == $lower.patternIsNot,
-			( evaluator == "<" || == "<=")
+			( operator == Operator.LESS || == Operator.LESS_OR_EQUAL)
 		)
 		
 		# No "<" or "<=" restrictions between these two
 		not LiteralRestriction( 
-			( evaluator == ">=" || == ">" ),
+			( operator == Operator.GREATER_OR_EQUAL || == Operator.GREATER ),
 			fieldId == $lower.fieldId,
 			patternIsNot == $lower.patternIsNot, 
 			intValue > $lower.intValue,
@@ -133,7 +135,7 @@
 		# Covered x > 10.0
 		$lower :LiteralRestriction( 
 			valueType == Field.FieldType.DOUBLE,
-			( evaluator == ">" || == ">=")
+			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL)
 		)
 
 		# Covered x < 100.0
@@ -141,12 +143,12 @@
 			fieldId == $lower.fieldId,
 			doubleValue > $lower.doubleValue,
 			patternIsNot == $lower.patternIsNot,
-			( evaluator == "<" || == "<=")
+			( operator == Operator.LESS || == Operator.LESS_OR_EQUAL)
 		)
 		
 		# No "<" or "<=" restrictions between these two
 		not LiteralRestriction( 
-			( evaluator == "<=" || == "<" ),
+			( operator == Operator.LESS_OR_EQUAL || == Operator.LESS ),
 			fieldId == $lower.fieldId,
 			patternIsNot == $lower.patternIsNot, 
 			doubleValue > $lower.doubleValue,
@@ -175,7 +177,7 @@
 		# Covered x > 10.0
 		$lower :LiteralRestriction( 
 			valueType == Field.FieldType.DOUBLE,
-			( evaluator == ">" || == ">=")
+			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL)
 		)
 
 		# Covered x < 100.0
@@ -183,12 +185,12 @@
 			fieldId == $lower.fieldId,
 			doubleValue > $lower.doubleValue,
 			patternIsNot == $lower.patternIsNot,
-			( evaluator == "<" || == "<=")
+			( operator == Operator.LESS || == Operator.LESS_OR_EQUAL)
 		)
 		
 		# No "<" or "<=" restrictions between these two
 		not LiteralRestriction( 
-			( evaluator == ">=" || == ">" ),
+			( operator == Operator.GREATER_OR_EQUAL || == Operator.GREATER ),
 			fieldId == $lower.fieldId,
 			patternIsNot == $lower.patternIsNot, 
 			doubleValue > $lower.doubleValue,
@@ -217,20 +219,20 @@
 		# Covered x > "01-Oct-2007"
 		$lower :LiteralRestriction( 
 			valueType == Field.FieldType.DATE,
-			( evaluator == ">" || == ">=")
+			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL)
 		)
 
 		# Covered x < "20-Oct-2007"
 		$higher :LiteralRestriction( 
 			fieldId == $lower.fieldId,
 			patternIsNot == $lower.patternIsNot,
-			( evaluator == "<" || == "<="),
+			( operator == Operator.LESS || == Operator.LESS_OR_EQUAL),
 			eval( dateValue.after( $lower.getDateValue() ) )
 		)
 		
 		# No "<" or "<=" restrictions between these two
 		not LiteralRestriction( 
-			( evaluator == "<=" || == "<" ),
+			( operator == Operator.LESS_OR_EQUAL || == Operator.LESS ),
 			fieldId == $lower.fieldId,
 			patternIsNot == $lower.patternIsNot, 
 			eval( dateValue.after( $lower.getDateValue() ) ),
@@ -245,7 +247,6 @@
 			eval( restriction.getDateValue().before( $higher.getDateValue() ) )
 		)
 	then
-		#System.out.println( $lower + " | " + $higher );
 		retract( $gap );
 		result.remove( $gap );
 end
@@ -259,20 +260,20 @@
 		# Covered x > "01-Oct-2007"
 		$lower :LiteralRestriction( 
 			valueType == Field.FieldType.DATE,
-			( evaluator == ">" || == ">=")
+			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL)
 		)
 
 		# Covered x < "20-Oct-2007"
 		$higher :LiteralRestriction( 
 			fieldId == $lower.fieldId,
 			patternIsNot == $lower.patternIsNot,
-			( evaluator == "<" || == "<="),
+			( operator == Operator.LESS || == Operator.LESS_OR_EQUAL),
 			eval( dateValue.after( $lower.getDateValue() ) )
 		)
 		
-		# No "<" or "<=" restrictions between these two
+		# No ">" or ">=" restrictions between these two
 		not LiteralRestriction( 
-			( evaluator == ">=" || == ">" ),
+			( operator == Operator.GREATER_OR_EQUAL || == Operator.GREATER ),
 			fieldId == $lower.fieldId,
 			patternIsNot == $lower.patternIsNot,
 			eval( dateValue.after( $lower.getDateValue() ) ),
@@ -291,134 +292,3 @@
 		retract( $gap );
 		result.remove( $gap );
 end
-
-/*
-#
-# Example: covered ( x > 10 ),  ( x < 100 )and ( x == 50 )
-# reports that ( x < 50 ) ( x > 50 ) is missing.
-#
-rule "Remove useless integer gaps"
-	when
-		# Covered x > 10
-		$lower :LiteralRestriction( 
-			valueType == Field.FieldType.INT,
-			( evaluator == ">" || == ">=")
-		)
-		
-		# Covered x < 100
-		$higher :LiteralRestriction( 
-			fieldId == $lower.fieldId,
-			intValue > $lower.intValue,
-			patternIsNot == $lower.patternIsNot,
-			( evaluator == "<" || == "<=")
-		)
-	
-		# Nothing in between except "==" restrictions
-		not LiteralRestriction( 
-			evaluator != "==",
-			fieldId == $lower.fieldId,
-			patternIsNot == $lower.patternIsNot, 
-			intValue > $lower.intValue,
-			intValue < $higher.intValue
-		)
-		
-		# gap ( x < 50.0 ) or ( x > 50.0 )
-		$gap :Gap(
-			restriction.fieldId == $lower.fieldId,
-			restriction.patternIsNot == $lower.patternIsNot,
-			restriction.evaluator == "==",
-			restriction.intValue > $lower.intValue,
-			restriction.intValue < $higher.intValue
-		)
-
-	then
-		retract( $gap );
-		result.remove( $gap );
-end
-
-#
-# Example: covered ( x > 10.0 ),  ( x < 100.0 )and ( x == 50.0 )
-# reports that ( x < 50.0 ) ( x > 50.0 ) is missing.
-#
-rule "Remove useless double gaps"
-	when
-		# Covered x > 10.0
-		$lower :LiteralRestriction( 
-			valueType == Field.FieldType.DOUBLE,
-			( evaluator == ">" || == ">=")
-		)
-		
-		# Covered x < 100.0
-		$higher :LiteralRestriction( 
-			fieldId == $lower.fieldId,
-			doubleValue > $lower.doubleValue,
-			patternIsNot == $lower.patternIsNot,
-			( evaluator == "<" || == "<=")
-		)
-	
-		# Nothing in between except "==" restrictions
-		not LiteralRestriction( 
-			evaluator != "==",
-			fieldId == $lower.fieldId,
-			patternIsNot == $lower.patternIsNot, 
-			doubleValue > $lower.doubleValue,
-			doubleValue < $higher.doubleValue
-		)
-		
-		# gap ( x < 50.0 ) or ( x > 50.0 )
-		$gap :Gap(
-			restriction.fieldId == $lower.fieldId,
-			restriction.patternIsNot == $lower.patternIsNot,
-			restriction.evaluator == "==",
-			restriction.doubleValue > $lower.doubleValue,
-			restriction.doubleValue < $higher.doubleValue
-		)
-
-	then
-		retract( $gap );
-		result.remove( $gap );
-end
-
-#
-# Example: covered ( x > "01-Oct-2007" ),  ( x < "20-Oct-2007" )and ( x == "10-Oct-2007" )
-# reports that ( x < "10-Oct-2007" ) ( x > "10-Oct-2007" ) is missing.
-#
-rule "Remove useless date gaps"
-	when
-		# Covered x > "01-Oct-2007"
-		$lower :LiteralRestriction( 
-			valueType == Field.FieldType.DATE,
-			( evaluator == ">" || == ">=")
-		)
-		
-		# Covered x < "20-Oct-2007"
-		$higher :LiteralRestriction( 
-			fieldId == $lower.fieldId,
-			dateValue > $lower.dateValue,
-			patternIsNot == $lower.patternIsNot,
-			( evaluator == "<" || == "<=")
-		)
-	
-		# Nothing in between except "==" restrictions
-		not LiteralRestriction( 
-			evaluator != "==",
-			fieldId == $lower.fieldId,
-			patternIsNot == $lower.patternIsNot, 
-			dateValue > $lower.dateValue,
-			dateValue < $higher.dateValue
-		)
-		
-		# gap ( x < "10-Oct-2007" ) or ( x > "10-Oct-2007" )
-		$gap :Gap(
-			restriction.fieldId == $lower.fieldId,
-			restriction.patternIsNot == $lower.patternIsNot,
-			restriction.evaluator == "==",
-			restriction.dateValue > $lower.dateValue,
-			restriction.dateValue < $higher.dateValue
-		)
-
-	then
-		retract( $gap );
-		result.remove( $gap );
-end
-*/

Modified: labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Dates.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Dates.drl	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Dates.drl	2007-11-03 12:32:56 UTC (rev 16297)
@@ -2,6 +2,8 @@
 package org.drools.analytics.rangeChecks.dates;
 
 #list any import classes here.
+import org.drools.base.evaluators.Operator;
+
 import org.drools.analytics.components.*;
 import org.drools.analytics.dao.AnalyticsResult;
 import org.drools.analytics.report.components.Gap;
@@ -39,18 +41,18 @@
 		# Foo( bar > "27-Oct-2007" )
 		$r :LiteralRestriction( 
 			fieldId == $f.id, 
-			evaluator == ">"
+			operator == Operator.GREATER
 		)
 		
 		# Check if Foo( bar == "27-Oct-2007" || <= "27-Oct-2007" ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator  == "==" || == "<=" ), 
+			( operator  == Operator.EQUAL || == Operator.LESS_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			eval( dateValue.equals($r.getDateValue()) ) 
 		)
 	then
-		Gap gap = new Gap( $f, "<=", $r );
+		Gap gap = new Gap( $f, Operator.LESS_OR_EQUAL, $r );
 		
 		gap.setFiredRuleName( drools.getRule().getName() );
 		
@@ -71,18 +73,18 @@
 		# Foo( bar > "27-Oct-2007" )
 		$r :LiteralRestriction( 
 			fieldId == $f.id, 
-			evaluator == "<"
+			operator == Operator.LESS
 		)
 		
 		# Check if Foo( bar == "27-Oct-2007" || <= "27-Oct-2007" ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator  == "==" || == ">=" ), 
+			( operator  == Operator.EQUAL || == Operator.GREATER_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			eval( dateValue.equals($r.getDateValue()) ) 
 		)
 	then
-		Gap gap = new Gap( $f, ">=", $r );
+		Gap gap = new Gap( $f, Operator.GREATER_OR_EQUAL, $r );
 		
 		gap.setFiredRuleName( drools.getRule().getName() );
 		
@@ -104,13 +106,13 @@
 		# Foo( bar == "27-Oct-2007" ) 
 		$r :LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == "==" || == "<=" )
+			( operator == Operator.EQUAL || == Operator.LESS_OR_EQUAL )
 		)
 
 		# Check if Foo( bar > "27-Oct-2007" || >= "27-Oct-2007" ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == ">" || == ">=" ), 
+			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			eval( dateValue.equals($r.getDateValue()) ) 
 		)
@@ -118,12 +120,12 @@
 		# Check if Foo( bar == "28-Oct-2007" || >= "28-Oct-2007" ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == "==" || == ">=" ), 
+			( operator == Operator.EQUAL || == Operator.GREATER_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			eval( checkDates( dateValue, $r.getDateValue(), true ) ) 
 		)
 	then
-		Gap gap =  new Gap( $f, ">", $r );
+		Gap gap =  new Gap( $f, Operator.GREATER, $r );
 		
 		gap.setFiredRuleName( drools.getRule().getName() );
 		
@@ -145,13 +147,13 @@
 		# Foo( bar == "27-Oct-2007" ) 
 		$r :LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == "==" || == ">=" )
+			( operator == Operator.EQUAL || == Operator.GREATER_OR_EQUAL )
 		)
 
 		# Check if Foo( bar < "27-Oct-2007" || <= "27-Oct-2007" ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == "<" || == "<=" ), 
+			( operator == Operator.LESS || == Operator.LESS_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			eval( dateValue.equals($r.getDateValue()) ) 
 		)
@@ -159,12 +161,12 @@
 		# Check if Foo( bar == "26-Oct-2007" || <= "26-Oct-2007" ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == "==" || == "<=" ), 
+			( operator == Operator.EQUAL || == Operator.LESS_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			eval( checkDates( dateValue, $r.getDateValue(), false ) )
 		)
 	then
-		Gap gap =  new Gap( $f, "<", $r );
+		Gap gap =  new Gap( $f, Operator.LESS, $r );
 		
 		gap.setFiredRuleName( drools.getRule().getName() );
 		

Modified: labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Doubles.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Doubles.drl	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Doubles.drl	2007-11-03 12:32:56 UTC (rev 16297)
@@ -2,6 +2,8 @@
 package org.drools.analytics.rangeChecks.doubles;
 
 #list any import classes here.
+import org.drools.base.evaluators.Operator;
+
 import org.drools.analytics.components.*;
 import org.drools.analytics.dao.AnalyticsResult;
 import org.drools.analytics.report.components.Gap;
@@ -25,18 +27,18 @@
 		# Foo( bar > 42 )
 		$r :LiteralRestriction( 
 			fieldId == $f.id, 
-			evaluator == ">"
+			operator == Operator.GREATER
 		)
 		
 		# Check if Foo( bar == 42 || <= 42 ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator  == "==" || == "<=" ), 
+			( operator  == Operator.EQUAL || == Operator.LESS_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			doubleValue == $r.doubleValue 
 		)
 	then
-		Gap gap = new Gap( $f, "<=", $r );
+		Gap gap = new Gap( $f, Operator.LESS_OR_EQUAL, $r );
 		
 		gap.setFiredRuleName( drools.getRule().getName() );
 		
@@ -57,18 +59,18 @@
 		# Foo( bar > 42 )
 		$r :LiteralRestriction( 
 			fieldId == $f.id, 
-			evaluator == "<"
+			operator == Operator.LESS
 		)
 		
 		# Check if Foo( bar == 42 || <= 42 ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator  == "==" || == ">=" ), 
+			( operator  == Operator.EQUAL || == Operator.GREATER_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			doubleValue == $r.doubleValue 
 		)
 	then
-		Gap gap = new Gap( $f, ">=", $r );
+		Gap gap = new Gap( $f, Operator.GREATER_OR_EQUAL, $r );
 		
 		gap.setFiredRuleName( drools.getRule().getName() );
 		
@@ -90,18 +92,18 @@
 		# Foo( bar == 42 ) 
 		$r :LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == "==" || == "<=" )
+			( operator == Operator.EQUAL || == Operator.LESS_OR_EQUAL )
 		)
 
 		# Check if Foo( bar > 42 || >= 42 ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == ">" || == ">=" ), 
+			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			doubleValue == $r.doubleValue 
 		)
 	then
-		Gap gap =  new Gap( $f, ">", $r );
+		Gap gap =  new Gap( $f, Operator.GREATER, $r );
 		
 		gap.setFiredRuleName( drools.getRule().getName() );
 		
@@ -123,156 +125,21 @@
 		# Foo( bar == 42 ) 
 		$r :LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == "==" || == ">=" )
+			( operator == Operator.EQUAL || == Operator.GREATER_OR_EQUAL )
 		)
 
 		# Check if Foo( bar < 42 || <= 42 ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == "<" || == "<=" ), 
+			( operator == Operator.LESS || == Operator.LESS_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			doubleValue == $r.doubleValue 
 		)
 	then
-		Gap gap =  new Gap( $f, "<", $r );
+		Gap gap =  new Gap( $f, Operator.LESS, $r );
 		
 		gap.setFiredRuleName( drools.getRule().getName() );
 		
 		result.save( gap );
 		insert( gap );
 end
-
-
-/*
-# If all ranges are not checked for a field.
-# 
-# Type: Warning
-# Example: in "Rule 1" Foo(bar > 42 ) and in "Rule 2" Foo( bar < 42 )
-# 					then Foo( bar == 42 ) is missing.
-rule "Range check for doubles, smaller and greater than"
-	when
-		$f :Field( fieldType == Field.FieldType.DOUBLE )
-		(
-				$r :LiteralRestriction( 
-					fieldId == $f.id, 
-					evaluator == ">" 
-				)
-			and
-				not LiteralRestriction( 
-					fieldId == $f.id, 
-					( evaluator == "==" || == "<=" ), 
-					patternIsNot == $r.patternIsNot, 
-					doubleValue == $r.doubleValue 
-			)
-		) or (
-				$r :LiteralRestriction( 
-					fieldId == $f.id, 
-					evaluator == "<" 
-				)
-			and
-				not LiteralRestriction( 
-					fieldId == $f.id, 
-					( evaluator == "==" || == ">=" ), 
-					patternIsNot == $r.patternIsNot, 
-					doubleValue == $r.doubleValue 
-				)
-		) or (
-				$r :LiteralRestriction( 
-					fieldId == $f.id, 
-					evaluator == "<=" 
-				)
-			and
-				not LiteralRestriction( 
-					fieldId == $f.id, 
-					evaluator  == ">", 
-					patternIsNot == $r.patternIsNot, 
-					doubleValue == $r.doubleValue 
-				)
-		) or (
-				$r :LiteralRestriction( 
-					fieldId == $f.id, 
-					evaluator == ">=" 
-				)
-			and
-				not LiteralRestriction( 
-					fieldId == $f.id, 
-					evaluator  == "<", 
-					patternIsNot == $r.patternIsNot, 
-					doubleValue == $r.doubleValue 
-				)
-		)
-	then
-		Gap gap = new Gap( $f, Gap.getReversedEvaluator($r.getEvaluator()), $r );
-		gap.setFiredRuleName( drools.getRule().getName() );
-		result.save( gap );
-		insert( gap );
-end
-
-# If all ranges are not checked for a field.
-# If equality and smaller than exist check that greater than exists too.
-#
-# Type: Warning
-# Example: in "Rule 1" Foo(bar == 42 ) and in "Rule 2" Foo( bar < 42 )
-# 					then Foo( bar > 42 ) is missing.
-rule "Range check for doubles, equal and greater than"
-	when
-		# Case Foo( bar == 42 ) Foo( bar >= 42 || > 42 ).
-		$f :Field( fieldType == Field.FieldType.DOUBLE )
-		$r :LiteralRestriction( 
-			fieldId == $f.id, 
-			evaluator == "=="
-		)
-		LiteralRestriction( 
-			fieldId == $f.id, 
-			( evaluator == ">" || == ">=" ), 
-			patternIsNot == $r.patternIsNot, 
-			doubleValue == $r.doubleValue  
-		)
-		# Check if Foo( bar < 42 || <= 42 ) is missing.
-		not	LiteralRestriction( 
-			fieldId == $f.id, 
-			( evaluator == "<" || == "<=" ), 
-			patternIsNot == $r.patternIsNot, 
-			doubleValue == $r.doubleValue 
-		)
-	then
-		Gap gap = new Gap( $f, "<", $r );
-		gap.setFiredRuleName( drools.getRule().getName() );
-		result.save( gap );
-		insert( gap );
-end
-
-# If all ranges are not checked for a field.
-# If equality and smaller than exist check that greater than exists too.
-#
-# Type: Warning
-# Example: in "Rule 1" Foo(bar == 42 ) and in "Rule 2" Foo( bar > 42 )
-# 					then Foo( bar < 42 ) is missing.
-rule "Range check for doubles, equal and smaller than"
-	when
-		# Case Foo( bar == 42 ) Foo( bar <= 42 || < 42 ).
-		$f :Field( fieldType == Field.FieldType.DOUBLE )
-		$r :LiteralRestriction( 
-			fieldId == $f.id, 
-			evaluator == "==" 
-		)
-		LiteralRestriction( 
-			fieldId == $f.id, 
-			( evaluator == "<" || == "<=" ), 
-			patternIsNot == $r.patternIsNot, 
-			doubleValue == $r.doubleValue 
-		)
-		# Check if Foo( bar > 42 || >= 42 ) is missing.
-		not	LiteralRestriction( 
-			fieldId == $f.id, 
-			( evaluator == ">" || == ">=" ), 
-			patternIsNot == $r.patternIsNot, 
-			doubleValue == $r.doubleValue 
-		)
-	then
-		Gap gap = new Gap( $f, ">", $r );
-		gap.setFiredRuleName( drools.getRule().getName() );
-		result.save( gap );
-		insert( gap );
-end
-*/

Modified: labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Integers.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Integers.drl	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Integers.drl	2007-11-03 12:32:56 UTC (rev 16297)
@@ -2,6 +2,8 @@
 package org.drools.analytics.rangeChecks.integers;
 
 #list any import classes here.
+import org.drools.base.evaluators.Operator;
+
 import org.drools.analytics.components.*;
 import org.drools.analytics.report.components.Gap;
 
@@ -22,18 +24,18 @@
 		# Foo( bar > 42 )
 		$r :LiteralRestriction( 
 			fieldId == $f.id, 
-			evaluator == ">"
+			operator == Operator.GREATER
 		)
 		
 		# Check if Foo( bar == 42 || <= 42 ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator  == "==" || == "<=" ), 
+			( operator  == Operator.EQUAL || == Operator.LESS_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			intValue == $r.intValue 
 		)
 	then
-		Gap gap = new Gap( $f, "<=", $r );
+		Gap gap = new Gap( $f, Operator.LESS_OR_EQUAL, $r );
 		
 		gap.setFiredRuleName( drools.getRule().getName() );
 		
@@ -54,18 +56,18 @@
 		# Foo( bar > 42 )
 		$r :LiteralRestriction( 
 			fieldId == $f.id, 
-			evaluator == "<"
+			operator == Operator.LESS
 		)
 		
 		# Check if Foo( bar == 42 || <= 42 ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator  == "==" || == ">=" ), 
+			( operator  == Operator.EQUAL || == Operator.GREATER_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			intValue == $r.intValue 
 		)
 	then
-		Gap gap = new Gap( $f, ">=", $r );
+		Gap gap = new Gap( $f, Operator.GREATER_OR_EQUAL, $r );
 		
 		gap.setFiredRuleName( drools.getRule().getName() );
 		
@@ -87,13 +89,13 @@
 		# Foo( bar == 42 ) 
 		$r :LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == "==" || == "<=" )
+			( operator == Operator.EQUAL || == Operator.LESS_OR_EQUAL )
 		)
 
 		# Check if Foo( bar > 42 || >= 42 ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == ">" || == ">=" ), 
+			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			intValue == $r.intValue 
 		)
@@ -101,12 +103,12 @@
 		# Check if Foo( bar == 43 || >= 43 ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == "==" || == ">=" ), 
+			( operator == Operator.EQUAL || == Operator.GREATER_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			eval( intValue == $r.getIntValue() + 1 ) 
 		)
 	then
-		Gap gap =  new Gap( $f, ">", $r );
+		Gap gap =  new Gap( $f, Operator.GREATER, $r );
 		
 		gap.setFiredRuleName( drools.getRule().getName() );
 		
@@ -128,13 +130,13 @@
 		# Foo( bar == 42 ) 
 		$r :LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == "==" || == ">=" )
+			( operator == Operator.EQUAL || == Operator.GREATER_OR_EQUAL )
 		)
 
 		# Check if Foo( bar < 42 || <= 42 ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == "<" || == "<=" ), 
+			( operator == Operator.LESS || == Operator.LESS_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			intValue == $r.intValue 
 		)
@@ -142,12 +144,12 @@
 		# Check if Foo( bar == 41 || <= 41 ) is missing.
 		not	LiteralRestriction( 
 			fieldId == $f.id, 
-			( evaluator == "==" || == "<=" ), 
+			( operator == Operator.EQUAL || == Operator.LESS_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			eval( intValue == $r.getIntValue() - 1 ) 
 		)
 	then
-		Gap gap =  new Gap( $f, "<", $r );
+		Gap gap =  new Gap( $f, Operator.LESS, $r );
 		
 		gap.setFiredRuleName( drools.getRule().getName() );
 		

Modified: labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Patterns.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Patterns.drl	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Patterns.drl	2007-11-03 12:32:56 UTC (rev 16297)
@@ -2,6 +2,8 @@
 package org.drools.analytics.rangeChecks.patterns;
 
 #list any import classes here.
+import org.drools.base.evaluators.Operator;
+
 import org.drools.analytics.components.*;
 import org.drools.analytics.accumulateFunction.ValidatePattern;
 import org.drools.analytics.accumulateFunction.ValidatePatternResult;
@@ -36,7 +38,7 @@
 					LiteralRestriction( 
 						fieldId == $f.id, 
 						patternIsNot == false, 
-						evaluator == "=="
+						operator == Operator.EQUAL
 					)
 				)
 		) or (
@@ -46,14 +48,14 @@
 					LiteralRestriction( 
 						fieldId == $f.id, 
 						patternIsNot == true, 
-						evaluator == "=="
+						operator == Operator.EQUAL
 					)
 				)
 		)
 	then
 		Number number = FindMissingNumber.testForPattern( $list );
 		if( number != null ){
-			MissingNumberPattern mnp = new MissingNumberPattern( $f, "==", $f.getFieldType(), number.toString() );
+			MissingNumberPattern mnp = new MissingNumberPattern( $f, Operator.EQUAL, $f.getFieldType(), number.toString() );
 			result.save( mnp );
 		}
 end
@@ -76,7 +78,7 @@
 					LiteralRestriction( 
 						fieldId == $f.id, 
 						patternIsNot == false, 
-						evaluator == "!="
+						operator == Operator.NOT_EQUAL
 					)
 				)
 		) or (
@@ -86,14 +88,14 @@
 					LiteralRestriction( 
 						fieldId == $f.id, 
 						patternIsNot == true, 
-						evaluator == "!="
+						operator == Operator.NOT_EQUAL
 					)
 				)
 		)
 	then
 		Number number = FindMissingNumber.testForPattern( $list );
 		if( number != null ){
-			MissingNumberPattern mnp = new MissingNumberPattern( $f, "!=", $f.getFieldType(), number.toString() );
+			MissingNumberPattern mnp = new MissingNumberPattern( $f, Operator.NOT_EQUAL, $f.getFieldType(), number.toString() );
 			result.save( mnp );
 		}
 end

Modified: labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Restrictions.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Restrictions.drl	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Restrictions.drl	2007-11-03 12:32:56 UTC (rev 16297)
@@ -10,7 +10,9 @@
 		$left :VariableRestriction()
 		$right :VariableRestriction( 
 			id != $left.id, 
-			evaluator == $left.evaluator 
+			operator == $left.operator,
+			variable.objectType == $left.variable.objectType,
+			variable.objectId == $left.variable.objectId 
 		)
 		# Check that there is not already a pair with these values.
 		not Redundancy( 
@@ -23,12 +25,12 @@
 		)
 		
 		# Check that these two variables point to the same object.
-		$v :Variable( id == $left.variableId )
-		Variable( 
-			id == $right.variableId,
-			objectType == $v.objectType,
-			objectId == $v.objectId
-		)
+		#$v :Variable( id == $left.variableId )
+		#Variable( 
+		#	id == $right.variableId,
+		#	objectType == $v.objectType,
+		#	objectId == $v.objectId
+		#)
 	then
 		insert( new Redundancy( Redundancy.RedundancyType.STRONG, $left, $right ) );
 end
@@ -42,14 +44,14 @@
 		(
 				$right :LiteralRestriction( 
 					id != $left.id, 
-					evaluator == $left.evaluator,
+					operator == $left.operator,
 					valueType == $left.valueType,
 					valueType == Field.FieldType.BOOLEAN,
 					booleanValue == $left.booleanValue
 				)
 			or
 				$right :LiteralRestriction( id != $left.id, 
-					evaluator == $left.evaluator,
+					operator == $left.operator,
 					valueType == $left.valueType,
 					valueType == Field.FieldType.STRING,
 					valueAsString matches $left.valueAsString
@@ -57,7 +59,7 @@
 			or
 				$right :LiteralRestriction( 
 					id != $left.id, 
-					evaluator == $left.evaluator,
+					operator == $left.operator,
 					valueType == $left.valueType,
 					valueType == Field.FieldType.INT,
 					intValue == $left.intValue
@@ -65,7 +67,7 @@
 			or
 				$right :LiteralRestriction( 
 					id != $left.id, 
-					evaluator == $left.evaluator,
+					operator == $left.operator,
 					valueType == $left.valueType,
 					valueType == Field.FieldType.DOUBLE,
 					doubleValue == $left.doubleValue
@@ -73,7 +75,7 @@
 			or
 				$right :LiteralRestriction( 
 					id != $left.id, 
-					evaluator == $left.evaluator,
+					operator == $left.operator,
 					valueType == $left.valueType,
 					valueType == Field.FieldType.DATE,
 					eval( dateValue.equals($left.getDateValue()) )
@@ -82,7 +84,7 @@
 			(
 				$right :LiteralRestriction( 
 					id != $left.id, 
-					evaluator == $left.evaluator,
+					operator == $left.operator,
 					valueType == $left.valueType,
 					valueType == Field.FieldType.VARIABLE
 				)
@@ -122,7 +124,7 @@
 		$left :ReturnValueRestriction()
 		$right :ReturnValueRestriction( 
 			id != $left.id,
-			evaluator == $left.evaluator,
+			operator == $left.operator,
 			classMethodName matches $left.classMethodName,
 			compareStringArrays( declarations, $left.declarations )
 		)
@@ -151,7 +153,7 @@
 		$left :QualifiedIdentifierRestriction()
 		$right :QualifiedIdentifierRestriction( 
 			id != $left.id, 
-			evaluator == $left.evaluator 
+			operator == $left.operator 
 		)
 		
 		# Check that these two variables point to the same object.

Modified: labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/ConsequenceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/ConsequenceTest.java	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/ConsequenceTest.java	2007-11-03 12:32:56 UTC (rev 16297)
@@ -6,13 +6,11 @@
 import java.util.Set;
 
 import org.drools.StatelessSession;
-import org.drools.StatelessSessionResult;
 import org.drools.analytics.components.AnalyticsRule;
 import org.drools.analytics.dao.AnalyticsDataFactory;
 import org.drools.analytics.dao.AnalyticsResult;
 import org.drools.analytics.report.components.AnalyticsMessage;
 import org.drools.analytics.report.components.AnalyticsMessageBase;
-import org.drools.analytics.report.components.Gap;
 import org.drools.base.RuleNameMatchesAgendaFilter;
 
 /**

Modified: labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/RangeCheckCleanTest.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/RangeCheckCleanTest.java	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/RangeCheckCleanTest.java	2007-11-03 12:32:56 UTC (rev 16297)
@@ -15,6 +15,7 @@
 import org.drools.analytics.dao.AnalyticsResult;
 import org.drools.analytics.report.components.Gap;
 import org.drools.base.RuleNameMatchesAgendaFilter;
+import org.drools.base.evaluators.Operator;
 
 /**
  * 
@@ -39,7 +40,7 @@
 		LiteralRestriction lower = new LiteralRestriction();
 		lower.setRuleName("> 10 covered");
 		lower.setFieldId(f.getId());
-		lower.setEvaluator(">");
+		lower.setOperator(Operator.GREATER);
 		lower.setValue("10");
 		testData.add(lower);
 
@@ -47,38 +48,38 @@
 		LiteralRestriction r1 = new LiteralRestriction();
 		r1.setRuleName("== 50 covered");
 		r1.setFieldId(f.getId());
-		r1.setEvaluator("==");
+		r1.setOperator(Operator.EQUAL);
 		r1.setValue("50");
 		testData.add(r1);
 
 		// > 50 gap
-		Gap g1 = new Gap(f, ">", r1);
+		Gap g1 = new Gap(f, Operator.GREATER, r1);
 		g1.setFiredRuleName("above");
 		testData.add(g1);
 
 		// < 50 gap
-		Gap g2 = new Gap(f, "<", r1);
+		Gap g2 = new Gap(f, Operator.LESS, r1);
 		g2.setFiredRuleName("below");
 		testData.add(g2);
-		
+
 		// > 70 covered
 		LiteralRestriction r2 = new LiteralRestriction();
 		r2.setRuleName("> 70 covered");
 		r2.setFieldId(f.getId());
-		r2.setEvaluator(">");
+		r2.setOperator(Operator.GREATER);
 		r2.setValue("70");
 		testData.add(r2);
 
 		// <= 70 gap
-		Gap g3 = new Gap(f, "<=", r2);
+		Gap g3 = new Gap(f, Operator.LESS_OR_EQUAL, r2);
 		g3.setFiredRuleName("70gap");
 		testData.add(g3);
-		
+
 		// < 100 covered
 		LiteralRestriction higher = new LiteralRestriction();
 		higher.setRuleName("< 100 covered");
 		higher.setFieldId(f.getId());
-		higher.setEvaluator("<");
+		higher.setOperator(Operator.LESS);
 		higher.setValue("100");
 		testData.add(higher);
 
@@ -117,74 +118,74 @@
 			}
 		}
 	}
-	
+
 	public void testUselessIntegerGapsGreater() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
 				.getResourceAsStream("rangeChecks/Clean.drl"));
-		
+
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-		"Remove useless integer gaps greater or greater and equal"));
-		
+				"Remove useless integer gaps greater or greater and equal"));
+
 		Collection<Object> testData = new ArrayList<Object>();
-		
+
 		Field f = new Field();
 		testData.add(f);
-		
+
 		// > 10 covered
 		LiteralRestriction lower = new LiteralRestriction();
 		lower.setRuleName("> 10 covered");
 		lower.setFieldId(f.getId());
-		lower.setEvaluator(">");
+		lower.setOperator(Operator.GREATER);
 		lower.setValue("10");
 		testData.add(lower);
-		
+
 		// == 50 covered
 		LiteralRestriction r1 = new LiteralRestriction();
 		r1.setRuleName("== 50 covered");
 		r1.setFieldId(f.getId());
-		r1.setEvaluator("==");
+		r1.setOperator(Operator.EQUAL);
 		r1.setValue("50");
 		testData.add(r1);
-		
+
 		// > 50 gap
-		Gap g1 = new Gap(f, ">", r1);
+		Gap g1 = new Gap(f, Operator.GREATER, r1);
 		g1.setFiredRuleName("above");
 		testData.add(g1);
-		
+
 		// < 50 gap
-		Gap g2 = new Gap(f, "<", r1);
+		Gap g2 = new Gap(f, Operator.LESS, r1);
 		g2.setFiredRuleName("below");
 		testData.add(g2);
-		
+
 		// < 70 covered
 		LiteralRestriction r2 = new LiteralRestriction();
 		r2.setRuleName("< 70 covered");
 		r2.setFieldId(f.getId());
-		r2.setEvaluator("<");
+		r2.setOperator(Operator.LESS);
 		r2.setValue("70");
 		testData.add(r2);
-		
+
 		// >= 70 gap
-		Gap g3 = new Gap(f, ">=", r2);
+		Gap g3 = new Gap(f, Operator.GREATER_OR_EQUAL, r2);
 		g3.setFiredRuleName("70gap");
 		testData.add(g3);
-		
+
 		// < 100 covered
 		LiteralRestriction higher = new LiteralRestriction();
 		higher.setRuleName("< 100 covered");
 		higher.setFieldId(f.getId());
-		higher.setEvaluator("<");
+		higher.setOperator(Operator.LESS);
 		higher.setValue("100");
 		testData.add(higher);
 
 		AnalyticsResult result = AnalyticsDataFactory.getAnalyticsResult();
 		session.setGlobal("result", result);
-		
+
 		StatelessSessionResult sessionResult = session
-		.executeWithResults(testData);
-		
+				.executeWithResults(testData);
+
 		Iterator<Object> iter = sessionResult.iterateObjects();
-		
+
 		Set<String> rulesThatHadErrors = new HashSet<String>();
 		while (iter.hasNext()) {
 			Object o = (Object) iter.next();
@@ -197,7 +198,7 @@
 			}
 			// System.out.println(o);
 		}
-		
+
 		assertTrue(rulesThatHadErrors.remove("> 10 covered"));
 		assertTrue(rulesThatHadErrors.remove("== 50 covered"));
 		assertTrue(rulesThatHadErrors.remove("< 70 covered"));
@@ -205,81 +206,81 @@
 		assertFalse(rulesThatHadErrors.contains("below"));
 		assertFalse(rulesThatHadErrors.contains("above"));
 		assertFalse(rulesThatHadErrors.contains("70gap"));
-		
+
 		if (!rulesThatHadErrors.isEmpty()) {
 			for (String string : rulesThatHadErrors) {
 				fail("Rule " + string + " caused an error.");
 			}
 		}
 	}
-	
+
 	public void testUselessDoubleGapsLesser() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
 				.getResourceAsStream("rangeChecks/Clean.drl"));
-		
+
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-		"Remove useless double gaps lesser or lesser and equal"));
-		
+				"Remove useless double gaps lesser or lesser and equal"));
+
 		Collection<Object> testData = new ArrayList<Object>();
-		
+
 		Field f = new Field();
 		testData.add(f);
-		
+
 		// > 10.0 covered
 		LiteralRestriction lower = new LiteralRestriction();
 		lower.setRuleName("> 10.0 covered");
 		lower.setFieldId(f.getId());
-		lower.setEvaluator(">");
+		lower.setOperator(Operator.GREATER);
 		lower.setValue("10.0");
 		testData.add(lower);
-		
+
 		// == 50.0 covered
 		LiteralRestriction r1 = new LiteralRestriction();
 		r1.setRuleName("== 50.0 covered");
 		r1.setFieldId(f.getId());
-		r1.setEvaluator("==");
+		r1.setOperator(Operator.EQUAL);
 		r1.setValue("50.0");
 		testData.add(r1);
-		
+
 		// > 50.0 gap
-		Gap g1 = new Gap(f, ">", r1);
+		Gap g1 = new Gap(f, Operator.GREATER, r1);
 		g1.setFiredRuleName("above");
 		testData.add(g1);
-		
+
 		// < 50.0 gap
-		Gap g2 = new Gap(f, "<", r1);
+		Gap g2 = new Gap(f, Operator.LESS, r1);
 		g2.setFiredRuleName("below");
 		testData.add(g2);
-		
+
 		// > 70.0 covered
 		LiteralRestriction r2 = new LiteralRestriction();
 		r2.setRuleName("> 70.0 covered");
 		r2.setFieldId(f.getId());
-		r2.setEvaluator(">");
+		r2.setOperator(Operator.GREATER);
 		r2.setValue("70.0");
 		testData.add(r2);
-		
+
 		// <= 70.0 gap
-		Gap g3 = new Gap(f, "<=", r2);
+		Gap g3 = new Gap(f, Operator.LESS_OR_EQUAL, r2);
 		g3.setFiredRuleName("70gap");
 		testData.add(g3);
-		
+
 		// < 100.0 covered
 		LiteralRestriction higher = new LiteralRestriction();
 		higher.setRuleName("< 100.0 covered");
 		higher.setFieldId(f.getId());
-		higher.setEvaluator("<");
+		higher.setOperator(Operator.LESS);
 		higher.setValue("100.0");
 		testData.add(higher);
 
 		AnalyticsResult result = AnalyticsDataFactory.getAnalyticsResult();
 		session.setGlobal("result", result);
-		
+
 		StatelessSessionResult sessionResult = session
-		.executeWithResults(testData);
-		
+				.executeWithResults(testData);
+
 		Iterator<Object> iter = sessionResult.iterateObjects();
-		
+
 		Set<String> rulesThatHadErrors = new HashSet<String>();
 		while (iter.hasNext()) {
 			Object o = (Object) iter.next();
@@ -292,7 +293,7 @@
 			}
 			// System.out.println(o);
 		}
-		
+
 		assertTrue(rulesThatHadErrors.remove("> 10.0 covered"));
 		assertTrue(rulesThatHadErrors.remove("== 50.0 covered"));
 		assertTrue(rulesThatHadErrors.remove("> 70.0 covered"));
@@ -300,81 +301,81 @@
 		assertFalse(rulesThatHadErrors.contains("below"));
 		assertFalse(rulesThatHadErrors.contains("above"));
 		assertFalse(rulesThatHadErrors.contains("70gap"));
-		
+
 		if (!rulesThatHadErrors.isEmpty()) {
 			for (String string : rulesThatHadErrors) {
 				fail("Rule " + string + " caused an error.");
 			}
 		}
 	}
-	
+
 	public void testUselessDoubleGapsGreater() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
 				.getResourceAsStream("rangeChecks/Clean.drl"));
-		
+
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-		"Remove useless double gaps greater or greater and equal"));
-		
+				"Remove useless double gaps greater or greater and equal"));
+
 		Collection<Object> testData = new ArrayList<Object>();
-		
+
 		Field f = new Field();
 		testData.add(f);
-		
+
 		// > 10.0 covered
 		LiteralRestriction lower = new LiteralRestriction();
 		lower.setRuleName("> 10.0 covered");
 		lower.setFieldId(f.getId());
-		lower.setEvaluator(">");
+		lower.setOperator(Operator.GREATER);
 		lower.setValue("10.0");
 		testData.add(lower);
-		
+
 		// == 50.0 covered
 		LiteralRestriction r1 = new LiteralRestriction();
 		r1.setRuleName("== 50.0 covered");
 		r1.setFieldId(f.getId());
-		r1.setEvaluator("==");
+		r1.setOperator(Operator.EQUAL);
 		r1.setValue("50.0");
 		testData.add(r1);
-		
+
 		// > 50.0 gap
-		Gap g1 = new Gap(f, ">", r1);
+		Gap g1 = new Gap(f, Operator.GREATER, r1);
 		g1.setFiredRuleName("above");
 		testData.add(g1);
-		
+
 		// < 50.0 gap
-		Gap g2 = new Gap(f, "<", r1);
+		Gap g2 = new Gap(f, Operator.LESS, r1);
 		g2.setFiredRuleName("below");
 		testData.add(g2);
-		
+
 		// < 70.0 covered
 		LiteralRestriction r2 = new LiteralRestriction();
 		r2.setRuleName("< 70.0 covered");
 		r2.setFieldId(f.getId());
-		r2.setEvaluator("<");
+		r2.setOperator(Operator.LESS);
 		r2.setValue("70.0");
 		testData.add(r2);
-		
+
 		// >= 70.0 gap
-		Gap g3 = new Gap(f, ">=", r2);
+		Gap g3 = new Gap(f, Operator.GREATER_OR_EQUAL, r2);
 		g3.setFiredRuleName("70gap");
 		testData.add(g3);
-		
+
 		// < 100.0 covered
 		LiteralRestriction higher = new LiteralRestriction();
 		higher.setRuleName("< 100.0 covered");
 		higher.setFieldId(f.getId());
-		higher.setEvaluator("<");
+		higher.setOperator(Operator.LESS);
 		higher.setValue("100.0");
 		testData.add(higher);
 
 		AnalyticsResult result = AnalyticsDataFactory.getAnalyticsResult();
 		session.setGlobal("result", result);
-		
+
 		StatelessSessionResult sessionResult = session
-		.executeWithResults(testData);
-		
+				.executeWithResults(testData);
+
 		Iterator<Object> iter = sessionResult.iterateObjects();
-		
+
 		Set<String> rulesThatHadErrors = new HashSet<String>();
 		while (iter.hasNext()) {
 			Object o = (Object) iter.next();
@@ -387,7 +388,7 @@
 			}
 			// System.out.println(o);
 		}
-		
+
 		assertTrue(rulesThatHadErrors.remove("> 10.0 covered"));
 		assertTrue(rulesThatHadErrors.remove("== 50.0 covered"));
 		assertTrue(rulesThatHadErrors.remove("< 70.0 covered"));
@@ -395,81 +396,81 @@
 		assertFalse(rulesThatHadErrors.contains("below"));
 		assertFalse(rulesThatHadErrors.contains("above"));
 		assertFalse(rulesThatHadErrors.contains("70gap"));
-		
+
 		if (!rulesThatHadErrors.isEmpty()) {
 			for (String string : rulesThatHadErrors) {
 				fail("Rule " + string + " caused an error.");
 			}
 		}
 	}
-	
+
 	public void testUselessDateGapsLesser() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
 				.getResourceAsStream("rangeChecks/Clean.drl"));
-		
+
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-		"Remove useless date gaps lesser or lesser and equal"));
-		
+				"Remove useless date gaps lesser or lesser and equal"));
+
 		Collection<Object> testData = new ArrayList<Object>();
-		
+
 		Field f = new Field();
 		testData.add(f);
-		
+
 		// > "01-Oct-2007" covered
 		LiteralRestriction lower = new LiteralRestriction();
 		lower.setRuleName("> 01-Oct-2007 covered");
 		lower.setFieldId(f.getId());
-		lower.setEvaluator(">");
+		lower.setOperator(Operator.GREATER);
 		lower.setValue("01-Oct-2007");
 		testData.add(lower);
-		
+
 		// == "10-Oct-2007" covered
 		LiteralRestriction r1 = new LiteralRestriction();
 		r1.setRuleName("== 10-Oct-2007 covered");
 		r1.setFieldId(f.getId());
-		r1.setEvaluator("==");
+		r1.setOperator(Operator.EQUAL);
 		r1.setValue("10-Oct-2007");
 		testData.add(r1);
-		
+
 		// > "10-Oct-2007" gap
-		Gap g1 = new Gap(f, ">", r1);
+		Gap g1 = new Gap(f, Operator.GREATER, r1);
 		g1.setFiredRuleName("above");
 		testData.add(g1);
-		
+
 		// < "10-Oct-2007" gap
-		Gap g2 = new Gap(f, "<", r1);
+		Gap g2 = new Gap(f, Operator.LESS, r1);
 		g2.setFiredRuleName("below");
 		testData.add(g2);
-		
+
 		// > "15-Oct-2007" covered
 		LiteralRestriction r2 = new LiteralRestriction();
 		r2.setRuleName("> 15-Oct-2007 covered");
 		r2.setFieldId(f.getId());
-		r2.setEvaluator(">");
+		r2.setOperator(Operator.GREATER);
 		r2.setValue("15-Oct-2007");
 		testData.add(r2);
-		
+
 		// <= "15-Oct-2007" gap
-		Gap g3 = new Gap(f, "<=", r2);
+		Gap g3 = new Gap(f, Operator.LESS_OR_EQUAL, r2);
 		g3.setFiredRuleName("15-Oct-2007gap");
 		testData.add(g3);
-		
+
 		// < "20-Oct-2007" covered
 		LiteralRestriction higher = new LiteralRestriction();
 		higher.setRuleName("< 20-Oct-2007 covered");
 		higher.setFieldId(f.getId());
-		higher.setEvaluator("<");
+		higher.setOperator(Operator.LESS);
 		higher.setValue("20-Oct-2007");
 		testData.add(higher);
 
 		AnalyticsResult result = AnalyticsDataFactory.getAnalyticsResult();
 		session.setGlobal("result", result);
-		
+
 		StatelessSessionResult sessionResult = session
-		.executeWithResults(testData);
-		
+				.executeWithResults(testData);
+
 		Iterator<Object> iter = sessionResult.iterateObjects();
-		
+
 		Set<String> rulesThatHadErrors = new HashSet<String>();
 		while (iter.hasNext()) {
 			Object o = (Object) iter.next();
@@ -482,7 +483,7 @@
 			}
 			// System.out.println(o);
 		}
-		
+
 		assertTrue(rulesThatHadErrors.remove("> 01-Oct-2007 covered"));
 		assertTrue(rulesThatHadErrors.remove("== 10-Oct-2007 covered"));
 		assertTrue(rulesThatHadErrors.remove("> 15-Oct-2007 covered"));
@@ -490,81 +491,81 @@
 		assertFalse(rulesThatHadErrors.contains("below"));
 		assertFalse(rulesThatHadErrors.contains("above"));
 		assertFalse(rulesThatHadErrors.contains("15-Oct-2007gap"));
-		
+
 		if (!rulesThatHadErrors.isEmpty()) {
 			for (String string : rulesThatHadErrors) {
 				fail("Rule " + string + " caused an error.");
 			}
 		}
 	}
-	
+
 	public void testUselessDateGapsGreater() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
 				.getResourceAsStream("rangeChecks/Clean.drl"));
-		
+
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-		"Remove useless date gaps greater or greater and equal"));
-		
+				"Remove useless date gaps greater or greater and equal"));
+
 		Collection<Object> testData = new ArrayList<Object>();
-		
+
 		Field f = new Field();
 		testData.add(f);
-		
+
 		// > "01-Oct-2007" covered
 		LiteralRestriction lower = new LiteralRestriction();
 		lower.setRuleName("> 01-Oct-2007 covered");
 		lower.setFieldId(f.getId());
-		lower.setEvaluator(">");
+		lower.setOperator(Operator.GREATER);
 		lower.setValue("01-Oct-2007");
 		testData.add(lower);
-		
+
 		// == "10-Oct-2007" covered
 		LiteralRestriction r1 = new LiteralRestriction();
 		r1.setRuleName("== 10-Oct-2007 covered");
 		r1.setFieldId(f.getId());
-		r1.setEvaluator("==");
+		r1.setOperator(Operator.EQUAL);
 		r1.setValue("10-Oct-2007");
 		testData.add(r1);
-		
+
 		// > "10-Oct-2007" gap
-		Gap g1 = new Gap(f, ">", r1);
+		Gap g1 = new Gap(f, Operator.GREATER, r1);
 		g1.setFiredRuleName("above");
 		testData.add(g1);
-		
+
 		// < "10-Oct-2007" gap
-		Gap g2 = new Gap(f, "<", r1);
+		Gap g2 = new Gap(f, Operator.LESS, r1);
 		g2.setFiredRuleName("below");
 		testData.add(g2);
-		
+
 		// < "15-Oct-2007" covered
 		LiteralRestriction r2 = new LiteralRestriction();
 		r2.setRuleName("< 15-Oct-2007 covered");
 		r2.setFieldId(f.getId());
-		r2.setEvaluator("<");
+		r2.setOperator(Operator.LESS);
 		r2.setValue("15-Oct-2007");
 		testData.add(r2);
-		
+
 		// >= "15-Oct-2007" gap
-		Gap g3 = new Gap(f, ">=", r2);
+		Gap g3 = new Gap(f, Operator.GREATER_OR_EQUAL, r2);
 		g3.setFiredRuleName("15-Oct-2007gap");
 		testData.add(g3);
-		
+
 		// < "20-Oct-2007" covered
 		LiteralRestriction higher = new LiteralRestriction();
 		higher.setRuleName("< 20-Oct-2007 covered");
 		higher.setFieldId(f.getId());
-		higher.setEvaluator("<");
+		higher.setOperator(Operator.LESS);
 		higher.setValue("20-Oct-2007");
 		testData.add(higher);
 
 		AnalyticsResult result = AnalyticsDataFactory.getAnalyticsResult();
 		session.setGlobal("result", result);
-		
+
 		StatelessSessionResult sessionResult = session
-		.executeWithResults(testData);
-		
+				.executeWithResults(testData);
+
 		Iterator<Object> iter = sessionResult.iterateObjects();
-		
+
 		Set<String> rulesThatHadErrors = new HashSet<String>();
 		while (iter.hasNext()) {
 			Object o = (Object) iter.next();
@@ -577,7 +578,7 @@
 			}
 			// System.out.println(o);
 		}
-		
+
 		assertTrue(rulesThatHadErrors.remove("> 01-Oct-2007 covered"));
 		assertTrue(rulesThatHadErrors.remove("== 10-Oct-2007 covered"));
 		assertTrue(rulesThatHadErrors.remove("< 15-Oct-2007 covered"));
@@ -585,7 +586,7 @@
 		assertFalse(rulesThatHadErrors.contains("below"));
 		assertFalse(rulesThatHadErrors.contains("above"));
 		assertFalse(rulesThatHadErrors.contains("15-Oct-2007gap"));
-		
+
 		if (!rulesThatHadErrors.isEmpty()) {
 			for (String string : rulesThatHadErrors) {
 				fail("Rule " + string + " caused an error.");

Modified: labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/RangeCheckIntegersTest.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/RangeCheckIntegersTest.java	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/RangeCheckIntegersTest.java	2007-11-03 12:32:56 UTC (rev 16297)
@@ -30,6 +30,7 @@
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("MissingRangesForInts.drl"));
 
+		AnalyticsDataFactory.clearAnalyticsResult();
 		AnalyticsResult result = AnalyticsDataFactory.getAnalyticsResult();
 		session.setGlobal("result", result);
 
@@ -68,6 +69,7 @@
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("MissingRangesForInts.drl"));
 
+		AnalyticsDataFactory.clearAnalyticsResult();
 		AnalyticsResult result = AnalyticsDataFactory.getAnalyticsResult();
 		session.setGlobal("result", result);
 
@@ -105,6 +107,7 @@
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("MissingRangesForInts.drl"));
 
+		AnalyticsDataFactory.clearAnalyticsResult();
 		AnalyticsResult result = AnalyticsDataFactory.getAnalyticsResult();
 		session.setGlobal("result", result);
 
@@ -143,6 +146,7 @@
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("MissingRangesForInts.drl"));
 
+		AnalyticsDataFactory.clearAnalyticsResult();
 		AnalyticsResult result = AnalyticsDataFactory.getAnalyticsResult();
 		session.setGlobal("result", result);
 

Added: labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/missingEquality/MissingEqualityTest.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/missingEquality/MissingEqualityTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/missingEquality/MissingEqualityTest.java	2007-11-03 12:32:56 UTC (rev 16297)
@@ -0,0 +1,107 @@
+package org.drools.analytics.missingEquality;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.drools.StatelessSession;
+import org.drools.analytics.TestBase;
+import org.drools.analytics.components.LiteralRestriction;
+import org.drools.analytics.components.VariableRestriction;
+import org.drools.analytics.dao.AnalyticsDataFactory;
+import org.drools.analytics.dao.AnalyticsResult;
+import org.drools.analytics.report.components.AnalyticsMessage;
+import org.drools.analytics.report.components.AnalyticsMessageBase;
+import org.drools.analytics.report.components.Cause;
+import org.drools.base.RuleNameMatchesAgendaFilter;
+
+public class MissingEqualityTest extends TestBase {
+
+	public void testMissingEqualityInLiteralRestrictions() throws Exception {
+		StatelessSession session = getStatelessSession(this.getClass()
+				.getResourceAsStream("MissingEquality.drl"));
+
+		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+				"Missing restriction in LiteralRestrictions"));
+
+		// Clear data so that test data doesn't mix.
+		AnalyticsDataFactory.clearAnalyticsData();
+		Collection<? extends Object> testData = getTestData(this.getClass()
+				.getResourceAsStream("MissingEqualityTest.drl"));
+
+		// Clear result so that test data doesn't mix.
+		AnalyticsDataFactory.clearAnalyticsResult();
+		AnalyticsResult result = AnalyticsDataFactory.getAnalyticsResult();
+		session.setGlobal("result", result);
+
+		session.executeWithResults(testData);
+
+		Iterator<AnalyticsMessageBase> iter = result.getBySeverity(
+				AnalyticsMessageBase.Severity.WARNING).iterator();
+
+		Collection<String> ruleNames = new ArrayList<String>();
+		while (iter.hasNext()) {
+			Object o = (Object) iter.next();
+			if (o instanceof AnalyticsMessage) {
+				Cause cause = ((AnalyticsMessage) o).getFaulty();
+				String name = ((LiteralRestriction) cause).getRuleName();
+
+				ruleNames.add(name);
+			}
+		}
+
+		assertTrue(ruleNames.remove("Missing equality 1"));
+		assertTrue(ruleNames.remove("Missing equality 2"));
+
+		if (!ruleNames.isEmpty()) {
+			for (String string : ruleNames) {
+				fail("Rule " + string + " caused an error.");
+			}
+		}
+	}
+
+	public void testMissingEqualityInVariableRestrictions() throws Exception {
+		StatelessSession session = getStatelessSession(this.getClass()
+				.getResourceAsStream("MissingEquality.drl"));
+
+		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+				"Missing restriction in VariableRestrictions"));
+
+		// Clear data so that test data doesn't mix.
+		AnalyticsDataFactory.clearAnalyticsData();
+		Collection<? extends Object> testData = getTestData(this.getClass()
+				.getResourceAsStream("MissingEqualityTest.drl"));
+
+		// Clear result so that test data doesn't mix.
+		AnalyticsDataFactory.clearAnalyticsResult();
+		AnalyticsResult result = AnalyticsDataFactory.getAnalyticsResult();
+		session.setGlobal("result", result);
+
+		session.executeWithResults(testData);
+
+		Iterator<AnalyticsMessageBase> iter = result.getBySeverity(
+				AnalyticsMessageBase.Severity.WARNING).iterator();
+
+		Collection<String> ruleNames = new ArrayList<String>();
+		while (iter.hasNext()) {
+			Object o = (Object) iter.next();
+			if (o instanceof AnalyticsMessage) {
+				Cause cause = ((AnalyticsMessage) o).getFaulty();
+				String name = ((VariableRestriction) cause).getRuleName();
+
+				ruleNames.add(name);
+			}
+		}
+
+		assertTrue(ruleNames.remove("Missing equality 3"));
+		assertTrue(ruleNames.remove("Missing equality 4"));
+		assertTrue(ruleNames.remove("Missing equality 5"));
+		assertTrue(ruleNames.remove("Missing equality 6"));
+
+		if (!ruleNames.isEmpty()) {
+			for (String string : ruleNames) {
+				fail("Rule " + string + " caused an error.");
+			}
+		}
+	}
+}

Modified: labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/optimisation/RestrictionOrderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/optimisation/RestrictionOrderTest.java	2007-11-03 05:15:09 UTC (rev 16296)
+++ labs/jbossrules/trunk/drools-analytics/src/test/java/org/drools/analytics/optimisation/RestrictionOrderTest.java	2007-11-03 12:32:56 UTC (rev 16297)
@@ -19,6 +19,7 @@
 import org.drools.analytics.report.components.AnalyticsMessageBase;
 import org.drools.analytics.report.components.Cause;
 import org.drools.base.RuleNameMatchesAgendaFilter;
+import org.drools.base.evaluators.Operator;
 
 public class RestrictionOrderTest extends TestBase {
 
@@ -84,21 +85,21 @@
 		LiteralRestriction r1 = new LiteralRestriction();
 		r1.setPatternId(pattern1.getId());
 		r1.setParent(parent1);
-		r1.setEvaluator(">");
+		r1.setOperator(Operator.GREATER);
 		r1.setOrderNumber(1);
 		testData.add(r1);
 
 		LiteralRestriction r2 = new LiteralRestriction();
 		r2.setPatternId(pattern1.getId());
 		r2.setParent(parent1);
-		r2.setEvaluator("==");
+		r2.setOperator(Operator.EQUAL);
 		r2.setOrderNumber(2);
 		testData.add(r2);
 
 		LiteralRestriction r3 = new LiteralRestriction();
 		r3.setPatternId(pattern1.getId());
 		r3.setParent(parent1);
-		r3.setEvaluator("<");
+		r3.setOperator(Operator.LESS);
 		r3.setOrderNumber(3);
 		testData.add(r3);
 
@@ -113,21 +114,21 @@
 		LiteralRestriction r4 = new LiteralRestriction();
 		r4.setPatternId(pattern2.getId());
 		r4.setParent(parent2);
-		r4.setEvaluator("!=");
+		r4.setOperator(Operator.NOT_EQUAL);
 		r4.setOrderNumber(1);
 		testData.add(r4);
 
 		LiteralRestriction r5 = new LiteralRestriction();
 		r5.setPatternId(pattern2.getId());
 		r5.setParent(parent2);
-		r5.setEvaluator("<=");
+		r5.setOperator(Operator.LESS_OR_EQUAL);
 		r5.setOrderNumber(2);
 		testData.add(r5);
 
 		LiteralRestriction r6 = new LiteralRestriction();
 		r6.setPatternId(pattern2.getId());
 		r6.setParent(parent2);
-		r6.setEvaluator("!=");
+		r6.setOperator(Operator.NOT_EQUAL);
 		r6.setOrderNumber(3);
 		testData.add(r6);
 

Added: labs/jbossrules/trunk/drools-analytics/src/test/resources/org/drools/analytics/missingEquality/MissingEqualityTest.drl
===================================================================
--- labs/jbossrules/trunk/drools-analytics/src/test/resources/org/drools/analytics/missingEquality/MissingEqualityTest.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-analytics/src/test/resources/org/drools/analytics/missingEquality/MissingEqualityTest.drl	2007-11-03 12:32:56 UTC (rev 16297)
@@ -0,0 +1,148 @@
+#created on: 31.10.2007
+package org.drools.test
+
+#list any import classes here.
+
+
+
+#declare any global variables here
+
+
+
+rule "Missing equality 1"
+	when
+		MissingEqualityPattern1( value == 10 )
+	then 
+		#actions
+end
+
+rule "Covered equality 1a"
+	when
+		CoveredEqualityPattern1( value == 10 )
+	then 
+		#actions
+end
+
+rule "Covered equality 1b"
+	when
+		CoveredEqualityPattern1( value != 10 )
+	then 
+		#actions
+end
+
+rule "Missing equality 2"
+	when
+		MissingEqualityPattern2( value matches "a" )
+	then 
+		#actions
+end
+
+rule "Covered equality 2a"
+	when
+		CoveredEqualityPattern2( value matches "a" )
+	then 
+		#actions
+end
+
+rule "Covered equality 2b"
+	when
+		CoveredEqualityPattern2( value not matches "a" )
+	then 
+		#actions
+end
+
+rule "Missing equality 3"
+	when
+		$col :MissingEqualityCollection()
+		MissingEqualityPattern3( value memberOf $col )
+	then 
+		#actions
+end
+
+rule "Covered equality 3a"
+	when
+		$col :MissingEqualityCollection()
+		CoveredEqualityPattern3( value memberOf $col )
+	then 
+		#actions
+end
+
+rule "Covered equality 3b"
+	when
+		$col :MissingEqualityCollection()
+		CoveredEqualityPattern3( value not memberOf $col )
+	then 
+		#actions
+end
+
+rule "Missing equality 4"
+	when
+		$value :MissingEqualityValue()
+		MissingEqualityPattern4( value contains $value )
+	then 
+		#actions
+end
+
+rule "Covered equality 4a"
+	when
+		$value :MissingEqualityValue()
+		CoveredEqualityPattern4( value contains $value )
+	then 
+		#actions
+end
+
+rule "Covered equality 4b"
+	when
+		$value :MissingEqualityValue()
+		CoveredEqualityPattern4( value not contains $value )
+	then 
+		#actions
+end
+
+rule "Missing equality 5"
+	when
+		MissingEqualityNumber( $n :number )
+		MissingEqualityPattern5( value == $n )
+	then 
+		#actions
+end
+
+rule "Covered equality 5a"
+	when
+		MissingEqualityNumber( $n :number )
+		CoveredEqualityPattern5( value == $n )
+	then 
+		#actions
+end
+
+rule "Covered equality 5b"
+	when
+		MissingEqualityNumber( $n :number )
+		CoveredEqualityPattern5( value != $n )
+	then 
+		#actions
+end
+
+rule "Missing equality 6"
+	when
+		MissingEqualityString( $t :text )
+		MissingEqualityPattern6( value matches $t )
+	then 
+		#actions
+end
+
+rule "Covered equality 6a"
+	when
+		MissingEqualityString( $t :text )
+		CoveredEqualityPattern6( value matches $t )
+	then 
+		#actions
+end
+
+rule "Covered equality 6b"
+	when
+		MissingEqualityString( $t :text )
+		CoveredEqualityPattern6( value not matches $t )
+	then 
+		#actions
+end




More information about the jboss-svn-commits mailing list