[jboss-svn-commits] JBL Code SVN: r20905 - in labs/jbossrules/trunk/drools-verifier/src: main/java/org/drools/verifier/components and 19 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jul 4 10:40:55 EDT 2008


Author: Rikkola
Date: 2008-07-04 10:40:55 -0400 (Fri, 04 Jul 2008)
New Revision: 20905

Added:
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/UnknownDescriptionException.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Field.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ObjectType.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/AlwaysTrue.java
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysFalse/Rules.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysTrue/Patterns.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysTrue/Rules.drl
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/PatternSolverDRLTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysFalse/AlwaysFalseTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysTrue/
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysTrue/AlwaysTruePatternTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysTrue/AlwaysTrueRuleTest.java
Removed:
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Field.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierClass.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysFalse/AlwaysFalsePatternsTest.java
Modified:
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/PackageDescrFlattener.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/RuleLoader.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Solver.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Solvers.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierComponent.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/dao/VerifierData.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/dao/VerifierDataMaps.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/CauseType.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/MessageType.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportModeller.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportVisitor.java
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysFalse/Patterns.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/equivalence/Rules.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incoherence/Patterns.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incoherence/Restrictions.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incompatibility/Patterns.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incompatibility/Restrictions.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Patterns.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Restrictions.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Rules.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/overlaps/Restrictions.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Clean.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Dates.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Doubles.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Integers.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/NumberPatterns.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Patterns.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Possibilities.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Restrictions.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Rules.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/missingRange.htm
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Possibilities.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Restrictions.drl
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/PatternSolverTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/SolversTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTestStandalone.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/opposites/OppositeRestrictionsTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/incoherence/PatternsTest.drl
   labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/incoherence/RestrictionsTest.drl
Log:
1. JBRULES-1647
2. Rules that find patterns that are always or never satisfied.
3. HTML report had some problems with layout, fixed them.

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/PackageDescrFlattener.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/PackageDescrFlattener.java	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/PackageDescrFlattener.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -33,7 +33,7 @@
 import org.drools.lang.descr.VariableRestrictionDescr;
 import org.drools.verifier.components.VerifierAccessorDescr;
 import org.drools.verifier.components.VerifierAccumulateDescr;
-import org.drools.verifier.components.VerifierClass;
+import org.drools.verifier.components.ObjectType;
 import org.drools.verifier.components.VerifierCollectDescr;
 import org.drools.verifier.components.VerifierComponent;
 import org.drools.verifier.components.VerifierComponentType;
@@ -74,7 +74,7 @@
 	private VerifierRule currentRule = null;
 	private Pattern currentPattern = null;
 	private Constraint currentConstraint = null;
-	private VerifierClass currentClass = null;
+	private ObjectType currentClass = null;
 	private Field currentField = null;
 
 	/**
@@ -84,9 +84,10 @@
 	 *            PackageDescr that will be flattened.
 	 * @param data
 	 *            VerifierData where the flattened objects are added.
+	 * @throws UnknownDescriptionException
 	 */
 	public void addPackageDescrToData(PackageDescr packageDescr,
-			VerifierData data) {
+			VerifierData data) throws UnknownDescriptionException {
 
 		this.data = data;
 
@@ -95,7 +96,8 @@
 		formPossibilities();
 	}
 
-	private void flatten(Collection<?> descrs, VerifierComponent parent) {
+	private void flatten(Collection<?> descrs, VerifierComponent parent)
+			throws UnknownDescriptionException {
 
 		int orderNumber = 0;
 
@@ -144,20 +146,20 @@
 	}
 
 	private VerifierComponent flatten(PatternSourceDescr descr,
-			VerifierComponent parent) {
+			VerifierComponent parent) throws UnknownDescriptionException {
 		if (descr instanceof AccumulateDescr) {
 			return flatten((AccumulateDescr) descr, parent);
 		} else if (descr instanceof CollectDescr) {
 			return flatten((CollectDescr) descr, parent);
 		} else if (descr instanceof FromDescr) {
 			return flatten((FromDescr) descr, parent);
+		}else {
+			throw new UnknownDescriptionException(descr);
 		}
-
-		return null;
 	}
 
 	private VerifierComponent flatten(DeclarativeInvokerDescr descr,
-			VerifierComponent parent) {
+			VerifierComponent parent) throws UnknownDescriptionException {
 		if (descr instanceof AccessorDescr) {
 			return flatten((AccessorDescr) descr, parent);
 		} else if (descr instanceof FieldAccessDescr) {
@@ -166,13 +168,15 @@
 			return flatten((FunctionCallDescr) descr, parent);
 		} else if (descr instanceof MethodAccessDescr) {
 			return flatten((MethodAccessDescr) descr, parent);
+		}else {
+			throw new UnknownDescriptionException(descr);
 		}
-
-		return null;
 	}
 
 	private void flatten(ConditionalElementDescr descr,
-			VerifierComponent parent, int orderNumber) {
+			VerifierComponent parent, int orderNumber)
+			throws UnknownDescriptionException {
+
 		if (descr instanceof AndDescr) {
 			flatten((AndDescr) descr, parent, orderNumber);
 		} else if (descr instanceof CollectDescr) {
@@ -192,19 +196,22 @@
 		}
 	}
 
-	private void flatten(ForallDescr descr, VerifierComponent parent) {
+	private void flatten(ForallDescr descr, VerifierComponent parent)
+			throws UnknownDescriptionException {
 		solvers.startForall();
 		flatten(descr.getDescrs(), parent);
 		solvers.endForall();
 	}
 
-	private void flatten(ExistsDescr descr, VerifierComponent parent) {
+	private void flatten(ExistsDescr descr, VerifierComponent parent)
+			throws UnknownDescriptionException {
 		solvers.startExists();
 		flatten(descr.getDescrs(), parent);
 		solvers.endExists();
 	}
 
-	private void flatten(NotDescr descr, VerifierComponent parent) {
+	private void flatten(NotDescr descr, VerifierComponent parent)
+			throws UnknownDescriptionException {
 		solvers.startNot();
 		flatten(descr.getDescrs(), parent);
 		solvers.endNot();
@@ -276,9 +283,9 @@
 	 * 
 	 * @param descr
 	 * @return
+	 * @throws UnknownDescriptionException 
 	 */
-	private VerifierFromDescr flatten(FromDescr descr,
-			VerifierComponent parent) {
+	private VerifierFromDescr flatten(FromDescr descr, VerifierComponent parent) throws UnknownDescriptionException {
 		VerifierFromDescr from = new VerifierFromDescr();
 
 		VerifierComponent ds = flatten(descr.getDataSource(), from);
@@ -290,7 +297,7 @@
 	}
 
 	private VerifierAccumulateDescr flatten(AccumulateDescr descr,
-			VerifierComponent parent) {
+			VerifierComponent parent) throws UnknownDescriptionException {
 		VerifierAccumulateDescr accumulate = new VerifierAccumulateDescr();
 
 		accumulate.setInputPatternId(flatten(descr.getInputPattern(),
@@ -313,7 +320,7 @@
 	}
 
 	private VerifierCollectDescr flatten(CollectDescr descr,
-			VerifierComponent parent) {
+			VerifierComponent parent) throws UnknownDescriptionException {
 		VerifierCollectDescr collect = new VerifierCollectDescr();
 		collect.setClassMethodName(descr.getClassMethodName());
 		collect
@@ -364,7 +371,7 @@
 		return accessor;
 	}
 
-	private void flatten(PackageDescr descr) {
+	private void flatten(PackageDescr descr) throws UnknownDescriptionException {
 		RulePackage rulePackage = data.getRulePackageByName(descr.getName());
 
 		if (rulePackage == null) {
@@ -379,7 +386,8 @@
 		flatten(descr.getRules(), rulePackage);
 	}
 
-	private void flatten(RuleDescr descr, VerifierComponent parent) {
+	private void flatten(RuleDescr descr, VerifierComponent parent)
+			throws UnknownDescriptionException {
 
 		VerifierRule rule = new VerifierRule();
 		currentRule = rule;
@@ -447,48 +455,48 @@
 	}
 
 	private void flatten(OrDescr descr, VerifierComponent parent,
-			int orderNumber) {
+			int orderNumber) throws UnknownDescriptionException {
 		OperatorDescr operatorDescr = new OperatorDescr(OperatorDescr.Type.OR);
 		operatorDescr.setOrderNumber(orderNumber);
 		operatorDescr.setParent(parent);
 
 		data.add(operatorDescr);
 
-		solvers.startOperator(operatorDescr);
+		solvers.startOperator(OperatorDescr.Type.OR);
 		flatten(descr.getDescrs(), operatorDescr);
 		solvers.endOperator();
 	}
 
 	private void flatten(AndDescr descr, VerifierComponent parent,
-			int orderNumber) {
+			int orderNumber) throws UnknownDescriptionException {
 		OperatorDescr operatorDescr = new OperatorDescr(OperatorDescr.Type.AND);
 		operatorDescr.setOrderNumber(orderNumber);
 		operatorDescr.setParent(parent);
 
 		data.add(operatorDescr);
 
-		solvers.startOperator(operatorDescr);
+		solvers.startOperator(OperatorDescr.Type.AND);
 		flatten(descr.getDescrs(), operatorDescr);
 		solvers.endOperator();
 	}
 
 	private int flatten(PatternDescr descr, VerifierComponent parent,
-			int orderNumber) {
+			int orderNumber) throws UnknownDescriptionException {
 
-		VerifierClass clazz = data.getClassByPackageAndName(descr
+		ObjectType objectType = data.getClassByPackageAndName(descr
 				.getObjectType());
-		if (clazz == null) {
-			clazz = new VerifierClass();
-			clazz.setName(descr.getObjectType());
-			data.add(clazz);
+		if (objectType == null) {
+			objectType = new ObjectType();
+			objectType.setName(descr.getObjectType());
+			data.add(objectType);
 		}
-		currentClass = clazz;
+		currentClass = objectType;
 
 		Pattern pattern = new Pattern();
 		pattern.setRuleId(currentRule.getId());
 		pattern.setRuleName(currentRule.getRuleName());
-		pattern.setClassId(clazz.getId());
-		pattern.setName(clazz.getName());
+		pattern.setClassId(objectType.getId());
+		pattern.setName(objectType.getName());
 		pattern.setPatternNot(solvers.getRuleSolver().isChildNot());
 		pattern.setPatternExists(solvers.getRuleSolver().isExists());
 		pattern.setPatternForall(solvers.getRuleSolver().isForall());
@@ -505,7 +513,7 @@
 			variable.setName(descr.getIdentifier());
 
 			variable.setObjectType(VerifierComponentType.CLASS);
-			variable.setObjectId(clazz.getId());
+			variable.setObjectId(objectType.getId());
 			variable.setObjectName(descr.getObjectType());
 
 			data.add(variable);
@@ -528,7 +536,7 @@
 	}
 
 	private void flatten(FieldConstraintDescr descr, VerifierComponent parent,
-			int orderNumber) {
+			int orderNumber) throws UnknownDescriptionException {
 
 		Field field = data.getFieldByClassAndFieldName(currentClass.getName(),
 				descr.getFieldName());
@@ -558,9 +566,24 @@
 	}
 
 	private void flatten(RestrictionConnectiveDescr descr,
-			VerifierComponent parent, int orderNumber) {
-		// TODO: check.
-		flatten(descr.getRestrictions(), parent);
+			VerifierComponent parent, int orderNumber)
+			throws UnknownDescriptionException {
+
+		if (descr.getConnective() == RestrictionConnectiveDescr.AND) {
+
+			solvers.startOperator(OperatorDescr.Type.AND);
+			flatten(descr.getRestrictions(), parent);
+			solvers.endOperator();
+
+		} else if (descr.getConnective() == RestrictionConnectiveDescr.OR) {
+
+			solvers.startOperator(OperatorDescr.Type.OR);
+			flatten(descr.getRestrictions(), parent);
+			solvers.endOperator();
+
+		} else {
+			throw new UnknownDescriptionException(descr);
+		}
 	}
 
 	/**

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/RuleLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/RuleLoader.java	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/RuleLoader.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -16,29 +16,50 @@
 	public static Collection<Package> loadPackages() {
 
 		String[] fileNames = new String[] {
+				// Missing consequence
+				"Consequence.drl",
+				// Always false
+				"alwaysFalse/Patterns.drl",
 				// Equivalence
 				"equivalence/Rules.drl",
 				// Incoherence
 				"incoherence/Patterns.drl",
 				"incoherence/Restrictions.drl",
+				// Incompatibility
+				"incompatibility/Patterns.drl",
+				"incompatibility/Restrictions.drl",
 				// Missing equality
 				"missingEquality/MissingEquality.drl",
+				// Opposites
+				"opposites/Patterns.drl",
+				"opposites/Restrictions.drl",
+				"opposites/Rules.drl",
 				// Optimization
+				"optimisation/PatternOrder.drl",
 				"optimisation/RestrictionOrder.drl",
-				"optimisation/PatternOrder.drl",
+				// Overlaps
+				"overlaps/Restrictions.drl",
 				// Range checks
-				"rangeChecks/Dates.drl", "rangeChecks/Doubles.drl",
+				"rangeChecks/Clean.drl",
+				"rangeChecks/Dates.drl", 
+				"rangeChecks/Doubles.drl",
 				"rangeChecks/Integers.drl",
 				"rangeChecks/NumberPatterns.drl",
 				"rangeChecks/Variables.drl",
-				"rangeChecks/Clean.drl",
 				// Redundancy
-				"redundancy/Restrictions.drl", "redundancy/Notes.drl",
-				"redundancy/Consequence.drl", "redundancy/Patterns.drl",
-				"redundancy/Possibilities.drl", "redundancy/Rules.drl",
-				"redundancy/Warnings.drl", "reports/RangeCheckReports.drl",
-				// Missing consequence
-				"Consequence.drl", };
+				"redundancy/Consequence.drl", 
+				"redundancy/Notes.drl",
+				"redundancy/Patterns.drl",
+				"redundancy/Possibilities.drl",
+				"redundancy/Restrictions.drl",  
+				"redundancy/Rules.drl",
+				"redundancy/Warnings.drl", 
+				// Reporting
+				"reports/RangeCheckReports.drl", 
+				// Subsumption
+				"subsumption/Possibilities.drl",
+				"subsumption/Restrictions.drl"
+			};
 
 		Collection<Package> packages = new ArrayList<Package>();
 

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Solver.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Solver.java	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Solver.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -8,8 +8,6 @@
 import org.drools.verifier.components.VerifierComponent;
 import org.drools.verifier.components.OperatorDescr;
 
-
-
 /**
  * Takes a list of Constraints and makes possibilities from them.
  * 
@@ -29,12 +27,28 @@
 		this.type = type;
 	}
 
+	public void addOperator(OperatorDescr.Type type) {
+		if (subSolver != null) {
+			subSolver.addOperator(type);
+		} else {
+			subSolver = new Solver(type);
+		}
+	}
+
+	/**
+	 * Add new descr.
+	 * 
+	 * @param descr
+	 */
 	public void add(VerifierComponent descr) {
+
+		if (descr instanceof OperatorDescr) {
+			throw new UnsupportedOperationException(
+					"Operator descrs are not supported.");
+		}
+
 		if (subSolver != null) {
 			subSolver.add(descr);
-		} else if (descr instanceof OperatorDescr) {
-			OperatorDescr operatorDescr = (OperatorDescr) descr;
-			subSolver = new Solver(operatorDescr.getType());
 		} else {
 			if (type == OperatorDescr.Type.AND) {
 				if (possibilityLists.isEmpty()) {

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Solvers.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Solvers.java	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Solvers.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -16,7 +16,7 @@
  * 
  * @author Toni Rikkola
  */
- class Solvers {
+class Solvers {
 
 	private RuleSolver ruleSolver = null;
 	private PatternSolver patternSolver = null;
@@ -92,11 +92,11 @@
 		}
 	}
 
-	public void startOperator(OperatorDescr operatorDescr) {
+	public void startOperator(OperatorDescr.Type type) {
 		if (patternSolver != null) {
-			patternSolver.add(operatorDescr);
+			patternSolver.addOperator(type);
 		} else if (ruleSolver != null) {
-			ruleSolver.add(operatorDescr);
+			ruleSolver.addOperator(type);
 		}
 	}
 

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/UnknownDescriptionException.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/UnknownDescriptionException.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/UnknownDescriptionException.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,21 @@
+package org.drools.verifier;
+
+import org.drools.lang.descr.BaseDescr;
+
+/**
+ * This exception is thrown when verifier tries to handle a descr that it is not
+ * familiar with.
+ * 
+ * @author trikkola
+ */
+public class UnknownDescriptionException extends Exception {
+	private static final long serialVersionUID = 6636873223159735829L;
+
+	final BaseDescr descr;
+
+	public UnknownDescriptionException(BaseDescr descr) {
+		super("Descr ( " + descr + " ) is unknown to drools verifier.");
+		this.descr = descr;
+	}
+
+}

Deleted: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Field.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Field.java	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Field.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -1,104 +0,0 @@
-package org.drools.verifier.components;
-
-import org.drools.verifier.report.components.Cause;
-import org.drools.verifier.report.components.CauseType;
-
-/**
- *
- * @author Toni Rikkola
- */
-public class Field extends VerifierComponent implements Cause {
-
-	public static class FieldType {
-		public static final FieldType BOOLEAN = new FieldType("boolean");
-		public static final FieldType STRING = new FieldType( "String");
-		public static final FieldType INT = new FieldType( "int");
-		public static final FieldType DOUBLE = new FieldType( "double");
-		public static final FieldType DATE = new FieldType( "Date");
-		public static final FieldType VARIABLE = new FieldType( "Variable");
-		public static final FieldType OBJECT = new FieldType( "Object");
-
-		private final String string;
-
-		private FieldType(String string) {
-			this.string = string;
-		}
-
-		@Override
-		public   String toString() {
-			return string;
-		}
-	}
-
-	private static int index = 0;
-
-	private int classId;
-	private String className;
-	private String name;
-	private FieldType fieldType;
-
-	private int lineNumber;
-
-	public Field() {
-		super(index++);
-	}
-
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.FIELD;
-	}
-
-	public CauseType getCauseType() {
-		return CauseType.FIELD;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public FieldType getFieldType() {
-		return fieldType;
-	}
-
-	public void setFieldType(FieldType fieldType) {
-		// Only set fieldType to variable if there is no other fieldType found.
-		if (fieldType == FieldType.VARIABLE && this.fieldType == null) {
-			this.fieldType = fieldType;
-		} else {
-			this.fieldType = fieldType;
-		}
-	}
-
-	public int getClassId() {
-		return classId;
-	}
-
-	public void setClassId(int classId) {
-		this.classId = classId;
-	}
-
-	public int getLineNumber() {
-		return lineNumber;
-	}
-
-	public void setLineNumber(int lineNumber) {
-		this.lineNumber = lineNumber;
-	}
-
-	public String getClassName() {
-		return className;
-	}
-
-	public void setClassName(String className) {
-		this.className = className;
-	}
-
-	@Override
-	public String toString() {
-		return "Field '" + name + "' from class '" + className + "'";
-	}
-}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Field.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Field.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Field.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,104 @@
+package org.drools.verifier.components;
+
+import org.drools.verifier.report.components.Cause;
+import org.drools.verifier.report.components.CauseType;
+
+/**
+ *
+ * @author Toni Rikkola
+ */
+public class Field extends VerifierComponent implements Cause {
+
+	public static class FieldType {
+		public static final FieldType BOOLEAN = new FieldType("boolean");
+		public static final FieldType STRING = new FieldType( "String");
+		public static final FieldType INT = new FieldType( "int");
+		public static final FieldType DOUBLE = new FieldType( "double");
+		public static final FieldType DATE = new FieldType( "Date");
+		public static final FieldType VARIABLE = new FieldType( "Variable");
+		public static final FieldType OBJECT = new FieldType( "Object");
+
+		private final String string;
+
+		private FieldType(String string) {
+			this.string = string;
+		}
+
+		@Override
+		public   String toString() {
+			return string;
+		}
+	}
+
+	private static int index = 0;
+
+	private int classId;
+	private String className;
+	private String name;
+	private FieldType fieldType;
+
+	private int lineNumber;
+
+	public Field() {
+		super(index++);
+	}
+
+	@Override
+	public VerifierComponentType getComponentType() {
+		return VerifierComponentType.FIELD;
+	}
+
+	public CauseType getCauseType() {
+		return CauseType.FIELD;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public FieldType getFieldType() {
+		return fieldType;
+	}
+
+	public void setFieldType(FieldType fieldType) {
+		// Only set fieldType to variable if there is no other fieldType found.
+		if (fieldType == FieldType.VARIABLE && this.fieldType == null) {
+			this.fieldType = fieldType;
+		} else {
+			this.fieldType = fieldType;
+		}
+	}
+
+	public int getClassId() {
+		return classId;
+	}
+
+	public void setClassId(int classId) {
+		this.classId = classId;
+	}
+
+	public int getLineNumber() {
+		return lineNumber;
+	}
+
+	public void setLineNumber(int lineNumber) {
+		this.lineNumber = lineNumber;
+	}
+
+	public String getClassName() {
+		return className;
+	}
+
+	public void setClassName(String className) {
+		this.className = className;
+	}
+
+	@Override
+	public String toString() {
+		return "Field '" + name + "' from class '" + className + "'";
+	}
+}
\ No newline at end of file

Copied: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ObjectType.java (from rev 20797, labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierClass.java)
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ObjectType.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ObjectType.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,50 @@
+package org.drools.verifier.components;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author Toni Rikkola
+ * 
+ */
+public class ObjectType implements Serializable {
+	private static final long serialVersionUID = -783733402566313623L;
+
+	private static int index = 0;
+
+	private int id = index++;
+	private int offset =0;
+	
+	private String name;
+
+	private Set<Field> fields = new HashSet<Field>();
+
+	public String getName() {
+		return name;
+	}
+	
+	public int getOffset(){ 
+	    return offset + id % 2;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public Set<Field> getFields() {
+		return fields;
+	}
+
+	public void setFields(Set<Field> fields) {
+		this.fields = fields;
+	}
+}

Deleted: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierClass.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierClass.java	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierClass.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -1,50 +0,0 @@
-package org.drools.verifier.components;
-
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * @author Toni Rikkola
- * 
- */
-public class VerifierClass implements Serializable {
-	private static final long serialVersionUID = -783733402566313623L;
-
-	private static int index = 0;
-
-	private int id = index++;
-	private int offset =0;
-	
-	private String name;
-
-	private Set<Field> fields = new HashSet<Field>();
-
-	public String getName() {
-		return name;
-	}
-	
-	public int getOffset(){ 
-	    return offset + id % 2;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	public Set<Field> getFields() {
-		return fields;
-	}
-
-	public void setFields(Set<Field> fields) {
-		this.fields = fields;
-	}
-}

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierComponent.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierComponent.java	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierComponent.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -9,12 +9,12 @@
 
 	protected String ruleName;
 	protected int ruleId;
-	protected int id;
+	protected final int id;
 
 	protected VerifierComponent parent;
-	
+
 	// Order number of this instance under parent.
-	protected int orderNumber = 0; 
+	protected int orderNumber = 0;
 
 	public abstract VerifierComponentType getComponentType();
 

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/dao/VerifierData.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/dao/VerifierData.java	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/dao/VerifierData.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -2,7 +2,7 @@
 
 import java.util.Collection;
 
-import org.drools.verifier.components.VerifierClass;
+import org.drools.verifier.components.ObjectType;
 import org.drools.verifier.components.VerifierEvalDescr;
 import org.drools.verifier.components.VerifierPredicateDescr;
 import org.drools.verifier.components.VerifierRule;
@@ -26,7 +26,7 @@
 
 	public void add(Consequence consequence);
 
-	public void add(VerifierClass clazz);
+	public void add(ObjectType objectType);
 
 	public void add(Field field);
 
@@ -48,9 +48,9 @@
 
 	public void add(RulePackage rulePackage);
 
-	public VerifierClass getClassByPackageAndName(String name);
+	public ObjectType getClassByPackageAndName(String name);
 
-	public VerifierClass getClassById(int id);
+	public ObjectType getClassById(int id);
 
 	public Field getFieldByClassAndFieldName(String className, String fieldName);
 
@@ -63,9 +63,9 @@
 
 	public Collection<VerifierRule> getAllRules();
 
-	public Collection<VerifierClass> getClassesByRuleName(String ruleName);
+	public Collection<ObjectType> getClassesByRuleName(String ruleName);
 
-	public Collection<VerifierClass> getAllClasses();
+	public Collection<ObjectType> getAllClasses();
 
 	public Collection<RulePackage> getAllRulePackages();
 

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/dao/VerifierDataMaps.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/dao/VerifierDataMaps.java	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/dao/VerifierDataMaps.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -8,7 +8,7 @@
 import java.util.Set;
 import java.util.TreeMap;
 
-import org.drools.verifier.components.VerifierClass;
+import org.drools.verifier.components.ObjectType;
 import org.drools.verifier.components.VerifierEvalDescr;
 import org.drools.verifier.components.VerifierPredicateDescr;
 import org.drools.verifier.components.VerifierRule;
@@ -33,8 +33,8 @@
 	private Map<Integer, RulePackage> packagesById = new TreeMap<Integer, RulePackage>();
 	private Map<String, RulePackage> packagesByName = new TreeMap<String, RulePackage>();
 
-	private Map<Integer, VerifierClass> classesById = new TreeMap<Integer, VerifierClass>();
-	private Map<String, VerifierClass> classesByName = new TreeMap<String, VerifierClass>();
+	private Map<Integer, ObjectType> classesById = new TreeMap<Integer, ObjectType>();
+	private Map<String, ObjectType> classesByName = new TreeMap<String, ObjectType>();
 	private Map<String, Field> fieldsByClassAndFieldName = new TreeMap<String, Field>();
 	private Map<Integer, Field> fieldsById = new TreeMap<Integer, Field>();
 	private DataTree<Integer, Field> fieldsByClassId = new DataTree<Integer, Field>();
@@ -57,15 +57,15 @@
 	private Map<Integer, PatternPossibility> patternPossibilitiesById = new TreeMap<Integer, PatternPossibility>();
 	private Map<Integer, RulePossibility> rulePossibilitiesById = new TreeMap<Integer, RulePossibility>();
 
-	public void add(VerifierClass clazz) {
-		classesById.put(Integer.valueOf(clazz.getId()), clazz);
-		classesByName.put(clazz.getName(), clazz);
+	public void add(ObjectType objectType) {
+		classesById.put(Integer.valueOf(objectType.getId()), objectType);
+		classesByName.put(objectType.getName(), objectType);
 	}
 
 	public void add(Field field) {
-		VerifierClass clazz = classesById.get(Integer.valueOf(field
+		ObjectType objectType = classesById.get(Integer.valueOf(field
 				.getClassId()));
-		fieldsByClassAndFieldName.put(clazz.getName() + "." + field.getName(),
+		fieldsByClassAndFieldName.put(objectType.getName() + "." + field.getName(),
 				field);
 
 		fieldsById.put(field.getId(), field);
@@ -104,7 +104,7 @@
 				link);
 	}
 
-	public VerifierClass getClassByPackageAndName(String name) {
+	public ObjectType getClassByPackageAndName(String name) {
 		return classesByName.get(name);
 	}
 
@@ -134,18 +134,18 @@
 		rulePossibilitiesById.put(possibility.getId(), possibility);
 	}
 
-	public Collection<VerifierClass> getClassesByRuleName(String ruleName) {
-		Set<VerifierClass> set = new HashSet<VerifierClass>();
+	public Collection<ObjectType> getClassesByRuleName(String ruleName) {
+		Set<ObjectType> set = new HashSet<ObjectType>();
 
 		for (Pattern pattern : patternsByRuleName.getBranch(ruleName)) {
-			VerifierClass clazz = getClassById(pattern.getClassId());
-			set.add(clazz);
+			ObjectType objectType = getClassById(pattern.getClassId());
+			set.add(objectType);
 		}
 
 		return set;
 	}
 
-	public VerifierClass getClassById(int id) {
+	public ObjectType getClassById(int id) {
 		return classesById.get(id);
 	}
 
@@ -173,7 +173,7 @@
 		return objects;
 	}
 
-	public Collection<VerifierClass> getAllClasses() {
+	public Collection<ObjectType> getAllClasses() {
 		return classesById.values();
 	}
 

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/AlwaysTrue.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/AlwaysTrue.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/AlwaysTrue.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,37 @@
+package org.drools.verifier.report.components;
+
+/**
+ * Pattern, rule or similar that is always satisfied.
+ * 
+ * @author trikkola
+ * 
+ */
+public class AlwaysTrue implements Cause {
+
+	private static int index = 0;
+
+	private final int id = index++;
+
+	private final Cause cause;
+
+	/**
+	 * 
+	 * @param cause
+	 *            Component that is always satisfied.
+	 */
+	public AlwaysTrue(Cause cause) {
+		this.cause = cause;
+	}
+
+	public CauseType getCauseType() {
+		return CauseType.ALWAYS_TRUE;
+	}
+
+	public int getId() {
+		return id;
+	}
+
+	public Cause getCause() {
+		return cause;
+	}
+}

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/CauseType.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/CauseType.java	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/CauseType.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -18,6 +18,7 @@
 	public static final CauseType SUBSUMPTION = new CauseType(13);
 	public static final CauseType OPPOSITE = new CauseType(14);
 	public static final CauseType INCOMPATIBLE = new CauseType(15);
+	public static final CauseType ALWAYS_TRUE = new CauseType(16);
 
 	public final int index;
 

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/MessageType.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/MessageType.java	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/MessageType.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -1,6 +1,5 @@
 package org.drools.verifier.report.components;
 
-
 public class MessageType {
 	public static final MessageType NOT_SPECIFIED = new MessageType(0);
 	public static final MessageType RANGE_CHECK = new MessageType(1);
@@ -11,6 +10,8 @@
 	public static final MessageType OPTIMISATION = new MessageType(6);
 	public static final MessageType INCOHERENCE = new MessageType(7);
 	public static final MessageType OVERLAP = new MessageType(8);
+	public static final MessageType ALWAYS_FALSE = new MessageType(9);
+	public static final MessageType ALWAYS_TRUE = new MessageType(10);
 
 	public final int index;
 

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportModeller.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportModeller.java	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportModeller.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -3,12 +3,11 @@
 import java.io.File;
 import java.io.IOException;
 
-import org.drools.verifier.components.VerifierClass;
-import org.drools.verifier.components.VerifierRule;
 import org.drools.verifier.components.Field;
+import org.drools.verifier.components.ObjectType;
+import org.drools.verifier.components.VerifierRule;
 import org.drools.verifier.dao.VerifierData;
 import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.report.components.VerifierMessage;
 import org.drools.verifier.report.components.Severity;
 
 public class ComponentsReportModeller extends ReportModeller {
@@ -51,7 +50,7 @@
 				+ File.separator + UrlFactory.OBJECT_TYPE_FOLDER;
 		File objectTypesFolder = new File(objectTypeFolder);
 		objectTypesFolder.mkdir();
-		for (VerifierClass objectType : data.getAllClasses()) {
+		for (ObjectType objectType : data.getAllClasses()) {
 			writeToFile(objectTypeFolder + File.separator + objectType.getId()
 					+ ".htm", formPage(UrlFactory.PREVIOUS_FOLDER,
 					ComponentsReportVisitor.visitObjectType(

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportVisitor.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportVisitor.java	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportVisitor.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -4,7 +4,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.drools.verifier.components.VerifierClass;
+import org.drools.verifier.components.ObjectType;
 import org.drools.verifier.components.VerifierRule;
 import org.drools.verifier.components.Field;
 import org.drools.verifier.components.Restriction;
@@ -36,7 +36,7 @@
 	}
 
 	public static String visitObjectTypeCollection(String sourceFolder,
-			Collection<VerifierClass> objectTypes) {
+			Collection<ObjectType> objectTypes) {
 		Map<String, Object> map = new HashMap<String, Object>();
 		map.put("sourceFolder", sourceFolder);
 		map.put("objectTypeFolder", sourceFolder + "/"
@@ -51,7 +51,7 @@
 
 	public static String visitRule(String sourceFolder, VerifierRule rule,
 			VerifierData data) {
-		Collection<VerifierClass> objectTypes = data.getClassesByRuleName(rule
+		Collection<ObjectType> objectTypes = data.getClassesByRuleName(rule
 				.getRuleName());
 
 		Map<String, Object> map = new HashMap<String, Object>();
@@ -67,7 +67,7 @@
 	}
 
 	public static String visitObjectType(String sourceFolder,
-			VerifierClass objectType, VerifierData data) {
+			ObjectType objectType, VerifierData data) {
 		Collection<VerifierRule> rules = data.getRulesByClassId(objectType
 				.getId());
 
@@ -87,7 +87,7 @@
 	public static String visitField(String sourceFolder, Field field,
 			VerifierResult result) {
 		VerifierData data = result.getVerifierData();
-		VerifierClass objectType = data.getClassById(field.getClassId());
+		ObjectType objectType = data.getClassById(field.getClassId());
 		Collection<VerifierRule> rules = data.getRulesByFieldId(field.getId());
 
 		Map<String, Object> map = new HashMap<String, Object>();

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysFalse/Patterns.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysFalse/Patterns.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysFalse/Patterns.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -16,12 +16,19 @@
 
 import org.drools.verifier.dao.VerifierResult;
 
-#declare any global variables here
 global VerifierResult result;
 
 #
 # Finds patterns that are always false.
 #
+# Dependencies: 
+#	Needs at least one of the following packages or rules to fire:
+# 		package org.drools.verifier.incompatibility;
+#			rule "Incompatible LiteralRestrictions with ranges in pattern possibility, impossible equality less or equal"
+#			rule "Incompatible LiteralRestrictions with ranges in pattern possibility, impossible equality greater"
+#			rule "Incompatible LiteralRestrictions with ranges in pattern possibility, impossible range"
+#			rule "Incoherent VariableRestrictions in pattern possibility, impossible range"
+#
 # Example:
 #		Pattern( a == b && a != b )
 #
@@ -44,8 +51,7 @@
 		# Report an error
 		result.add( new VerifierMessage(
 								Severity.ERROR,
-								MessageType.MISSING_COMPONENT,
+								MessageType.ALWAYS_FALSE,
 								$p,
 								$p + " can never be satisfied." ) );
-		System.out.println( "jee" );
-end
+end
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysFalse/Rules.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysFalse/Rules.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysFalse/Rules.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,54 @@
+#
+# created on: 5.6.2008
+#
+# Rules in this package look for patterns and rules that can never be satisfied.
+#
+#
+package org.drools.verifier.alwaysFalse
+#list any import classes here.
+import org.drools.verifier.components.VerifierRule;
+import org.drools.verifier.components.RulePossibility;
+
+import org.drools.verifier.report.components.Severity;
+import org.drools.verifier.report.components.MessageType;
+import org.drools.verifier.report.components.Incompatibility;
+import org.drools.verifier.report.components.VerifierMessage;
+
+import org.drools.verifier.dao.VerifierResult;
+
+global VerifierResult result;
+
+#
+# Finds rules that are always false.
+#
+# Dependencies:
+#	Needs at least one of the following packages or rules to fire:
+# 		package org.drools.verifier.incompatibility;
+#			rule "Incompatible Patterns"
+#
+# Example:
+#		Pattern( a == b && a != b )
+#
+rule "Rule that is always false"
+	when
+		$r :VerifierRule()
+		
+		# All the rule possibilities for rule need to be in conflict
+		forall( 
+			$rp :RulePossibility(
+				ruleId == $r.id
+			)
+			
+			Incompatibility( 
+				left memberOf $rp.items,
+				right memberOf $rp.items
+			)
+		)
+	then 
+		# Report an error
+		result.add( new VerifierMessage(
+								Severity.ERROR,
+								MessageType.ALWAYS_FALSE,
+								$r,
+								$r + " can never be satisfied." ) );
+end
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysTrue/Patterns.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysTrue/Patterns.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysTrue/Patterns.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,95 @@
+#
+# created on: 27.6.2008
+#
+# Rules in this package look for patterns and rules that are always satisfied.
+#
+#
+package org.drools.verifier.alwaysTrue
+
+
+import org.drools.verifier.components.Restriction;
+import org.drools.verifier.components.Pattern;
+import org.drools.verifier.components.PatternPossibility;
+
+import org.drools.verifier.report.components.AlwaysTrue;
+import org.drools.verifier.report.components.Opposites;
+import org.drools.verifier.report.components.VerifierMessage;
+import org.drools.verifier.report.components.Severity;
+import org.drools.verifier.report.components.MessageType;
+
+import org.drools.verifier.dao.VerifierResult;
+
+global VerifierResult result;
+
+#
+# Finds pattern possibilities that are always true.
+#
+# Dependencies: None
+#
+# Example:
+#		Pattern( a > 10 && a <= 10 )
+#
+rule "Pattern possibility that is always true"
+	when
+		$p :Pattern()
+		
+		$pp :PatternPossibility(
+			patternId == $p.id
+		)
+
+		# For each restriction in pattern possibility 
+		# there needs to be an opposite.
+		forall(
+			$r :Restriction(
+				this memberOf $pp.items
+			)
+			
+			Opposites( 
+				(
+					left == $r
+				&&
+					right memberOf $pp.items
+				) || (
+					left memberOf $pp.items
+				&&
+					right == $r
+				)
+			)
+		)
+	then 
+		insert( new AlwaysTrue( $pp ));
+end
+
+#
+# Finds patterns that are always true.
+#
+# Dependencies:
+#	Needs at least one of the following packages or rules to fire:
+# 		package org.drools.verifier.alwaysTrue;
+#			rule "Pattern possibility that is always true"
+#
+# Example:
+#		Pattern( a > 10 && a <= 10 )
+#
+rule "Pattern that is always true"
+	when
+		$p :Pattern()
+
+		# For each restriction in each pattern possibility for current pattern, 
+		# there needs to be an opposite.
+		forall(
+			$pp :PatternPossibility(
+				patternId == $p.id
+			)
+			
+			AlwaysTrue(
+				cause == $pp
+			)
+		)
+	then 
+		result.add( new VerifierMessage(
+								Severity.NOTE,
+								MessageType.ALWAYS_TRUE,
+								$p,
+								$p + " is always satisfied." ) );
+end
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysTrue/Rules.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysTrue/Rules.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysTrue/Rules.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,84 @@
+#
+# created on: 27.6.2008
+#
+# Rules in this package look for patterns and rules that are always satisfied.
+#
+#
+package org.drools.verifier.alwaysTrue
+
+
+import org.drools.verifier.components.Pattern;
+import org.drools.verifier.components.PatternPossibility;
+import org.drools.verifier.components.RulePossibility;
+import org.drools.verifier.components.VerifierRule;
+
+import org.drools.verifier.report.components.AlwaysTrue;
+import org.drools.verifier.report.components.Opposites;
+import org.drools.verifier.report.components.VerifierMessage;
+import org.drools.verifier.report.components.Severity;
+import org.drools.verifier.report.components.MessageType;
+
+import org.drools.verifier.dao.VerifierResult;
+
+global VerifierResult result;
+
+#
+# Finds rule possibilities that are always true.
+#
+# Dependencies:
+#	Needs at least one of the following packages or rules to fire:
+# 		package org.drools.verifier.alwaysTrue;
+#			rule "Pattern possibility that is always true"
+#
+#
+rule "Rule possibility that is always true"
+	when
+		$r :VerifierRule()
+
+		$rp :RulePossibility(
+			ruleId == $r.id
+		)
+		
+		# Each pattern possibility in rule possibility needs to be always true.
+		forall(
+			$pp :PatternPossibility(
+				this memberOf $rp.items
+			)
+				
+			AlwaysTrue(
+				cause == $pp
+			)
+		)
+	then 
+		insert( new AlwaysTrue( $rp ));
+end
+
+#
+# Finds rules that are always true.
+#
+# Dependencies:
+#	Needs at least one of the following packages or rules to fire:
+# 		package org.drools.verifier.alwaysTrue;
+#			rule "Rule possibility that is always true"
+#
+#
+rule "Rule that is always true"
+	when
+		$r :VerifierRule()
+
+		forall(
+			$rp :RulePossibility(
+				ruleId == $r.id
+			)
+			
+			AlwaysTrue(
+				cause == $rp
+			)
+		)
+	then 
+		result.add( new VerifierMessage(
+								Severity.WARNING,
+								MessageType.ALWAYS_TRUE,
+								$r,
+								$r + " is always satisfied." ) );
+end
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/equivalence/Rules.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/equivalence/Rules.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/equivalence/Rules.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -9,7 +9,7 @@
 # Only checks for redundant rule specifications where consequences are not redundant, 
 # does not include actual pattern and restriction checks.
 #
-# Depandencies: None
+# Dependencies: None
 #
 rule "Find equivalent Rules"
 	when

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incoherence/Patterns.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incoherence/Patterns.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incoherence/Patterns.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -28,7 +28,7 @@
 # If two Patterns are in conflict.
 #
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # Example:
 #		IncorencePattern( a == 1 )
 #		not IncorencePattern( a == 1 )
@@ -94,7 +94,7 @@
 # If two Patterns are in conflict.
 #
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # Example:
 #		$var :Object()
 #		IncorencePattern( a == $var )
@@ -160,7 +160,7 @@
 # If two Patterns are in conflict.
 #
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # Example:
 #		IncorencePattern8( a > 11 )
 #		not IncorencePattern8( a > 1 )
@@ -225,7 +225,7 @@
 # If two Patterns are in conflict.
 #
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # Example:
 #		IncorencePattern( a < 1 )
 #		not IncorencePattern( a < 11 )
@@ -290,7 +290,7 @@
 # If two Patterns are in conflict.
 #
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # Example:
 #		IncoherencePattern( a >= 1 )
 #		not IncoherencePattern( a != 1 )
@@ -356,7 +356,7 @@
 # If two Patterns are in conflict.
 #
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # Example:
 #		IncoherencePattern15( a >= $var )
 #		not IncoherencePattern15( a != $var )
@@ -422,7 +422,7 @@
 # If two Patterns are in conflict.
 #
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # Example:
 #		IncoherencePattern13( a == $var )
 #		not IncoherencePattern13( a >= $var )
@@ -487,7 +487,7 @@
 # If two Patterns are in conflict.
 #
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # Example:
 #		IncoherencePattern13( a == $var )
 #		not IncoherencePattern13( a >= $var )

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incoherence/Restrictions.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incoherence/Restrictions.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incoherence/Restrictions.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -25,7 +25,7 @@
 # If two LiteralRestrictions are in conflict.
 #
 # Type: Error
-# Depandencies: None
+# Dependencies: None
 # Example: IncorencePattern1( a == "b", a != "b" )
 #
 rule "Incoherent LiteralRestrictions in pattern possibility"
@@ -74,7 +74,7 @@
 # If two LiteralRestrictions are in conflict.
 #
 # Type: Error
-# Depandencies: None
+# Dependencies: None
 # Example: IncorencePattern( a > 10 && a < -10 )
 #
 rule "Incoherent LiteralRestrictions with ranges in pattern possibility, impossible ranges"
@@ -120,7 +120,7 @@
 # If two LiteralRestrictions are in conflict.
 #
 # Type: Error
-# Depandencies: None
+# Dependencies: None
 # Example: IncorencePattern( a < 1 && a == 10 )
 #
 rule "Incoherent LiteralRestrictions with ranges in pattern possibility, impossible equality less or equal"
@@ -166,7 +166,7 @@
 # If two LiteralRestrictions are in conflict.
 #
 # Type: Error
-# Depandencies: None
+# Dependencies: None
 # Example: IncorencePattern( a > 10 && a == 1 )
 #
 rule "Incoherent LiteralRestrictions with ranges in pattern possibility, impossible equality greater"
@@ -212,7 +212,7 @@
 # If two LiteralRestrictions are in conflict.
 #
 # Type: Error
-# Depandencies: None
+# Dependencies: None
 # Example: IncorencePattern( a < "12-Dec-2007", a > "12-Dec-2007" )
 #
 rule "Incoherent LiteralRestrictions with ranges in pattern possibility, impossible range"
@@ -258,7 +258,7 @@
 # If two VariableRestrictions are in conflict.
 #
 # Type: Error
-# Depandencies: None
+# Dependencies: None
 # Example: IncorencePattern( a contains $o, a not contains $o )
 #
 rule "Incoherent VariableRestrictions in pattern possibility"
@@ -305,7 +305,7 @@
 # If two VariableRestrictions are in conflict.
 #
 # Type: Error
-# Depandencies: None
+# Dependencies: None
 # Example: IncorencePattern( a > $var, a < $var )
 #
 rule "Incoherent VariableRestrictions in pattern possibility, impossible range"

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incompatibility/Patterns.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incompatibility/Patterns.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incompatibility/Patterns.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -9,13 +9,19 @@
 
 import org.drools.verifier.dao.VerifierResult;
 
-#declare any global variables here
 global VerifierResult result;
 
 #
 # Pattern possibilities are incompatible if any of the restrictions are incompatible.
 #
-# Depandencies: None
+# Dependencies:
+#	Needs at least one of the following packages or rules to fire:
+# 		package org.drools.verifier.incompatibility;
+#			rule "Incompatible LiteralRestrictions with ranges in pattern possibility, impossible equality less or equal"
+#			rule "Incompatible LiteralRestrictions with ranges in pattern possibility, impossible equality greater"
+#			rule "Incompatible LiteralRestrictions with ranges in pattern possibility, impossible range"
+#			rule "Incoherent VariableRestrictions in pattern possibility, impossible range"
+#
 # Example: 
 #		Pattern( a < b )
 #		Pattern( a > b )

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incompatibility/Restrictions.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incompatibility/Restrictions.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incompatibility/Restrictions.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -13,7 +13,7 @@
 #
 # If two LiteralRestrictions are in conflict.
 #
-# Depandencies: None
+# Dependencies: None
 # Example: IncorencePattern( a < 1 && a == 10 )
 #
 rule "Incompatible LiteralRestrictions with ranges in pattern possibility, impossible equality less or equal"
@@ -23,7 +23,6 @@
 		)
 
 		$r2 :LiteralRestriction(
-			patternId == $r1.patternId,
 			restrictionType == $r1.restrictionType,
 			fieldId == $r1.fieldId,
 			valueType == $r1.valueType,
@@ -39,7 +38,7 @@
 #
 # If two LiteralRestrictions are in conflict.
 #
-# Depandencies: None
+# Dependencies: None
 # Example: IncorencePattern( a > 10 && a == 1 )
 #
 rule "Incompatible LiteralRestrictions with ranges in pattern possibility, impossible equality greater"
@@ -49,7 +48,6 @@
 		)
 
 		$r2 :LiteralRestriction(
-			patternId == $r1.patternId,
 			restrictionType == $r1.restrictionType,
 			fieldId == $r1.fieldId,
 			valueType == $r1.valueType,
@@ -65,7 +63,7 @@
 #
 # If two LiteralRestrictions are in conflict.
 #
-# Depandencies: None
+# Dependencies: None
 # Example: IncorencePattern( a < "12-Dec-2007", a > "12-Dec-2007" )
 #
 rule "Incompatible LiteralRestrictions with ranges in pattern possibility, impossible range"
@@ -75,7 +73,6 @@
 		)
 
 		$r2 :LiteralRestriction(
-			patternId == $r1.patternId,
 			restrictionType == $r1.restrictionType,
 			fieldId == $r1.fieldId,
 			valueType == $r1.valueType,
@@ -91,7 +88,7 @@
 #
 # If two VariableRestrictions are in conflict.
 #
-# Depandencies: None
+# Dependencies: None
 # Example: Pattern( a > $var, a < $var )
 #
 rule "Incoherent VariableRestrictions in pattern possibility, impossible range"
@@ -101,7 +98,6 @@
 		)
 
 		$r2 :VariableRestriction(
-			patternId == $r1.patternId,
 			fieldId == $r1.fieldId,
 			operator == Operator.GREATER,
 			variable.objectId == $r1.variable.objectId,

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Patterns.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Patterns.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Patterns.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -16,7 +16,6 @@
 #
 # Pattern possibilities are opposites if all of the restrictions are opposites.
 #
-# Depandencies: None
 # Dependencies:
 #
 #	Needs at least one of the following packages or rules to fire:

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Restrictions.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Restrictions.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Restrictions.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -24,8 +24,8 @@
 #
 # If two LiteralRestrictions are in conflict.
 #
-# Depandencies: None
-# Example: Pattern1( a == "b", a != "b" )
+# Dependencies: None
+# Example: Pattern( a == "b", a != "b" )
 #
 rule "Opposite LiteralRestrictions"
 	when
@@ -61,7 +61,7 @@
 #
 # If two LiteralRestrictions are in conflict.
 #
-# Depandencies: None
+# Dependencies: None
 # Example: Pattern( a >= 10 && a < 10 )
 #
 rule "Opposite LiteralRestrictions with ranges, greater or equal - less"
@@ -96,7 +96,7 @@
 #
 # If two LiteralRestrictions are in conflict.
 #
-# Depandencies: None
+# Dependencies: None
 # Example: Pattern( a > 10 && a <= 10 )
 #
 rule "Opposite LiteralRestrictions with ranges, greater - less or equal"
@@ -132,7 +132,7 @@
 #
 # If two LiteralRestrictions are in conflict.
 #
-# Depandencies: None
+# Dependencies: None
 # Example: Pattern( a < 10 && a > 9 )
 #
 rule "Opposite LiteralRestrictions with ranges, less - greater for ints and dates"
@@ -168,7 +168,7 @@
 #
 # If two LiteralRestrictions are in conflict.
 #
-# Depandencies: None
+# Dependencies: None
 # Example: Pattern( a >= 10 && a <= 9 )
 #
 rule "Opposite LiteralRestrictions with ranges, less or equal - greater or equal for ints and dates"
@@ -204,15 +204,14 @@
 #
 # If two VariableRestrictions are in conflict.
 #
-# Depandencies: None
+# Dependencies: None
 # Example: Pattern( a contains $o, a not contains $o )
 #
-rule "Opposite VariableRestrictions in pattern possibility"
+rule "Opposite VariableRestrictions"
 	when
 		$r1 :VariableRestriction()
 
 		$r2 :VariableRestriction(
-			patternId == $r1.patternId,
 			fieldId == $r1.fieldId,
 			id != $r1.id,
 			variable.objectId == $r1.variable.objectId,

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Rules.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Rules.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Rules.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -6,15 +6,7 @@
 
 
 #declare any global variables here
+#
+#
+#
 
-
-
-
-rule "Your First Rule"
-	
-	when
-		#conditions
-	then 
-		#actions
-		
-end

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/overlaps/Restrictions.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/overlaps/Restrictions.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/overlaps/Restrictions.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -23,7 +23,7 @@
 # Fires when two restrictions are overlapping.
 # Reports these restrictions as overlapping.
 #
-# Depandencies: Needs at least one rule.
+# Dependencies: Needs at least one rule.
 #
 #		package org.drools.verifier.subsumption.patterns
 #			rule "Find subsumptant restrictions, greater than"

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Clean.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Clean.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Clean.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -16,7 +16,7 @@
 # Merges existing gaps from working memory. Cleans out the data for actual reporting.
 #
 # Type: None
-# Depandencies: Needs at least one of the following packages or rules to fire.
+# Dependencies: Needs at least one of the following packages or rules to fire.
 #
 # 		package org.drools.verifier.rangeChecks.patterns;
 #			rule "Range check for number patterns"
@@ -69,7 +69,7 @@
 # Removes existing gaps from working memory. Cleans out the data for actual reporting.
 #
 # Type: None
-# Depandencies: Needs at least one of the following packages or rules to fire.
+# Dependencies: Needs at least one of the following packages or rules to fire.
 #
 #		package org.drools.verifier.rangeChecks.integers
 #			rule "Range check for integers, if smaller than or equal is missing"
@@ -121,7 +121,7 @@
 # Removes existing gaps from working memory. Cleans out the data for actual reporting.
 #
 # Type: None
-# Depandencies: Needs at least one of the following packages or rules to fire.
+# Dependencies: Needs at least one of the following packages or rules to fire.
 #
 #		package org.drools.verifier.rangeChecks.integers
 #			rule "Range check for integers, if smaller than or equal is missing"
@@ -173,7 +173,7 @@
 # Removes existing gaps from working memory. Cleans out the data for actual reporting.
 #
 # Type: None
-# Depandencies: Needs at least one of the following packages or rules to fire.
+# Dependencies: Needs at least one of the following packages or rules to fire.
 #
 #		package org.drools.verifier.rangeChecks.doubles
 #			rule "Range check for doubles, if smaller than or equal is missing"
@@ -225,7 +225,7 @@
 # Removes existing gaps from working memory. Cleans out the data for actual reporting.
 #
 # Type: None
-# Depandencies: Needs at least one of the following packages or rules to fire.
+# Dependencies: Needs at least one of the following packages or rules to fire.
 #
 #		package org.drools.verifier.rangeChecks.doubles
 #			rule "Range check for doubles, if smaller than or equal is missing"
@@ -277,7 +277,7 @@
 # Removes existing gaps from working memory. Cleans out the data for actual reporting.
 #
 # Type: None
-# Depandencies: Needs at least one of the following packages or rules to fire.
+# Dependencies: Needs at least one of the following packages or rules to fire.
 #
 #		package org.drools.verifier.rangeChecks.dates
 #			rule "Range check for dates, if smaller than or equal is missing"
@@ -329,7 +329,7 @@
 # Removes existing gaps from working memory. Cleans out the data for actual reporting.
 #
 # Type: None
-# Depandencies: Needs at least one of the following packages or rules to fire.
+# Dependencies: Needs at least one of the following packages or rules to fire.
 #
 #		package org.drools.verifier.rangeChecks.dates
 #			rule "Range check for dates, if smaller than or equal is missing"

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Dates.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Dates.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Dates.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -31,7 +31,7 @@
 # If all ranges are not checked for a field.
 # 
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # Example: in "Rule 1" Foo( bar > "27-Oct-2007" ) 
 #						and in Foo( <= "27-Oct-2007" || == "27-Oct-2007" ) is missing.
 #
@@ -62,7 +62,7 @@
 # If all ranges are not checked for a field.
 # 
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # Example: in "Rule 1" Foo( bar < "27-Oct-2007" ) 
 #						and in Foo( >= "27-Oct-2007" || == "27-Oct-2007" ) is missing.
 #
@@ -93,7 +93,7 @@
 # If all ranges are not checked for a field.
 #
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # Example: in "Rule 1" Foo( bar == "27-Oct-2007" || bar <= "27-Oct-2007" ) 
 # 					and no Foo( bar > "27-Oct-2007" || >= "27-Oct-2007" || >= "28-Oct-2007" || == "28-Oct-2007" ) 
 #						then Foo( bar > "27-Oct-2007" ) is missing.
@@ -133,7 +133,7 @@
 # If all ranges are not checked for a field.
 #
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # Example: in "Rule 1" Foo( bar == "27-Oct-2007" || bar >= "27-Oct-2007" ) 
 # 					and no Foo( bar < "27-Oct-2007" || <= "27-Oct-2007" || <= "26-Oct-2007" || == "26-Oct-2007" ) 
 #						then Foo( bar < "27-Oct-2007" ) is missing.

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Doubles.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Doubles.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Doubles.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -16,7 +16,7 @@
 # If all ranges are not checked for a field.
 # 
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # Example: in "Rule 1" Foo( bar > 42 ) 
 #						and in Foo( <= 42 || == 42 ) is missing.
 #
@@ -47,7 +47,7 @@
 # If all ranges are not checked for a field.
 # 
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # Example: in "Rule 1" Foo( bar < 42 ) 
 #						and in Foo( >= 42 || == 42 ) is missing.
 #
@@ -78,7 +78,7 @@
 # If all ranges are not checked for a field.
 #
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # Example: in "Rule 1" Foo( bar == 42 || bar <= 42 ) 
 # 					and no Foo( bar > 42 || >= 42 || >= 43 || == 43 ) 
 #						then Foo( bar > 42 ) is missing.
@@ -110,7 +110,7 @@
 # If all ranges are not checked for a field.
 #
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # Example: in "Rule 1" Foo( bar == 42 || bar >= 42 ) 
 # 					and no Foo( bar < 42 || <= 42 || <= 41 || == 41 ) 
 #						then Foo( bar < 42 ) is missing.

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Integers.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Integers.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Integers.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -14,7 +14,7 @@
 # If all ranges are not checked for a field.
 # 
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # Example: in "Rule 1" Foo( bar > 42 ) 
 #						and Foo( <= 42 || == 42 ) is missing.
 #
@@ -45,7 +45,7 @@
 # If all ranges are not checked for a field.
 # 
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # Example: in "Rule 1" Foo( bar < 42 ) 
 #						and in Foo( >= 42 || == 42 ) is missing.
 #
@@ -76,7 +76,7 @@
 # If all ranges are not checked for a field.
 #
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # Example: in "Rule 1" Foo( bar == 42 || bar <= 42 ) 
 # 					and no Foo( bar > 42 || >= 42 || >= 43 || == 43 ) 
 #						then Foo( bar > 42 ) is missing.
@@ -116,7 +116,7 @@
 # If all ranges are not checked for a field.
 #
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # Example: in "Rule 1" Foo( bar == 42 || bar >= 42 ) 
 # 					and no Foo( bar < 42 || <= 42 || <= 41 || == 41 ) 
 #						then Foo( bar < 42 ) is missing.

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/NumberPatterns.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/NumberPatterns.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/NumberPatterns.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -21,7 +21,7 @@
 # If all pattern ranges are not checked for a field.
 # 
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # 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"
@@ -62,7 +62,7 @@
 # If all pattern ranges are not checked for a field.
 # 
 # Type: Warning
-# Depandencies: None
+# Dependencies: None
 # 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, !="

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Patterns.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Patterns.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Patterns.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -9,7 +9,7 @@
 # Only checks for redundant pattern specifications,
 # does not include actual restriction checks.
 #
-# Depandencies: None
+# Dependencies: None
 #
 rule "Find redundant Patterns with restrictions"
 	when
@@ -48,7 +48,7 @@
 #
 # Checks for redundant pattern specifications when the patterns have no possibilities.
 #
-# Depandencies: None
+# Dependencies: None
 #
 rule "Find redundant Patterns without restrictions"
 	when

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Possibilities.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Possibilities.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Possibilities.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -15,7 +15,7 @@
 # Fires when two PatternPossibilities are redundant.
 # Marks these possibilities as redundant.
 #
-# Depandencies: Needs at least one rule from both packages.
+# Dependencies: Needs at least one rule from both packages.
 #
 #		package org.drools.verifier.redundancy.patterns
 #			rule "Find redundant Patterns with restrictions"
@@ -100,7 +100,7 @@
 # Fires when two PatternPossibilities are redundant.
 # Marks these possibilities as redundant.
 #
-# Depandencies:
+# Dependencies:
 #
 #	Needs at least one rule from these packages:
 #		package org.drools.verifier.equivalency.rules

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Restrictions.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Restrictions.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Restrictions.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -6,7 +6,7 @@
 import org.drools.verifier.report.components.RedundancyType;
 
 #
-# Depandencies: None
+# Dependencies: None
 #
 rule "Find redundant VariableRestriction"
 	when
@@ -32,7 +32,7 @@
 end
 
 #
-# Depandencies: None
+# Dependencies: None
 #
 rule "Find redundant LiteralRestriction"
 	when

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Rules.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Rules.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Rules.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -9,7 +9,7 @@
 # Only checks for redundant rule specifications,
 # does not include actual pattern and restriction checks.
 #
-# Depandencies:
+# Dependencies:
 #
 #		package org.drools.verifier.redundancy.consequences
 #			rule "Find redundant TextConsequences"

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/missingRange.htm
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/missingRange.htm	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/missingRange.htm	2008-07-04 14:40:55 UTC (rev 20905)
@@ -3,7 +3,7 @@
         	<tr>
 	            <th><a href=
 	            "@{sourceFolder}/@{objectTypeFolder}/@{objectType.id}.htm">
-	            @{objectType.name}</a> <a href=
+	            @{objectType.name}</a>.<a href=
 	            "@{sourceFolder}/@{fieldFolder}/@{field.id}.htm">@{field.name}</a></th>
 			</tr>
             <tr>

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Possibilities.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Possibilities.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Possibilities.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -17,7 +17,7 @@
 # Fires when two pattern possibilities are subsumptant.
 # Creates a Subsumption object.
 #
-# Depandencies: Needs at least one rule.
+# Dependencies: Needs at least one rule.
 #
 #		package org.drools.verifier.redundancy.patterns
 #			rule "Find redundant Patterns with restrictions"
@@ -83,7 +83,7 @@
 # Fires when two pattern possibilities are subsumptant.
 # Creates a Subsumption object.
 #
-# Depandencies: Needs at least one rule from either one of the following packages.
+# Dependencies: Needs at least one rule from either one of the following packages.
 #
 #		package org.drools.verifier.subsumption.patterns
 #			rule "Find subsumptant pattern possibilities"

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Restrictions.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Restrictions.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Restrictions.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -13,7 +13,7 @@
 # Fires when two restrictions are subsumptant.
 # Creates a Subsumption object.
 #
-# Depandencies: None
+# Dependencies: None
 #
 # Example 1: P( x > 10 ) and P( x > 100 )
 #
@@ -40,7 +40,7 @@
 # Fires when two restrictions are subsumptant.
 # Creates a Subsumption object.
 #
-# Depandencies: None
+# Dependencies: None
 #
 # Example 1: P( x < 10 ) and P( x < 100 )
 #

Added: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/PatternSolverDRLTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/PatternSolverDRLTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/PatternSolverDRLTest.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,50 @@
+package org.drools.verifier;
+
+import java.io.ByteArrayInputStream;
+import java.util.Collection;
+
+import org.drools.verifier.components.PatternPossibility;
+import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.dao.VerifierResultFactory;
+
+/**
+ * 
+ * @author Toni Rikkola
+ * 
+ */
+public class PatternSolverDRLTest extends TestBase {
+
+	public void testOrInsidePattern() throws Exception {
+
+		StringBuffer rule = new StringBuffer();
+		rule.append("rule \"Test rule\" ");
+		rule.append("   when ");
+		rule.append("       customer : Customer( status > 30 && < 50 ) ");
+		rule
+				.append("       order : OrderHeader( customer == customer , orderPriority == 3 || == 4 ) ");
+		rule.append("   then ");
+		rule.append("       order.setOrderDiscount( 6.0 ); ");
+		rule.append("end");
+
+		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		Collection<? extends Object> testData = getTestData(
+				new ByteArrayInputStream(rule.toString().getBytes()), result
+						.getVerifierData());
+
+		int patternCount = 0;
+
+		// Check that there is three pattern possibilities and that they contain
+		// the right amount of items.
+		for (Object o : testData) {
+			if (o instanceof PatternPossibility) {
+				PatternPossibility pp = (PatternPossibility) o;
+				if (pp.getItems().size() == 2) {
+
+					patternCount++;
+				}
+			}
+		}
+
+		assertEquals(3, patternCount);
+	}
+}

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/PatternSolverTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/PatternSolverTest.java	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/PatternSolverTest.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -34,10 +34,9 @@
 		LiteralRestriction literalRestriction = new LiteralRestriction();
 		LiteralRestriction literalRestriction2 = new LiteralRestriction();
 
-		OperatorDescr operatorDescr = new OperatorDescr(OperatorDescr.Type.AND);
 		PatternSolver solver = new PatternSolver(pattern);
 
-		solver.add(operatorDescr);
+		solver.addOperator(OperatorDescr.Type.AND);
 		solver.add(literalRestriction);
 		solver.add(literalRestriction2);
 		solver.end();
@@ -65,10 +64,9 @@
 		LiteralRestriction literalRestriction = new LiteralRestriction();
 		LiteralRestriction literalRestriction2 = new LiteralRestriction();
 
-		OperatorDescr operatorDescr = new OperatorDescr(OperatorDescr.Type.OR);
 		PatternSolver solver = new PatternSolver(pattern);
 
-		solver.add(operatorDescr);
+		solver.addOperator(OperatorDescr.Type.OR);
 		solver.add(literalRestriction);
 		solver.add(literalRestriction2);
 		solver.end();
@@ -100,13 +98,11 @@
 		LiteralRestriction literalRestriction2 = new LiteralRestriction();
 		LiteralRestriction literalRestriction3 = new LiteralRestriction();
 
-		OperatorDescr orDescr = new OperatorDescr(OperatorDescr.Type.OR);
-		OperatorDescr andDescr = new OperatorDescr(OperatorDescr.Type.AND);
 		PatternSolver solver = new PatternSolver(pattern);
 
-		solver.add(orDescr);
+		solver.addOperator(OperatorDescr.Type.OR);
 		solver.add(literalRestriction);
-		solver.add(andDescr);
+		solver.addOperator(OperatorDescr.Type.AND);
 		solver.add(literalRestriction2);
 		solver.add(literalRestriction3);
 		solver.end();
@@ -144,13 +140,11 @@
 		LiteralRestriction literalRestriction2 = new LiteralRestriction();
 		LiteralRestriction literalRestriction3 = new LiteralRestriction();
 
-		OperatorDescr orDescr = new OperatorDescr(OperatorDescr.Type.AND);
-		OperatorDescr andDescr = new OperatorDescr(OperatorDescr.Type.OR);
 		PatternSolver solver = new PatternSolver(pattern);
 
-		solver.add(orDescr);
+		solver.addOperator(OperatorDescr.Type.AND);
 		solver.add(literalRestriction);
-		solver.add(andDescr);
+		solver.addOperator(OperatorDescr.Type.OR);
 		solver.add(literalRestriction2);
 		solver.add(literalRestriction3);
 		solver.end();
@@ -194,17 +188,14 @@
 		LiteralRestriction literalRestriction3 = new LiteralRestriction();
 		LiteralRestriction literalRestriction4 = new LiteralRestriction();
 
-		OperatorDescr andDescr = new OperatorDescr(OperatorDescr.Type.AND);
-		OperatorDescr orDescr = new OperatorDescr(OperatorDescr.Type.OR);
-		OperatorDescr orDescr2 = new OperatorDescr(OperatorDescr.Type.OR);
 		PatternSolver solver = new PatternSolver(pattern);
 
-		solver.add(andDescr);
-		solver.add(orDescr);
+		solver.addOperator(OperatorDescr.Type.AND);
+		solver.addOperator(OperatorDescr.Type.OR);
 		solver.add(literalRestriction);
 		solver.add(literalRestriction2);
 		solver.end();
-		solver.add(orDescr2);
+		solver.addOperator(OperatorDescr.Type.OR);
 		solver.add(literalRestriction3);
 		solver.add(literalRestriction4);
 		solver.end();
@@ -252,17 +243,14 @@
 		LiteralRestriction literalRestriction3 = new LiteralRestriction();
 		LiteralRestriction literalRestriction4 = new LiteralRestriction();
 
-		OperatorDescr orDescr = new OperatorDescr(OperatorDescr.Type.OR);
-		OperatorDescr andDescr = new OperatorDescr(OperatorDescr.Type.AND);
-		OperatorDescr andDescr2 = new OperatorDescr(OperatorDescr.Type.AND);
 		PatternSolver solver = new PatternSolver(pattern);
 
-		solver.add(orDescr);
-		solver.add(andDescr);
+		solver.addOperator(OperatorDescr.Type.OR);
+		solver.addOperator(OperatorDescr.Type.AND);
 		solver.add(literalRestriction);
 		solver.add(literalRestriction2);
 		solver.end();
-		solver.add(andDescr2);
+		solver.addOperator(OperatorDescr.Type.AND);
 		solver.add(literalRestriction3);
 		solver.add(literalRestriction4);
 		solver.end();
@@ -304,17 +292,14 @@
 		LiteralRestriction literalRestriction3 = new LiteralRestriction();
 		LiteralRestriction literalRestriction4 = new LiteralRestriction();
 
-		OperatorDescr orDescr = new OperatorDescr(OperatorDescr.Type.OR);
-		OperatorDescr andDescr = new OperatorDescr(OperatorDescr.Type.AND);
-		OperatorDescr orDescr2 = new OperatorDescr(OperatorDescr.Type.OR);
 		PatternSolver solver = new PatternSolver(pattern);
 
-		solver.add(orDescr);
-		solver.add(andDescr);
+		solver.addOperator(OperatorDescr.Type.OR);
+		solver.addOperator(OperatorDescr.Type.AND);
 		solver.add(literalRestriction);
 		solver.add(literalRestriction2);
 		solver.end();
-		solver.add(orDescr2);
+		solver.addOperator(OperatorDescr.Type.OR);
 		solver.add(literalRestriction3);
 		solver.add(literalRestriction4);
 		solver.end();
@@ -357,17 +342,14 @@
 		LiteralRestriction literalRestriction4 = new LiteralRestriction();
 		LiteralRestriction literalRestriction5 = new LiteralRestriction();
 
-		OperatorDescr andDescr = new OperatorDescr(OperatorDescr.Type.AND);
-		OperatorDescr andDescr2 = new OperatorDescr(OperatorDescr.Type.AND);
-		OperatorDescr orDescr = new OperatorDescr(OperatorDescr.Type.OR);
 		PatternSolver solver = new PatternSolver(pattern);
 
-		solver.add(andDescr);
-		solver.add(andDescr2);
+		solver.addOperator(OperatorDescr.Type.AND);
+		solver.addOperator(OperatorDescr.Type.AND);
 		solver.add(literalRestriction);
 		solver.add(literalRestriction2);
 		solver.end();
-		solver.add(orDescr);
+		solver.addOperator(OperatorDescr.Type.OR);
 		solver.add(literalRestriction3);
 		solver.add(literalRestriction4);
 		solver.end();

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/SolversTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/SolversTest.java	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/SolversTest.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -49,9 +49,9 @@
 
 		solvers.startRuleSolver(rule);
 
-		solvers.startOperator(andDescr);
+		solvers.startOperator(OperatorDescr.Type.AND);
 		solvers.startPatternSolver(pattern);
-		solvers.startOperator(andDescr);
+		solvers.startOperator(OperatorDescr.Type.AND);
 		solvers.addRestriction(r);
 		solvers.addRestriction(r2);
 		solvers.endOperator();
@@ -59,7 +59,7 @@
 
 		solvers.startNot();
 		solvers.startPatternSolver(pattern);
-		solvers.startOperator(andDescr);
+		solvers.startOperator(OperatorDescr.Type.AND);
 		solvers.addRestriction(r3);
 		solvers.addRestriction(r4);
 		solvers.endOperator();
@@ -119,7 +119,7 @@
 
 		solvers.startRuleSolver(rule);
 		solvers.startPatternSolver(pattern);
-		solvers.startOperator(andDescr);
+		solvers.startOperator(OperatorDescr.Type.AND);
 		solvers.addRestriction(r);
 		solvers.addRestriction(r2);
 		solvers.endOperator();

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTest.java	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTest.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -28,7 +28,7 @@
 		assertNotNull(result);
 		assertEquals(0, result.getBySeverity(Severity.ERROR).size());
 		assertEquals(10, result.getBySeverity(Severity.WARNING).size());
-		assertEquals(1, result.getBySeverity(Severity.NOTE).size());
+		assertEquals(16, result.getBySeverity(Severity.NOTE).size());
 
 
 		//check it again
@@ -46,7 +46,7 @@
 		assertNotNull(result);
 		assertEquals(0, result.getBySeverity(Severity.ERROR).size());
 		assertEquals(10, result.getBySeverity(Severity.WARNING).size());
-		assertEquals(1, result.getBySeverity(Severity.NOTE).size());
+		assertEquals(16, result.getBySeverity(Severity.NOTE).size());
 
 
 

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTestStandalone.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTestStandalone.java	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTestStandalone.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -9,18 +9,16 @@
 import java.util.Set;
 
 import org.drools.compiler.DrlParser;
-import org.drools.compiler.Dialect.AnalysisResult;
 import org.drools.lang.descr.PackageDescr;
-import org.drools.verifier.Verifier;
-import org.drools.verifier.components.VerifierClass;
-import org.drools.verifier.components.VerifierRule;
 import org.drools.verifier.components.Field;
+import org.drools.verifier.components.ObjectType;
+import org.drools.verifier.components.VerifierRule;
 import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.report.components.Cause;
+import org.drools.verifier.report.components.Severity;
 import org.drools.verifier.report.components.VerifierMessage;
 import org.drools.verifier.report.components.VerifierMessageBase;
 import org.drools.verifier.report.components.VerifierRangeCheckMessage;
-import org.drools.verifier.report.components.Cause;
-import org.drools.verifier.report.components.Severity;
 
 /**
  * This is a sample file to launch a rule package from a rule source file.
@@ -56,9 +54,10 @@
 			a.fireAnalysis();
 			// System.out.print(a.getResultAsPlainText());
 			// System.out.print(a.getResultAsXML());
-			// a.writeComponentsHTML("/stash/");
-			// a.writeComponentsHTML("/Users/michaelneale/foo.html");
-			a.writeComponentsHTML("c:/");
+//			 a.writeComponentsHTML("/stash/");
+//			 a.writeComponentsHTML("/Users/michaelneale/foo.html");
+			 a.writeComponentsHTML("/home/trikkola/");
+//			a.writeComponentsHTML("c:/");
 
 			VerifierResult result = a.getResult();
 			Collection<VerifierMessageBase> msgs = result
@@ -111,10 +110,10 @@
 				System.out.println("\t" + msg.getFaulty());
 			}
 
-			Collection<VerifierClass> classes = result.getVerifierData()
+			Collection<ObjectType> classes = result.getVerifierData()
 					.getAllClasses();
 			for (Iterator iterator = classes.iterator(); iterator.hasNext();) {
-				VerifierClass c = (VerifierClass) iterator.next();
+				ObjectType c = (ObjectType) iterator.next();
 
 				Collection<VerifierRule> cr = result.getVerifierData()
 						.getRulesByClassId(c.getId());

Deleted: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysFalse/AlwaysFalsePatternsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysFalse/AlwaysFalsePatternsTest.java	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysFalse/AlwaysFalsePatternsTest.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -1,101 +0,0 @@
-package org.drools.verifier.alwaysFalse;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
-import junit.framework.TestCase;
-
-import org.drools.StatelessSession;
-import org.drools.StatelessSessionResult;
-import org.drools.base.RuleNameMatchesAgendaFilter;
-import org.drools.verifier.components.LiteralRestriction;
-import org.drools.verifier.components.Pattern;
-import org.drools.verifier.components.PatternPossibility;
-import org.drools.verifier.components.Restriction;
-import org.drools.verifier.components.VariableRestriction;
-import org.drools.verifier.components.VerifierComponent;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
-import org.drools.verifier.report.components.Incompatibility;
-import org.drools.verifier.report.components.Severity;
-import org.drools.verifier.report.components.VerifierMessage;
-import org.drools.verifier.report.components.VerifierMessageBase;
-
-/**
- * 
- * @author Toni Rikkola
- * 
- */
-public class AlwaysFalsePatternsTest extends TestCase {
-
-	public void testDummy() {
-		// this is needed as eclipse will try to run this and produce a failure
-		// if its not here.
-		assertTrue(true);
-	}
-//	public void testPatternsAlwaysFalse() throws Exception {
-//		StatelessSession session = getStatelessSession(this.getClass()
-//				.getResourceAsStream("Patterns.drl"));
-//
-//		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-//				"Pattern that is always false"));
-//
-//		VerifierResult result = VerifierResultFactory.createVerifierResult();
-//		Collection<Object> data = new ArrayList<Object>();
-//
-//		session.setGlobal("result", result);
-//
-//		final String ruleName1 = "rule 1";
-//		Pattern pattern = new Pattern();
-//
-//		Restriction r1 = new LiteralRestriction();
-//		Restriction r2 = new LiteralRestriction();
-//		Incompatibility i1 = new Incompatibility(r1, r2);
-//		PatternPossibility pp1 = new PatternPossibility();
-//		pp1.add(r1);
-//		pp1.add(r2);
-//
-//		Restriction r3 = new VariableRestriction();
-//		Restriction r4 = new VariableRestriction();
-//		Incompatibility i2 = new Incompatibility(r1, r2);
-//		PatternPossibility pp2 = new PatternPossibility();
-//		pp2.add(r1);
-//		pp2.add(r2);
-//
-//		data.add(pattern);
-//		data.add(r1);
-//		data.add(r2);
-//		data.add(r3);
-//		data.add(r4);
-//		data.add(i1);
-//		data.add(i2);
-//		data.add(pp1);
-//		data.add(pp2);
-//
-//		StatelessSessionResult sessionResult = session.executeWithResults(data);
-//
-//		Iterator<VerifierMessageBase> iter = result
-//				.getBySeverity(Severity.NOTE).iterator();
-//
-//		Collection<String> ruleNames = new ArrayList<String>();
-//		while (iter.hasNext()) {
-//			Object o = (Object) iter.next();
-//			if (o instanceof VerifierMessage) {
-//				String name = ((VerifierMessage) o).getCauses().toArray(
-//						new VerifierComponent[2])[0].getRuleName();
-//
-//				ruleNames.add(name);
-//			}
-//		}
-//
-//		assertTrue(ruleNames.remove(ruleName1));
-//		// assertFalse(ruleNames.remove(ruleName2));
-//
-//		if (!ruleNames.isEmpty()) {
-//			for (String string : ruleNames) {
-//				fail("Rule " + string + " caused an error.");
-//			}
-//		}
-//	}
-}
\ No newline at end of file

Copied: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysFalse/AlwaysFalseTest.java (from rev 20797, labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysFalse/AlwaysFalsePatternsTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysFalse/AlwaysFalseTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysFalse/AlwaysFalseTest.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,214 @@
+package org.drools.verifier.alwaysFalse;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.drools.StatelessSession;
+import org.drools.base.RuleNameMatchesAgendaFilter;
+import org.drools.verifier.TestBase;
+import org.drools.verifier.components.LiteralRestriction;
+import org.drools.verifier.components.Pattern;
+import org.drools.verifier.components.PatternPossibility;
+import org.drools.verifier.components.Restriction;
+import org.drools.verifier.components.RulePossibility;
+import org.drools.verifier.components.VariableRestriction;
+import org.drools.verifier.components.VerifierRule;
+import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.report.components.Incompatibility;
+import org.drools.verifier.report.components.Severity;
+import org.drools.verifier.report.components.VerifierMessage;
+import org.drools.verifier.report.components.VerifierMessageBase;
+
+/**
+ * 
+ * @author Toni Rikkola
+ * 
+ */
+public class AlwaysFalseTest extends TestBase {
+
+	public void testPatterns() throws Exception {
+		StatelessSession session = getStatelessSession(this.getClass()
+				.getResourceAsStream("Patterns.drl"));
+
+		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+				"Pattern that is always false"));
+
+		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		Collection<Object> data = new ArrayList<Object>();
+
+		session.setGlobal("result", result);
+
+		// This pattern has an error.
+		Pattern pattern1 = new Pattern();
+
+		Restriction r1 = new LiteralRestriction();
+		Restriction r2 = new LiteralRestriction();
+		Incompatibility i1 = new Incompatibility(r1, r2);
+		PatternPossibility pp1 = new PatternPossibility();
+		pp1.setPatternId(pattern1.getId());
+		pp1.add(r1);
+		pp1.add(r2);
+
+		Restriction r3 = new VariableRestriction();
+		Restriction r4 = new VariableRestriction();
+		Incompatibility i2 = new Incompatibility(r1, r2);
+		PatternPossibility pp2 = new PatternPossibility();
+		pp2.setPatternId(pattern1.getId());
+		pp2.add(r1);
+		pp2.add(r2);
+
+		// This pattern does not have an error.
+		Pattern pattern2 = new Pattern();
+
+		Restriction r5 = new LiteralRestriction();
+		Restriction r6 = new LiteralRestriction();
+		PatternPossibility pp3 = new PatternPossibility();
+		pp3.setPatternId(pattern2.getId());
+		pp3.add(r5);
+		pp3.add(r6);
+
+		Restriction r7 = new VariableRestriction();
+		Restriction r8 = new VariableRestriction();
+		Incompatibility i4 = new Incompatibility(r7, r8);
+		PatternPossibility pp4 = new PatternPossibility();
+		pp4.setPatternId(pattern2.getId());
+		pp4.add(r7);
+		pp4.add(r8);
+
+		data.add(pattern1);
+		data.add(r1);
+		data.add(r2);
+		data.add(r3);
+		data.add(r4);
+		data.add(i1);
+		data.add(i2);
+		data.add(pp1);
+		data.add(pp2);
+
+		data.add(pattern2);
+		data.add(r5);
+		data.add(r6);
+		data.add(r7);
+		data.add(r8);
+		data.add(i4);
+		data.add(pp3);
+		data.add(pp4);
+
+		session.executeWithResults(data);
+
+		Iterator<VerifierMessageBase> iter = result.getBySeverity(
+				Severity.ERROR).iterator();
+
+		boolean works = false;
+		while (iter.hasNext()) {
+			Object o = (Object) iter.next();
+			if (o instanceof VerifierMessage) {
+				VerifierMessage message = (VerifierMessage) o;
+				if (message.getFaulty().equals(pattern1)) {
+					works = true;
+				} else {
+					fail("There can be only one. (And this is not the one)");
+				}
+			}
+		}
+
+		assertEquals(1, result.getBySeverity(Severity.ERROR).size());
+		assertEquals(0, result.getBySeverity(Severity.WARNING).size());
+		assertEquals(0, result.getBySeverity(Severity.NOTE).size());
+		assertTrue(works);
+	}
+
+	public void testRules() throws Exception {
+		StatelessSession session = getStatelessSession(this.getClass()
+				.getResourceAsStream("Rules.drl"));
+
+		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+				"Rule that is always false"));
+
+		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		Collection<Object> data = new ArrayList<Object>();
+
+		session.setGlobal("result", result);
+
+		// This rule has an error.
+		VerifierRule rule1 = new VerifierRule();
+
+		PatternPossibility pp1 = new PatternPossibility();
+		PatternPossibility pp2 = new PatternPossibility();
+		Incompatibility i1 = new Incompatibility(pp1, pp2);
+		RulePossibility rp1 = new RulePossibility();
+		rp1.setRuleId(rule1.getId());
+		rp1.add(pp1);
+		rp1.add(pp2);
+
+		PatternPossibility pp3 = new PatternPossibility();
+		PatternPossibility pp4 = new PatternPossibility();
+		Incompatibility i2 = new Incompatibility(pp1, pp2);
+		RulePossibility rp2 = new RulePossibility();
+		rp2.setRuleId(rule1.getId());
+		rp2.add(pp1);
+		rp2.add(pp2);
+
+		// This pattern does not have an error.
+		VerifierRule rule2 = new VerifierRule();
+
+		PatternPossibility pp5 = new PatternPossibility();
+		PatternPossibility pp6 = new PatternPossibility();
+		RulePossibility rp3 = new RulePossibility();
+		rp3.setRuleId(rule2.getId());
+		rp3.add(pp5);
+		rp3.add(pp6);
+
+		PatternPossibility pp7 = new PatternPossibility();
+		PatternPossibility pp8 = new PatternPossibility();
+		Incompatibility i4 = new Incompatibility(pp7, pp8);
+		RulePossibility rp4 = new RulePossibility();
+		rp4.setRuleId(rule2.getId());
+		rp4.add(pp7);
+		rp4.add(pp8);
+
+		data.add(rule1);
+		data.add(pp1);
+		data.add(pp2);
+		data.add(pp3);
+		data.add(pp4);
+		data.add(i1);
+		data.add(i2);
+		data.add(rp1);
+		data.add(rp2);
+
+		data.add(rule2);
+		data.add(pp5);
+		data.add(pp6);
+		data.add(pp7);
+		data.add(pp8);
+		data.add(i4);
+		data.add(rp3);
+		data.add(rp4);
+
+		session.executeWithResults(data);
+
+		Iterator<VerifierMessageBase> iter = result.getBySeverity(
+				Severity.ERROR).iterator();
+
+		boolean works = false;
+		while (iter.hasNext()) {
+			Object o = (Object) iter.next();
+			if (o instanceof VerifierMessage) {
+				VerifierMessage message = (VerifierMessage) o;
+				if (message.getFaulty().equals(rule1)) {
+					works = true;
+				} else {
+					fail("There can be only one. (And this is not the one)");
+				}
+			}
+		}
+
+		assertEquals(1, result.getBySeverity(Severity.ERROR).size());
+		assertEquals(0, result.getBySeverity(Severity.WARNING).size());
+		assertEquals(0, result.getBySeverity(Severity.NOTE).size());
+		assertTrue(works);
+	}
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysTrue/AlwaysTruePatternTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysTrue/AlwaysTruePatternTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysTrue/AlwaysTruePatternTest.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,198 @@
+package org.drools.verifier.alwaysTrue;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.drools.StatelessSession;
+import org.drools.StatelessSessionResult;
+import org.drools.base.RuleNameMatchesAgendaFilter;
+import org.drools.verifier.TestBase;
+import org.drools.verifier.components.LiteralRestriction;
+import org.drools.verifier.components.Pattern;
+import org.drools.verifier.components.PatternPossibility;
+import org.drools.verifier.components.Restriction;
+import org.drools.verifier.components.VariableRestriction;
+import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.report.components.AlwaysTrue;
+import org.drools.verifier.report.components.Opposites;
+import org.drools.verifier.report.components.Severity;
+import org.drools.verifier.report.components.VerifierMessage;
+import org.drools.verifier.report.components.VerifierMessageBase;
+
+/**
+ * 
+ * @author Toni Rikkola
+ * 
+ */
+public class AlwaysTruePatternTest extends TestBase {
+
+	public void testPatternPossibilities() throws Exception {
+		StatelessSession session = getStatelessSession(this.getClass()
+				.getResourceAsStream("Patterns.drl"));
+
+		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+				"Pattern possibility that is always true"));
+
+		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		Collection<Object> data = new ArrayList<Object>();
+
+		session.setGlobal("result", result);
+
+		// This pattern is always true.
+		Pattern pattern1 = new Pattern();
+
+		Restriction r1 = new LiteralRestriction();
+		Restriction r2 = new LiteralRestriction();
+		Opposites o1 = new Opposites(r1, r2);
+		PatternPossibility pp1 = new PatternPossibility();
+		pp1.setPatternId(pattern1.getId());
+		pp1.add(r1);
+		pp1.add(r2);
+
+		Restriction r3 = new VariableRestriction();
+		Restriction r4 = new VariableRestriction();
+		Opposites o2 = new Opposites(r1, r2);
+		PatternPossibility pp2 = new PatternPossibility();
+		pp2.setPatternId(pattern1.getId());
+		pp2.add(r1);
+		pp2.add(r2);
+
+		// This pattern is okay.
+		Pattern pattern2 = new Pattern();
+
+		Restriction r5 = new LiteralRestriction();
+		Restriction r6 = new LiteralRestriction();
+		PatternPossibility pp3 = new PatternPossibility();
+		pp3.setPatternId(pattern2.getId());
+		pp3.add(r5);
+		pp3.add(r6);
+
+		Restriction r7 = new VariableRestriction();
+		Restriction r8 = new VariableRestriction();
+		Opposites o4 = new Opposites(r7, r8);
+		PatternPossibility pp4 = new PatternPossibility();
+		pp4.setPatternId(pattern2.getId());
+		pp4.add(r7);
+		pp4.add(r8);
+
+		data.add(pattern1);
+		data.add(r1);
+		data.add(r2);
+		data.add(r3);
+		data.add(r4);
+		data.add(o1);
+		data.add(o2);
+		data.add(pp1);
+		data.add(pp2);
+
+		data.add(pattern2);
+		data.add(r5);
+		data.add(r6);
+		data.add(r7);
+		data.add(r8);
+		data.add(o4);
+		data.add(pp3);
+		data.add(pp4);
+
+		StatelessSessionResult sessionResult = session.executeWithResults(data);
+		Iterator iter = sessionResult.iterateObjects();
+
+		boolean pp1true = false;
+		boolean pp2true = false;
+		boolean pp3true = false;
+		boolean pp4true = false;
+		while (iter.hasNext()) {
+			Object o = (Object) iter.next();
+			if (o instanceof AlwaysTrue) {
+				AlwaysTrue alwaysTrue = (AlwaysTrue) o;
+				if (!pp1true) {
+					pp1true = alwaysTrue.getCause().equals(pp1);
+				}
+				if (!pp2true) {
+					pp2true = alwaysTrue.getCause().equals(pp2);
+				}
+				if (!pp3true) {
+					pp3true = alwaysTrue.getCause().equals(pp3);
+				}
+				if (!pp4true) {
+					pp4true = alwaysTrue.getCause().equals(pp4);
+				}
+			}
+		}
+
+		assertTrue(pp1true);
+		assertTrue(pp2true);
+		assertFalse(pp3true);
+		assertTrue(pp4true);
+	}
+
+	public void testPatterns() throws Exception {
+		StatelessSession session = getStatelessSession(this.getClass()
+				.getResourceAsStream("Patterns.drl"));
+
+		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+				"Pattern that is always true"));
+
+		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		Collection<Object> data = new ArrayList<Object>();
+
+		session.setGlobal("result", result);
+
+		// This pattern is always true.
+		Pattern pattern1 = new Pattern();
+
+		PatternPossibility pp1 = new PatternPossibility();
+		pp1.setPatternId(pattern1.getId());
+		AlwaysTrue alwaysTrue1 = new AlwaysTrue(pp1);
+
+		PatternPossibility pp2 = new PatternPossibility();
+		pp2.setPatternId(pattern1.getId());
+		AlwaysTrue alwaysTrue2 = new AlwaysTrue(pp2);
+
+		// This pattern is okay.
+		Pattern pattern2 = new Pattern();
+
+		PatternPossibility pp3 = new PatternPossibility();
+		pp3.setPatternId(pattern2.getId());
+
+		PatternPossibility pp4 = new PatternPossibility();
+		pp4.setPatternId(pattern2.getId());
+		AlwaysTrue alwaysTrue4 = new AlwaysTrue(pp4);
+
+		data.add(pattern1);
+		data.add(pp1);
+		data.add(pp2);
+		data.add(alwaysTrue1);
+		data.add(alwaysTrue2);
+
+		data.add(pattern2);
+		data.add(pp3);
+		data.add(pp4);
+		data.add(alwaysTrue4);
+
+		session.executeWithResults(data);
+
+		Iterator<VerifierMessageBase> iter = result
+				.getBySeverity(Severity.NOTE).iterator();
+
+		boolean works = false;
+		while (iter.hasNext()) {
+			Object o = (Object) iter.next();
+			if (o instanceof VerifierMessage) {
+				VerifierMessage message = (VerifierMessage) o;
+				if (message.getFaulty().equals(pattern1)) {
+					works = true;
+				} else {
+					fail("There can be only one. (And this is not the one)");
+				}
+			}
+		}
+
+		assertEquals(0, result.getBySeverity(Severity.ERROR).size());
+		assertEquals(0, result.getBySeverity(Severity.WARNING).size());
+		assertEquals(1, result.getBySeverity(Severity.NOTE).size());
+		assertTrue(works);
+	}
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysTrue/AlwaysTrueRuleTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysTrue/AlwaysTrueRuleTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysTrue/AlwaysTrueRuleTest.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -0,0 +1,179 @@
+package org.drools.verifier.alwaysTrue;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.drools.StatelessSession;
+import org.drools.StatelessSessionResult;
+import org.drools.base.RuleNameMatchesAgendaFilter;
+import org.drools.verifier.TestBase;
+import org.drools.verifier.components.PatternPossibility;
+import org.drools.verifier.components.RulePossibility;
+import org.drools.verifier.components.VerifierRule;
+import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.report.components.AlwaysTrue;
+import org.drools.verifier.report.components.Severity;
+import org.drools.verifier.report.components.VerifierMessage;
+import org.drools.verifier.report.components.VerifierMessageBase;
+
+/**
+ * 
+ * @author Toni Rikkola
+ * 
+ */
+public class AlwaysTrueRuleTest extends TestBase {
+
+	public void testPatternPossibilities() throws Exception {
+		StatelessSession session = getStatelessSession(this.getClass()
+				.getResourceAsStream("Rules.drl"));
+
+		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+				"Rule possibility that is always true"));
+
+		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		Collection<Object> data = new ArrayList<Object>();
+
+		session.setGlobal("result", result);
+
+		// This rule is always true.
+		VerifierRule rule1 = new VerifierRule();
+
+		RulePossibility rp1 = new RulePossibility();
+		PatternPossibility pp1 = new PatternPossibility();
+		pp1.setRuleId(rule1.getId());
+		AlwaysTrue alwaysTrue1 = new AlwaysTrue(pp1);
+		PatternPossibility pp2 = new PatternPossibility();
+		pp2.setRuleId(rule1.getId());
+		AlwaysTrue alwaysTrue2 = new AlwaysTrue(pp2);
+
+		rp1.add(pp1);
+		rp1.add(pp2);
+
+		// This rule is okay.
+		VerifierRule rule2 = new VerifierRule();
+
+		RulePossibility rp2 = new RulePossibility();
+		PatternPossibility pp3 = new PatternPossibility();
+		pp3.setRuleId(rule2.getId());
+		PatternPossibility pp4 = new PatternPossibility();
+		pp4.setRuleId(rule2.getId());
+		AlwaysTrue alwaysTrue4 = new AlwaysTrue(pp4);
+
+		rp2.add(pp3);
+		rp2.add(pp4);
+
+		data.add(rule1);
+		data.add(rp1);
+		data.add(pp1);
+		data.add(pp2);
+		data.add(alwaysTrue1);
+		data.add(alwaysTrue2);
+
+		data.add(rule2);
+		data.add(rp2);
+		data.add(pp3);
+		data.add(pp4);
+		data.add(alwaysTrue4);
+
+		StatelessSessionResult sessionResult = session.executeWithResults(data);
+		Iterator iter = sessionResult.iterateObjects();
+
+		boolean rp1true = false;
+		boolean rp2true = false;
+		boolean rp3true = false;
+		boolean rp4true = false;
+		while (iter.hasNext()) {
+			Object o = (Object) iter.next();
+			if (o instanceof AlwaysTrue) {
+				AlwaysTrue alwaysTrue = (AlwaysTrue) o;
+				if (!rp1true) {
+					rp1true = alwaysTrue.getCause().equals(pp1);
+				}
+				if (!rp2true) {
+					rp2true = alwaysTrue.getCause().equals(pp2);
+				}
+				if (!rp3true) {
+					rp3true = alwaysTrue.getCause().equals(pp3);
+				}
+				if (!rp4true) {
+					rp4true = alwaysTrue.getCause().equals(pp4);
+				}
+			}
+		}
+
+		assertTrue(rp1true);
+		assertTrue(rp2true);
+		assertFalse(rp3true);
+		assertTrue(rp4true);
+	}
+
+	public void testPatterns() throws Exception {
+		StatelessSession session = getStatelessSession(this.getClass()
+				.getResourceAsStream("Rules.drl"));
+
+		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+				"Rule that is always true"));
+
+		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		Collection<Object> data = new ArrayList<Object>();
+
+		session.setGlobal("result", result);
+
+		// This rule is always true.
+		VerifierRule rule1 = new VerifierRule();
+
+		RulePossibility rp1 = new RulePossibility();
+		rp1.setRuleId(rule1.getId());
+		AlwaysTrue alwaysTrue1 = new AlwaysTrue(rp1);
+
+		RulePossibility rp2 = new RulePossibility();
+		rp2.setRuleId(rule1.getId());
+		AlwaysTrue alwaysTrue2 = new AlwaysTrue(rp2);
+
+		// This rule is okay.
+		VerifierRule rule2 = new VerifierRule();
+
+		RulePossibility rp3 = new RulePossibility();
+		rp3.setRuleId(rule2.getId());
+
+		RulePossibility rp4 = new RulePossibility();
+		rp4.setRuleId(rule2.getId());
+		AlwaysTrue alwaysTrue4 = new AlwaysTrue(rp4);
+
+		data.add(rule1);
+		data.add(rp1);
+		data.add(rp2);
+		data.add(alwaysTrue1);
+		data.add(alwaysTrue2);
+
+		data.add(rule2);
+		data.add(rp3);
+		data.add(rp4);
+		data.add(alwaysTrue4);
+
+		session.executeWithResults(data);
+
+		Iterator<VerifierMessageBase> iter = result.getBySeverity(
+				Severity.WARNING).iterator();
+
+		boolean works = false;
+		while (iter.hasNext()) {
+			Object o = (Object) iter.next();
+			if (o instanceof VerifierMessage) {
+				VerifierMessage message = (VerifierMessage) o;
+				if (message.getFaulty().equals(rule1)) {
+					works = true;
+				} else {
+					fail("There can be only one. (And this is not the one)");
+				}
+			}
+		}
+
+		assertEquals(0, result.getBySeverity(Severity.ERROR).size());
+		assertEquals(1, result.getBySeverity(Severity.WARNING).size());
+		assertEquals(0, result.getBySeverity(Severity.NOTE).size());
+		assertTrue(works);
+	}
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/opposites/OppositeRestrictionsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/opposites/OppositeRestrictionsTest.java	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/opposites/OppositeRestrictionsTest.java	2008-07-04 14:40:55 UTC (rev 20905)
@@ -236,7 +236,7 @@
 				.getResourceAsStream("Restrictions.drl"));
 
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Opposite VariableRestrictions in pattern possibility"));
+				"Opposite VariableRestrictions"));
 
 		Collection<Object> data = new ArrayList<Object>();
 

Modified: labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/incoherence/PatternsTest.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/incoherence/PatternsTest.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/incoherence/PatternsTest.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -139,3 +139,19 @@
 	then 
 		# Test
 end
+
+rule "This is not an incoherent pattern 1"
+	when
+		not Something( abc > 1 )
+		Something( abc < 1 )
+	then
+		# Test
+end
+
+rule "This is not an incoherent pattern 2"
+	when
+		not Something( abc == 1 )
+		Something( abc == 2 )
+	then
+		# Test
+end
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/incoherence/RestrictionsTest.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/incoherence/RestrictionsTest.drl	2008-07-04 13:57:33 UTC (rev 20904)
+++ labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/incoherence/RestrictionsTest.drl	2008-07-04 14:40:55 UTC (rev 20905)
@@ -88,3 +88,12 @@
 		# Test
 end
 
+# no problems in this one
+rule "Gold Discount High Priority"
+   dialect "mvel"
+   when
+       customer : Customer( status > "30" && < "50" )
+       order : OrderHeader( customer == customer , orderPriority == "3" || == "4" )
+   then
+       order.setOrderDiscount( 6.0 );
+end 
\ No newline at end of file




More information about the jboss-svn-commits mailing list