[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