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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Sep 7 11:36:35 EDT 2007


Author: Rikkola
Date: 2007-09-07 11:36:34 -0400 (Fri, 07 Sep 2007)
New Revision: 14936

Added:
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/RuleLoader.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/result/RangeCheckCause.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/result/ReportModeller.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Dates.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Doubles.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Integers.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Patterns.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Variables.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/redundancy/
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Patterns.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Possibilities.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Restrictions.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Rules.drl
Removed:
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/result/ReportWriter.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/RangeCheckDates.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/RangeCheckDoubles.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/RangeCheckIntegers.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/RangeCheckPatterns.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/RangeCheckVariables.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/Redundancy.drl
Modified:
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/Analyzer.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/components/LiteralRestriction.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/components/QualifiedIdentifierRestriction.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/components/Restriction.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/components/ReturnValueRestriction.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/components/VariableRestriction.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/result/Gap.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/reports/RangeCheckReports.drl
   labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckDatesTest.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckDoublesTest.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckIntegersTest.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RedundancyTest.java
   labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/SubsumptantPossibilitiesRuleTest.java
Log:
Reports from missing ranges.
A lot of package and code refactoring, cutting things to pieces.

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/Analyzer.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/Analyzer.java	2007-09-07 13:30:22 UTC (rev 14935)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/Analyzer.java	2007-09-07 15:36:34 UTC (rev 14936)
@@ -1,8 +1,6 @@
 package org.drools.analytics;
 
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Collection;
 
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
@@ -10,8 +8,7 @@
 import org.drools.analytics.dao.AnalyticsData;
 import org.drools.analytics.dao.AnalyticsDataMaps;
 import org.drools.analytics.result.AnalysisResultNormal;
-import org.drools.analytics.result.ReportWriter;
-import org.drools.compiler.PackageBuilder;
+import org.drools.analytics.result.ReportModeller;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.rule.Package;
 
@@ -40,10 +37,10 @@
 			AnalyticsData data = AnalyticsDataMaps.getAnalyticsDataMaps();
 
 			System.setProperty("drools.accumulate.function.validatePattern",
-					"com.analytics.accumulateFunction.ValidatePattern");
+					"org.drools.analytics.accumulateFunction.ValidatePattern");
 
 			// load up the rulebase
-			RuleBase ruleBase = readRules();
+			RuleBase ruleBase = createRuleBase();
 
 			WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
@@ -66,7 +63,7 @@
 	 * @return Analysis results as plain text.
 	 */
 	public String getResultAsPlainText() {
-		return ReportWriter.writePlainText(result);
+		return ReportModeller.writePlainText(result);
 	}
 
 	/**
@@ -75,7 +72,7 @@
 	 * @return Analysis results as XML
 	 */
 	public String getResultAsXML() {
-		return ReportWriter.writeXML(result);
+		return ReportModeller.writeXML(result);
 	}
 
 	/**
@@ -87,24 +84,13 @@
 		return result;
 	}
 
-	private static RuleBase readRules() throws Exception {
-		// read in the source
-		List<InputStreamReader> list = new ArrayList<InputStreamReader>();
+	private static RuleBase createRuleBase() throws Exception {
 
-		list.add(new InputStreamReader(Analyzer.class
-				.getResourceAsStream("RangeCheckIntegers.drl")));
-		list.add(new InputStreamReader(Analyzer.class
-				.getResourceAsStream("reports/RangeCheckReports.drl")));
-
 		RuleBase ruleBase = RuleBaseFactory.newRuleBase();
 
-		for (InputStreamReader reader : list) {
+		Collection<Package> packages = RuleLoader.loadPackages();
+		for (Package pkg : packages) {
 
-			PackageBuilder builder = new PackageBuilder();
-
-			builder.addPackageFromDrl(reader);
-
-			Package pkg = builder.getPackage();
 			ruleBase.addPackage(pkg);
 		}
 

Added: labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/RuleLoader.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/RuleLoader.java	                        (rev 0)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/RuleLoader.java	2007-09-07 15:36:34 UTC (rev 14936)
@@ -0,0 +1,68 @@
+package org.drools.analytics;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.drools.compiler.DroolsParserException;
+import org.drools.compiler.PackageBuilder;
+import org.drools.rule.Package;
+
+class RuleLoader {
+
+	public static Collection<Package> loadPackages() {
+		Collection<Package> packages = new ArrayList<Package>();
+
+		Collection<InputStreamReader> readers = readInputStreamReaders();
+
+		for (InputStreamReader reader : readers) {
+			try {
+				packages.add(loadPackage(reader));
+			} catch (DroolsParserException e) {
+				e.printStackTrace();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+
+		return packages;
+	}
+
+	private static Package loadPackage(InputStreamReader reader)
+			throws DroolsParserException, IOException {
+
+		PackageBuilder builder = new PackageBuilder();
+
+		builder.addPackageFromDrl(reader);
+
+		return builder.getPackage();
+	}
+
+	private static Collection<InputStreamReader> readInputStreamReaders() {
+		Collection<InputStreamReader> list = new ArrayList<InputStreamReader>();
+
+		list.add(new InputStreamReader(RuleLoader.class
+				.getResourceAsStream("rangeChecks/Dates.drl")));
+		list.add(new InputStreamReader(RuleLoader.class
+				.getResourceAsStream("rangeChecks/Doubles.drl")));
+		list.add(new InputStreamReader(RuleLoader.class
+				.getResourceAsStream("rangeChecks/Integers.drl")));
+		list.add(new InputStreamReader(RuleLoader.class
+				.getResourceAsStream("rangeChecks/Patterns.drl")));
+		list.add(new InputStreamReader(RuleLoader.class
+				.getResourceAsStream("rangeChecks/Variables.drl")));
+		 list.add(new InputStreamReader(RuleLoader.class
+		 .getResourceAsStream("redundancy/Patterns.drl")));
+		 list.add(new InputStreamReader(RuleLoader.class
+		 .getResourceAsStream("redundancy/Possibilities.drl")));
+//		 list.add(new InputStreamReader(RuleLoader.class
+//		 .getResourceAsStream("redundancy/Restrictions.drl")));
+//		 list.add(new InputStreamReader(RuleLoader.class
+//		 .getResourceAsStream("redundancy/Rules.drl")));
+		list.add(new InputStreamReader(RuleLoader.class
+				.getResourceAsStream("reports/RangeCheckReports.drl")));
+
+		return list;
+	}
+}

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/components/LiteralRestriction.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/components/LiteralRestriction.java	2007-09-07 13:30:22 UTC (rev 14935)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/components/LiteralRestriction.java	2007-09-07 15:36:34 UTC (rev 14936)
@@ -4,13 +4,13 @@
 import java.util.Date;
 import java.util.Locale;
 
-import org.drools.analytics.result.Cause;
+import org.drools.analytics.result.RangeCheckCause;
 
 /**
  * 
  * @author Toni Rikkola
  */
-public class LiteralRestriction extends Restriction implements Cause {
+public class LiteralRestriction extends Restriction implements RangeCheckCause {
 
 	private Field.FieldType valueType;
 
@@ -24,7 +24,6 @@
 		return Restriction.RestrictionType.LITERAL;
 	}
 
-	@Override
 	public String getValueAsString() {
 		return stringValue;
 	}

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/components/QualifiedIdentifierRestriction.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/components/QualifiedIdentifierRestriction.java	2007-09-07 13:30:22 UTC (rev 14935)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/components/QualifiedIdentifierRestriction.java	2007-09-07 15:36:34 UTC (rev 14936)
@@ -1,10 +1,11 @@
 package org.drools.analytics.components;
 
+
 /**
  * 
  * @author Toni Rikkola
  */
-public class QualifiedIdentifierRestriction extends Restriction {
+public class QualifiedIdentifierRestriction extends Restriction  {
 
 	private int variableId;
 	private String variableName;
@@ -15,7 +16,6 @@
 		return RestrictionType.QUALIFIED_IDENTIFIER;
 	}
 
-	@Override
 	public String getValueAsString() {
 		return variablePath + "." + variableName;
 	}

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/components/Restriction.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/components/Restriction.java	2007-09-07 13:30:22 UTC (rev 14935)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/components/Restriction.java	2007-09-07 15:36:34 UTC (rev 14936)
@@ -33,8 +33,6 @@
 
 	public abstract RestrictionType getRestrictionType();
 
-	public abstract String getValueAsString();
-
 	public String getEvaluator() {
 		return evaluator;
 	}

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/components/ReturnValueRestriction.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/components/ReturnValueRestriction.java	2007-09-07 13:30:22 UTC (rev 14935)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/components/ReturnValueRestriction.java	2007-09-07 15:36:34 UTC (rev 14936)
@@ -13,11 +13,6 @@
 	private String classMethodName;
 
 	@Override
-	public String getValueAsString() {
-		return classMethodName;
-	}
-
-	@Override
 	public RestrictionType getRestrictionType() {
 		return RestrictionType.RETURN_VALUE_RESTRICTION;
 	}

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/components/VariableRestriction.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/components/VariableRestriction.java	2007-09-07 13:30:22 UTC (rev 14935)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/components/VariableRestriction.java	2007-09-07 15:36:34 UTC (rev 14936)
@@ -11,11 +11,6 @@
 	protected String variableName;
 	protected int variableId;
 
-	@Override
-	public String getValueAsString() {
-		return variableName;
-	}
-
 	public int getVariableId() {
 		return variableId;
 	}

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/result/Gap.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/result/Gap.java	2007-09-07 13:30:22 UTC (rev 14935)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/result/Gap.java	2007-09-07 15:36:34 UTC (rev 14936)
@@ -1,6 +1,6 @@
 package org.drools.analytics.result;
 
-import org.drools.analytics.components.Restriction;
+import org.drools.analytics.components.Field;
 
 /**
  * 
@@ -10,16 +10,15 @@
 
 	private static int index = 0;
 
-	private int id;
+	private int id = index++;
 
-	private Cause cause;
-	private Restriction restriction;
+	private Field field;
+	private RangeCheckCause cause;
 	private String firedRuleName;
 
-	public Gap(Cause cause, Restriction restriction, String firedRuleName) {
-		id = index;
+	public Gap(Field field, RangeCheckCause cause, String firedRuleName) {
+		this.field = field;
 		this.cause = cause;
-		this.restriction = restriction;
 		this.firedRuleName = firedRuleName;
 	}
 
@@ -28,41 +27,52 @@
 	}
 
 	public String getRuleName() {
-		return restriction.getRuleName();
+		return cause.getRuleName();
 	}
 
-	private String getReversedEvaluator() {
-		if (restriction.getEvaluator().equals("!=")) {
-			return "==";
-		} else if (restriction.getEvaluator().equals("==")) {
-			return "!=";
-		} else if (restriction.getEvaluator().equals(">")) {
-			return "<=";
-		} else if (restriction.getEvaluator().equals("<")) {
-			return ">=";
-		} else if (restriction.getEvaluator().equals(">=")) {
-			return "<";
-		} else if (restriction.getEvaluator().equals("<=")) {
-			return ">";
+	/**
+	 * Evaluator is reversed unless the cause is MissingNumberPattern. For
+	 * others the evaluator needs to be turned in order to show the missing
+	 * range, not the the range that cause covers.
+	 * 
+	 * @return evaluator
+	 */
+	private String getCauseEvaluator() {
+		if (cause instanceof MissingNumberPattern) {
+			return cause.getEvaluator();
+		} else {
+			if (cause.getEvaluator().equals("!=")) {
+				return "==";
+			} else if (cause.getEvaluator().equals("==")) {
+				return "!=";
+			} else if (cause.getEvaluator().equals(">")) {
+				return "<=";
+			} else if (cause.getEvaluator().equals("<")) {
+				return ">=";
+			} else if (cause.getEvaluator().equals(">=")) {
+				return "<";
+			} else if (cause.getEvaluator().equals("<=")) {
+				return ">";
+			}
 		}
 
 		return null;
 	}
 
-	public Cause getCause() {
-		return cause;
+	public Field getField() {
+		return field;
 	}
 
-	public void setCause(Cause cause) {
-		this.cause = cause;
+	public void setField(Field field) {
+		this.field = field;
 	}
 
-	public Restriction getRestriction() {
-		return restriction;
+	public RangeCheckCause getRangeCheckCause() {
+		return cause;
 	}
 
-	public void setRestriction(Restriction restriction) {
-		this.restriction = restriction;
+	public void setRangeCheckCause(RangeCheckCause cause) {
+		this.cause = cause;
 	}
 
 	public String getFiredRuleName() {
@@ -75,7 +85,7 @@
 
 	@Override
 	public String toString() {
-		return "Gap: (" + cause + ") " + getReversedEvaluator() + " "
-				+ restriction.getValueAsString();
+		return "Gap: (" + field + ") " + getCauseEvaluator() + " "
+				+ cause.getValueAsString();
 	}
 }

Added: labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/result/RangeCheckCause.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/result/RangeCheckCause.java	                        (rev 0)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/result/RangeCheckCause.java	2007-09-07 15:36:34 UTC (rev 14936)
@@ -0,0 +1,12 @@
+package org.drools.analytics.result;
+
+/**
+ * 
+ * @author Toni Rikkola
+ */
+public interface RangeCheckCause extends Cause {
+
+	public String getValueAsString();
+
+	public String getEvaluator();
+}

Copied: labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/result/ReportModeller.java (from rev 14912, labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/result/ReportWriter.java)
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/result/ReportModeller.java	                        (rev 0)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/result/ReportModeller.java	2007-09-07 15:36:34 UTC (rev 14936)
@@ -0,0 +1,63 @@
+package org.drools.analytics.result;
+
+import org.drools.analytics.components.LiteralRestriction;
+
+import com.thoughtworks.xstream.XStream;
+
+/**
+ * 
+ * @author Toni Rikkola
+ */
+public class ReportModeller {
+
+	public static String writeXML(AnalysisResultNormal result) {
+		XStream xstream = new XStream();
+
+		xstream.alias("result", AnalysisResultNormal.class);
+		xstream.alias("note", AnalysisNote.class);
+		xstream.alias("error", AnalysisError.class);
+		xstream.alias("warning", AnalysisWarning.class);
+
+		xstream.alias("Gap", Gap.class);
+
+		xstream.alias("Field", org.drools.analytics.components.Field.class);
+
+		xstream.alias("LiteralRestriction", LiteralRestriction.class);
+
+		return "<?xml version=\"1.0\"?>\n" + xstream.toXML(result);
+	}
+
+	public static String writePlainText(AnalysisResultNormal result) {
+
+		StringBuffer str = new StringBuffer();
+
+		str.append("************* ERRORS ");
+		str.append(result.getErrors().size());
+		str.append(" ******************\n");
+		for (AnalysisError error : result.getErrors()) {
+			str.append(error);
+			str.append("\n");
+		}
+		str.append("\n");
+
+		str.append("************* WARNINGS ");
+		str.append(result.getWarnings().size());
+		str.append(" ******************\n");
+		for (AnalysisWarning warning : result.getWarnings()) {
+			str.append(warning);
+			str.append("\n");
+		}
+		str.append("\n");
+
+		str.append("************* NOTES ");
+		str.append(result.getNotes().size());
+		str.append(" ******************\n");
+		for (AnalysisNote note : result.getNotes()) {
+			str.append(note);
+			str.append("\n");
+		}
+
+		return str.toString();
+	}
+
+}

Deleted: labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/result/ReportWriter.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/result/ReportWriter.java	2007-09-07 13:30:22 UTC (rev 14935)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/java/org/drools/analytics/result/ReportWriter.java	2007-09-07 15:36:34 UTC (rev 14936)
@@ -1,55 +0,0 @@
-package org.drools.analytics.result;
-
-import com.thoughtworks.xstream.XStream;
-
-/**
- * 
- * @author Toni Rikkola
- */
-public class ReportWriter {
-
-	public static String writeXML(AnalysisResultNormal result) {
-		XStream xstream = new XStream();
-
-		xstream.alias("result", AnalysisResultNormal.class);
-		xstream.alias("note", AnalysisNote.class);
-		xstream.alias("error", AnalysisError.class);
-		xstream.alias("warning", AnalysisWarning.class);
-
-		return "<?xml version=\"1.0\"?>\n" + xstream.toXML(result);
-	}
-
-	public static String writePlainText(AnalysisResultNormal result) {
-
-		StringBuffer str = new StringBuffer();
-
-		str.append("************* ERRORS ");
-		str.append(result.getErrors().size());
-		str.append(" ******************\n");
-		for (AnalysisError error : result.getErrors()) {
-			str.append(error);
-			str.append("\n");
-		}
-		str.append("\n");
-
-		str.append("************* WARNINGS ");
-		str.append(result.getWarnings().size());
-		str.append(" ******************\n");
-		for (AnalysisWarning warning : result.getWarnings()) {
-			str.append(warning);
-			str.append("\n");
-		}
-		str.append("\n");
-
-		str.append("************* NOTES ");
-		str.append(result.getNotes().size());
-		str.append(" ******************\n");
-		for (AnalysisNote note : result.getNotes()) {
-			str.append(note);
-			str.append("\n");
-		}
-
-		return str.toString();
-	}
-
-}

Deleted: labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/RangeCheckDates.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/RangeCheckDates.drl	2007-09-07 13:30:22 UTC (rev 14935)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/RangeCheckDates.drl	2007-09-07 15:36:34 UTC (rev 14936)
@@ -1,115 +0,0 @@
-#created on: 7.6.2007
-package org.drools.analytics.rangeChecks.dates;
-
-#list any import classes here.
-import org.drools.analytics.components.*;
-import org.drools.analytics.accumulateFunction.ValidatePattern;
-import org.drools.analytics.accumulateFunction.ValidatePatternResult;
-import org.drools.analytics.result.AnalysisResult;
-import org.drools.analytics.result.Gap;
-
-import java.util.ArrayList;
-import java.util.TreeSet;
-import java.text.SimpleDateFormat;
-import java.util.Locale;
-import java.util.Date;
-
-#declare any global variables here
-global AnalysisResult result
-
-
-function String dateToString(Date date) {
-		String fmt = System.getProperty("drools.dateformat");
-		if (fmt == null) {
-			fmt = "dd-MMM-yyyy";
-		}
-		
-		return new SimpleDateFormat(fmt, Locale.ENGLISH).format(date);
-}
-
-
-#
-# If all ranges are not checked for a date field.
-# 
-# Type: Warning
-# Example: in "Rule 1" Foo( bar < "27-Oct-2007" ) and in "Rule 2" Foo( bar > "27-Oct-2007" )
-# 					then Foo( bar == "27-Oct-2007" ) is missing.
-rule "Range check for dates, smaller and greater than"
-	when
-		$f :Field( fieldType == Field.FieldType.DATE )
-		(
-				$r :LiteralRestriction( fieldId == $f.id, evaluator == ">" )
-			and
-				not LiteralRestriction( fieldId == $f.id, ( evaluator == "==" || == "<=" ), 
-											patternIsNot == $r.patternIsNot, 
-											eval( dateValue.equals($r.getDateValue()) ) )
-		) or (
-				$r :LiteralRestriction( fieldId == $f.id, evaluator == "<" )
-			and
-				not LiteralRestriction( fieldId == $f.id, ( evaluator == "==" || == ">=" ), 
-											patternIsNot == $r.patternIsNot, 
-											eval( dateValue.equals($r.getDateValue()) ) )
-		) or (
-				$r :LiteralRestriction( fieldId == $f.id, evaluator == "<=" )
-			and
-				not LiteralRestriction( fieldId == $f.id, evaluator == ">", 
-											patternIsNot == $r.patternIsNot, 
-											eval( dateValue.equals($r.getDateValue()) ) )
-		) or (
-				$r :LiteralRestriction( fieldId == $f.id, evaluator == ">=" )
-			and
-				not LiteralRestriction( fieldId == $f.id, evaluator == "<", 
-											patternIsNot == $r.patternIsNot, 
-											eval( dateValue.equals($r.getDateValue()) ) )
-		)
-	then
-		insert( new Gap( $f, $r, drools.getRule().getName()) );
-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 == "27-Oct-2007" ) and in "Rule 2" Foo( bar < "27-Oct-2007" )
-# 					then Foo( bar > "27-Oct-2007" ) is missing.
-rule "Range check for dates, equal and greater than"
-	when
-		# Case Foo( bar == "27-Oct-2007" ) Foo( bar >= "27-Oct-2007" || > "27-Oct-2007" ).
-		$f :Field( fieldType == Field.FieldType.DATE )
-		$r :LiteralRestriction( fieldId == $f.id, evaluator == "==" )
-		LiteralRestriction( fieldId == $f.id, 
-								( evaluator == ">" || == ">=" ), 
-								patternIsNot == $r.patternIsNot, 
-								eval( dateValue.equals($r.getDateValue())) )
-		# Check if Foo( bar < "27-Oct-2007" || <= "27-Oct-2007" ) is missing.
-		not	LiteralRestriction( fieldId == $f.id, 
-								( evaluator == "<" || == "<=" ), 
-								patternIsNot == $r.patternIsNot, 
-								eval( dateValue.equals($r.getDateValue())) )
-	then
-		insert( new Gap( $f, $r, drools.getRule().getName()) );
-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 == "27-Oct-2007" ) and in "Rule 2" Foo( bar > "27-Oct-2007" )
-# 					then Foo( bar < "27-Oct-2007" ) is missing.
-rule "Range check for dates, equal and smaller than"
-	when
-		# Case Foo( bar == "27-Oct-2007" ) Foo( bar <= "27-Oct-2007" || < "27-Oct-2007" ).
-		$f :Field( fieldType == Field.FieldType.DATE )
-		$r :LiteralRestriction( fieldId == $f.id, evaluator == "==" )
-		LiteralRestriction( fieldId == $f.id, 
-								( evaluator == "<" || == "<=" ), 
-								patternIsNot == $r.patternIsNot, 
-								eval( dateValue.equals($r.getDateValue())) )
-		# Check if Foo( bar > "27-Oct-2007" || >= "27-Oct-2007" ) is missing.
-		not	LiteralRestriction( fieldId == $f.id, 
-								( evaluator == ">" || == ">=" ), 
-								patternIsNot == $r.patternIsNot, 
-								eval( dateValue.equals($r.getDateValue())) )
-	then
-		insert( new Gap( $f, $r, drools.getRule().getName()) );
-end

Deleted: labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/RangeCheckDoubles.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/RangeCheckDoubles.drl	2007-09-07 13:30:22 UTC (rev 14935)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/RangeCheckDoubles.drl	2007-09-07 15:36:34 UTC (rev 14936)
@@ -1,103 +0,0 @@
-#created on: 7.6.2007
-package org.drools.analytics.rangeChecks.doubles;
-
-#list any import classes here.
-import org.drools.analytics.components.*;
-import org.drools.analytics.accumulateFunction.ValidatePattern;
-import org.drools.analytics.accumulateFunction.ValidatePatternResult;
-import org.drools.analytics.result.AnalysisResult;
-import org.drools.analytics.result.Gap;
-
-import java.util.ArrayList;
-import java.util.TreeSet;
-import java.text.SimpleDateFormat;
-import java.util.Locale;
-
-#declare any global variables here
-global AnalysisResult result
-
-# 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
-		insert( new Gap( $f, $r, drools.getRule().getName()) );
-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
-		insert( new Gap( $f, $r, drools.getRule().getName()) );
-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
-		insert( new Gap( $f, $r, drools.getRule().getName()) );
-end
-

Deleted: labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/RangeCheckIntegers.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/RangeCheckIntegers.drl	2007-09-07 13:30:22 UTC (rev 14935)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/RangeCheckIntegers.drl	2007-09-07 15:36:34 UTC (rev 14936)
@@ -1,143 +0,0 @@
-#created on: 7.6.2007
-package org.drools.analytics.rangeChecks.integers;
-
-#list any import classes here.
-import org.drools.analytics.components.*;
-import org.drools.analytics.accumulateFunction.ValidatePattern;
-import org.drools.analytics.accumulateFunction.ValidatePatternResult;
-import org.drools.analytics.result.AnalysisResult;
-import org.drools.analytics.result.Gap;
-
-import java.util.ArrayList;
-import java.util.TreeSet;
-import java.text.SimpleDateFormat;
-import java.util.Locale;
-
-# 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 integers, smaller and greater than"
-	when
-		$f :Field( fieldType == Field.FieldType.INT, $fieldId :id, $fieldName :name, $classId :classId )
-		(
-				$r :LiteralRestriction( fieldId == $fieldId, evaluator == ">", 
-											$patternIsNot :patternIsNot, $value :intValue )
-			and
-				not LiteralRestriction( fieldId == $fieldId, ( evaluator == "==" || == "<=" ), 
-											patternIsNot == $patternIsNot, intValue == $value )
-		) or (
-				$r :LiteralRestriction( fieldId == $fieldId, evaluator == "<", 
-											$patternIsNot :patternIsNot, $value :intValue )
-			and
-				not LiteralRestriction( fieldId == $fieldId, ( evaluator == "==" || == ">=" ), 
-											patternIsNot == $patternIsNot, intValue == $value )
-		) or (
-				$r :LiteralRestriction( fieldId == $fieldId, evaluator == "<=", 
-											$patternIsNot :patternIsNot, $value :intValue )
-			and
-				not LiteralRestriction( fieldId == $fieldId, evaluator  == ">", 
-											patternIsNot == $patternIsNot, intValue == $value )
-			and
-				not LiteralRestriction( fieldId == $fieldId, evaluator  == ">=", 
-											patternIsNot == $patternIsNot, eval( intValue == $value + 1 ) )
-		) or (
-				$r :LiteralRestriction( fieldId == $fieldId, evaluator == ">=", 
-											$patternIsNot :patternIsNot, $value :intValue )
-			and
-				not LiteralRestriction( fieldId == $fieldId, evaluator  == "<", 
-											patternIsNot == $patternIsNot, intValue == $value )
-			and
-				not LiteralRestriction( fieldId == $fieldId, evaluator  == "<=", 
-											patternIsNot == $patternIsNot, eval( intValue == $value - 1 ) )
-		)
-	then
-		insert( new Gap( $f, $r, drools.getRule().getName()) );
-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 integers, equal and greater than"
-	when
-		(
-		# Case Foo( bar == 42 ) Foo( bar >= 43 || == 43 ).
-				$f :Field( fieldType == Field.FieldType.INT )
-			and
-				$r :LiteralRestriction( fieldId == $f.id, evaluator == "==" )
-			and
-				LiteralRestriction( fieldId == $f.id, 
-										( evaluator == "==" || == ">=" ),
-										patternIsNot == $r.patternIsNot, 
-										eval( intValue == $r.getIntValue() + 1 ) )
-		) or (
-		# Case Foo( bar == 42 ) Foo( bar >= 42 || > 42 ).
-				$f :Field( fieldType == Field.FieldType.INT )
-			and
-				$r :LiteralRestriction( fieldId == $f.id, evaluator == "==" )
-			and
-				LiteralRestriction( fieldId == $f.id, 
-										( evaluator == ">" || == ">=" ), 
-										patternIsNot == $r.patternIsNot, 
-										intValue == $r.intValue )
-		)
-		# Check if Foo( bar < 42 || <= 42 ) is missing.
-		not	LiteralRestriction( fieldId == $f.id, 
-								( evaluator == "<" || == "<=" ), 
-								patternIsNot == $r.patternIsNot, 
-								intValue == $r.intValue )
-		# Check if Foo( bar == 41 || <= 41 ) is missing.
-		not	LiteralRestriction( fieldId == $f.id, 
-								( evaluator == "==" || == "<=" ), 
-								patternIsNot == $r.patternIsNot, 
-								eval( intValue == $r.getIntValue() - 1 ) )
-	then
-		insert( new Gap( $f, $r, drools.getRule().getName()) );
-end
-
-# If all ranges are not checked for a field.
-# If equality and greater than exist check that smaller 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 integers, equal and smaller than"
-	when
-		(
-		# Case Foo( bar == 42 ) Foo( bar <= 43 || == 43 ).
-				$f :Field( fieldType == Field.FieldType.INT )
-			and
-				$r :LiteralRestriction( fieldId == $f.id, evaluator == "==" )
-			and
-				LiteralRestriction( fieldId == $f.id, 
-										( evaluator == "==" || == "<=" ),
-										patternIsNot == $r.patternIsNot, 
-										eval( intValue == $r.getIntValue() - 1 ) )
-		) or (
-		# Case Foo( bar == 42 ) Foo( bar <= 42 || < 42 ).
-				$f :Field( fieldType == Field.FieldType.INT )
-			and
-				$r :LiteralRestriction( fieldId == $f.id, evaluator == "==" )
-			and
-				LiteralRestriction( fieldId == $f.id, 
-										( evaluator == "<" || == "<=" ), 
-										patternIsNot == $r.patternIsNot, 
-										intValue == $r.intValue )
-		)
-		# Check if Foo( bar > 42 || >= 42 ) is missing.
-		not	LiteralRestriction( fieldId == $f.id, 
-								( evaluator == ">" || == ">=" ), 
-								patternIsNot == $r.patternIsNot, 
-								intValue == $r.intValue )
-		# Check if Foo( bar == 41 || >= 41 ) is missing.
-		not	LiteralRestriction( fieldId == $f.id, 
-								( evaluator == "==" || == ">=" ), 
-								patternIsNot == $r.patternIsNot, 
-								eval( intValue == $r.getIntValue() + 1 ) )
-	then
-		insert( new Gap( $f, $r, drools.getRule().getName()) );
-end

Deleted: labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/RangeCheckPatterns.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/RangeCheckPatterns.drl	2007-09-07 13:30:22 UTC (rev 14935)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/RangeCheckPatterns.drl	2007-09-07 15:36:34 UTC (rev 14936)
@@ -1,56 +0,0 @@
-#created on: 7.6.2007
-package org.drools.analytics.rangeChecks.patterns;
-
-#list any import classes here.
-import org.drools.analytics.components.*;
-import org.drools.analytics.accumulateFunction.ValidatePattern;
-import org.drools.analytics.accumulateFunction.ValidatePatternResult;
-import org.drools.analytics.result.AnalysisResult;
-import org.drools.analytics.result.Gap;
-
-import java.util.ArrayList;
-import java.util.TreeSet;
-import java.text.SimpleDateFormat;
-import java.util.Locale;
-
-#declare any global variables here
-global AnalysisResult result
-
-#
-# If all pattern ranges are not checked for a field.
-# 
-# Type: Warning
-# Example: in "Rule 1" Foo( bar == 10 ) and in "Rule 2" Foo( bar == 20 ) and in "Rule 3" Foo( bar == 40 )
-# 					then Foo( bar == 30 ) is missing.
-rule "Range check for number patterns"
-	when
-		$f :Field( ( fieldType == Field.FieldType.INT || == Field.FieldType.DOUBLE ), 
-					$fieldId :id, $fieldName :name, $classId :classId )
-		AnalyticsClass( id == $classId, $className :name )
-		(
-			# Where pattern is false.
-			$validationResult :ValidatePatternResult( value != null)
-				from accumulate(
-					$r :LiteralRestriction( fieldId == $fieldId, 
-						patternIsNot == false, ( evaluator == "==" || == "!=" )),
-					validatePattern( $r )
-				)
-		) or (
-			# Where pattern is true.
-			$validationResult :ValidatePatternResult( value != null)
-				from accumulate(
-					$r :LiteralRestriction( fieldId == $fieldId, 
-						patternIsNot == true, ( evaluator == "==" || == "!=" )),
-					validatePattern( $r )
-				)
-		)
-	then
-		// TODO: Find out if evaluator is == or !=.
-		Gap gap = new Gap();
-		gap.setCause($f);
-		#gap.setRuleName($rule.getRuleName());
-		#gap.setEvaluator($r.getEvaluator());
-		gap.setFiredRuleName(drools.getRule().getName());
-		gap.setValue($validationResult.toString());
-		insert( gap );
-end

Deleted: labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/RangeCheckVariables.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/RangeCheckVariables.drl	2007-09-07 13:30:22 UTC (rev 14935)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/RangeCheckVariables.drl	2007-09-07 15:36:34 UTC (rev 14936)
@@ -1,483 +0,0 @@
-#created on: 7.6.2007
-package org.drools.analytics.rangeChecks.variables;
-
-#list any import classes here.
-import org.drools.analytics.components.*;
-import org.drools.analytics.accumulateFunction.ValidatePattern;
-import org.drools.analytics.accumulateFunction.ValidatePatternResult;
-import org.drools.analytics.result.AnalysisResult;
-import org.drools.analytics.result.Gap;
-
-import java.util.ArrayList;
-import java.util.TreeSet;
-import java.text.SimpleDateFormat;
-import java.util.Locale;
-
-#declare any global variables here
-global AnalysisResult result
-
-# 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 integers, smaller and greater than"
-	when
-		$f :Field( fieldType == Field.FieldType.INT, $fieldId :id, $fieldName :name, $classId :classId )
-		(
-				$r :LiteralRestriction( fieldId == $fieldId, evaluator == ">", 
-											$patternIsNot :patternIsNot, $value :intValue )
-			and
-				not LiteralRestriction( fieldId == $fieldId, ( evaluator == "==" || == "<=" ), 
-											patternIsNot == $patternIsNot, intValue == $value )
-		) or (
-				$r :LiteralRestriction( fieldId == $fieldId, evaluator == "<", 
-											$patternIsNot :patternIsNot, $value :intValue )
-			and
-				not LiteralRestriction( fieldId == $fieldId, ( evaluator == "==" || == ">=" ), 
-											patternIsNot == $patternIsNot, intValue == $value )
-		) or (
-				$r :LiteralRestriction( fieldId == $fieldId, evaluator == "<=", 
-											$patternIsNot :patternIsNot, $value :intValue )
-			and
-				not LiteralRestriction( fieldId == $fieldId, evaluator  == ">", 
-											patternIsNot == $patternIsNot, intValue == $value )
-			# XXX: Field might be double, then this pattern is useless.
-			and
-				not LiteralRestriction( fieldId == $fieldId, evaluator  == ">=", 
-											patternIsNot == $patternIsNot, eval( intValue == $value + 1 ) )
-		) or (
-				$r :LiteralRestriction( fieldId == $fieldId, evaluator == ">=", 
-											$patternIsNot :patternIsNot, $value :intValue )
-			and
-				not LiteralRestriction( fieldId == $fieldId, evaluator  == "<", 
-											patternIsNot == $patternIsNot, intValue == $value )
-			# XXX: Field might be double, then this pattern is useless. 
-			and
-				not LiteralRestriction( fieldId == $fieldId, evaluator  == "<=", 
-											patternIsNot == $patternIsNot, eval( intValue == $value - 1 ) )
-		)
-		$rule :AnalyticsRule( id == $r.ruleId )
-	then
-		Gap gap = new Gap();
-		gap.setCause($f);
-		gap.setRuleName($rule.getRuleName());
-		gap.setEvaluator($r.getEvaluator());
-		gap.setFiredRuleName(drools.getRule().getName());
-		gap.setValue($value +"");
-		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 integers, equal and greater than"
-	when
-		(
-		# Case Foo( bar == 42 ) Foo( bar >= 43 || == 43 ).
-				$f :Field( fieldType == Field.FieldType.INT )
-			and
-				$r :LiteralRestriction( fieldId == $f.id, evaluator == "==" )
-			and
-				LiteralRestriction( fieldId == $f.id, 
-										( evaluator == "==" || == ">=" ),
-										patternIsNot == $r.patternIsNot, 
-										eval( intValue == $r.getIntValue() + 1 ) )
-		) or (
-		# Case Foo( bar == 42 ) Foo( bar >= 42 || > 42 ).
-				$f :Field( fieldType == Field.FieldType.INT )
-			and
-				$r :LiteralRestriction( fieldId == $f.id, evaluator == "==" )
-			and
-				LiteralRestriction( fieldId == $f.id, 
-										( evaluator == ">" || == ">=" ), 
-										patternIsNot == $r.patternIsNot, 
-										intValue == $r.intValue )
-		)
-		# Check if Foo( bar < 42 || <= 42 ) is missing.
-		not	LiteralRestriction( fieldId == $f.id, 
-								( evaluator == "<" || == "<=" ), 
-								patternIsNot == $r.patternIsNot, 
-								intValue == $r.intValue )
-		# Check if Foo( bar == 41 || <= 41 ) is missing.
-		not	LiteralRestriction( fieldId == $f.id, 
-								( evaluator == "==" || == "<=" ), 
-								patternIsNot == $r.patternIsNot, 
-								eval( intValue == $r.getIntValue() - 1 ) )
-		$rule :AnalyticsRule( id == $r.ruleId )
-	then
-		Gap gap = new Gap();
-		gap.setCause($f);
-		gap.setRuleName($rule.getRuleName());
-		gap.setEvaluator("<");
-		gap.setFiredRuleName(drools.getRule().getName());
-		gap.setValue($r.getIntValue() + "");
-		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 integers, equal and smaller than"
-	when
-		(
-		# Case Foo( bar == 42 ) Foo( bar <= 43 || == 43 ).
-				$f :Field( fieldType == Field.FieldType.INT )
-			and
-				$r :LiteralRestriction( fieldId == $f.id, evaluator == "==" )
-			and
-				LiteralRestriction( fieldId == $f.id, 
-										( evaluator == "==" || == "<=" ),
-										patternIsNot == $r.patternIsNot, 
-										eval( intValue == $r.getIntValue() - 1 ) )
-		) or (
-		# Case Foo( bar == 42 ) Foo( bar <= 42 || < 42 ).
-				$f :Field( fieldType == Field.FieldType.INT )
-			and
-				$r :LiteralRestriction( fieldId == $f.id, evaluator == "==" )
-			and
-				LiteralRestriction( fieldId == $f.id, 
-										( evaluator == "<" || == "<=" ), 
-										patternIsNot == $r.patternIsNot, 
-										intValue == $r.intValue )
-		)
-		# Check if Foo( bar > 42 || >= 42 ) is missing.
-		not	LiteralRestriction( fieldId == $f.id, 
-								( evaluator == ">" || == ">=" ), 
-								patternIsNot == $r.patternIsNot, 
-								intValue == $r.intValue )
-		# Check if Foo( bar == 41 || >= 41 ) is missing.
-		not	LiteralRestriction( fieldId == $f.id, 
-								( evaluator == "==" || == ">=" ), 
-								patternIsNot == $r.patternIsNot, 
-								eval( intValue == $r.getIntValue() + 1 ) )
-		$rule :AnalyticsRule( id == $r.ruleId )
-	then
-		Gap gap = new Gap();
-		gap.setCause($f);
-		gap.setRuleName($rule.getRuleName());
-		gap.setEvaluator(">");
-		gap.setFiredRuleName(drools.getRule().getName());
-		gap.setValue($r.getIntValue() +"");
-		insert( gap );
-end
-/*
-# If all ranges are not checked for a field.
-# If equality and greater 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 integers, equal and smaller than"
-	when
-		$f :Field( fieldType == Field.FieldType.INT, $fieldId :id, $fieldName :name, $classId :classId )
-		$r :LiteralRestriction( fieldId == $fieldId, evaluator == "==" )
-		(
-				LiteralRestriction( fieldId == $fieldId, 
-										( evaluator == "==" || == "<=" ), 
-										patternIsNot == $r.patternIsNot, 
-										eval( intValue == $r.getIntValue() - 1 ) )
-			or
-				LiteralRestriction( fieldId == $fieldId, 
-										( evaluator == "<" || == "<=" ), 
-										patternIsNot == $r.patternIsNot, intValue == $r.intValue )
-		)
-		not	LiteralRestriction( fieldId == $fieldId, 
-								( evaluator == "==" || == ">=" ), 
-								patternIsNot == $r.patternIsNot, 
-								eval( intValue == $r.getIntValue() + 1 ) )
-		$rule :AnalyticsRule( id == $r.ruleId )
-	then
-		Gap gap = new Gap();
-		gap.setCause($f);
-		gap.setRuleName($rule.getRuleName());
-		gap.setEvaluator(">=");
-		gap.setFiredRuleName(drools.getRule().getName());
-		gap.setValue($r.getIntValue() +"");
-		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"
-	when
-		$f :Field( fieldType == Field.FieldType.DOUBLE, $fieldId :id, $fieldName :name, $classId :classId )
-		(
-				$r :LiteralRestriction( fieldId == $fieldId, evaluator == ">", 
-											$patternIsNot :patternIsNot, $value :doubleValue )
-			and
-				not LiteralRestriction( fieldId == $fieldId, ( evaluator == "==" || == "<=" ), 
-											patternIsNot == $patternIsNot, intValue == $value )
-		) or (
-				$r :LiteralRestriction( fieldId == $fieldId, evaluator == "<", 
-											$patternIsNot :patternIsNot, $value :doubleValue )
-			and
-				not LiteralRestriction( fieldId == $fieldId, ( evaluator == "==" || == ">=" ), 
-											patternIsNot == $patternIsNot, doubleValue == $value )
-		) or (
-				$r :LiteralRestriction( fieldId == $fieldId, evaluator == "<=", 
-											$patternIsNot :patternIsNot, $value :doubleValue )
-			and
-				not LiteralRestriction( fieldId == $fieldId, evaluator  == ">", 
-											patternIsNot == $patternIsNot, doubleValue == $value )
-		) or (
-				$r :LiteralRestriction( fieldId == $fieldId, evaluator == ">=", 
-											$patternIsNot :patternIsNot, $value :doubleValue )
-			and
-				not LiteralRestriction( fieldId == $fieldId, evaluator  == "<", 
-											patternIsNot == $patternIsNot, doubleValue == $value )
-		)
-		$rule :AnalyticsRule( id == $r.ruleId )
-	then
-		Gap gap = new Gap();
-		gap.setCause($f);
-		gap.setRuleName($rule.getRuleName());
-		gap.setEvaluator($r.getEvaluator());
-		gap.setFiredRuleName(drools.getRule().getName());
-		gap.setValue($value +"");
-		insert( gap );
-end
-
-# If all ranges are not checked for a date field.
-# 
-# Type: Warning
-# Example: in "Rule 1" Foo( bar < "27-Oct-2007" ) and in "Rule 2" Foo( bar > "27-Oct-2007" )
-# 					then Foo( bar == "27-Oct-2007" ) is missing.
-rule "Range check for dates"
-	when
-		$f :Field( fieldType == Field.FieldType.DATE, $fieldId :id, $fieldName :name, $classId :classId )
-		(
-				$r :LiteralRestriction( fieldId == $fieldId, evaluator == ">", 
-											$patternIsNot :patternIsNot, $value :dateValue )
-			and
-				not LiteralRestriction( fieldId == $fieldId, ( evaluator == "==" || == "<=" ), 
-											patternIsNot == $patternIsNot, eval( dateValue.equals($value) ) )
-		) or (
-				$r :LiteralRestriction( fieldId == $fieldId, evaluator == "<", 
-											$patternIsNot :patternIsNot, $value :dateValue )
-			and
-				not LiteralRestriction( fieldId == $fieldId, ( evaluator == "==" || == ">=" ), 
-											patternIsNot == $patternIsNot, eval( dateValue.equals($value) ) )
-		) or (
-				$r :LiteralRestriction( fieldId == $fieldId, evaluator == "<=", 
-											$patternIsNot :patternIsNot, $value :dateValue )
-			and
-				not LiteralRestriction( fieldId == $fieldId, evaluator == ">", 
-											patternIsNot == $patternIsNot, eval( dateValue.equals($value) ) )
-		) or (
-				$r :LiteralRestriction( fieldId == $fieldId, evaluator == ">=", 
-											$patternIsNot :patternIsNot, $value :dateValue )
-			and
-				not LiteralRestriction( fieldId == $fieldId, evaluator == "<", 
-											patternIsNot == $patternIsNot, eval( dateValue.equals($value) ) )
-		)
-		$rule :AnalyticsRule( id == $r.ruleId )
-	then
-		String fmt = System.getProperty("drools.dateformat");
-		if (fmt == null) {
-			fmt = "dd-MMM-yyyy";
-		}
-		Gap gap = new Gap();
-		gap.setCause($f);
-		gap.setRuleName($rule.getRuleName());
-		gap.setEvaluator($r.getEvaluator());
-		gap.setFiredRuleName(drools.getRule().getName());
-		gap.setValue(new SimpleDateFormat(fmt, Locale.ENGLISH).format($value));
-		insert( gap );
-end
-
-/*
-rule "test"
-	when
-		$o :Object()
-	then
-		System.out.println($o);
-end
-*/
-/*
-# If all ranges are not checked for a field.
-# 
-# Type: Warning
-# Example: in "Rule 1" Something( $value :value ) and Foo( bar > $value ) 
-#			and in "Rule 2" Something( $value :value ) and Foo( bar < $value ) 
-# 					then Foo( bar == Something.value ) is missing.
-rule "Range check for variables when restriction is QualifiedIdentifierRestriction"
-	when
-		# Find a field that is of type variable.
-		$f :Field( fieldType == Field.FieldType.VARIABLE )
-		# Find constraint that matches this field
-		# Find variable that is on the right side of this constraint i.e. bar > $foo
-		# Find another variable that points to the same field. 
-		# Find another constraint and check if it continues to check the range for this field.
-		(
-				$r :QualifiedIdentifierRestriction( fieldId == $f.id, evaluator == ">" )
-			and
-				$v1 :Variable( id == $r.variableId )
-			and
-			(
-				$v2 :Variable( objectId == $v1.objectId, objectType == $v1.objectType, id != $v1.id)
-			) or (
-			
-			and
-				not QualifiedIdentifierRestriction( fieldId == $f.id, ( evaluator == "==" || == "<=" ), 
-														variablePath == $r.variablePath, variableId == $v2.id,
-														patternIsNot == $r.patternIsNot )
-			)
-		) or (
-				$r :QualifiedIdentifierRestriction( fieldId == $f.id, evaluator == "<" )
-			and
-				$v1 :Variable( id == $r.variableId )
-			and
-				$v2 :Variable( objectId == $v1.objectId, objectType == $v1.objectType, id != $v1.id)
-			and
-				not QualifiedIdentifierRestriction( fieldId == $f.id, ( evaluator == "==" || == ">=" ), 
-														variablePath == $r.variablePath, variableId == $v2.id,
-														patternIsNot == $r.patternIsNot )
-		) or (
-				$r :QualifiedIdentifierRestriction( fieldId == $f.id, evaluator == "<=" )
-			and
-				$v1 :Variable( id == $r.variableId )
-			and
-				$v2 :Variable( objectId == $v1.objectId, objectType == $v1.objectType, id != $v1.id)
-			and
-				not QualifiedIdentifierRestriction( fieldId == $f.id, evaluator == ">", 
-														variablePath == $r.variablePath, variableId == $v2.id,
-														patternIsNot == $r.patternIsNot )
-		) or (
-				$r :QualifiedIdentifierRestriction( fieldId == $f.id, evaluator == ">=" )
-			and
-				$v1 :Variable( id == $r.variableId )
-			and
-				$v2 :Variable( objectId == $v1.objectId, objectType == $v1.objectType, id != $v1.id)
-			and
-				not QualifiedIdentifierRestriction( fieldId == $f.id, evaluator == "<", 
-														variablePath == $r.variablePath, variableId == $v2.id,
-														patternIsNot == $r.patternIsNot )
-		)
-		$rule :AnalyticsRule( id == $r.ruleId )
-	then
-		Gap gap = new Gap();
-		gap.setCause($f);
-		gap.setRuleName($rule.getRuleName());
-		gap.setEvaluator($r.getEvaluator());
-		gap.setFiredRuleName(drools.getRule().getName());
-		gap.setValue("variable");
-		insert( gap );
-		
-		#if(testTool != null){
-		#	testTool.getRulesThatHadErrors().add($rule.getRuleName());
-		#}
-end 
-
-# If all ranges are not checked for a field.
-# 
-# Type: Warning
-# Example: in "Rule 1" Something( $value :value ) and Foo( bar > $value ) 
-#			and in "Rule 2" Something( $value :value ) and Foo( bar < $value ) 
-# 					then Foo( bar == Something.value ) is missing.
-rule "Range check for variables when restriction is VariableRestriction"
-	when
-		# Find a field that is of type variable.
-		$f :Field( fieldType == Field.FieldType.VARIABLE )
-		# Find constraint that matches this field
-		# Find variable that is on the right side of this constraint i.e. bar > $foo
-		# Find another variable that points to the same field. 
-		# Find another constraint and check if it continues to check the range for this field.
-		(
-				$r :VariableRestriction( fieldId == $f.id, evaluator == ">" )
-			and
-				$v1 :Variable( id == $r.variableId )
-			and
-				$v2 :Variable( objectId == $v1.objectId, objectType == $v1.objectType, id != $v1.id)
-			and
-				not VariableRestriction( fieldId == $f.id, ( evaluator == "==" || == "<=" ), 
-														variableId == $v2.id,
-														patternIsNot == $r.patternIsNot )
-		) or (
-				$r :VariableRestriction( fieldId == $f.id, evaluator == "<" )
-			and
-				$v1 :Variable( id == $r.variableId )
-			and
-				$v2 :Variable( objectId == $v1.objectId, objectType == $v1.objectType, id != $v1.id)
-			and
-				not VariableRestriction( fieldId == $f.id, ( evaluator == "==" || == ">=" ), 
-														variableId == $v2.id,
-														patternIsNot == $r.patternIsNot )
-		) or (
-				$r :VariableRestriction( fieldId == $f.id, evaluator == "<=" )
-			and
-				$v1 :Variable( id == $r.variableId )
-			and
-				$v2 :Variable( objectId == $v1.objectId, objectType == $v1.objectType, id != $v1.id)
-			and
-				not VariableRestriction( fieldId == $f.id, evaluator == ">", 
-														variableId == $v2.id,
-														patternIsNot == $r.patternIsNot )
-		) or (
-				$r :VariableRestriction( fieldId == $f.id, evaluator == ">=" )
-			and
-				$v1 :Variable( id == $r.variableId )
-			and
-				$v2 :Variable( objectId == $v1.objectId, objectType == $v1.objectType, id != $v1.id)
-			and
-				not VariableRestriction( fieldId == $f.id, evaluator == "<", 
-														variableId == $v2.id,
-														patternIsNot == $r.patternIsNot )
-		)
-		$rule :AnalyticsRule( id == $r.ruleId )
-	then
-		Gap gap = new Gap();
-		gap.setCause($f);
-		gap.setRuleName($rule.getRuleName());
-		gap.setEvaluator($r.getEvaluator());
-		gap.setFiredRuleName(drools.getRule().getName());
-		gap.setValue("variable");
-		insert( gap );
-end 
-*/
-# If all pattern ranges are not checked for a field.
-# 
-# Type: Warning
-# Example: in "Rule 1" Foo( bar == 10 ) and in "Rule 2" Foo( bar == 20 ) and in "Rule 3" Foo( bar == 40 )
-# 					then Foo( bar == 30 ) is missing.
-rule "Range check for number patterns"
-	when
-		$f :Field( ( fieldType == Field.FieldType.INT || == Field.FieldType.DOUBLE ), 
-					$fieldId :id, $fieldName :name, $classId :classId )
-		AnalyticsClass( id == $classId, $className :name )
-		(
-			# Where pattern is false.
-			$validationResult :ValidatePatternResult( value != null)
-				from accumulate(
-					$r :LiteralRestriction( fieldId == $fieldId, 
-						patternIsNot == false, ( evaluator == "==" || == "!=" )),
-					validatePattern( $r )
-				)
-		) or (
-			# Where pattern is true.
-			$validationResult :ValidatePatternResult( value != null)
-				from accumulate(
-					$r :LiteralRestriction( fieldId == $fieldId, 
-						patternIsNot == true, ( evaluator == "==" || == "!=" )),
-					validatePattern( $r )
-				)
-		)
-	then
-		// TODO: Find out if evaluator is == or !=.
-		Gap gap = new Gap();
-		gap.setCause($f);
-		#gap.setRuleName($rule.getRuleName());
-		#gap.setEvaluator($r.getEvaluator());
-		gap.setFiredRuleName(drools.getRule().getName());
-		gap.setValue($validationResult.toString());
-		insert( gap );
-end

Deleted: labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/Redundancy.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/Redundancy.drl	2007-09-07 13:30:22 UTC (rev 14935)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/Redundancy.drl	2007-09-07 15:36:34 UTC (rev 14936)
@@ -1,447 +0,0 @@
-#created on: 7.6.2007
-package org.drools.analytics
-
-#list any import classes here.
-import org.drools.analytics.components.*;
-import org.drools.analytics.result.*;
-
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.HashSet;
-
-#declare any global variables here
-global AnalysisResult result
-
-
-# TODO: And from and every object.
-//TODO: Also check that patterns and rules are redundant.
-/*
-rule "Find redundant ReturnValueRestriction"
-	when
-		# Check that Restrictions $left and $right have redundant fields.
-		$left :ReturnValueRestriction()
-		$right :ReturnValueRestriction( 
-			id != $left.id,
-			evaluator == $left.evaluator,
-			classMethodName matches $left.classMethodName,
-			compareStringArrays( declarations, $left.declarations )
-		)
-					
-		# Check that PatternPossibilities $pp1 and $pp2 have redundant fields
-		# and that they contain $left and $right.
-		$pp1 :PatternPossibility( restriction contains $left ) 
-		$pp2 :PatternPossibility( 
-					id != $pp1.id, 
-					restriction contains $right, 
-					exist == $pp1.exist, 
-					notExist == $pp1.notExist,
-					eval( restrictions.size() == $pp1.getRestrictions().size() ) 
-		)
-		# Check that there is not allready a pair with these values.
-		not RedundantPair( left == $left, right == $right )
-	then
-		insert( new RedundantPair( $pp1, $pp2, $left, $right ) );
-end
-*/
-rule "Find redundant VariableRestriction"
-	when
-		# Check that Restrictions $left and $right have redundant fields.
-		$left :VariableRestriction()
-		$right :VariableRestriction( 
-			id != $left.id, 
-			evaluator == $left.evaluator 
-		)
-		# Check that there is not already a pair with these values.
-		not Redundancy( 
-			left == $left, 
-			right == $right 
-		)
-		
-		# 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
-		)
-	then
-		insert( new Redundancy( Redundancy.Type.STRONG, $left, $right ) );
-end
-
-/*
-XXX: Not sure if this can be done.
-rule "Find redundant QualifiedIdentifierRestriction"
-	when
-		# Check that Restrictions $left and $right have redundant fields.
-		$left :QualifiedIdentifierRestriction()
-		$right :QualifiedIdentifierRestriction( 
-			id != $left.id, 
-			evaluator == $left.evaluator 
-		)
-		
-		# 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
-		)
-		
-		# Check that there is not already a pair with these values.
-		not Redundancy( 
-			left == $left, 
-			right == $right 
-		)
-		not Redundancy( 
-			left == $right, 
-			right == $left 
-		)
-	then
-		insert( new Redundancy( $left, $right ) );
-end
-*/
-
-
-rule "Find redundant LiteralRestriction"
-	when
-		# Check that Restrictions $left and $right have redundant fields.
-		$left :LiteralRestriction()
-		and
-		(
-				$right :LiteralRestriction( 
-					id != $left.id, 
-					evaluator == $left.evaluator,
-					valueType == Field.FieldType.BOOLEAN,
-					booleanValue == $left.booleanValue
-				)
-			or
-				$right :LiteralRestriction( id != $left.id, 
-					evaluator == $left.evaluator,
-					valueType == Field.FieldType.STRING,
-					stringValue matches $left.stringValue
-				)
-			or
-				$right :LiteralRestriction( 
-					id != $left.id, 
-					evaluator == $left.evaluator,
-					valueType == Field.FieldType.INT,
-					intValue == $left.intValue
-				)
-			or
-				$right :LiteralRestriction( 
-					id != $left.id, 
-					evaluator == $left.evaluator,
-					valueType == Field.FieldType.DOUBLE,
-					doubleValue == $left.doubleValue
-				)
-			or
-				$right :LiteralRestriction( 
-					id != $left.id, 
-					evaluator == $left.evaluator,
-					valueType == Field.FieldType.DATE,
-					eval( dateValue.equals($left.getDateValue()) )
-				)
-			or
-			(
-				$right :LiteralRestriction( 
-					id != $left.id, 
-					evaluator == $left.evaluator,
-					valueType == Field.FieldType.VARIABLE
-				)
-				and
-					$v :Variable( 
-						objectType == AnalyticsComponentType.FIELD,
-						objectId == $left.id
-					)
-				and
-					Variable( 
-						objectType == AnalyticsComponentType.FIELD,
-						objectId == $right.id,
-						objectName == $v.objectName,
-						name == $v.name
-					)
-			)
-		)
-		# Check that there is not already a pair with these values.
-		not Redundancy( 
-			left == $left, 
-			right == $right 
-		)
-	then
-		insert( new Redundancy( Redundancy.Type.STRONG, $left, $right ) );
-end
-
-
-#
-# Only checks for redundant pattern specifications, 
-# does not include actual restriction checks.
-#
-rule "Find redundant Pattern shells"
-	when
-		# Check that Patterns $left and $right have redundant fields.
-		$left :Pattern()
-		$right :Pattern( 
-			id != $left.id, 
-	  		classId == $left.classId,
-	  		# TODO: In some cases the source might be redundant with different sources.
-	 		sourceType == $left.sourceType, 
-	  		sourceId == $left.sourceId,
-	  		patternNot == $left.patternNot,
-	  		patternExists == $left.patternExists,
-	  		patternForall == $left.patternForall
-		)
-		
-		# Check that there is not already a pair with these values.
-		not Redundancy( 
-			left == $left, 
-			right == $right 
-		)
-	then
-		insert( new Redundancy( Redundancy.Type.WEAK, $left, $right ) );
-end
-
-#
-# Only checks for redundant rule specifications, 
-# does not include actual pattern and restriction checks.
-#
-rule "Find redundant Rule shells"
-	when
-		# Check that AnalyticsRule $left and $right have redundant fields.
-		$left :AnalyticsRule()
-		$right :AnalyticsRule( 
-			id != $left.id, 
-			ruleSalience == $left.ruleSalience,
-			ruleAgendaGroup == $left.ruleAgendaGroup,
-			consequence == $left.consequence # TODO: Check for redundancy when MVEL is solved.
-		)
-		
-		# Check that there is not already a pair with these values.
-		not Redundancy( 
-			left == $left, 
-			right == $right 
-		)
-	then
-		insert( new Redundancy( Redundancy.Type.WEAK, $left, $right ) );
-end
-
-
-rule "Find part of redundant PatternPossibility combination"
-	when
-		# Restriction Redundancy.
-		$redundancy :Redundancy()
-		
-		# Check that patterns are redundant.
-		$p1 :Pattern()
-		$p2 :Pattern( id != $p1.id )
-		Redundancy( 
-			left == $p1, 
-			right == $p2 
-		)
-		
-		# Find two PatternPossibilities.
-		$pp1 :PatternPossibility( 
-			patternId == $p1.id, 
-			items contains $redundancy.left 
-		)
-		$pp2 :PatternPossibility( 
-			patternId == $p2.id, 
-			items contains $redundancy.right 
-		)
-	then
-		insert( new PartialRedundancy( $pp1, $pp2, $redundancy ) );
-end
-
-
-rule "Find part of redundant RulePossibility combination"
-	when
-		# PatternPossibility Redundancy.
-		$redundancy :Redundancy()
-		
-		# Check that rules are redundant.
-		$r1 :AnalyticsRule()
-		$r2 :AnalyticsRule( id != $r1.id )
-		Redundancy( 
-			left == $r1, 
-			right == $r2 
-		)
-		
-		# Find two RulePossibilities.
-		$rp1 :RulePossibility( 
-			ruleId == $r1.id,
-			items contains $redundancy.left 
-		)
-		$rp2 :RulePossibility( 
-			ruleId == $r2.id, 
-			items contains $redundancy.right 
-		)
-		# TODO: Not here.
-	then
-		insert( new PartialRedundancy( $rp1, $rp2, $redundancy ) );
-end
-
-
-#
-# Handles both RulePossibilities and PatternPossibilities.
-#
-rule "Find subsumptant Possibilities"
-	when
-		$p1 :Possibility()
-		$p2 :Possibility( id != $p1.id )
-		
-		not Subsumption( 
-				left == $p1, 
-				right == $p2 
-		)
-		
-		# At least one partial redundancy exists between these possibilities.
-		exists( 
-				PartialRedundancy( 
-					left == $p1, 
-					right == $p2 
-				) 
-		)
-		
-		# Collect all the partial redundancies.
-		$list :ArrayList()
-			from collect(
-				PartialRedundancy( 
-					left == $p1, 
-					right == $p2 
-				)
-			)
-			
-		# If there as much partial redundancies as there is items in $p1,
-		# then $p1 is subsumptant to $p2.
-		eval( $list.size() == $p1.getAmountOfItems() )
-	then
-		insert( new Subsumption( $p1, $p2 ) );
-end
-
-#
-# If two possibilities are subsumptant to each others, then they are redundant.
-# Since this tests only one possibility, the entire rule or pattern might not be redundant.
-#
-rule "Find redundant Possibilities"
-	when
-		$p1 :Possibility()
-		$p2 :Possibility( id != $p1.id )
-		
-		not Redundancy( 
-			left == $p1, 
-			right == $p2 
-		)
-		
-		not Redundancy( 
-			left == $p2, 
-			right == $p1 
-		)
-		
-		Subsumption( 
-				left == $p1, 
-				right == $p2 
-		)
-		
-		Subsumption( 
-				left == $p2, 
-				right == $p1 
-		)
-	then
-		insert( new Redundancy( $p1, $p2 ) );
-end
-
-/*
-#
-# When two patterns and all theyr possibilities are redundant.
-#
-rule "Find redundant pattern"
-	when
-		$p1 :Pattern()
-		$p2 :Pattern( id != $p1.id )
-		
-		$set1 :HashSet()
-			from collect(
-				PatternPossibility( patternId == $p1.id )
-			)
-
-		$set2 :HashSet()
-			from collect(
-				PatternPossibility( patternId == $p2.id )
-			)
-		
-		# Check that sizes are the same.
-		eval( $set1.size() == $set2.size() )
-		
-		$redundancyList :ArrayList()
-			from collect(
-				Redundancy( 
-					eval( $set1.contains( left ) ),
-					eval( $set2.contains( right ) )
-				)
-			)
-		
-		eval( $set1.size() == $redundancyList.size() )
-		
-	then
-		# Type is set to strong because all the pattern possibilities are redundant.
-		insert( new Redundancy( Redundancy.Type.STRONG, $p1, $p2 ) );
-end
-
-#
-# When two rules and all theyr possibilities are redundant.
-#
-rule "Find redundant rule"
-	when
-		$r1 :AnalyticsRule()
-		$r2 :AnalyticsRule( id != $r1.id )
-		
-		# If all the patterns in rule 1 are strongly redundant to rule 2, and vice versa.
-		# Then the redundancy is strong.
-		$set1 :HashSet()
-			from collect(
-				Pattern( ruleId == $r1.id )
-			)
-
-		$set2 :HashSet()
-			from collect(
-				Pattern( ruleId == $r2.id )
-			)
-		
-		# Find only strong pattern
-		$redundancyList :ArrayList()
-			from collect(
-				Redundancy( 
-					type == Redundancy.Type.STRONG,
-					eval( $set1.contains( left ) ),
-					eval( $set2.contains( right ) )
-				)
-			)
-		 
-		eval( $set1.size() == $redundancyList.size() )
-		
-	then
-		# Type is set to strong because all the rule possibilities are redundant.
-		insert( new Redundancy( Redundancy.Type.STRONG, $r1, $r2 ) );
-end
-*/
-/*
-# TODO: Partial redundancy, when some two rulepossibilities from different rules 
-# are redundant. but not all of the possibilities are redundant!
-# NOTE: Write this one to to out put rules.
-*/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

Added: labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Dates.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Dates.drl	                        (rev 0)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Dates.drl	2007-09-07 15:36:34 UTC (rev 14936)
@@ -0,0 +1,115 @@
+#created on: 7.6.2007
+package org.drools.analytics.rangeChecks.dates;
+
+#list any import classes here.
+import org.drools.analytics.components.*;
+import org.drools.analytics.accumulateFunction.ValidatePattern;
+import org.drools.analytics.accumulateFunction.ValidatePatternResult;
+import org.drools.analytics.result.AnalysisResult;
+import org.drools.analytics.result.Gap;
+
+import java.util.ArrayList;
+import java.util.TreeSet;
+import java.text.SimpleDateFormat;
+import java.util.Locale;
+import java.util.Date;
+
+#declare any global variables here
+global AnalysisResult result
+
+
+function String dateToString(Date date) {
+		String fmt = System.getProperty("drools.dateformat");
+		if (fmt == null) {
+			fmt = "dd-MMM-yyyy";
+		}
+		
+		return new SimpleDateFormat(fmt, Locale.ENGLISH).format(date);
+}
+
+
+#
+# If all ranges are not checked for a date field.
+# 
+# Type: Warning
+# Example: in "Rule 1" Foo( bar < "27-Oct-2007" ) and in "Rule 2" Foo( bar > "27-Oct-2007" )
+# 					then Foo( bar == "27-Oct-2007" ) is missing.
+rule "Range check for dates, smaller and greater than"
+	when
+		$f :Field( fieldType == Field.FieldType.DATE )
+		(
+				$r :LiteralRestriction( fieldId == $f.id, evaluator == ">" )
+			and
+				not LiteralRestriction( fieldId == $f.id, ( evaluator == "==" || == "<=" ), 
+											patternIsNot == $r.patternIsNot, 
+											eval( dateValue.equals($r.getDateValue()) ) )
+		) or (
+				$r :LiteralRestriction( fieldId == $f.id, evaluator == "<" )
+			and
+				not LiteralRestriction( fieldId == $f.id, ( evaluator == "==" || == ">=" ), 
+											patternIsNot == $r.patternIsNot, 
+											eval( dateValue.equals($r.getDateValue()) ) )
+		) or (
+				$r :LiteralRestriction( fieldId == $f.id, evaluator == "<=" )
+			and
+				not LiteralRestriction( fieldId == $f.id, evaluator == ">", 
+											patternIsNot == $r.patternIsNot, 
+											eval( dateValue.equals($r.getDateValue()) ) )
+		) or (
+				$r :LiteralRestriction( fieldId == $f.id, evaluator == ">=" )
+			and
+				not LiteralRestriction( fieldId == $f.id, evaluator == "<", 
+											patternIsNot == $r.patternIsNot, 
+											eval( dateValue.equals($r.getDateValue()) ) )
+		)
+	then
+		insert( new Gap( $f, $r, drools.getRule().getName()) );
+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 == "27-Oct-2007" ) and in "Rule 2" Foo( bar < "27-Oct-2007" )
+# 					then Foo( bar > "27-Oct-2007" ) is missing.
+rule "Range check for dates, equal and greater than"
+	when
+		# Case Foo( bar == "27-Oct-2007" ) Foo( bar >= "27-Oct-2007" || > "27-Oct-2007" ).
+		$f :Field( fieldType == Field.FieldType.DATE )
+		$r :LiteralRestriction( fieldId == $f.id, evaluator == "==" )
+		LiteralRestriction( fieldId == $f.id, 
+								( evaluator == ">" || == ">=" ), 
+								patternIsNot == $r.patternIsNot, 
+								eval( dateValue.equals($r.getDateValue())) )
+		# Check if Foo( bar < "27-Oct-2007" || <= "27-Oct-2007" ) is missing.
+		not	LiteralRestriction( fieldId == $f.id, 
+								( evaluator == "<" || == "<=" ), 
+								patternIsNot == $r.patternIsNot, 
+								eval( dateValue.equals($r.getDateValue())) )
+	then
+		insert( new Gap( $f, $r, drools.getRule().getName()) );
+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 == "27-Oct-2007" ) and in "Rule 2" Foo( bar > "27-Oct-2007" )
+# 					then Foo( bar < "27-Oct-2007" ) is missing.
+rule "Range check for dates, equal and smaller than"
+	when
+		# Case Foo( bar == "27-Oct-2007" ) Foo( bar <= "27-Oct-2007" || < "27-Oct-2007" ).
+		$f :Field( fieldType == Field.FieldType.DATE )
+		$r :LiteralRestriction( fieldId == $f.id, evaluator == "==" )
+		LiteralRestriction( fieldId == $f.id, 
+								( evaluator == "<" || == "<=" ), 
+								patternIsNot == $r.patternIsNot, 
+								eval( dateValue.equals($r.getDateValue())) )
+		# Check if Foo( bar > "27-Oct-2007" || >= "27-Oct-2007" ) is missing.
+		not	LiteralRestriction( fieldId == $f.id, 
+								( evaluator == ">" || == ">=" ), 
+								patternIsNot == $r.patternIsNot, 
+								eval( dateValue.equals($r.getDateValue())) )
+	then
+		insert( new Gap( $f, $r, drools.getRule().getName()) );
+end

Added: labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Doubles.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Doubles.drl	                        (rev 0)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Doubles.drl	2007-09-07 15:36:34 UTC (rev 14936)
@@ -0,0 +1,103 @@
+#created on: 7.6.2007
+package org.drools.analytics.rangeChecks.doubles;
+
+#list any import classes here.
+import org.drools.analytics.components.*;
+import org.drools.analytics.accumulateFunction.ValidatePattern;
+import org.drools.analytics.accumulateFunction.ValidatePatternResult;
+import org.drools.analytics.result.AnalysisResult;
+import org.drools.analytics.result.Gap;
+
+import java.util.ArrayList;
+import java.util.TreeSet;
+import java.text.SimpleDateFormat;
+import java.util.Locale;
+
+#declare any global variables here
+global AnalysisResult result
+
+# 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
+		insert( new Gap( $f, $r, drools.getRule().getName()) );
+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
+		insert( new Gap( $f, $r, drools.getRule().getName()) );
+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
+		insert( new Gap( $f, $r, drools.getRule().getName()) );
+end
+

Added: labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Integers.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Integers.drl	                        (rev 0)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Integers.drl	2007-09-07 15:36:34 UTC (rev 14936)
@@ -0,0 +1,143 @@
+#created on: 7.6.2007
+package org.drools.analytics.rangeChecks.integers;
+
+#list any import classes here.
+import org.drools.analytics.components.*;
+import org.drools.analytics.accumulateFunction.ValidatePattern;
+import org.drools.analytics.accumulateFunction.ValidatePatternResult;
+import org.drools.analytics.result.AnalysisResult;
+import org.drools.analytics.result.Gap;
+
+import java.util.ArrayList;
+import java.util.TreeSet;
+import java.text.SimpleDateFormat;
+import java.util.Locale;
+
+# 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 integers, smaller and greater than"
+	when
+		$f :Field( fieldType == Field.FieldType.INT, $fieldId :id, $fieldName :name, $classId :classId )
+		(
+				$r :LiteralRestriction( fieldId == $fieldId, evaluator == ">", 
+											$patternIsNot :patternIsNot, $value :intValue )
+			and
+				not LiteralRestriction( fieldId == $fieldId, ( evaluator == "==" || == "<=" ), 
+											patternIsNot == $patternIsNot, intValue == $value )
+		) or (
+				$r :LiteralRestriction( fieldId == $fieldId, evaluator == "<", 
+											$patternIsNot :patternIsNot, $value :intValue )
+			and
+				not LiteralRestriction( fieldId == $fieldId, ( evaluator == "==" || == ">=" ), 
+											patternIsNot == $patternIsNot, intValue == $value )
+		) or (
+				$r :LiteralRestriction( fieldId == $fieldId, evaluator == "<=", 
+											$patternIsNot :patternIsNot, $value :intValue )
+			and
+				not LiteralRestriction( fieldId == $fieldId, evaluator  == ">", 
+											patternIsNot == $patternIsNot, intValue == $value )
+			and
+				not LiteralRestriction( fieldId == $fieldId, evaluator  == ">=", 
+											patternIsNot == $patternIsNot, eval( intValue == $value + 1 ) )
+		) or (
+				$r :LiteralRestriction( fieldId == $fieldId, evaluator == ">=", 
+											$patternIsNot :patternIsNot, $value :intValue )
+			and
+				not LiteralRestriction( fieldId == $fieldId, evaluator  == "<", 
+											patternIsNot == $patternIsNot, intValue == $value )
+			and
+				not LiteralRestriction( fieldId == $fieldId, evaluator  == "<=", 
+											patternIsNot == $patternIsNot, eval( intValue == $value - 1 ) )
+		)
+	then
+		insert( new Gap( $f, $r, drools.getRule().getName()) );
+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 integers, equal and greater than"
+	when
+		(
+		# Case Foo( bar == 42 ) Foo( bar >= 43 || == 43 ).
+				$f :Field( fieldType == Field.FieldType.INT )
+			and
+				$r :LiteralRestriction( fieldId == $f.id, evaluator == "==" )
+			and
+				LiteralRestriction( fieldId == $f.id, 
+										( evaluator == "==" || == ">=" ),
+										patternIsNot == $r.patternIsNot, 
+										eval( intValue == $r.getIntValue() + 1 ) )
+		) or (
+		# Case Foo( bar == 42 ) Foo( bar >= 42 || > 42 ).
+				$f :Field( fieldType == Field.FieldType.INT )
+			and
+				$r :LiteralRestriction( fieldId == $f.id, evaluator == "==" )
+			and
+				LiteralRestriction( fieldId == $f.id, 
+										( evaluator == ">" || == ">=" ), 
+										patternIsNot == $r.patternIsNot, 
+										intValue == $r.intValue )
+		)
+		# Check if Foo( bar < 42 || <= 42 ) is missing.
+		not	LiteralRestriction( fieldId == $f.id, 
+								( evaluator == "<" || == "<=" ), 
+								patternIsNot == $r.patternIsNot, 
+								intValue == $r.intValue )
+		# Check if Foo( bar == 41 || <= 41 ) is missing.
+		not	LiteralRestriction( fieldId == $f.id, 
+								( evaluator == "==" || == "<=" ), 
+								patternIsNot == $r.patternIsNot, 
+								eval( intValue == $r.getIntValue() - 1 ) )
+	then
+		insert( new Gap( $f, $r, drools.getRule().getName()) );
+end
+
+# If all ranges are not checked for a field.
+# If equality and greater than exist check that smaller 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 integers, equal and smaller than"
+	when
+		(
+		# Case Foo( bar == 42 ) Foo( bar <= 43 || == 43 ).
+				$f :Field( fieldType == Field.FieldType.INT )
+			and
+				$r :LiteralRestriction( fieldId == $f.id, evaluator == "==" )
+			and
+				LiteralRestriction( fieldId == $f.id, 
+										( evaluator == "==" || == "<=" ),
+										patternIsNot == $r.patternIsNot, 
+										eval( intValue == $r.getIntValue() - 1 ) )
+		) or (
+		# Case Foo( bar == 42 ) Foo( bar <= 42 || < 42 ).
+				$f :Field( fieldType == Field.FieldType.INT )
+			and
+				$r :LiteralRestriction( fieldId == $f.id, evaluator == "==" )
+			and
+				LiteralRestriction( fieldId == $f.id, 
+										( evaluator == "<" || == "<=" ), 
+										patternIsNot == $r.patternIsNot, 
+										intValue == $r.intValue )
+		)
+		# Check if Foo( bar > 42 || >= 42 ) is missing.
+		not	LiteralRestriction( fieldId == $f.id, 
+								( evaluator == ">" || == ">=" ), 
+								patternIsNot == $r.patternIsNot, 
+								intValue == $r.intValue )
+		# Check if Foo( bar == 41 || >= 41 ) is missing.
+		not	LiteralRestriction( fieldId == $f.id, 
+								( evaluator == "==" || == ">=" ), 
+								patternIsNot == $r.patternIsNot, 
+								eval( intValue == $r.getIntValue() + 1 ) )
+	then
+		insert( new Gap( $f, $r, drools.getRule().getName()) );
+end

Added: labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Patterns.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Patterns.drl	                        (rev 0)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Patterns.drl	2007-09-07 15:36:34 UTC (rev 14936)
@@ -0,0 +1,60 @@
+#created on: 7.6.2007
+package org.drools.analytics.rangeChecks.patterns;
+
+#list any import classes here.
+import org.drools.analytics.components.*;
+import org.drools.analytics.accumulateFunction.ValidatePattern;
+import org.drools.analytics.accumulateFunction.ValidatePatternResult;
+import org.drools.analytics.result.AnalysisResult;
+import org.drools.analytics.result.MissingNumberPattern;
+import org.drools.analytics.result.Cause;
+import org.drools.analytics.result.AnalysisWarning;
+
+import java.util.ArrayList;
+import java.util.List;
+
+#declare any global variables here
+global AnalysisResult result
+
+#
+# If all pattern ranges are not checked for a field.
+# 
+# Type: Warning
+# Example: in "Rule 1" Foo( bar == 10 ) and in "Rule 2" Foo( bar == 20 ) and in "Rule 3" Foo( bar == 40 )
+# 					then Foo( bar == 30 ) is missing.
+rule "Range check for number patterns"
+	when
+		$f :Field( ( fieldType == Field.FieldType.INT || == Field.FieldType.DOUBLE ), 
+					$fieldId :id, $fieldName :name, $classId :classId )
+		(
+			# Where pattern is false.
+			$validationResult :ValidatePatternResult( value != null)
+				from accumulate(
+					$r :LiteralRestriction( 
+						fieldId == $fieldId, 
+						patternIsNot == false, 
+						( evaluator == "==" || == "!=" ),
+						$evaluator :evaluator
+					),
+					validatePattern( $r )
+				)
+		) or (
+			# Where pattern is true.
+			$validationResult :ValidatePatternResult( value != null)
+				from accumulate(
+					$r :LiteralRestriction( 
+						fieldId == $fieldId, 
+						patternIsNot == true, 
+						( evaluator == "==" || == "!=" ),
+						$evaluator :evaluator
+					),
+					validatePattern( $r )
+				)
+		)
+	then
+	List<Cause> list = new ArrayList<Cause>();
+	list.add(
+			new MissingNumberPattern( $f.getId(), "==", $validationResult.getValue().toString() ));
+	
+	result.add( new AnalysisWarning( $f.getRuleName(), $f + " is missing a number from pattern.", list ) );
+end

Added: labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Variables.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Variables.drl	                        (rev 0)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/rangeChecks/Variables.drl	2007-09-07 15:36:34 UTC (rev 14936)
@@ -0,0 +1,84 @@
+package org.drools.analytics.rangeChecks.variables;
+
+#list any import classes here.
+import org.drools.analytics.components.*;
+import org.drools.analytics.accumulateFunction.ValidatePattern;
+import org.drools.analytics.accumulateFunction.ValidatePatternResult;
+import org.drools.analytics.result.AnalysisResult;
+import org.drools.analytics.result.Gap;
+
+import java.util.ArrayList;
+import java.util.TreeSet;
+import java.text.SimpleDateFormat;
+import java.util.Locale;
+
+#declare any global variables here
+global AnalysisResult result
+
+/*
+# If all ranges are not checked for a field.
+# 
+# Type: Warning
+# Example: in "Rule 1" Something( $value :value ) and Foo( bar > $value ) 
+#			and in "Rule 2" Something( $value :value ) and Foo( bar < $value ) 
+# 					then Foo( bar == Something.value ) is missing.
+rule "Range check for variables when restriction is VariableRestriction"
+	when
+		# Find a field that is of type variable.
+		$f :Field( fieldType == Field.FieldType.VARIABLE )
+		# Find constraint that matches this field
+		# Find variable that is on the right side of this constraint i.e. bar > $foo
+		# Find another variable that points to the same field. 
+		# Find another constraint and check if it continues to check the range for this field.
+		(
+				$r :VariableRestriction( fieldId == $f.id, evaluator == ">" )
+			and
+				$v1 :Variable( id == $r.variableId )
+			and
+				$v2 :Variable( objectId == $v1.objectId, objectType == $v1.objectType, id != $v1.id)
+			and
+				not VariableRestriction( fieldId == $f.id, ( evaluator == "==" || == "<=" ), 
+														variableId == $v2.id,
+														patternIsNot == $r.patternIsNot )
+		) or (
+				$r :VariableRestriction( fieldId == $f.id, evaluator == "<" )
+			and
+				$v1 :Variable( id == $r.variableId )
+			and
+				$v2 :Variable( objectId == $v1.objectId, objectType == $v1.objectType, id != $v1.id)
+			and
+				not VariableRestriction( fieldId == $f.id, ( evaluator == "==" || == ">=" ), 
+														variableId == $v2.id,
+														patternIsNot == $r.patternIsNot )
+		) or (
+				$r :VariableRestriction( fieldId == $f.id, evaluator == "<=" )
+			and
+				$v1 :Variable( id == $r.variableId )
+			and
+				$v2 :Variable( objectId == $v1.objectId, objectType == $v1.objectType, id != $v1.id)
+			and
+				not VariableRestriction( fieldId == $f.id, evaluator == ">", 
+														variableId == $v2.id,
+														patternIsNot == $r.patternIsNot )
+		) or (
+				$r :VariableRestriction( fieldId == $f.id, evaluator == ">=" )
+			and
+				$v1 :Variable( id == $r.variableId )
+			and
+				$v2 :Variable( objectId == $v1.objectId, objectType == $v1.objectType, id != $v1.id)
+			and
+				not VariableRestriction( fieldId == $f.id, evaluator == "<", 
+														variableId == $v2.id,
+														patternIsNot == $r.patternIsNot )
+		)
+		$rule :AnalyticsRule( id == $r.ruleId )
+	then
+		Gap gap = new Gap();
+		gap.setCause($f);
+		gap.setRuleName($rule.getRuleName());
+		gap.setEvaluator($r.getEvaluator());
+		gap.setFiredRuleName(drools.getRule().getName());
+		gap.setValue("variable");
+		insert( gap );
+end 
+*/
\ No newline at end of file

Added: labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Patterns.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Patterns.drl	                        (rev 0)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Patterns.drl	2007-09-07 15:36:34 UTC (rev 14936)
@@ -0,0 +1,73 @@
+#created on: 7.9.2007
+package org.drools.analytics.redundancy.patterns
+
+import org.drools.analytics.components.*;
+import org.drools.analytics.result.Redundancy;
+
+#
+# Only checks for redundant pattern specifications, 
+# does not include actual restriction checks.
+#
+rule "Find redundant Pattern shells"
+	when
+		# Check that Patterns $left and $right have redundant fields.
+		$left :Pattern()
+		$right :Pattern( 
+			id != $left.id, 
+	  		classId == $left.classId,
+	  		# TODO: In some cases the source might be redundant with different sources.
+	 		sourceType == $left.sourceType, 
+	  		sourceId == $left.sourceId,
+	  		patternNot == $left.patternNot,
+	  		patternExists == $left.patternExists,
+	  		patternForall == $left.patternForall
+		)
+		
+		# Check that there is not already a pair with these values.
+		not Redundancy( 
+			left == $left, 
+			right == $right 
+		)
+	then
+		insert( new Redundancy( Redundancy.Type.WEAK, $left, $right ) );
+end
+
+
+
+/*
+#
+# When two patterns and all theyr possibilities are redundant.
+#
+rule "Find redundant pattern"
+	when
+		$p1 :Pattern()
+		$p2 :Pattern( id != $p1.id )
+		
+		$set1 :HashSet()
+			from collect(
+				PatternPossibility( patternId == $p1.id )
+			)
+
+		$set2 :HashSet()
+			from collect(
+				PatternPossibility( patternId == $p2.id )
+			)
+		
+		# Check that sizes are the same.
+		eval( $set1.size() == $set2.size() )
+		
+		$redundancyList :ArrayList()
+			from collect(
+				Redundancy( 
+					eval( $set1.contains( left ) ),
+					eval( $set2.contains( right ) )
+				)
+			)
+		
+		eval( $set1.size() == $redundancyList.size() )
+		
+	then
+		# Type is set to strong because all the pattern possibilities are redundant.
+		insert( new Redundancy( Redundancy.Type.STRONG, $p1, $p2 ) );
+end
+*/
\ No newline at end of file

Added: labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Possibilities.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Possibilities.drl	                        (rev 0)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Possibilities.drl	2007-09-07 15:36:34 UTC (rev 14936)
@@ -0,0 +1,134 @@
+#created on: 7.9.2007
+package org.drools.analytics.redundancy.possibilities
+
+import org.drools.analytics.components.*;
+import org.drools.analytics.result.Redundancy;
+import org.drools.analytics.result.PartialRedundancy;
+import org.drools.analytics.result.Subsumption;
+
+import java.util.ArrayList;
+
+
+rule "Find part of redundant PatternPossibility combination"
+	when
+		# Restriction Redundancy.
+		$redundancy :Redundancy()
+		
+		# Check that patterns are redundant.
+		$p1 :Pattern()
+		$p2 :Pattern( id != $p1.id )
+		Redundancy( 
+			left == $p1, 
+			right == $p2 
+		)
+		
+		# Find two PatternPossibilities.
+		$pp1 :PatternPossibility( 
+			patternId == $p1.id, 
+			items contains $redundancy.left 
+		)
+		$pp2 :PatternPossibility( 
+			patternId == $p2.id, 
+			items contains $redundancy.right 
+		)
+	then
+		insert( new PartialRedundancy( $pp1, $pp2, $redundancy ) );
+end
+
+
+rule "Find part of redundant RulePossibility combination"
+	when
+		# PatternPossibility Redundancy.
+		$redundancy :Redundancy()
+		
+		# Check that rules are redundant.
+		$r1 :AnalyticsRule()
+		$r2 :AnalyticsRule( id != $r1.id )
+		Redundancy( 
+			left == $r1, 
+			right == $r2 
+		)
+		
+		# Find two RulePossibilities.
+		$rp1 :RulePossibility( 
+			ruleId == $r1.id,
+			items contains $redundancy.left 
+		)
+		$rp2 :RulePossibility( 
+			ruleId == $r2.id, 
+			items contains $redundancy.right 
+		)
+		# TODO: Not here.
+	then
+		insert( new PartialRedundancy( $rp1, $rp2, $redundancy ) );
+end
+
+
+#
+# Handles both RulePossibilities and PatternPossibilities.
+#
+rule "Find subsumptant Possibilities"
+	when
+		$p1 :Possibility()
+		$p2 :Possibility( id != $p1.id )
+		
+		not Subsumption( 
+				left == $p1, 
+				right == $p2 
+		)
+		
+		# At least one partial redundancy exists between these possibilities.
+		exists( 
+				PartialRedundancy( 
+					left == $p1, 
+					right == $p2 
+				) 
+		)
+		
+		# Collect all the partial redundancies.
+		$list :ArrayList()
+			from collect(
+				PartialRedundancy( 
+					left == $p1, 
+					right == $p2 
+				)
+			)
+			
+		# If there as much partial redundancies as there is items in $p1,
+		# then $p1 is subsumptant to $p2.
+		eval( $list.size() == $p1.getAmountOfItems() )
+	then
+		insert( new Subsumption( $p1, $p2 ) );
+end
+
+#
+# If two possibilities are subsumptant to each others, then they are redundant.
+# Since this tests only one possibility, the entire rule or pattern might not be redundant.
+#
+rule "Find redundant Possibilities"
+	when
+		$p1 :Possibility()
+		$p2 :Possibility( id != $p1.id )
+		
+		not Redundancy( 
+			left == $p1, 
+			right == $p2 
+		)
+		
+		not Redundancy( 
+			left == $p2, 
+			right == $p1 
+		)
+		
+		Subsumption( 
+				left == $p1, 
+				right == $p2 
+		)
+		
+		Subsumption( 
+				left == $p2, 
+				right == $p1 
+		)
+	then
+		insert( new Redundancy( $p1, $p2 ) );
+end
\ No newline at end of file

Added: labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Restrictions.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Restrictions.drl	                        (rev 0)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Restrictions.drl	2007-09-07 15:36:34 UTC (rev 14936)
@@ -0,0 +1,163 @@
+#created on: 7.9.2007
+package org.drools.analytics.redundancy.restrictions
+
+import org.drools.analytics.components.*;
+import org.drools.analytics.result.Redundancy;
+
+# TODO: And from and every object.
+//TODO: Also check that patterns and rules are redundant.
+/*
+rule "Find redundant ReturnValueRestriction"
+	when
+		# Check that Restrictions $left and $right have redundant fields.
+		$left :ReturnValueRestriction()
+		$right :ReturnValueRestriction( 
+			id != $left.id,
+			evaluator == $left.evaluator,
+			classMethodName matches $left.classMethodName,
+			compareStringArrays( declarations, $left.declarations )
+		)
+					
+		# Check that PatternPossibilities $pp1 and $pp2 have redundant fields
+		# and that they contain $left and $right.
+		$pp1 :PatternPossibility( restriction contains $left ) 
+		$pp2 :PatternPossibility( 
+					id != $pp1.id, 
+					restriction contains $right, 
+					exist == $pp1.exist, 
+					notExist == $pp1.notExist,
+					eval( restrictions.size() == $pp1.getRestrictions().size() ) 
+		)
+		# Check that there is not allready a pair with these values.
+		not RedundantPair( left == $left, right == $right )
+	then
+		insert( new RedundantPair( $pp1, $pp2, $left, $right ) );
+end
+*/
+rule "Find redundant VariableRestriction"
+	when
+		# Check that Restrictions $left and $right have redundant fields.
+		$left :VariableRestriction()
+		$right :VariableRestriction( 
+			id != $left.id, 
+			evaluator == $left.evaluator 
+		)
+		# Check that there is not already a pair with these values.
+		not Redundancy( 
+			left == $left, 
+			right == $right 
+		)
+		
+		# 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
+		)
+	then
+		insert( new Redundancy( Redundancy.Type.STRONG, $left, $right ) );
+end
+
+/*
+XXX: Not sure if this can be done.
+rule "Find redundant QualifiedIdentifierRestriction"
+	when
+		# Check that Restrictions $left and $right have redundant fields.
+		$left :QualifiedIdentifierRestriction()
+		$right :QualifiedIdentifierRestriction( 
+			id != $left.id, 
+			evaluator == $left.evaluator 
+		)
+		
+		# 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
+		)
+		
+		# Check that there is not already a pair with these values.
+		not Redundancy( 
+			left == $left, 
+			right == $right 
+		)
+		not Redundancy( 
+			left == $right, 
+			right == $left 
+		)
+	then
+		insert( new Redundancy( $left, $right ) );
+end
+*/
+
+
+rule "Find redundant LiteralRestriction"
+	when
+		# Check that Restrictions $left and $right have redundant fields.
+		$left :LiteralRestriction()
+		and
+		(
+				$right :LiteralRestriction( 
+					id != $left.id, 
+					evaluator == $left.evaluator,
+					valueType == Field.FieldType.BOOLEAN,
+					booleanValue == $left.booleanValue
+				)
+			or
+				$right :LiteralRestriction( id != $left.id, 
+					evaluator == $left.evaluator,
+					valueType == Field.FieldType.STRING,
+					stringValue matches $left.stringValue
+				)
+			or
+				$right :LiteralRestriction( 
+					id != $left.id, 
+					evaluator == $left.evaluator,
+					valueType == Field.FieldType.INT,
+					intValue == $left.intValue
+				)
+			or
+				$right :LiteralRestriction( 
+					id != $left.id, 
+					evaluator == $left.evaluator,
+					valueType == Field.FieldType.DOUBLE,
+					doubleValue == $left.doubleValue
+				)
+			or
+				$right :LiteralRestriction( 
+					id != $left.id, 
+					evaluator == $left.evaluator,
+					valueType == Field.FieldType.DATE,
+					eval( dateValue.equals($left.getDateValue()) )
+				)
+			or
+			(
+				$right :LiteralRestriction( 
+					id != $left.id, 
+					evaluator == $left.evaluator,
+					valueType == Field.FieldType.VARIABLE
+				)
+				and
+					$v :Variable( 
+						objectType == AnalyticsComponentType.FIELD,
+						objectId == $left.id
+					)
+				and
+					Variable( 
+						objectType == AnalyticsComponentType.FIELD,
+						objectId == $right.id,
+						objectName == $v.objectName,
+						name == $v.name
+					)
+			)
+		)
+		# Check that there is not already a pair with these values.
+		not Redundancy( 
+			left == $left, 
+			right == $right 
+		)
+	then
+		insert( new Redundancy( Redundancy.Type.STRONG, $left, $right ) );
+end

Added: labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Rules.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Rules.drl	                        (rev 0)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/redundancy/Rules.drl	2007-09-07 15:36:34 UTC (rev 14936)
@@ -0,0 +1,67 @@
+#created on: 7.9.2007
+package org.drools.analytics.redundancy.rules
+
+import org.drools.analytics.components.*;
+import org.drools.analytics.result.Redundancy;
+
+#
+# Only checks for redundant rule specifications, 
+# does not include actual pattern and restriction checks.
+#
+rule "Find redundant Rule shells"
+	when
+		# Check that AnalyticsRule $left and $right have redundant fields.
+		$left :AnalyticsRule()
+		$right :AnalyticsRule( 
+			id != $left.id, 
+			ruleSalience == $left.ruleSalience,
+			ruleAgendaGroup == $left.ruleAgendaGroup,
+			consequence == $left.consequence # TODO: Check for redundancy when MVEL is solved.
+		)
+		
+		# Check that there is not already a pair with these values.
+		not Redundancy( 
+			left == $left, 
+			right == $right 
+		)
+	then
+		insert( new Redundancy( Redundancy.Type.WEAK, $left, $right ) );
+end
+
+/*
+#
+# When two rules and all theyr possibilities are redundant.
+#
+rule "Find redundant rule"
+	when
+		$r1 :AnalyticsRule()
+		$r2 :AnalyticsRule( id != $r1.id )
+		
+		# If all the patterns in rule 1 are strongly redundant to rule 2, and vice versa.
+		# Then the redundancy is strong.
+		$set1 :HashSet()
+			from collect(
+				Pattern( ruleId == $r1.id )
+			)
+
+		$set2 :HashSet()
+			from collect(
+				Pattern( ruleId == $r2.id )
+			)
+		
+		# Find only strong pattern
+		$redundancyList :ArrayList()
+			from collect(
+				Redundancy( 
+					type == Redundancy.Type.STRONG,
+					eval( $set1.contains( left ) ),
+					eval( $set2.contains( right ) )
+				)
+			)
+		 
+		eval( $set1.size() == $redundancyList.size() )
+		
+	then
+		# Type is set to strong because all the rule possibilities are redundant.
+		insert( new Redundancy( Redundancy.Type.STRONG, $r1, $r2 ) );
+end
\ No newline at end of file

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/reports/RangeCheckReports.drl
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/reports/RangeCheckReports.drl	2007-09-07 13:30:22 UTC (rev 14935)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/main/resources/org/drools/analytics/reports/RangeCheckReports.drl	2007-09-07 15:36:34 UTC (rev 14936)
@@ -17,7 +17,7 @@
 		$f :Field()
 		$list :ArrayList( size > 1)
 			from collect(
-				Gap( cause == $f )
+				Gap( field == $f )
 			)
 	then
 		result.add( new AnalysisWarning( $f.getRuleName(), $f + " has one or more gaps.", $list ) );

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckDatesTest.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckDatesTest.java	2007-09-07 13:30:22 UTC (rev 14935)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckDatesTest.java	2007-09-07 15:36:34 UTC (rev 14936)
@@ -20,7 +20,7 @@
 
 	public void testSmallerAndGreaterThan() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("RangeCheckDates.drl"));
+				.getResourceAsStream("rangeChecks/RangeCheckDates.drl"));
 
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Range check for dates, smaller and greater than"));
@@ -82,7 +82,7 @@
 
 	public void testEqualAndGreaterThan() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("RangeCheckDates.drl"));
+				.getResourceAsStream("rangeChecks/RangeCheckDates.drl"));
 
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Range check for dates, equal and greater than"));
@@ -118,7 +118,7 @@
 
 	public void testEqualAndSmallerThan() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("RangeCheckDates.drl"));
+				.getResourceAsStream("rangeChecks/RangeCheckDates.drl"));
 
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Range check for dates, equal and smaller than"));

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckDoublesTest.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckDoublesTest.java	2007-09-07 13:30:22 UTC (rev 14935)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckDoublesTest.java	2007-09-07 15:36:34 UTC (rev 14936)
@@ -21,7 +21,7 @@
 
 	public void testSmallerAndGreaterThan() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("RangeCheckDoubles.drl"));
+				.getResourceAsStream("rangeChecks/RangeCheckDoubles.drl"));
 
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Range check for doubles, smaller and greater than"));
@@ -83,7 +83,7 @@
 
 	public void testEqualAndGreaterThan() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("RangeCheckDoubles.drl"));
+				.getResourceAsStream("rangeChecks/RangeCheckDoubles.drl"));
 
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Range check for doubles, equal and greater than"));
@@ -119,7 +119,7 @@
 
 	public void testEqualAndSmallerThan() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("RangeCheckDoubles.drl"));
+				.getResourceAsStream("rangeChecks/RangeCheckDoubles.drl"));
 
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Range check for doubles, equal and smaller than"));

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckIntegersTest.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckIntegersTest.java	2007-09-07 13:30:22 UTC (rev 14935)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RangeCheckIntegersTest.java	2007-09-07 15:36:34 UTC (rev 14936)
@@ -21,7 +21,7 @@
 
 	public void testSmallerAndGreaterThan() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("RangeCheckIntegers.drl"));
+				.getResourceAsStream("rangeChecks/RangeCheckIntegers.drl"));
 
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Range check for integers, smaller and greater than"));
@@ -79,7 +79,7 @@
 
 	public void testEqualAndGreaterThan() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("RangeCheckIntegers.drl"));
+				.getResourceAsStream("rangeChecks/RangeCheckIntegers.drl"));
 
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Range check for integers, equal and greater than"));
@@ -116,7 +116,7 @@
 
 	public void testEqualAndSmallerThan() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("RangeCheckIntegers.drl"));
+				.getResourceAsStream("rangeChecks/RangeCheckIntegers.drl"));
 
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Range check for integers, equal and smaller than"));

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RedundancyTest.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RedundancyTest.java	2007-09-07 13:30:22 UTC (rev 14935)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/RedundancyTest.java	2007-09-07 15:36:34 UTC (rev 14936)
@@ -30,7 +30,7 @@
 
 	public void testPartOfRulePossibilityRedundancy() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Redundancy.drl"));
+				.getResourceAsStream("redundancy/Possibilities.drl"));
 
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Find part of redundant RulePossibility combination"));
@@ -107,7 +107,7 @@
 
 	public void testPossibilityRedundancy() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Redundancy.drl"));
+				.getResourceAsStream("redundancy/Possibilities.drl"));
 
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Find redundant Possibilities"));
@@ -149,7 +149,7 @@
 
 	public void testPartOfPatternPossibilityRedundancy() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Redundancy.drl"));
+				.getResourceAsStream("redundancy/Possibilities.drl"));
 
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Find part of redundant PatternPossibility combination"));
@@ -260,7 +260,7 @@
 
 	public void testPatternRedundancy() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Redundancy.drl"));
+				.getResourceAsStream("redundancy/Patterns.drl"));
 
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Find redundant Pattern shells"));
@@ -300,7 +300,7 @@
 
 	public void testAnalyticsLiteralRestrictionRedundancy() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Redundancy.drl"));
+				.getResourceAsStream("redundancy/Restrictions.drl"));
 
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Find redundant LiteralRestriction"));
@@ -336,7 +336,7 @@
 
 	public void testAnalyticsVariableRestrictionRedundancy() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Redundancy.drl"));
+				.getResourceAsStream("redundancy/Restrictions.drl"));
 
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Find redundant VariableRestriction"));

Modified: labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/SubsumptantPossibilitiesRuleTest.java
===================================================================
--- labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/SubsumptantPossibilitiesRuleTest.java	2007-09-07 13:30:22 UTC (rev 14935)
+++ labs/jbossrules/trunk/experimental/drools-analytics/src/test/java/org/drools/analytics/SubsumptantPossibilitiesRuleTest.java	2007-09-07 15:36:34 UTC (rev 14936)
@@ -24,7 +24,7 @@
 
 	public void testSubsumptantPossibilitiesPattern() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Redundancy.drl"));
+				.getResourceAsStream("redundancy/Possibilities.drl"));
 
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(RULE_NAME));
 
@@ -47,7 +47,7 @@
 
 	public void testSubsumptantPossibilitiesRule() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Redundancy.drl"));
+				.getResourceAsStream("redundancy/Possibilities.drl"));
 
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(RULE_NAME));
 
@@ -70,7 +70,7 @@
 
 	public void testSubsumptantPossibilitiesBoth() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Redundancy.drl"));
+				.getResourceAsStream("redundancy/Possibilities.drl"));
 
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(RULE_NAME));
 




More information about the jboss-svn-commits mailing list