[jboss-svn-commits] JBL Code SVN: r29799 - in labs/jbossrules/trunk: drools-guvnor/src/main/java/org/drools/guvnor/server/util and 42 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Oct 24 14:25:54 EDT 2009


Author: Rikkola
Date: 2009-10-24 14:25:51 -0400 (Sat, 24 Oct 2009)
New Revision: 29799

Added:
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/DefaultVerifierConfiguration.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/VerifierConfiguration.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/VerifierConfigurationImpl.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/VerifierConfigurationOptions.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/VerifierError.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilder.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderConfiguration.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderConfigurationImpl.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderError.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderErrors.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderFactory.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderImpl.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierImpl.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ChildComponent.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/PackageComponent.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/PatternComponent.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ReturnValueFieldDescr.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/RuleComponent.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/SubPattern.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/SubRule.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/DataTree.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierComponent.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierData.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierDataMaps.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierReport.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierReportFactory.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierReportImpl.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/FindMissingNumber.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/PackageDescrVisitor.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/RuleLoader.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/UnknownDescriptionException.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/VerfierReportConfigurationOptions.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/VerifierReportConfiguration.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/VerifierReportConfigurationImpl.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/VerifierReportWriter.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/VerifierReportWriterFactory.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/HTMLReportWriter.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/solver/
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/solver/PatternSolver.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/solver/RuleSolver.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/solver/Solver.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/solver/Solvers.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/data/
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/data/VerifierDataMapsTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/misc/
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/misc/FindMissingNumberTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/misc/PackageDescrVisitorTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/report/
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/report/VerifierReportBuilderTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/solver/
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/solver/PatternSolverTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/FindPatterns.drl
Removed:
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/FindMissingNumber.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/PackageDescrFlattener.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/PatternSolver.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/RuleSolver.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/UnknownDescriptionException.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/PatternPossibility.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ReturValueFieldDescr.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/RulePossibility.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/
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportModeller.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/FindMissingNumberTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/PatternSolverTest.java
Modified:
   labs/jbossrules/trunk/drools-ant/src/main/java/org/drools/contrib/DroolsVerifierAntTask.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/VerifierRunner.java
   labs/jbossrules/trunk/drools-verifier/pom.xml
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Verifier.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Consequence.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Constraint.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/EnumField.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/EnumRestriction.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/FieldObjectTypeLink.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/InlineEvalDescr.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/LiteralRestriction.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/components/OperatorDescr.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Pattern.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Possibility.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/QualifiedIdentifierRestriction.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Restriction.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ReturnValueRestriction.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/RulePackage.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/TextConsequence.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Variable.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VariableRestriction.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierAccessorDescr.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierAccumulateDescr.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierCollectDescr.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierComponentType.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierEvalDescr.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierFieldAccessDescr.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierFromDescr.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierFunctionCallDescr.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierMethodAccessDescr.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierPredicateDescr.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierRule.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/ReportModeller.java
   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/Cause.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/Incompatibility.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/MissingRange.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/Subsumption.java
   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/MissingRangesReportVisitor.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ReportModeller.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/UrlFactory.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/VerifierMessagesVisitor.java
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/Consequence.drl
   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/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/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/missingEquality/MissingEquality.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/optimisation/PatternOrder.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/optimisation/RestrictionOrder.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/rangeChecks/Variables.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Consequence.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Notes.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/redundancy/Warnings.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/field.htm
   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/objectType.htm
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/objectTypes.htm
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/packages.htm
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/rule.htm
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/reports/RangeCheckReports.drl
   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/ConsequenceTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/PatternSolverDRLTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/RangeCheckDatesTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/RangeCheckDoublesTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/RangeCheckIntegersTest.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/SubsumptantPossibilitiesRuleTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/TestBase.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/alwaysFalse/AlwaysFalseTest.java
   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
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/equivalence/EquivalentRulesTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/incoherence/IncoherentPatternsTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/incoherence/IncoherentRestrictionsTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/incompatibility/IncompatibilityPatternsTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/incompatibility/IncompatibilityRestrictionsTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/missingEquality/MissingEqualityTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/opposites/OppositePatternsTest.java
   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/optimisation/PatternOrderTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/optimisation/RestrictionOrderTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/overlaps/OverlappingRestrictionsTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/NotesTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/RedundancyTestBase.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/RedundantConsequencesTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/RedundantPossibilitiesTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/RedundantRestrictionsTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/RedundantRulesAndPatternsTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/WarningsTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/subsumption/SubsumptantPossibilitiesTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/subsumption/SubsumptantRestrictionsTest.java
Log:
JBRULES-2305 : Update the verifier to act more like the drools-api JBRULES-2306 : Allow the user to add custom resources that verifies the rules -Big refactoring, also did a small change to the way that the verfier components are related to each others. -Changed RulePossibilty and PatternPossibility to SubRule and SubPattern that better describe them

Modified: labs/jbossrules/trunk/drools-ant/src/main/java/org/drools/contrib/DroolsVerifierAntTask.java
===================================================================
--- labs/jbossrules/trunk/drools-ant/src/main/java/org/drools/contrib/DroolsVerifierAntTask.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-ant/src/main/java/org/drools/contrib/DroolsVerifierAntTask.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,17 +1,22 @@
 package org.drools.contrib;
 
 import java.io.File;
-import java.io.InputStreamReader;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.DirectoryScanner;
 import org.apache.tools.ant.taskdefs.MatchingTask;
 import org.apache.tools.ant.types.Path;
 import org.apache.tools.ant.types.Reference;
+import org.drools.builder.ResourceType;
+import org.drools.compiler.DroolsParserException;
+import org.drools.io.ResourceFactory;
 import org.drools.verifier.Verifier;
-import org.drools.compiler.DrlParser;
-import org.drools.compiler.DroolsParserException;
-import org.drools.lang.descr.PackageDescr;
+import org.drools.verifier.builder.VerifierBuilderFactory;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.report.VerifierReportWriter;
+import org.drools.verifier.report.VerifierReportWriterFactory;
 
 public class DroolsVerifierAntTask extends MatchingTask {
 
@@ -93,10 +98,11 @@
 		}
 
 		try {
-			
+
 			// create a specialized classloader
 
-			Verifier droolsanalyzer = new Verifier();
+			Verifier droolsanalyzer = VerifierBuilderFactory
+					.newVerifierBuilder().newVerifier();
 
 			// get the list of files to be added to the rulebase
 			String[] fileNames = getFileList();
@@ -104,29 +110,40 @@
 			for (int i = 0; i < fileNames.length; i++) {
 				compileAndAnalyzeFile(droolsanalyzer, fileNames[i]);
 			}
-			
+
 			droolsanalyzer.fireAnalysis();
-			droolsanalyzer.writeComponentsHTML(toFile.getAbsolutePath() + "/");
-			
-			System.out.println("Writing verifier report to " + toFile.getAbsolutePath() + "/report");
-			
+
+			VerifierReport result = droolsanalyzer.getResult();
+
+			VerifierReportWriter vReportWriter = VerifierReportWriterFactory
+					.newHTMLReportWriter();
+
+			String path = toFile.getAbsolutePath() + File.separatorChar
+					+ "report.zip";
+
+			OutputStream out = new FileOutputStream(path);
+
+			vReportWriter.writeReport(out, result);
+
+			System.out.println("Writing verifier report to " + path);
+
 		} catch (Exception e) {
 			throw new BuildException("RuleBaseTask failed: " + e.getMessage(),
 					e);
 		}
 	}
-	private void compileAndAnalyzeFile(Verifier droolsanalyzer, String filename) throws DroolsParserException {
-		
-		// Verifier just works with drl files 
-		if ( !filename.endsWith(DroolsVerifierAntTask.DRLFILEEXTENSION) ) {
+
+	private void compileAndAnalyzeFile(Verifier droolsVerifier, String filename)
+			throws DroolsParserException {
+
+		// Verifier just works with drl files
+		if (!filename.endsWith(DroolsVerifierAntTask.DRLFILEEXTENSION)) {
 			throw new UnsupportedOperationException();
 		}
-		
-		PackageDescr descr = new DrlParser()
-				.parse(new InputStreamReader(Verifier.class
-						.getResourceAsStream(filename)));
-		
-		droolsanalyzer.addPackageDescr(descr);
+
+		droolsVerifier.addResourcesToVerify(ResourceFactory
+				.newClassPathResource(filename, Verifier.class),
+				ResourceType.DRL);
 	}
 
 	/**

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/VerifierRunner.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/VerifierRunner.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/util/VerifierRunner.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,5 +1,6 @@
 package org.drools.guvnor.server.util;
 
+import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -7,6 +8,7 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.drools.builder.ResourceType;
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsParserException;
 import org.drools.guvnor.client.rpc.AnalysisFactUsage;
@@ -14,13 +16,16 @@
 import org.drools.guvnor.client.rpc.AnalysisReport;
 import org.drools.guvnor.client.rpc.AnalysisReportLine;
 import org.drools.guvnor.client.rpc.DetailedSerializableException;
+import org.drools.io.ResourceFactory;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.verifier.Verifier;
+import org.drools.verifier.builder.VerifierBuilderFactory;
 import org.drools.verifier.components.Field;
 import org.drools.verifier.components.ObjectType;
+import org.drools.verifier.components.VerifierComponentType;
 import org.drools.verifier.components.VerifierRule;
-import org.drools.verifier.dao.VerifierData;
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.data.VerifierData;
+import org.drools.verifier.data.VerifierReport;
 import org.drools.verifier.report.components.Severity;
 import org.drools.verifier.report.components.VerifierMessageBase;
 
@@ -36,10 +41,11 @@
 				"Unable to verify rules due to syntax errors in the rules.",
 				"Please correct syntax errors - build the package before trying the verifier again.");
 		}
-		Verifier a = new Verifier();
-		a.addPackageDescr(pkg);
+		Verifier a = VerifierBuilderFactory.newVerifierBuilder().newVerifier();
+		a.addResourcesToVerify(ResourceFactory
+				.newReaderResource(new StringReader(drl)), ResourceType.DRL);
 		a.fireAnalysis();
-		VerifierResult res = a.getResult();
+		VerifierReport res = a.getResult();
 
 		AnalysisReport report = new AnalysisReport();
 		report.errors = doLines(res.getBySeverity(Severity.ERROR));
@@ -54,7 +60,8 @@
 		Map<String, String> interned = new HashMap<String, String>();
 
 		List<AnalysisFactUsage> factUsage = new ArrayList<AnalysisFactUsage>();
-		Collection<ObjectType> objectTypes = verifierData.getAllObjectTypes();
+		Collection<ObjectType> objectTypes = verifierData
+				.getAll(VerifierComponentType.OBJECT_TYPE);
 		for (ObjectType c : objectTypes) {
 			AnalysisFactUsage fact = new AnalysisFactUsage();
 			fact.name = c.getName();
@@ -63,7 +70,8 @@
 			for (Field f : flds) {
 				AnalysisFieldUsage fu = new AnalysisFieldUsage();
 				fu.name = f.getName();
-				Collection<VerifierRule> cr = verifierData.getRulesByFieldId(f.getId());
+				Collection<VerifierRule> cr = verifierData.getRulesByFieldId(f
+						.getGuid());
 				List<String> ruleNames = new ArrayList<String>();
 				for (VerifierRule verifierRule : cr) {
 					ruleNames.add(intern(verifierRule.getRuleName(), interned));

Modified: labs/jbossrules/trunk/drools-verifier/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-verifier/pom.xml	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/pom.xml	2009-10-24 18:25:51 UTC (rev 29799)
@@ -35,6 +35,11 @@
 
     <dependency>
       <groupId>org.drools</groupId>
+      <artifactId>drools-api</artifactId>          
+    </dependency>
+    
+    <dependency>
+      <groupId>org.drools</groupId>
       <artifactId>drools-compiler</artifactId>          
     </dependency>    
 

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/DefaultVerifierConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/DefaultVerifierConfiguration.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/DefaultVerifierConfiguration.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,11 @@
+package org.drools.verifier;
+
+import org.drools.verifier.misc.RuleLoader;
+
+public class DefaultVerifierConfiguration extends VerifierConfigurationImpl {
+
+    public DefaultVerifierConfiguration() {
+        verifyingResources.putAll( RuleLoader.basicRulesForFullKnowledgeBase() );
+    }
+
+}

Deleted: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/FindMissingNumber.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/FindMissingNumber.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/FindMissingNumber.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,160 +0,0 @@
-package org.drools.verifier;
-
-import java.math.BigDecimal;
-import java.util.Arrays;
-import java.util.Collection;
-
-import org.drools.verifier.components.Field;
-import org.drools.verifier.components.LiteralRestriction;
-
-public class FindMissingNumber {
-
-	public static final int MIN_NUMBER_OF_RESTRICTIONS = 4;
-
-	/**
-	 * Test if the values in constraints are in pattern.
-	 * 
-	 * @param restrictions
-	 * @return false if can't find a pattern or constraints list is null or size
-	 *         of the list is under 3.
-	 */
-	public static Number testForPattern(
-			Collection<LiteralRestriction> restrictions) {
-
-		if (restrictions == null
-				|| restrictions.size() < MIN_NUMBER_OF_RESTRICTIONS) {
-			return null;
-		}
-
-		BigDecimal[] numbers = new BigDecimal[restrictions.size()];
-
-		int index = 0;
-		for (LiteralRestriction restriction : restrictions) {
-			if (restriction.getValueType() == Field.FieldType.DOUBLE) {
-				numbers[index++] = BigDecimal.valueOf(restriction
-						.getDoubleValue());
-			} else if (restriction.getValueType() == Field.FieldType.INT) {
-				numbers[index++] = BigDecimal
-						.valueOf(restriction.getIntValue());
-			}
-		}
-
-		Arrays.sort(numbers);
-
-		Number missingNumber = findSumPattern(numbers);
-		if (missingNumber != null) {
-			return missingNumber;
-		} else {
-			missingNumber = findMultiplicationPattern(numbers);
-			if (missingNumber != null) {
-				return missingNumber;
-			}
-		}
-
-		return null;
-	}
-
-	/**
-	 * Looks for sum pattern, on each step x is added or removed. -x is the same
-	 * as +(-x) so this works for both.
-	 * 
-	 * @param numbers
-	 * @return true if pattern is found.
-	 */
-	protected static Number findSumPattern(BigDecimal[] numbers) {
-		if (numbers == null || numbers.length < MIN_NUMBER_OF_RESTRICTIONS) {
-			return null;
-		}
-		BigDecimal gap = null;
-		Number missingNumber = null;
-
-		BigDecimal a = numbers[0];
-		BigDecimal b = numbers[1];
-		BigDecimal c = numbers[2];
-		BigDecimal d = numbers[3];
-
-		// Uses first four numbers to check if there is a pattern and to
-		// calculate the gap between them. One missing value is allowed.
-		if (b.subtract(a).equals(c.subtract(b))) {
-			gap = b.subtract(a);
-		} else if (c.subtract(b).equals(d.subtract(c))) {
-			gap = c.subtract(b);
-		} else if (b.subtract(a).equals(d.subtract(c))) {
-			gap = b.subtract(a);
-		} else {
-			// No pattern found.
-			return null;
-		}
-
-		for (int i = 0; i < (numbers.length - 1); i++) {
-			BigDecimal first = numbers[i];
-			BigDecimal second = numbers[i + 1];
-
-			if (missingNumber == null && !second.subtract(first).equals(gap)) {
-				missingNumber = second.subtract(gap);
-			} else if (!second.subtract(first).equals(gap)
-					&& missingNumber != null) {
-				// Happends if there is no pattern found, or more than 1
-				// missing number.
-				return null;
-			}
-		}
-
-		return missingNumber;
-	}
-
-	/**
-	 * Looks for multiplication pattern, on each step x multiplied or divided.
-	 * *x is the same as *(1/x) so this works for both.
-	 * 
-	 * @param numbers
-	 * @return true if pattern is found.
-	 */
-	protected static Number findMultiplicationPattern(BigDecimal[] numbers) {
-		if (numbers == null || numbers.length < MIN_NUMBER_OF_RESTRICTIONS) {
-			return null;
-		}
-		try {
-
-			BigDecimal gap = null;
-			Number missingNumber = null;
-
-			BigDecimal a = numbers[0];
-			BigDecimal b = numbers[1];
-			BigDecimal c = numbers[2];
-			BigDecimal d = numbers[3];
-
-			// Uses first four numbers to check if there is a pattern and to
-			// calculate the gap between them. One missing value is allowed.
-			if (b.divide(a).equals(c.divide(b))) {
-				gap = b.divide(a);
-			} else if (c.divide(b).equals(d.divide(c))) {
-				gap = c.divide(b);
-			} else if (b.divide(a).equals(d.divide(c))) {
-				gap = b.divide(a);
-			} else {
-				// No pattern found.
-				return null;
-			}
-
-			BigDecimal first = null;
-			BigDecimal second = null;
-			for (int i = 0; i < (numbers.length - 1); i++) {
-				first = numbers[i];
-				second = numbers[i + 1];
-
-				if (missingNumber == null && !second.divide(first).equals(gap)) {
-					missingNumber = first.multiply(gap);
-				} else if (!second.divide(first).equals(gap)
-						&& missingNumber != null) {
-					// Happends if there is no pattern found, or more than 1
-					// missing number.
-					return null;
-				}
-			}
-			return missingNumber;
-		} catch (Exception e) {
-			return null;
-		}
-	}
-}

Deleted: 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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/PackageDescrFlattener.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,808 +0,0 @@
-package org.drools.verifier;
-
-import java.util.Collection;
-
-import org.drools.base.evaluators.Operator;
-import org.drools.lang.descr.AccessorDescr;
-import org.drools.lang.descr.AccumulateDescr;
-import org.drools.lang.descr.AndDescr;
-import org.drools.lang.descr.BaseDescr;
-import org.drools.lang.descr.CollectDescr;
-import org.drools.lang.descr.ConditionalElementDescr;
-import org.drools.lang.descr.DeclarativeInvokerDescr;
-import org.drools.lang.descr.EvalDescr;
-import org.drools.lang.descr.ExistsDescr;
-import org.drools.lang.descr.FieldAccessDescr;
-import org.drools.lang.descr.FieldBindingDescr;
-import org.drools.lang.descr.FieldConstraintDescr;
-import org.drools.lang.descr.ForallDescr;
-import org.drools.lang.descr.FromDescr;
-import org.drools.lang.descr.FunctionCallDescr;
-import org.drools.lang.descr.LiteralRestrictionDescr;
-import org.drools.lang.descr.MethodAccessDescr;
-import org.drools.lang.descr.NotDescr;
-import org.drools.lang.descr.OrDescr;
-import org.drools.lang.descr.PackageDescr;
-import org.drools.lang.descr.PatternDescr;
-import org.drools.lang.descr.PatternSourceDescr;
-import org.drools.lang.descr.PredicateDescr;
-import org.drools.lang.descr.QualifiedIdentifierRestrictionDescr;
-import org.drools.lang.descr.RestrictionConnectiveDescr;
-import org.drools.lang.descr.ReturnValueRestrictionDescr;
-import org.drools.lang.descr.RuleDescr;
-import org.drools.lang.descr.VariableRestrictionDescr;
-import org.drools.verifier.components.Consequence;
-import org.drools.verifier.components.Constraint;
-import org.drools.verifier.components.EnumField;
-import org.drools.verifier.components.EnumRestriction;
-import org.drools.verifier.components.Field;
-import org.drools.verifier.components.LiteralRestriction;
-import org.drools.verifier.components.ObjectType;
-import org.drools.verifier.components.OperatorDescr;
-import org.drools.verifier.components.Pattern;
-import org.drools.verifier.components.PatternPossibility;
-import org.drools.verifier.components.QualifiedIdentifierRestriction;
-import org.drools.verifier.components.ReturnValueRestriction;
-import org.drools.verifier.components.RulePackage;
-import org.drools.verifier.components.RulePossibility;
-import org.drools.verifier.components.TextConsequence;
-import org.drools.verifier.components.Variable;
-import org.drools.verifier.components.VariableRestriction;
-import org.drools.verifier.components.VerifierAccessorDescr;
-import org.drools.verifier.components.VerifierAccumulateDescr;
-import org.drools.verifier.components.VerifierCollectDescr;
-import org.drools.verifier.components.VerifierComponent;
-import org.drools.verifier.components.VerifierComponentType;
-import org.drools.verifier.components.VerifierEvalDescr;
-import org.drools.verifier.components.VerifierFieldAccessDescr;
-import org.drools.verifier.components.VerifierFromDescr;
-import org.drools.verifier.components.VerifierFunctionCallDescr;
-import org.drools.verifier.components.VerifierMethodAccessDescr;
-import org.drools.verifier.components.VerifierPredicateDescr;
-import org.drools.verifier.components.VerifierRule;
-import org.drools.verifier.dao.VerifierData;
-
-/**
- * @author Toni Rikkola
- * 
- */
-class PackageDescrFlattener {
-
-	private Solvers solvers = new Solvers();
-
-	private VerifierData data;
-
-	private RulePackage currentPackage = null;
-	private VerifierRule currentRule = null;
-	private Pattern currentPattern = null;
-	private Constraint currentConstraint = null;
-	private ObjectType currentObjectType = null;
-	private Field currentField = null;
-
-	/**
-	 * Adds packageDescr to given VerifierData object
-	 * 
-	 * @param packageDescr
-	 *            PackageDescr that will be flattened.
-	 * @param data
-	 *            VerifierData where the flattened objects are added.
-	 * @throws UnknownDescriptionException
-	 */
-	public void addPackageDescrToData(PackageDescr packageDescr,
-			VerifierData data) throws UnknownDescriptionException {
-
-		this.data = data;
-
-		flatten(packageDescr);
-
-		formPossibilities();
-	}
-
-	private void flatten(Collection<?> descrs, VerifierComponent parent)
-			throws UnknownDescriptionException {
-
-		int orderNumber = 0;
-
-		for (Object o : descrs) {
-			BaseDescr descr = (BaseDescr) o;
-			if (descr instanceof PackageDescr) {
-				flatten((PackageDescr) descr);
-			} else if (descr instanceof RuleDescr) {
-				flatten((RuleDescr) descr, parent);
-			} else if (descr instanceof PatternDescr) {
-				flatten((PatternDescr) descr, parent, orderNumber);
-			} else if (descr instanceof VariableRestrictionDescr) {
-				flatten((VariableRestrictionDescr) descr, parent, orderNumber);
-			} else if (descr instanceof FieldBindingDescr) {
-				flatten((FieldBindingDescr) descr, parent, orderNumber);
-			} else if (descr instanceof FieldConstraintDescr) {
-				flatten((FieldConstraintDescr) descr, parent, orderNumber);
-			} else if (descr instanceof RestrictionConnectiveDescr) {
-				flatten((RestrictionConnectiveDescr) descr, parent, orderNumber);
-			} else if (descr instanceof LiteralRestrictionDescr) {
-				flatten((LiteralRestrictionDescr) descr, parent, orderNumber);
-			} else if (descr instanceof ReturnValueRestrictionDescr) {
-				flatten((ReturnValueRestrictionDescr) descr, parent,
-						orderNumber);
-			} else if (descr instanceof QualifiedIdentifierRestrictionDescr) {
-				flatten((QualifiedIdentifierRestrictionDescr) descr, parent,
-						orderNumber);
-			} else if (descr instanceof FunctionCallDescr) {
-				flatten((FunctionCallDescr) descr, parent, orderNumber);
-			} else if (descr instanceof PredicateDescr) {
-				flatten((PredicateDescr) descr, parent, orderNumber);
-			} else if (descr instanceof AccessorDescr) {
-				flatten((AccessorDescr) descr, parent, orderNumber);
-			} else if (descr instanceof MethodAccessDescr) {
-				flatten((MethodAccessDescr) descr, parent, orderNumber);
-			} else if (descr instanceof FieldAccessDescr) {
-				flatten((FieldAccessDescr) descr, parent, orderNumber);
-			} else if (descr instanceof PatternSourceDescr) {
-				flatten((PatternSourceDescr) descr, parent);
-			} else if (descr instanceof ConditionalElementDescr) {
-				flatten((ConditionalElementDescr) descr, parent, orderNumber);
-			}
-
-			orderNumber++;
-		}
-	}
-
-	private VerifierComponent flatten(PatternSourceDescr descr,
-			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);
-		}
-	}
-
-	private VerifierComponent flatten(DeclarativeInvokerDescr descr,
-			VerifierComponent parent) throws UnknownDescriptionException {
-		if (descr instanceof AccessorDescr) {
-			return flatten((AccessorDescr) descr, parent);
-		} else if (descr instanceof FieldAccessDescr) {
-			return flatten((FieldAccessDescr) descr, parent);
-		} else if (descr instanceof FunctionCallDescr) {
-			return flatten((FunctionCallDescr) descr, parent);
-		} else if (descr instanceof MethodAccessDescr) {
-			return flatten((MethodAccessDescr) descr, parent);
-		} else {
-			throw new UnknownDescriptionException(descr);
-		}
-	}
-
-	private void flatten(ConditionalElementDescr descr,
-			VerifierComponent parent, int orderNumber)
-			throws UnknownDescriptionException {
-
-		if (descr instanceof AndDescr) {
-			flatten((AndDescr) descr, parent, orderNumber);
-		} else if (descr instanceof CollectDescr) {
-			flatten((CollectDescr) descr, parent, orderNumber);
-		} else if (descr instanceof EvalDescr) {
-			flatten((EvalDescr) descr, parent, orderNumber);
-		} else if (descr instanceof ExistsDescr) {
-			flatten((ExistsDescr) descr, parent);
-		} else if (descr instanceof ForallDescr) {
-			flatten((ForallDescr) descr, parent);
-		} else if (descr instanceof FromDescr) {
-			flatten((FromDescr) descr, parent);
-		} else if (descr instanceof NotDescr) {
-			flatten((NotDescr) descr, parent);
-		} else if (descr instanceof OrDescr) {
-			flatten((OrDescr) descr, parent, orderNumber);
-		}
-	}
-
-	private void flatten(ForallDescr descr, VerifierComponent parent)
-			throws UnknownDescriptionException {
-		solvers.startForall();
-		flatten(descr.getDescrs(), parent);
-		solvers.endForall();
-	}
-
-	private void flatten(ExistsDescr descr, VerifierComponent parent)
-			throws UnknownDescriptionException {
-		solvers.startExists();
-		flatten(descr.getDescrs(), parent);
-		solvers.endExists();
-	}
-
-	private void flatten(NotDescr descr, VerifierComponent parent)
-			throws UnknownDescriptionException {
-		solvers.startNot();
-		flatten(descr.getDescrs(), parent);
-		solvers.endNot();
-	}
-
-	/**
-	 * End leaf
-	 * 
-	 * @param descr
-	 * @return
-	 */
-	private VerifierFunctionCallDescr flatten(FunctionCallDescr descr,
-			VerifierComponent parent, int orderNumber) {
-		VerifierFunctionCallDescr functionCall = new VerifierFunctionCallDescr();
-		functionCall.setName(descr.getName());
-		functionCall.setArguments(descr.getArguments());
-		functionCall.setOrderNumber(orderNumber);
-		functionCall.setParent(parent);
-
-		return functionCall;
-	}
-
-	/**
-	 * End leaf
-	 * 
-	 * @param descr
-	 * @return
-	 */
-	private VerifierPredicateDescr flatten(PredicateDescr descr,
-			VerifierComponent parent, int orderNumber) {
-
-		VerifierPredicateDescr predicate = new VerifierPredicateDescr();
-		predicate.setRuleName(currentRule.getRuleName());
-		predicate.setRuleId(currentRule.getId());
-		predicate.setContent(descr.getContent().toString());
-		predicate.setClassMethodName(descr.getClassMethodName());
-		predicate.setOrderNumber(orderNumber);
-		predicate.setParent(parent);
-
-		data.add(predicate);
-
-		return predicate;
-	}
-
-	/**
-	 * End leaf
-	 * 
-	 * @param descr
-	 * @return
-	 */
-	private VerifierEvalDescr flatten(EvalDescr descr,
-			VerifierComponent parent, int orderNumber) {
-
-		VerifierEvalDescr eval = new VerifierEvalDescr();
-		eval.setRuleId(currentRule.getId());
-		eval.setRuleName(currentRule.getRuleName());
-		eval.setContent(descr.getContent().toString());
-		eval.setClassMethodName(descr.getClassMethodName());
-		eval.setOrderNumber(orderNumber);
-		eval.setParent(parent);
-
-		data.add(eval);
-
-		return eval;
-	}
-
-	/**
-	 * End leaf
-	 * 
-	 * @param descr
-	 * @return
-	 * @throws UnknownDescriptionException
-	 */
-	private VerifierFromDescr flatten(FromDescr descr, VerifierComponent parent)
-			throws UnknownDescriptionException {
-		VerifierFromDescr from = new VerifierFromDescr();
-
-		VerifierComponent ds = flatten(descr.getDataSource(), from);
-		from.setDataSourceId(ds.getId());
-		from.setDataSourceType(ds.getComponentType());
-		from.setParent(parent);
-
-		return from;
-	}
-
-	private VerifierAccumulateDescr flatten(AccumulateDescr descr,
-			VerifierComponent parent) throws UnknownDescriptionException {
-		VerifierAccumulateDescr accumulate = new VerifierAccumulateDescr();
-
-		accumulate.setInputPatternId(flatten(descr.getInputPattern(),
-				accumulate, 0));
-		accumulate.setInitCode(descr.getInitCode());
-		accumulate.setActionCode(descr.getActionCode());
-		accumulate.setReverseCode(descr.getReverseCode());
-		accumulate.setResultCode(descr.getResultCode());
-
-		// XXX: Array seems to be always null.
-		// accumulate.setDeclarations(descr.getDeclarations());
-
-		accumulate.setClassName(descr.getClassName());
-		accumulate.setExternalFunction(descr.isExternalFunction());
-		accumulate.setFunctionIdentifier(descr.getFunctionIdentifier());
-		accumulate.setExpression(descr.getExpression());
-		accumulate.setParent(parent);
-
-		return accumulate;
-	}
-
-	private VerifierCollectDescr flatten(CollectDescr descr,
-			VerifierComponent parent) throws UnknownDescriptionException {
-		VerifierCollectDescr collect = new VerifierCollectDescr();
-		collect.setClassMethodName(descr.getClassMethodName());
-		collect
-				.setInsidePatternId(flatten(descr.getInputPattern(), collect, 0));
-		collect.setParent(parent);
-
-		return collect;
-	}
-
-	private VerifierAccessorDescr flatten(AccessorDescr descr,
-			VerifierComponent parent, int orderNumber) {
-		VerifierAccessorDescr accessor = new VerifierAccessorDescr();
-		accessor.setOrderNumber(orderNumber);
-		accessor.setParent(parent);
-		// TODO: I wonder what this descr does.
-		return accessor;
-	}
-
-	/**
-	 * End leaf
-	 * 
-	 * @param descr
-	 */
-	private VerifierMethodAccessDescr flatten(MethodAccessDescr descr,
-			VerifierComponent parent, int orderNumber) {
-		VerifierMethodAccessDescr accessor = new VerifierMethodAccessDescr();
-		accessor.setMethodName(descr.getMethodName());
-		accessor.setArguments(descr.getArguments());
-		accessor.setOrderNumber(orderNumber);
-		accessor.setParent(parent);
-
-		return accessor;
-	}
-
-	/**
-	 * End leaf
-	 * 
-	 * @param descr
-	 */
-	private VerifierFieldAccessDescr flatten(FieldAccessDescr descr,
-			VerifierComponent parent, int orderNumber) {
-		VerifierFieldAccessDescr accessor = new VerifierFieldAccessDescr();
-		accessor.setFieldName(descr.getFieldName());
-		accessor.setArgument(descr.getArgument());
-		accessor.setOrderNumber(orderNumber);
-		accessor.setParent(parent);
-
-		return accessor;
-	}
-
-	private void flatten(PackageDescr descr) throws UnknownDescriptionException {
-		RulePackage rulePackage = data.getRulePackageByName(descr.getName());
-
-		if (rulePackage == null) {
-			rulePackage = new RulePackage();
-
-			rulePackage.setName(descr.getName());
-			data.add(rulePackage);
-		}
-
-		currentPackage = rulePackage;
-
-		flatten(descr.getRules(), rulePackage);
-	}
-
-	private void flatten(RuleDescr descr, VerifierComponent parent)
-			throws UnknownDescriptionException {
-
-		VerifierRule rule = new VerifierRule();
-		currentRule = rule;
-
-		rule.setRuleName(descr.getName());
-		rule.setRuleSalience(descr.getSalience());
-		rule.setConsequence(flattenConsequence(rule, descr.getConsequence()));
-		rule.setLineNumber(descr.getLine());
-		rule.setPackageId(currentPackage.getId());
-		rule.setParent(parent);
-
-		data.add(rule);
-
-		currentPackage.getRules().add(rule);
-
-		solvers.startRuleSolver(rule);
-		flatten(descr.getLhs(), rule, 0);
-		solvers.endRuleSolver();
-	}
-
-	/**
-	 * Creates verifier object from rule consequence. Currently only supports
-	 * text based consequences.
-	 * 
-	 * @param o
-	 *            Consequence object.
-	 * @return Verifier object that implements the Consequence interface.
-	 */
-	private Consequence flattenConsequence(VerifierComponent parent, Object o) {
-
-		TextConsequence consequence = new TextConsequence();
-
-		String text = o.toString();
-
-		/*
-		 * Strip all comments out of the code.
-		 */
-		StringBuffer buffer = new StringBuffer(text);
-		int commentIndex = buffer.indexOf("//");
-
-		while (commentIndex != -1) {
-			buffer = buffer.delete(commentIndex, buffer.indexOf("\n",
-					commentIndex));
-			commentIndex = buffer.indexOf("//");
-		}
-
-		text = buffer.toString();
-
-		/*
-		 * Strip all useless characters out of the code.
-		 */
-		text = text.replaceAll("\n", "");
-		text = text.replaceAll("\r", "");
-		text = text.replaceAll("\t", "");
-		text = text.replaceAll(" ", "");
-
-		consequence.setText(text);
-		consequence.setRuleId(currentRule.getId());
-		consequence.setRuleName(currentRule.getRuleName());
-		consequence.setParent(parent);
-
-		data.add(consequence);
-
-		return consequence;
-	}
-
-	private void flatten(OrDescr descr, VerifierComponent parent,
-			int orderNumber) throws UnknownDescriptionException {
-		OperatorDescr operatorDescr = new OperatorDescr(OperatorDescr.Type.OR);
-		operatorDescr.setOrderNumber(orderNumber);
-		operatorDescr.setParent(parent);
-
-		data.add(operatorDescr);
-
-		solvers.startOperator(OperatorDescr.Type.OR);
-		flatten(descr.getDescrs(), operatorDescr);
-		solvers.endOperator();
-	}
-
-	private void flatten(AndDescr descr, VerifierComponent parent,
-			int orderNumber) throws UnknownDescriptionException {
-		OperatorDescr operatorDescr = new OperatorDescr(OperatorDescr.Type.AND);
-		operatorDescr.setOrderNumber(orderNumber);
-		operatorDescr.setParent(parent);
-
-		data.add(operatorDescr);
-
-		solvers.startOperator(OperatorDescr.Type.AND);
-		flatten(descr.getDescrs(), operatorDescr);
-		solvers.endOperator();
-	}
-
-	private int flatten(PatternDescr descr, VerifierComponent parent,
-			int orderNumber) throws UnknownDescriptionException {
-
-		ObjectType objectType = findOrCreateNewObjectType(descr.getObjectType());
-		currentObjectType = objectType;
-
-		Pattern pattern = new Pattern();
-		pattern.setRuleId(currentRule.getId());
-		pattern.setRuleName(currentRule.getRuleName());
-		pattern.setClassId(objectType.getId());
-		pattern.setName(objectType.getName());
-		pattern.setPatternNot(solvers.getRuleSolver().isChildNot());
-		pattern.setPatternExists(solvers.getRuleSolver().isExists());
-		pattern.setPatternForall(solvers.getRuleSolver().isForall());
-		pattern.setOrderNumber(orderNumber);
-		pattern.setParent(parent);
-
-		data.add(pattern);
-		currentPattern = pattern;
-
-		if (descr.getIdentifier() != null) {
-			Variable variable = new Variable();
-			variable.setRuleId(currentRule.getId());
-			variable.setRuleName(currentRule.getRuleName());
-			variable.setName(descr.getIdentifier());
-
-			variable.setObjectType(VerifierComponentType.CLASS);
-			variable.setObjectId(objectType.getId());
-			variable.setObjectName(descr.getObjectType());
-
-			data.add(variable);
-		}
-
-		// flatten source.
-		if (descr.getSource() != null) {
-			VerifierComponent source = flatten(descr.getSource(), pattern);
-			pattern.setSourceId(source.getId());
-			pattern.setSourceType(source.getComponentType());
-		} else {
-			pattern.setSourceId(0);
-			pattern.setSourceType(VerifierComponentType.NOTHING);
-		}
-		solvers.startPatternSolver(pattern);
-		flatten(descr.getConstraint(), pattern, 0);
-		solvers.endPatternSolver();
-
-		return pattern.getId();
-	}
-
-	private void flatten(FieldConstraintDescr descr, VerifierComponent parent,
-			int orderNumber) throws UnknownDescriptionException {
-
-		Field field = data.getFieldByObjectTypeAndFieldName(currentObjectType
-				.getName(), descr.getFieldName());
-		if (field == null) {
-			field = createField(descr.getFieldName(),
-					currentObjectType.getId(), currentObjectType.getName());
-			data.add(field);
-		}
-		currentField = field;
-
-		Constraint constraint = new Constraint();
-
-		constraint.setRuleId(currentRule.getId());
-		constraint.setFieldId(currentField.getId());
-		constraint.setFieldName(currentField.getName());
-		constraint.setPatternId(currentPattern.getId());
-		constraint.setPatternIsNot(currentPattern.isPatternNot());
-		constraint.setFieldId(field.getId());
-		constraint.setOrderNumber(orderNumber);
-		constraint.setParent(parent);
-
-		data.add(constraint);
-
-		currentConstraint = constraint;
-
-		flatten(descr.getRestriction(), constraint, 0);
-	}
-
-	private void flatten(RestrictionConnectiveDescr descr,
-			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);
-		}
-	}
-
-	/**
-	 * End
-	 * 
-	 * @param descr
-	 */
-	private void flatten(FieldBindingDescr descr, VerifierComponent parent,
-			int orderNumber) {
-
-		Variable variable = new Variable();
-		variable.setRuleId(currentRule.getId());
-		variable.setRuleName(currentRule.getRuleName());
-		variable.setName(descr.getIdentifier());
-		variable.setOrderNumber(orderNumber);
-		variable.setParent(parent);
-
-		variable.setObjectType(VerifierComponentType.FIELD);
-
-		data.add(variable);
-	}
-
-	/**
-	 * End
-	 * 
-	 * Foo( bar == $bar )<br>
-	 * $bar is a VariableRestrictionDescr
-	 * 
-	 * @param descr
-	 */
-	private void flatten(VariableRestrictionDescr descr,
-			VerifierComponent parent, int orderNumber) {
-
-		Variable variable = data.getVariableByRuleAndVariableName(currentRule
-				.getRuleName(), descr.getIdentifier());
-		VariableRestriction restriction = new VariableRestriction();
-
-		restriction.setRuleId(currentRule.getId());
-		restriction.setRuleName(currentRule.getRuleName());
-		restriction.setPatternId(currentPattern.getId());
-		restriction.setPatternIsNot(currentPattern.isPatternNot());
-		restriction.setConstraintId(currentConstraint.getId());
-		restriction.setFieldId(currentConstraint.getFieldId());
-		restriction.setOperator(Operator.determineOperator(
-				descr.getEvaluator(), descr.isNegated()));
-		restriction.setVariable(variable);
-		restriction.setOrderNumber(orderNumber);
-		restriction.setParent(parent);
-
-		// Set field value, if it is unset.
-		currentField.setFieldType(Field.FieldType.VARIABLE);
-
-		data.add(restriction);
-		solvers.addRestriction(restriction);
-	}
-
-	/**
-	 * End
-	 * 
-	 * @param descr
-	 */
-	private void flatten(ReturnValueRestrictionDescr descr,
-			VerifierComponent parent, int orderNumber) {
-
-		ReturnValueRestriction restriction = new ReturnValueRestriction();
-
-		restriction.setRuleId(currentRule.getId());
-		restriction.setRuleName(currentRule.getRuleName());
-		restriction.setPatternId(currentPattern.getId());
-		restriction.setPatternIsNot(currentPattern.isPatternNot());
-		restriction.setConstraintId(currentConstraint.getId());
-		restriction.setFieldId(currentConstraint.getFieldId());
-		restriction.setOperator(Operator.determineOperator(
-				descr.getEvaluator(), descr.isNegated()));
-		restriction.setClassMethodName(descr.getClassMethodName());
-		restriction.setContent(descr.getContent());
-		restriction.setDeclarations(descr.getDeclarations());
-		restriction.setOrderNumber(orderNumber);
-		restriction.setParent(parent);
-
-		data.add(restriction);
-		solvers.addRestriction(restriction);
-
-	}
-
-	/**
-	 * End
-	 * 
-	 * @param descr
-	 */
-	private void flatten(LiteralRestrictionDescr descr,
-			VerifierComponent parent, int orderNumber) {
-
-		LiteralRestriction restriction = new LiteralRestriction();
-
-		restriction.setRuleId(currentRule.getId());
-		restriction.setRuleName(currentRule.getRuleName());
-		restriction.setRuleId(currentRule.getId());
-		restriction.setPatternId(currentPattern.getId());
-		restriction.setPatternIsNot(currentPattern.isPatternNot());
-		restriction.setConstraintId(currentConstraint.getId());
-		restriction.setFieldId(currentConstraint.getFieldId());
-		restriction.setOperator(Operator.determineOperator(
-				descr.getEvaluator(), descr.isNegated()));
-		restriction.setValue(descr.getText());
-		restriction.setOrderNumber(orderNumber);
-		restriction.setParent(parent);
-
-		// Set field value, if it is unset.
-		currentField.setFieldType(restriction.getValueType());
-
-		data.add(restriction);
-		solvers.addRestriction(restriction);
-	}
-
-	/**
-	 * End
-	 * 
-	 * @param descr
-	 */
-	private void flatten(QualifiedIdentifierRestrictionDescr descr,
-			VerifierComponent parent, int orderNumber) {
-
-		String text = descr.getText();
-
-		String base = text.substring(0, text.indexOf("."));
-		String fieldName = text.substring(text.indexOf("."));
-
-		Variable variable = data.getVariableByRuleAndVariableName(currentRule
-				.getRuleName(), base);
-
-		if (variable != null) {
-
-			QualifiedIdentifierRestriction restriction = new QualifiedIdentifierRestriction();
-
-			restriction.setRuleId(currentRule.getId());
-			restriction.setPatternId(currentPattern.getId());
-			restriction.setPatternIsNot(currentPattern.isPatternNot());
-			restriction.setConstraintId(currentConstraint.getId());
-			restriction.setFieldId(currentConstraint.getFieldId());
-			restriction.setOperator(Operator.determineOperator(descr
-					.getEvaluator(), descr.isNegated()));
-			restriction.setVariableId(variable.getId());
-			restriction.setVariableName(base);
-			restriction.setVariablePath(fieldName);
-			restriction.setOrderNumber(orderNumber);
-			restriction.setParent(parent);
-
-			// Set field value, if it is not set.
-			currentField.setFieldType(Field.FieldType.VARIABLE);
-
-			variable.setObjectType(VerifierComponentType.FIELD);
-
-			data.add(restriction);
-			solvers.addRestriction(restriction);
-		} else {
-
-			EnumField enumField = (EnumField) data
-					.getFieldByObjectTypeAndFieldName(base, fieldName);
-			if (enumField == null) {
-				ObjectType objectType = findOrCreateNewObjectType(base);
-
-				enumField = new EnumField();
-				enumField.setObjectTypeId(objectType.getId());
-				enumField.setClassName(objectType.getName());
-				enumField.setName(fieldName);
-
-				objectType.getFields().add(enumField);
-
-				data.add(enumField);
-			}
-
-			EnumRestriction restriction = new EnumRestriction();
-
-			restriction.setRuleId(currentRule.getId());
-			restriction.setPatternId(currentPattern.getId());
-			restriction.setPatternIsNot(currentPattern.isPatternNot());
-			restriction.setConstraintId(currentConstraint.getId());
-			restriction.setFieldId(currentConstraint.getFieldId());
-			restriction.setOperator(Operator.determineOperator(descr
-					.getEvaluator(), descr.isNegated()));
-			restriction.setEnumBaseId(enumField.getId());
-			restriction.setEnumBase(base);
-			restriction.setEnumName(fieldName);
-			restriction.setOrderNumber(orderNumber);
-			restriction.setParent(parent);
-
-			// Set field value, if it is not set.
-			currentField.setFieldType(Field.FieldType.ENUM);
-
-			data.add(restriction);
-			solvers.addRestriction(restriction);
-		}
-	}
-
-	private ObjectType findOrCreateNewObjectType(String name) {
-		ObjectType objectType = data.getObjectTypeByName(name);
-		if (objectType == null) {
-			objectType = new ObjectType();
-			objectType.setName(name);
-			data.add(objectType);
-		}
-		return objectType;
-	}
-
-	private Field createField(String fieldName, int classId, String className) {
-		Field field = new Field();
-		field.setObjectTypeId(classId);
-		field.setClassName(className);
-		field.setName(fieldName);
-
-		currentObjectType.getFields().add(field);
-		return field;
-	}
-
-	private void formPossibilities() {
-
-		for (PatternPossibility possibility : solvers.getPatternPossibilities()) {
-			data.add(possibility);
-		}
-		for (RulePossibility possibility : solvers.getRulePossibilities()) {
-			data.add(possibility);
-		}
-	}
-}

Deleted: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/PatternSolver.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/PatternSolver.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/PatternSolver.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,23 +0,0 @@
-package org.drools.verifier;
-
-import org.drools.verifier.components.OperatorDescr;
-import org.drools.verifier.components.Pattern;
-
-/**
- * Takes a list of Constraints and makes possibilities from them.
- * 
- * @author Toni Rikkola
- */
-class PatternSolver extends Solver {
-
-	private Pattern pattern;
-
-	public PatternSolver(Pattern pattern) {
-		super(OperatorDescr.Type.OR);
-		this.pattern = pattern;
-	}
-
-	public Pattern getPattern() {
-		return pattern;
-	}
-}

Deleted: 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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/RuleLoader.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,99 +0,0 @@
-package org.drools.verifier;
-
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Properties;
-
-import org.drools.compiler.DroolsParserException;
-import org.drools.compiler.PackageBuilder;
-import org.drools.compiler.PackageBuilderConfiguration;
-import org.drools.rule.Package;
-
-class RuleLoader {
-
-	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",
-				// Overlaps
-				"overlaps/Restrictions.drl",
-				// Range checks
-				"rangeChecks/Clean.drl",
-				"rangeChecks/Dates.drl", 
-				"rangeChecks/Doubles.drl",
-				"rangeChecks/Integers.drl",
-				"rangeChecks/NumberPatterns.drl",
-				"rangeChecks/Variables.drl",
-				// Redundancy
-				"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>();
-
-		for (int i = 0; i < fileNames.length; i++) {
-			try {
-				InputStreamReader reader = new InputStreamReader(
-						RuleLoader.class.getResourceAsStream(fileNames[i]));
-				packages.add(loadPackage(reader));
-				reader.close();
-			} catch (DroolsParserException e) {
-				e.printStackTrace();
-			} catch (NullPointerException e) {
-				System.err.println("Error when opening file " + fileNames[i]
-						+ ".");
-				e.printStackTrace();
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		}
-
-		return packages;
-	}
-
-	private static Package loadPackage(InputStreamReader reader)
-			throws DroolsParserException, IOException {
-
-        Properties properties = new Properties();
-        properties.setProperty( "drools.dialect.java.compiler",
-                                "JANINO" );
-
-		PackageBuilder builder = new PackageBuilder(new PackageBuilderConfiguration( properties ));
-
-		builder.addPackageFromDrl(reader);
-
-		return builder.getPackage();
-	}
-}

Deleted: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/RuleSolver.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/RuleSolver.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/RuleSolver.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,23 +0,0 @@
-package org.drools.verifier;
-
-import org.drools.verifier.components.OperatorDescr;
-import org.drools.verifier.components.VerifierRule;
-
-/**
- * Takes a list of Constraints and makes possibilities from them.
- * 
- * @author Toni Rikkola
- */
-class RuleSolver extends Solver {
-
-	private VerifierRule rule;
-
-	public RuleSolver(VerifierRule rule) {
-		super(OperatorDescr.Type.OR);
-		this.rule = (VerifierRule) rule;
-	}
-
-	public VerifierRule getRule() {
-		return rule;
-	}
-}

Deleted: 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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Solver.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,160 +0,0 @@
-package org.drools.verifier;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.drools.verifier.components.OperatorDescr;
-import org.drools.verifier.components.VerifierComponent;
-
-/**
- * Takes a list of Constraints and makes possibilities from them.
- * 
- * @author Toni Rikkola
- */
-class Solver {
-
-	private List<Set<VerifierComponent>> possibilityLists = new ArrayList<Set<VerifierComponent>>();
-	private Solver subSolver = null;
-	private boolean isChildExists = false;
-	private boolean isChildForall = false;
-	private boolean isChildNot = false;
-
-	private OperatorDescr.Type type;
-
-	protected Solver(OperatorDescr.Type type) {
-		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 (type == OperatorDescr.Type.AND) {
-				if (possibilityLists.isEmpty()) {
-					possibilityLists.add(new HashSet<VerifierComponent>());
-				}
-				for (Set<VerifierComponent> set : possibilityLists) {
-					set.add(descr);
-				}
-			} else if (type == OperatorDescr.Type.OR) {
-				Set<VerifierComponent> set = new HashSet<VerifierComponent>();
-				set.add(descr);
-				possibilityLists.add(set);
-			}
-		}
-	}
-
-	/**
-	 * Ends subSolvers data collection.
-	 * 
-	 */
-	protected void end() {
-		if (subSolver != null && subSolver.subSolver == null) {
-			if (type == OperatorDescr.Type.AND) {
-				if (possibilityLists.isEmpty()) {
-					possibilityLists.add(new HashSet<VerifierComponent>());
-				}
-
-				List<Set<VerifierComponent>> newPossibilities = new ArrayList<Set<VerifierComponent>>();
-
-				List<Set<VerifierComponent>> sets = subSolver
-						.getPossibilityLists();
-				for (Set<VerifierComponent> possibilityList : possibilityLists) {
-
-					for (Set<VerifierComponent> set : sets) {
-						Set<VerifierComponent> newSet = new HashSet<VerifierComponent>();
-						newSet.addAll(possibilityList);
-						newSet.addAll(set);
-						newPossibilities.add(newSet);
-					}
-				}
-				possibilityLists = newPossibilities;
-
-			} else if (type == OperatorDescr.Type.OR) {
-
-				possibilityLists.addAll(subSolver.getPossibilityLists());
-
-			}
-
-			subSolver = null;
-
-		} else if (subSolver != null && subSolver.subSolver != null) {
-
-			subSolver.end();
-		}
-
-	}
-
-	public void setChildForall(boolean b) {
-		if (subSolver != null) {
-			subSolver.setChildForall(b);
-		} else {
-			isChildForall = b;
-		}
-	}
-
-	public void setChildExists(boolean b) {
-		if (subSolver != null) {
-			subSolver.setChildExists(b);
-		} else {
-			isChildExists = b;
-		}
-	}
-
-	public void setChildNot(boolean b) {
-		if (subSolver != null) {
-			subSolver.setChildNot(b);
-		} else {
-			isChildNot = b;
-		}
-	}
-
-	public boolean isForall() {
-		if (subSolver != null) {
-			return subSolver.isForall();
-		} else {
-			return isChildForall;
-		}
-	}
-
-	public boolean isExists() {
-		if (subSolver != null) {
-			return subSolver.isExists();
-		} else {
-			return isChildExists;
-		}
-	}
-
-	public boolean isChildNot() {
-		if (subSolver != null) {
-			return subSolver.isChildNot();
-		} else {
-			return isChildNot;
-		}
-	}
-
-	public List<Set<VerifierComponent>> getPossibilityLists() {
-		return possibilityLists;
-	}
-}

Deleted: 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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Solvers.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,174 +0,0 @@
-package org.drools.verifier;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import org.drools.verifier.components.OperatorDescr;
-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.VerifierComponent;
-import org.drools.verifier.components.VerifierRule;
-
-/**
- * 
- * @author Toni Rikkola
- */
-class Solvers {
-
-	private RuleSolver ruleSolver = null;
-	private PatternSolver patternSolver = null;
-
-	private List<PatternPossibility> patternPossibilities = new ArrayList<PatternPossibility>();
-	private List<RulePossibility> rulePossibilities = new ArrayList<RulePossibility>();
-
-	public void startRuleSolver(VerifierRule rule) {
-		ruleSolver = new RuleSolver(rule);
-	}
-
-	public void endRuleSolver() {
-		createRulePossibilities();
-		ruleSolver = null;
-	}
-
-	public void startPatternSolver(Pattern pattern) {
-		patternSolver = new PatternSolver(pattern);
-
-		patternSolver.getPattern().setPatternNot(ruleSolver.isChildNot());
-	}
-
-	public void endPatternSolver() {
-		createPatternPossibilities();
-		patternSolver = null;
-	}
-
-	public void startForall() {
-		if (patternSolver != null) {
-			patternSolver.setChildForall(true);
-		} else if (ruleSolver != null) {
-			ruleSolver.setChildForall(true);
-		}
-	}
-
-	public void endForall() {
-		if (patternSolver != null) {
-			patternSolver.setChildForall(false);
-		} else if (ruleSolver != null) {
-			ruleSolver.setChildForall(false);
-		}
-	}
-
-	public void startExists() {
-		if (patternSolver != null) {
-			patternSolver.setChildExists(true);
-		} else if (ruleSolver != null) {
-			ruleSolver.setChildExists(true);
-		}
-	}
-
-	public void endExists() {
-		if (patternSolver != null) {
-			patternSolver.setChildExists(false);
-		} else if (ruleSolver != null) {
-			ruleSolver.setChildExists(false);
-		}
-	}
-
-	public void startNot() {
-		if (patternSolver != null) {
-			patternSolver.setChildNot(true);
-		} else if (ruleSolver != null) {
-			ruleSolver.setChildNot(true);
-		}
-	}
-
-	public void endNot() {
-		if (patternSolver != null) {
-			patternSolver.setChildNot(false);
-		} else if (ruleSolver != null) {
-			ruleSolver.setChildNot(false);
-		}
-	}
-
-	public void startOperator(OperatorDescr.Type type) {
-		if (patternSolver != null) {
-			patternSolver.addOperator(type);
-		} else if (ruleSolver != null) {
-			ruleSolver.addOperator(type);
-		}
-	}
-
-	public void endOperator() {
-		if (patternSolver != null) {
-			patternSolver.end();
-		} else if (ruleSolver != null) {
-			ruleSolver.end();
-		}
-	}
-
-	public void addRestriction(Restriction restriction) {
-		patternSolver.add(restriction);
-	}
-
-	private void createPatternPossibilities() {
-		for (Set<VerifierComponent> list : patternSolver.getPossibilityLists()) {
-			PatternPossibility possibility = new PatternPossibility();
-
-			possibility.setRuleId(ruleSolver.getRule().getId());
-			possibility.setRuleName(ruleSolver.getRule().getRuleName());
-			possibility.setRuleId(ruleSolver.getRule().getId());
-			possibility.setPatternId(patternSolver.getPattern().getId());
-
-			for (VerifierComponent descr : list) {
-				possibility.add((Restriction) descr);
-			}
-
-			ruleSolver.add(possibility);
-			patternPossibilities.add(possibility);
-		}
-	}
-
-	private void createRulePossibilities() {
-		for (Set<VerifierComponent> list : ruleSolver.getPossibilityLists()) {
-			RulePossibility possibility = new RulePossibility();
-
-			possibility.setRuleId(ruleSolver.getRule().getId());
-			possibility.setRuleName(ruleSolver.getRule().getRuleName());
-			possibility.setRuleId(ruleSolver.getRule().getId());
-
-			for (VerifierComponent descr : list) {
-				PatternPossibility patternPossibility = (PatternPossibility) descr;
-				possibility.add(patternPossibility);
-			}
-
-			rulePossibilities.add(possibility);
-		}
-	}
-
-	public List<PatternPossibility> getPatternPossibilities() {
-		return patternPossibilities;
-	}
-
-	public void setPatternPossibilities(
-			List<PatternPossibility> patternPossibilities) {
-		this.patternPossibilities = patternPossibilities;
-	}
-
-	public List<RulePossibility> getRulePossibilities() {
-		return rulePossibilities;
-	}
-
-	public void setRulePossibilities(List<RulePossibility> rulePossibilities) {
-		this.rulePossibilities = rulePossibilities;
-	}
-
-	public PatternSolver getPatternSolver() {
-		return patternSolver;
-	}
-
-	public RuleSolver getRuleSolver() {
-		return ruleSolver;
-	}
-}
\ No newline at end of file

Deleted: 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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/UnknownDescriptionException.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,21 +0,0 @@
-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;
-	}
-
-}

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Verifier.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Verifier.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Verifier.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,49 +1,25 @@
 package org.drools.verifier;
 
-import java.util.Collection;
+import java.util.List;
 
-import org.drools.RuleBase;
-import org.drools.RuleBaseFactory;
-import org.drools.WorkingMemory;
-import org.drools.lang.descr.PackageDescr;
-import org.drools.rule.Package;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
-import org.drools.verifier.report.ReportModeller;
-import org.drools.verifier.report.html.ComponentsReportModeller;
+import org.drools.builder.ResourceType;
+import org.drools.io.Resource;
+import org.drools.verifier.data.VerifierReport;
 
-/**
- * This is the main user class for verifier.
- * This will use rules to validate rules, caching the "knowledge base" of verifier rules.
- *
- * @author Toni Rikkola
- */
-public class Verifier {
+public interface Verifier {
 
-    static RuleBase        verifierKnowledgeBase;
+    /**
+     * Add resource that is verified.
+     * 
+     * @param descr
+     */
+    public void addResourcesToVerify(Resource resource,
+                                     ResourceType type);
 
-    private VerifierResult result = VerifierResultFactory.createVerifierResult();
-
-    public void addPackageDescr(PackageDescr descr) {
-        try {
-
-            PackageDescrFlattener ruleFlattener = new PackageDescrFlattener();
-
-            ruleFlattener.addPackageDescrToData( descr,
-                                                 result.getVerifierData() );
-
-        } catch ( Throwable t ) {
-            t.printStackTrace();
-        }
-    }
-
     /**
-     * As the analyzer uses rules itself, this will reload the knowledge base.
-     * @throws Exception
+     * TODO: Something like this, takes a look at the objects and finds out
      */
-    public synchronized void reloadAnalysisKnowledgeBase() throws Exception {
-        verifierKnowledgeBase = createRuleBase();
-    }
+    // public void addObjectModel();
 
     /**
      * 
@@ -51,88 +27,14 @@
      * 
      * @return true if everything worked.
      */
-    public boolean fireAnalysis() {
-        try {
+    public boolean fireAnalysis();
 
-            if ( this.verifierKnowledgeBase == null ) {
-                synchronized ( this.getClass() ) {
-                    verifierKnowledgeBase = createRuleBase();
-                }
-            }
+    public VerifierReport getResult();
 
-            WorkingMemory workingMemory = verifierKnowledgeBase.newStatefulSession();
+    public boolean hasErrors();
 
-            Collection< ? extends Object> c = result.getVerifierData().getAll();
+    public List<VerifierError> getErrors();
 
-            for ( Object o : c ) {
-                workingMemory.insert( o );
-            }
+    public void dispose();
 
-            // Object that returns the results.
-            workingMemory.setGlobal( "result",
-                                     result );
-            workingMemory.fireAllRules();
-
-        } catch ( Throwable t ) {
-            t.printStackTrace();
-
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Returns the verifier results as plain text.
-     *
-     * @return Analysis results as plain text.
-     */
-    public String getResultAsPlainText() {
-        return ReportModeller.writePlainText( result );
-    }
-
-    /**
-     * Returns the verifier results as XML.
-     *
-     * @return Analysis results as XML
-     */
-    public String getResultAsXML() {
-        return ReportModeller.writeXML( result );
-    }
-
-    /**
-     * Returns the verifier results as HTML.
-     *
-     * @return Analysis results as HTML
-     */
-    public void writeComponentsHTML(String path) {
-        ComponentsReportModeller.writeHTML( path,
-                                            result );
-    }
-
-    /**
-     * Returns the verifier results as <code>AnalysisResult</code> object.
-     *
-     * @return Analysis result
-     */
-    public VerifierResult getResult() {
-        return result;
-    }
-
-    private static RuleBase createRuleBase() throws Exception {
-
-        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
-
-        Collection<Package> packages = RuleLoader.loadPackages();
-        for ( Package pkg : packages ) {
-            try {
-                ruleBase.addPackage( pkg );
-            } catch ( Exception e ) {
-                throw new Exception( "Adding package " + pkg.getName() + " caused an error.",
-                                     e );
-            }
-        }
-
-        return ruleBase;
-    }
-}
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/VerifierConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/VerifierConfiguration.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/VerifierConfiguration.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,22 @@
+package org.drools.verifier;
+
+import java.util.Map;
+
+import org.drools.PropertiesConfiguration;
+import org.drools.builder.ResourceType;
+import org.drools.io.Resource;
+
+public interface VerifierConfiguration
+    extends
+    PropertiesConfiguration {
+
+    /**
+     * Add external analyzing rules to verifier.
+     * 
+     * @param resource
+     *            the Resource to add
+     * @param type
+     *            the resource type
+     */
+    Map<Resource, ResourceType> getVerifyingResources();
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/VerifierConfigurationImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/VerifierConfigurationImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/VerifierConfigurationImpl.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,30 @@
+package org.drools.verifier;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.builder.ResourceType;
+import org.drools.io.Resource;
+
+public class VerifierConfigurationImpl
+    implements
+    VerifierConfiguration {
+
+    protected Map<Resource, ResourceType> verifyingResources = new HashMap<Resource, ResourceType>();
+    private Map<String, String>           properties         = new HashMap<String, String>();
+
+    public String getProperty(String name) {
+        return properties.get( name );
+    }
+
+    public void setProperty(String name,
+                            String value) {
+        properties.put( name,
+                        value );
+    }
+
+    public Map<Resource, ResourceType> getVerifyingResources() {
+        return verifyingResources;
+    }
+
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/VerifierConfigurationOptions.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/VerifierConfigurationOptions.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/VerifierConfigurationOptions.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,5 @@
+package org.drools.verifier;
+
+public enum VerifierConfigurationOptions {
+
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/VerifierError.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/VerifierError.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/VerifierError.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,15 @@
+package org.drools.verifier;
+
+public class VerifierError {
+
+    private final String message;
+
+    public VerifierError(String message) {
+        this.message = message;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilder.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,22 @@
+package org.drools.verifier.builder;
+
+import java.util.List;
+
+import org.drools.verifier.Verifier;
+import org.drools.verifier.VerifierConfiguration;
+import org.drools.verifier.report.VerifierReportConfiguration;
+
+public interface VerifierBuilder {
+
+    public VerifierConfiguration newVerifierConfiguration();
+
+    public VerifierReportConfiguration newVerifierReportConfiguration();
+
+    public Verifier newVerifier();
+
+    public Verifier newVerifier(VerifierConfiguration conf);
+
+    boolean hasErrors();
+
+    List<VerifierBuilderError> getErrors();
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderConfiguration.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderConfiguration.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,5 @@
+package org.drools.verifier.builder;
+
+public interface VerifierBuilderConfiguration {
+
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderConfigurationImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderConfigurationImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderConfigurationImpl.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,7 @@
+package org.drools.verifier.builder;
+
+public class VerifierBuilderConfigurationImpl
+    implements
+    VerifierBuilderConfiguration {
+
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderError.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderError.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderError.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,5 @@
+package org.drools.verifier.builder;
+
+public interface VerifierBuilderError {
+
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderErrors.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderErrors.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderErrors.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,8 @@
+package org.drools.verifier.builder;
+
+import java.util.Collection;
+
+public interface VerifierBuilderErrors  extends
+    Collection<VerifierBuilderError>{
+
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderFactory.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,8 @@
+package org.drools.verifier.builder;
+
+public class VerifierBuilderFactory {
+
+    public static VerifierBuilder newVerifierBuilder() {
+        return new VerifierBuilderImpl();
+    }
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierBuilderImpl.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,41 @@
+package org.drools.verifier.builder;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.verifier.Verifier;
+import org.drools.verifier.VerifierConfiguration;
+import org.drools.verifier.VerifierConfigurationImpl;
+import org.drools.verifier.report.VerifierReportConfiguration;
+import org.drools.verifier.report.VerifierReportConfigurationImpl;
+
+public class VerifierBuilderImpl
+    implements
+    VerifierBuilder {
+
+    private List<VerifierBuilderError> errors = new ArrayList<VerifierBuilderError>();
+
+    public VerifierConfiguration newVerifierConfiguration() {
+        return new VerifierConfigurationImpl();
+    }
+
+    public VerifierReportConfiguration newVerifierReportConfiguration() {
+        return new VerifierReportConfigurationImpl();
+    }
+
+    public Verifier newVerifier() {
+        return new VerifierImpl();
+    }
+
+    public Verifier newVerifier(VerifierConfiguration conf) {
+        return new VerifierImpl( conf );
+    }
+
+    public List<VerifierBuilderError> getErrors() {
+        return errors;
+    }
+
+    public boolean hasErrors() {
+        return !errors.isEmpty();
+    }
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierImpl.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,174 @@
+package org.drools.verifier.builder;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.builder.ResourceType;
+import org.drools.compiler.DrlParser;
+import org.drools.compiler.DroolsParserException;
+import org.drools.io.Resource;
+import org.drools.lang.descr.PackageDescr;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.verifier.DefaultVerifierConfiguration;
+import org.drools.verifier.Verifier;
+import org.drools.verifier.VerifierConfiguration;
+import org.drools.verifier.VerifierError;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
+import org.drools.verifier.misc.PackageDescrVisitor;
+import org.drools.verifier.misc.RuleLoader;
+
+/**
+ * This is the main user class for verifier. This will use rules to validate
+ * rules, caching the "knowledge base" of verifier rules.
+ * 
+ * @author Toni Rikkola
+ */
+class VerifierImpl
+    implements
+    Verifier {
+
+    private KnowledgeBase               verifierKnowledgeBase;
+    private StatefulKnowledgeSession    ksession;
+    private final VerifierConfiguration conf;
+
+    private List<VerifierError>         errors = new ArrayList<VerifierError>();
+
+    private VerifierReport              result = VerifierReportFactory.newVerifierReport();
+
+    public VerifierImpl(VerifierConfiguration conf) {
+        this.conf = conf;
+    }
+
+    public VerifierImpl() {
+        this.conf = new DefaultVerifierConfiguration();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @seeorg.drools.verifier.Verifier#addPackageDescr(org.drools.lang.descr.
+     * PackageDescr)
+     */
+    public void addPackageDescr(PackageDescr descr) {
+        try {
+
+            PackageDescrVisitor ruleFlattener = new PackageDescrVisitor();
+
+            ruleFlattener.addPackageDescrToData( descr,
+                                                 result.getVerifierData() );
+
+        } catch ( Throwable t ) {
+            t.printStackTrace();
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.drools.verifier.Verifier#reloadAnalysisKnowledgeBase()
+     */
+    public synchronized void reloadVerifierKnowledgeBase() throws Exception {
+        updateRuleBase();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.drools.verifier.Verifier#fireAnalysis()
+     */
+    public boolean fireAnalysis() {
+        try {
+
+            if ( this.verifierKnowledgeBase == null ) {
+                synchronized ( this.getClass() ) {
+                    updateRuleBase();
+                    updateKnowledgeSession();
+                }
+            }
+
+            for ( Object o : result.getVerifierData().getAll() ) {
+                ksession.insert( o );
+            }
+
+            // Object that returns the results.
+            ksession.setGlobal( "result",
+                                result );
+            ksession.fireAllRules();
+
+        } catch ( Throwable t ) {
+            t.printStackTrace();
+
+            return false;
+        }
+
+        return true;
+    }
+
+    private void updateKnowledgeSession() {
+        if ( this.ksession != null ) {
+            this.ksession.dispose();
+        }
+
+        ksession = verifierKnowledgeBase.newStatefulKnowledgeSession();
+    }
+
+    /**
+     * Returns the verifier results as <code>AnalysisResult</code> object.
+     * 
+     * @return Analysis result
+     */
+    public VerifierReport getResult() {
+        return result;
+    }
+
+    private void updateRuleBase() throws Exception {
+
+        verifierKnowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();
+
+        verifierKnowledgeBase.addKnowledgePackages( RuleLoader.loadPackages( conf.getVerifyingResources() ) );
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.drools.verifier.Verifier#dispose()
+     */
+    public void dispose() {
+        if ( ksession != null ) {
+            synchronized ( this.getClass() ) {
+                ksession.dispose();
+            }
+        }
+    }
+
+    public void addResourcesToVerify(Resource resource,
+                                     ResourceType type) {
+
+        if ( type.matchesExtension( ".drl" ) ) {
+            DrlParser p = new DrlParser();
+
+            try {
+
+                PackageDescr pkg = p.parse( resource.getInputStream() );
+                addPackageDescr( pkg );
+
+            } catch ( DroolsParserException e ) {
+                errors.add( new VerifierError( e.getMessage() ) );
+            } catch ( IOException e ) {
+                errors.add( new VerifierError( e.getMessage() ) );
+            }
+        }
+    }
+
+    public List<VerifierError> getErrors() {
+        return errors;
+    }
+
+    public boolean hasErrors() {
+        return !errors.isEmpty();
+    }
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ChildComponent.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ChildComponent.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ChildComponent.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,11 @@
+package org.drools.verifier.components;
+
+public interface ChildComponent {
+
+    public VerifierComponentType getParentType();
+
+    public String getParentGuid();
+
+    public int getOrderNumber();
+
+}

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Consequence.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Consequence.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Consequence.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -2,25 +2,20 @@
 
 import org.drools.verifier.report.components.Cause;
 
-public interface Consequence extends Cause {
+public interface Consequence
+    extends
+    Cause {
 
-	public static class ConsequenceType {
+    public static class ConsequenceType {
+        public static final ConsequenceType TEXT = new ConsequenceType( "TEXT" );
 
-		public static final ConsequenceType TEXT = new ConsequenceType(0);
+        protected String                    type;
 
-		private final int index;
+        public ConsequenceType(String t) {
+            type = t;
+        }
+    }
 
-		private ConsequenceType(int i) {
-			index = i;
-		}
-	}
+    public ConsequenceType getConsequenceType();
 
-	public int getId();
-
-	public ConsequenceType getConsequenceType();
-
-	public int getRuleId();
-
-	public String getRuleName();
-
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Constraint.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Constraint.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Constraint.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -7,80 +7,57 @@
  *
  * @author Toni Rikkola
  */
-public class Constraint extends VerifierComponent implements Cause {
+public class Constraint extends PatternComponent
+    implements
+    Cause {
 
-	private static int index = 0;
+    private boolean patternIsNot;
+    private String  fieldGuid;
+    private String  fieldName;
+    private int     lineNumber;
 
-	private int ruleId;
-	private int patternId;
-	private boolean patternIsNot;
-	private int fieldId;
-	private String fieldName;
-	private int lineNumber;
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.CONSTRAINT;
+    }
 
-	public Constraint() {
-		super(index++);
-	}
+    public CauseType getCauseType() {
+        return CauseType.CONSTRAINT;
+    }
 
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.CONSTRAINT;
-	}
+    public int getLineNumber() {
+        return lineNumber;
+    }
 
-	public CauseType getCauseType() {
-		return CauseType.CONSTRAINT;
-	}
+    public void setLineNumber(int lineNumber) {
+        this.lineNumber = lineNumber;
+    }
 
-	public int getFieldId() {
-		return fieldId;
-	}
+    public boolean isPatternIsNot() {
+        return patternIsNot;
+    }
 
-	public void setFieldId(int fieldId) {
-		this.fieldId = fieldId;
-	}
+    public void setPatternIsNot(boolean patternIsNot) {
+        this.patternIsNot = patternIsNot;
+    }
 
-	public int getRuleId() {
-		return ruleId;
-	}
+    public String getFieldName() {
+        return fieldName;
+    }
 
-	public void setRuleId(int ruleId) {
-		this.ruleId = ruleId;
-	}
+    public void setFieldName(String fieldName) {
+        this.fieldName = fieldName;
+    }
 
-	public int getLineNumber() {
-		return lineNumber;
-	}
+    @Override
+    public String toString() {
+        return "Constraint id: " + getGuid() + " field name: " + fieldName;
+    }
 
-	public void setLineNumber(int lineNumber) {
-		this.lineNumber = lineNumber;
-	}
+    public void setFieldGuid(String guid) {
+        this.fieldGuid = guid;
+    }
 
-	public int getPatternId() {
-		return patternId;
-	}
-
-	public void setPatternId(int patternId) {
-		this.patternId = patternId;
-	}
-
-	public boolean isPatternIsNot() {
-		return patternIsNot;
-	}
-
-	public void setPatternIsNot(boolean patternIsNot) {
-		this.patternIsNot = patternIsNot;
-	}
-
-	public String getFieldName() {
-		return fieldName;
-	}
-
-	public void setFieldName(String fieldName) {
-		this.fieldName = fieldName;
-	}
-
-	@Override
-	public String toString() {
-		return "Constraint id: " + id + " field name: " + fieldName;
-	}
+    public String getFieldGuid() {
+        return fieldGuid;
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/EnumField.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/EnumField.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/EnumField.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,10 +1,10 @@
 package org.drools.verifier.components;
 
 public class EnumField extends Field {
-	private static final long serialVersionUID = 7617431515074762479L;
+    private static final long serialVersionUID = 7617431515074762479L;
 
-	@Override
-	public String toString() {
-		return "Enum: " + objectTypeName + "." + name;
-	}
+    @Override
+    public String toString() {
+        return "Enum: " + objectTypeName + "." + name;
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/EnumRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/EnumRestriction.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/EnumRestriction.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -2,42 +2,41 @@
 
 public class EnumRestriction extends Restriction {
 
-	private int enumBaseId;
-	private String enumBase;
-	private String enumName;
+    private String enumBaseGuid;
+    private String enumBase;
+    private String enumName;
 
-	@Override
-	public RestrictionType getRestrictionType() {
-		return RestrictionType.ENUM;
-	}
+    @Override
+    public RestrictionType getRestrictionType() {
+        return RestrictionType.ENUM;
+    }
 
-	public int getEnumBaseId() {
-		return enumBaseId;
-	}
+    public String getEnumBaseGuid() {
+        return enumBaseGuid;
+    }
 
-	public void setEnumBaseId(int enumBaseId) {
-		this.enumBaseId = enumBaseId;
-	}
+    public void setEnumBaseGuid(String enumBaseGuid) {
+        this.enumBaseGuid = enumBaseGuid;
+    }
 
-	public String getEnumBase() {
-		return enumBase;
-	}
+    public String getEnumBase() {
+        return enumBase;
+    }
 
-	public void setEnumBase(String enumBase) {
-		this.enumBase = enumBase;
-	}
+    public void setEnumBase(String enumBase) {
+        this.enumBase = enumBase;
+    }
 
-	public String getEnumName() {
-		return enumName;
-	}
+    public String getEnumName() {
+        return enumName;
+    }
 
-	public void setEnumName(String enumName) {
-		this.enumName = enumName;
-	}
+    public void setEnumName(String enumName) {
+        this.enumName = enumName;
+    }
 
-	@Override
-	public String toString() {
-		return "QualifiedIdentifierRestrictionDescr enum: " + enumBase + "."
-				+ enumName;
-	}
+    @Override
+    public String toString() {
+        return "QualifiedIdentifierRestrictionDescr enum: " + enumBase + "." + enumName;
+    }
 }

Modified: 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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Field.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -7,90 +7,86 @@
  * 
  * @author Toni Rikkola
  */
-public class Field extends VerifierComponent implements Cause {
+public class Field extends RuleComponent
+    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");
-		public static final FieldType ENUM = new FieldType("Enum");
-		public static final FieldType UNKNOWN = new FieldType("Unknown");
+    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" );
+        public static final FieldType ENUM     = new FieldType( "Enum" );
+        public static final FieldType UNKNOWN  = new FieldType( "Unknown" );
 
-		private final String string;
+        private final String          string;
 
-		private FieldType(String string) {
-			this.string = string;
-		}
+        private FieldType(String string) {
+            this.string = string;
+        }
 
-		@Override
-		public String toString() {
-			return string;
-		}
-	}
+        @Override
+        public String toString() {
+            return string;
+        }
+    }
 
-	private static int index = 0;
+    private String    objectTypeGuid;
+    protected String  objectTypeName;
+    protected String  name;
+    private FieldType fieldType;
 
-	private int objectTypeId;
-	protected String objectTypeName;
-	protected String name;
-	private FieldType fieldType;
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.FIELD;
+    }
 
-	public Field() {
-		super(index++);
-	}
+    public CauseType getCauseType() {
+        return CauseType.FIELD;
+    }
 
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.FIELD;
-	}
+    public String getName() {
+        return name;
+    }
 
-	public CauseType getCauseType() {
-		return CauseType.FIELD;
-	}
+    public void setName(String name) {
+        this.name = name;
+    }
 
-	public String getName() {
-		return name;
-	}
+    public FieldType getFieldType() {
+        return fieldType;
+    }
 
-	public void setName(String name) {
-		this.name = name;
-	}
+    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 FieldType getFieldType() {
-		return fieldType;
-	}
+    public String getObjectTypeGuid() {
+        return objectTypeGuid;
+    }
 
-	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 void setObjectTypeGuid(String objectTypeGuid) {
+        this.objectTypeGuid = objectTypeGuid;
+    }
 
-	public int getObjectTypeId() {
-		return objectTypeId;
-	}
+    public String getObjectTypeName() {
+        return objectTypeName;
+    }
 
-	public void setObjectTypeId(int objectTypeId) {
-		this.objectTypeId = objectTypeId;
-	}
+    public void setObjectTypeName(String objectTypeName) {
+        this.objectTypeName = objectTypeName;
+    }
 
-	public String getObjectTypeName() {
-		return objectTypeName;
-	}
+    @Override
+    public String toString() {
+        return "Field '" + name + "' from object type '" + objectTypeName + "'";
+    }
 
-	public void setClassName(String objectTypeName) {
-		this.objectTypeName = objectTypeName;
-	}
-
-	@Override
-	public String toString() {
-		return "Field '" + name + "' from object type '" + objectTypeName + "'";
-	}
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/FieldObjectTypeLink.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/FieldObjectTypeLink.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/FieldObjectTypeLink.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,38 +1,33 @@
 package org.drools.verifier.components;
 
+import org.drools.verifier.data.VerifierComponent;
+
 /**
  * 
  * @author Toni Rikkola
  */
 public class FieldObjectTypeLink extends VerifierComponent {
 
-	private static int index = 0;
+    private int fieldId;
+    private int objectTypeId;
 
-	private int fieldId;
-	private int objectTypeId;
+    public int getObjectTypeId() {
+        return objectTypeId;
+    }
 
-	public FieldObjectTypeLink() {
-		super(index++);
-	}
+    public void setClassId(int classId) {
+        this.objectTypeId = classId;
+    }
 
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.FIELD_CLASS_LINK;
-	}
+    public int getFieldId() {
+        return fieldId;
+    }
 
-	public int getObjectTypeId() {
-		return objectTypeId;
-	}
+    public void setFieldId(int fieldId) {
+        this.fieldId = fieldId;
+    }
 
-	public void setClassId(int classId) {
-		this.objectTypeId = classId;
-	}
-
-	public int getFieldId() {
-		return fieldId;
-	}
-
-	public void setFieldId(int fieldId) {
-		this.fieldId = fieldId;
-	}
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.FIELD_OBJECT_TYPE_LINK;
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/InlineEvalDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/InlineEvalDescr.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/InlineEvalDescr.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -4,6 +4,11 @@
  * 
  * @author Toni Rikkola
  */
-public class InlineEvalDescr {
+public class InlineEvalDescr extends PatternComponent {
 
+    @Override
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.INLINE_EVAL_DESCR;
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/LiteralRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/LiteralRestriction.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/LiteralRestriction.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -11,166 +11,164 @@
  * 
  * @author Toni Rikkola
  */
-public class LiteralRestriction extends Restriction implements Cause {
+public class LiteralRestriction extends Restriction
+    implements
+    Cause {
 
-	private Field.FieldType valueType;
+    private Field.FieldType valueType;
 
-	private boolean booleanValue;
+    private boolean         booleanValue;
 
-	private int intValue;
+    private int             intValue;
 
-	private double doubleValue;
+    private double          doubleValue;
 
-	private String stringValue;
+    private String          stringValue;
 
-	private Date dateValue;
+    private Date            dateValue;
 
-	public RestrictionType getRestrictionType() {
-		return Restriction.RestrictionType.LITERAL;
-	}
+    public RestrictionType getRestrictionType() {
+        return Restriction.RestrictionType.LITERAL;
+    }
 
-	/**
-	 * Compares two LiteralRestrictions by value.
-	 * 
-	 * @param restriction
-	 *            Restriction that this object is compared to.
-	 * @return a negative integer, zero, or a positive integer as this object is
-	 *         less than, equal to, or greater than the specified object.
-	 * @throws DataFormatException
-	 *             If data was not supported.
-	 */
-	public int compareValues(LiteralRestriction restriction)
-			throws DataFormatException {
-		if (restriction.getValueType() != valueType) {
-			throw new DataFormatException(
-					"Value types did not match. Value type "
-							+ restriction.getValueType() + " was compared to "
-							+ valueType);
-		}
+    /**
+     * Compares two LiteralRestrictions by value.
+     * 
+     * @param restriction
+     *            Restriction that this object is compared to.
+     * @return a negative integer, zero, or a positive integer as this object is
+     *         less than, equal to, or greater than the specified object.
+     * @throws DataFormatException
+     *             If data was not supported.
+     */
+    public int compareValues(LiteralRestriction restriction) throws DataFormatException {
+        if ( restriction.getValueType() != valueType ) {
+            throw new DataFormatException( "Value types did not match. Value type " + restriction.getValueType() + " was compared to " + valueType );
+        }
 
-		if (valueType == Field.FieldType.DATE) {
-			return dateValue.compareTo(restriction.getDateValue());
-		} else if (valueType == Field.FieldType.DOUBLE) {
-			if (doubleValue > restriction.getDoubleValue()) {
-				return 1;
-			} else if (doubleValue < restriction.getDoubleValue()) {
-				return -1;
-			} else {
-				return 0;
-			}
-		} else if (valueType == Field.FieldType.INT) {
-			if (intValue > restriction.getIntValue()) {
-				return 1;
-			} else if (intValue < restriction.getIntValue()) {
-				return -1;
-			} else {
-				return 0;
-			}
-		} else if (valueType == Field.FieldType.STRING) {
-			return stringValue.compareTo(restriction.getValueAsString());
-		} else if (valueType == Field.FieldType.UNKNOWN) {
-			return 0;
-		}
+        if ( valueType == Field.FieldType.DATE ) {
+            return dateValue.compareTo( restriction.getDateValue() );
+        } else if ( valueType == Field.FieldType.DOUBLE ) {
+            if ( doubleValue > restriction.getDoubleValue() ) {
+                return 1;
+            } else if ( doubleValue < restriction.getDoubleValue() ) {
+                return -1;
+            } else {
+                return 0;
+            }
+        } else if ( valueType == Field.FieldType.INT ) {
+            if ( intValue > restriction.getIntValue() ) {
+                return 1;
+            } else if ( intValue < restriction.getIntValue() ) {
+                return -1;
+            } else {
+                return 0;
+            }
+        } else if ( valueType == Field.FieldType.STRING ) {
+            return stringValue.compareTo( restriction.getValueAsString() );
+        } else if ( valueType == Field.FieldType.UNKNOWN ) {
+            return 0;
+        }
 
-		throw new DataFormatException("Value types did not match. Value type "
-				+ restriction.getValueType() + " was compared to " + valueType);
-	}
+        throw new DataFormatException( "Value types did not match. Value type " + restriction.getValueType() + " was compared to " + valueType );
+    }
 
-	public Object getValueAsObject() {
-		if (valueType == Field.FieldType.BOOLEAN) {
-			return Boolean.valueOf(booleanValue);
-		} else if (valueType == Field.FieldType.DATE) {
-			return dateValue;
-		} else if (valueType == Field.FieldType.DOUBLE) {
-			return Double.valueOf(doubleValue);
-		} else if (valueType == Field.FieldType.INT) {
-			return Integer.valueOf(intValue);
-		}
-		return stringValue;
-	}
+    public Object getValueAsObject() {
+        if ( valueType == Field.FieldType.BOOLEAN ) {
+            return Boolean.valueOf( booleanValue );
+        } else if ( valueType == Field.FieldType.DATE ) {
+            return dateValue;
+        } else if ( valueType == Field.FieldType.DOUBLE ) {
+            return Double.valueOf( doubleValue );
+        } else if ( valueType == Field.FieldType.INT ) {
+            return Integer.valueOf( intValue );
+        }
+        return stringValue;
+    }
 
-	public String getValueAsString() {
-		return stringValue;
-	}
+    public String getValueAsString() {
+        return stringValue;
+    }
 
-	public double getDoubleValue() {
-		return doubleValue;
-	}
+    public double getDoubleValue() {
+        return doubleValue;
+    }
 
-	public int getIntValue() {
-		return intValue;
-	}
+    public int getIntValue() {
+        return intValue;
+    }
 
-	public Field.FieldType getValueType() {
-		return valueType;
-	}
+    public Field.FieldType getValueType() {
+        return valueType;
+    }
 
-	public Date getDateValue() {
-		return dateValue;
-	}
+    public Date getDateValue() {
+        return dateValue;
+    }
 
-	public void setValue(String value) {
+    public void setValue(String value) {
 
-		if (value == null) {
-			stringValue = null;
-			valueType = Field.FieldType.UNKNOWN;
-			return;
-		}
+        if ( value == null ) {
+            stringValue = null;
+            valueType = Field.FieldType.UNKNOWN;
+            return;
+        }
 
-		stringValue = value;
-		valueType = Field.FieldType.STRING;
+        stringValue = value;
+        valueType = Field.FieldType.STRING;
 
-		if ("true".equals(value) || "false".equals(value)) {
-			booleanValue = value.equals("true");
-			valueType = Field.FieldType.BOOLEAN;
-			stringValue = value;
-		}
+        if ( "true".equals( value ) || "false".equals( value ) ) {
+            booleanValue = value.equals( "true" );
+            valueType = Field.FieldType.BOOLEAN;
+            stringValue = value;
+        }
 
-		try {
-			intValue = Integer.parseInt(value);
-			valueType = Field.FieldType.INT;
-			stringValue = value;
-			return;
-		} catch (NumberFormatException e) {
-			// Not int.
-		}
+        try {
+            intValue = Integer.parseInt( value );
+            valueType = Field.FieldType.INT;
+            stringValue = value;
+            return;
+        } catch ( NumberFormatException e ) {
+            // Not int.
+        }
 
-		try {
-			doubleValue = Double.parseDouble(value);
-			valueType = Field.FieldType.DOUBLE;
-			stringValue = value;
-			return;
-		} catch (NumberFormatException e) {
-			// Not double.
-		}
+        try {
+            doubleValue = Double.parseDouble( value );
+            valueType = Field.FieldType.DOUBLE;
+            stringValue = value;
+            return;
+        } catch ( NumberFormatException e ) {
+            // Not double.
+        }
 
-		try {
-			String fmt = System.getProperty("drools.dateformat");
-			if (fmt == null) {
-				fmt = "dd-MMM-yyyy";
-			}
+        try {
+            // TODO: Get this from config.
+            String fmt = System.getProperty( "drools.dateformat" );
+            if ( fmt == null ) {
+                fmt = "dd-MMM-yyyy";
+            }
 
-			dateValue = new SimpleDateFormat(fmt, Locale.ENGLISH).parse(value);
-			valueType = Field.FieldType.DATE;
-			stringValue = value;
-			return;
-		} catch (Exception e) {
-			// Not a date.
-		}
+            dateValue = new SimpleDateFormat( fmt,
+                                              Locale.ENGLISH ).parse( value );
+            valueType = Field.FieldType.DATE;
+            stringValue = value;
+            return;
+        } catch ( Exception e ) {
+            // Not a date.
+        }
 
-	}
+    }
 
-	public boolean getBooleanValue() {
-		return booleanValue;
-	}
+    public boolean getBooleanValue() {
+        return booleanValue;
+    }
 
-	public void setBooleanValue(boolean booleanValue) {
-		this.booleanValue = booleanValue;
-	}
+    public void setBooleanValue(boolean booleanValue) {
+        this.booleanValue = booleanValue;
+    }
 
-	@Override
-	public String toString() {
-		return "LiteralRestriction from rule [" + ruleName + "] value '"
-				+ operator.getOperatorString() + " " + stringValue + "'";
-	}
+    @Override
+    public String toString() {
+        return "LiteralRestriction from rule [" + getRuleName() + "] value '" + operator.getOperatorString() + " " + stringValue + "'";
+    }
 }

Modified: 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/components/ObjectType.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ObjectType.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -4,47 +4,46 @@
 import java.util.HashSet;
 import java.util.Set;
 
+import org.drools.verifier.data.VerifierComponent;
+
 /**
  * @author Toni Rikkola
  * 
  */
-public class ObjectType implements Serializable {
-	private static final long serialVersionUID = -783733402566313623L;
+public class ObjectType extends VerifierComponent
+    implements
+    Serializable {
+    private static final long serialVersionUID = -783733402566313623L;
 
-	private static int index = 0;
+    private int               offset = 0;
+    
+    private String            name;
 
-	private int id = index++;
-	private int offset =0;
-	
-	private String name;
+    private Set<Field>        fields           = new HashSet<Field>();
+    
+    public int getOffset() {
+        offset++;
+        return offset % 2;
+    }
+    
+    public String getName() {
+        return name;
+    }
 
-	private Set<Field> fields = new HashSet<Field>();
+    public void setName(String name) {
+        this.name = name;
+    }
 
-	public String getName() {
-		return name;
-	}
-	
-	public int getOffset(){ 
-	    return offset + id % 2;
-	}
+    public Set<Field> getFields() {
+        return fields;
+    }
 
-	public void setName(String name) {
-		this.name = name;
-	}
+    public void setFields(Set<Field> fields) {
+        this.fields = fields;
+    }
 
-	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;
-	}
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.OBJECT_TYPE;
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/OperatorDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/OperatorDescr.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/OperatorDescr.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -6,43 +6,42 @@
  * 
  * @author Toni Rikkola
  */
-public class OperatorDescr extends VerifierComponent implements Serializable {
-	private static final long serialVersionUID = 8393994152436331910L;
+public class OperatorDescr extends PatternComponent
+    implements
+    Serializable {
+    private static final long serialVersionUID = 8393994152436331910L;
 
-	private static int index = 0;
+    public static class Type {
+        public static final Type AND = new Type( "AND" );
+        public static final Type OR  = new Type( "OR" );
 
-	public static class Type {
-		public static final Type AND = new Type(0);
-		public static final Type OR = new Type(1);
+        protected final String   type;
 
-		private final int index;
+        private Type(String t) {
+            type = t;
+        }
 
-		private Type(int i) {
-			index = i;
-		}
-	};
+    };
 
-	private Type type;
+    private Type type;
 
-	public OperatorDescr() {
-		super(index++);
-	}
+    public OperatorDescr() {
+    }
 
-	public OperatorDescr(Type operatorType) {
-		super(index++);
-		this.type = operatorType;
-	}
+    public OperatorDescr(Type operatorType) {
+        this.type = operatorType;
+    }
 
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.OPERATOR;
-	}
+    public Type getType() {
+        return type;
+    }
 
-	public Type getType() {
-		return type;
-	}
+    public void setType(Type type) {
+        this.type = type;
+    }
 
-	public void setType(Type type) {
-		this.type = type;
-	}
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.OPERATOR;
+    }
+
 }

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/PackageComponent.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/PackageComponent.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/PackageComponent.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,25 @@
+package org.drools.verifier.components;
+
+import org.drools.verifier.data.VerifierComponent;
+
+public abstract class PackageComponent extends VerifierComponent {
+
+    private String packageName;
+    private String packageGuid;
+
+    public String getPackageName() {
+        return packageName;
+    }
+
+    public void setPackageName(String packageName) {
+        this.packageName = packageName;
+    }
+
+    public String getPackageGuid() {
+        return packageGuid;
+    }
+
+    public void setPackageGuid(String packageGuid) {
+        this.packageGuid = packageGuid;
+    }
+}

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Pattern.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Pattern.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Pattern.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -7,101 +7,88 @@
  *
  * @author Toni Rikkola
  */
-public class Pattern extends VerifierComponent implements Cause {
+public class Pattern extends PatternComponent
+    implements
+    Cause {
 
-	private static final long serialVersionUID = 5852308145251025423L;
+    private static final long     serialVersionUID = 5852308145251025423L;
 
-	private static int index = 0;
+    private String                objectTypeGuid;
+    private String                name;
+    private VerifierComponentType sourceType       = VerifierComponentType.UNKNOWN;
+    private String                sourceGuid;
 
-	private int ruleId;
-	private int objectTypeId;
-	private String name;
-	private VerifierComponentType sourceType = VerifierComponentType.NOTHING;
-	private int sourceId = -1;
+    private boolean               isPatternNot     = false;
+    private boolean               isPatternExists  = false;
+    private boolean               isPatternForall  = false;
 
-	private boolean isPatternNot = false;
-	private boolean isPatternExists = false;
-	private boolean isPatternForall = false;
+    public CauseType getCauseType() {
+        return CauseType.PATTERN;
+    }
 
-	public Pattern() {
-		super(index++);
-	}
+    public boolean isPatternNot() {
+        return isPatternNot;
+    }
 
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.PATTERN;
-	}
+    public void setPatternNot(boolean isNot) {
+        this.isPatternNot = isNot;
+    }
 
-	public CauseType getCauseType() {
-		return CauseType.PATTERN;
-	}
+    public boolean isPatternExists() {
+        return isPatternExists;
+    }
 
-	public boolean isPatternNot() {
-		return isPatternNot;
-	}
+    public void setPatternExists(boolean isExists) {
+        this.isPatternExists = isExists;
+    }
 
-	public void setPatternNot(boolean isNot) {
-		this.isPatternNot = isNot;
-	}
+    public String getObjectTypeGuid() {
+        return objectTypeGuid;
+    }
 
-	public int getRuleId() {
-		return ruleId;
-	}
+    public void setObjectTypeGuid(String guid) {
+        this.objectTypeGuid = guid;
+    }
 
-	public void setRuleId(int ruleId) {
-		this.ruleId = ruleId;
-	}
+    public boolean isPatternForall() {
+        return isPatternForall;
+    }
 
-	public boolean isPatternExists() {
-		return isPatternExists;
-	}
+    public void setPatternForall(boolean isForall) {
+        this.isPatternForall = isForall;
+    }
 
-	public void setPatternExists(boolean isExists) {
-		this.isPatternExists = isExists;
-	}
+    public String getSourceGuid() {
+        return sourceGuid;
+    }
 
-	public int getObjectTypeId() {
-		return objectTypeId;
-	}
+    public void setSourceGuid(String sourceGuid) {
+        this.sourceGuid = sourceGuid;
+    }
 
-	public void setClassId(int classId) {
-		this.objectTypeId = classId;
-	}
+    public VerifierComponentType getSourceType() {
+        return sourceType;
+    }
 
-	public boolean isPatternForall() {
-		return isPatternForall;
-	}
+    public void setSourceType(VerifierComponentType sourceType) {
+        this.sourceType = sourceType;
+    }
 
-	public void setPatternForall(boolean isForall) {
-		this.isPatternForall = isForall;
-	}
+    public String getName() {
+        return name;
+    }
 
-	public int getSourceId() {
-		return sourceId;
-	}
+    public void setName(String name) {
+        this.name = name;
+    }
 
-	public void setSourceId(int sourceId) {
-		this.sourceId = sourceId;
-	}
+    @Override
+    public String toString() {
+        return "Pattern, name: " + name;
+    }
 
-	public VerifierComponentType getSourceType() {
-		return sourceType;
-	}
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.PATTERN;
+    }
 
-	public void setSourceType(VerifierComponentType sourceType) {
-		this.sourceType = sourceType;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	@Override
-	public String toString() {
-		return "Pattern, name: " + name;
-	}
 }

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/PatternComponent.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/PatternComponent.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/PatternComponent.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,24 @@
+package org.drools.verifier.components;
+
+public abstract class PatternComponent extends RuleComponent {
+
+    private String patternName;
+    private String patternGuid;
+
+    public String getPatternName() {
+        return patternName;
+    }
+
+    public void setPatternName(String patternName) {
+        this.patternName = patternName;
+    }
+
+    public String getPatternGuid() {
+        return patternGuid;
+    }
+
+    public void setPatternGuid(String patternGuid) {
+        this.patternGuid = patternGuid;
+    }
+
+}

Deleted: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/PatternPossibility.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/PatternPossibility.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/PatternPossibility.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,72 +0,0 @@
-package org.drools.verifier.components;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import org.drools.verifier.report.components.Cause;
-import org.drools.verifier.report.components.CauseType;
-
-/**
- * Instance of this class represents a possible combination of Constraints under
- * one Pattern. Each possibility returns true if all the Constraints in the
- * combination are true.
- *
- * @author Toni Rikkola
- */
-public class PatternPossibility extends VerifierComponent implements
-		Possibility {
-	private static final long serialVersionUID = 8871361928380977116L;
-
-	private static int index = 0;
-
-	private int patternId;
-	private int ruleId;
-	private Set<Cause> items = new HashSet<Cause>();
-
-	public PatternPossibility() {
-		super(index++);
-	}
-
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.PATTERN_POSSIBILITY;
-	}
-
-	public CauseType getCauseType() {
-		return CauseType.PATTERN_POSSIBILITY;
-	}
-
-	public Set<Cause> getItems() {
-		return items;
-	}
-
-	public int getAmountOfItems() {
-		return items.size();
-	}
-
-	public int getPatternId() {
-		return patternId;
-	}
-
-	public int getRuleId() {
-		return ruleId;
-	}
-
-	public void setRuleId(int ruleId) {
-		this.ruleId = ruleId;
-	}
-
-	public void setPatternId(int patternId) {
-		this.patternId = patternId;
-	}
-
-	public void add(Restriction restriction) {
-		items.add(restriction);
-	}
-
-	@Override
-	public String toString() {
-		return "PatternPossibility from rule: " + ruleName
-				+ ", amount of items:" + items.size();
-	}
-}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Possibility.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Possibility.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Possibility.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -8,9 +8,11 @@
  * 
  * @author Toni Rikkola
  */
-public interface Possibility extends Cause {
+public interface Possibility
+    extends
+    Cause {
 
-	public Set<Cause> getItems();
-	
-	public int getAmountOfItems();
+    public Set<Cause> getItems();
+
+    public int getAmountOfItems();
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/QualifiedIdentifierRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/QualifiedIdentifierRestriction.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/QualifiedIdentifierRestriction.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,52 +1,51 @@
 package org.drools.verifier.components;
 
-
 /**
  * 
  * @author Toni Rikkola
  */
-public class QualifiedIdentifierRestriction extends Restriction  {
+public class QualifiedIdentifierRestriction extends Restriction {
 
-	private int variableId;
-	private String variableName;
-	private String variablePath;
+    private String variableGuid;
+    private String variableName;
+    private String variablePath;
 
-	@Override
-	public RestrictionType getRestrictionType() {
-		return RestrictionType.QUALIFIED_IDENTIFIER;
-	}
+    @Override
+    public RestrictionType getRestrictionType() {
+        return RestrictionType.QUALIFIED_IDENTIFIER;
+    }
 
-	public String getValueAsString() {
-		return variablePath + "." + variableName;
-	}
+    public String getValueAsString() {
+        return variablePath + "." + variableName;
+    }
 
-	public int getVariableId() {
-		return variableId;
-	}
+    public String getVariableGuid() {
+        return variableGuid;
+    }
 
-	public void setVariableId(int variableId) {
-		this.variableId = variableId;
-	}
+    public void setVariableGuid(String variableGuid) {
+        this.variableGuid = variableGuid;
+    }
 
-	public String getVariableName() {
-		return variableName;
-	}
+    public String getVariableName() {
+        return variableName;
+    }
 
-	public void setVariableName(String variableName) {
-		this.variableName = variableName;
-	}
+    public void setVariableName(String variableName) {
+        this.variableName = variableName;
+    }
 
-	public String getVariablePath() {
-		return variablePath;
-	}
+    public String getVariablePath() {
+        return variablePath;
+    }
 
-	public void setVariablePath(String variablePath) {
-		this.variablePath = variablePath;
-	}
+    public void setVariablePath(String variablePath) {
+        this.variablePath = variablePath;
+    }
 
-	@Override
-	public String toString() {
-		return "QualifiedIdentifierRestriction name: " + variableName
-				+ variablePath;
-	}
+    @Override
+    public String toString() {
+        return "QualifiedIdentifierRestriction name: " + variableName + variablePath;
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Restriction.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Restriction.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Restriction.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -8,95 +8,72 @@
  * 
  * @author Toni Rikkola
  */
-public abstract class Restriction extends VerifierComponent implements Cause {
+public abstract class Restriction extends PatternComponent
+    implements
+    Cause {
 
-	public static class RestrictionType {
-		public static final RestrictionType LITERAL = new RestrictionType(0);
-		public static final RestrictionType VARIABLE = new RestrictionType(1);
-		public static final RestrictionType QUALIFIED_IDENTIFIER = new RestrictionType(
-				2);
-		public static final RestrictionType RETURN_VALUE_RESTRICTION = new RestrictionType(
-				3);
-		public static final RestrictionType ENUM = new RestrictionType(4);
+    public static class RestrictionType {
+        public static final RestrictionType LITERAL                  = new RestrictionType( "LITERAL" );
+        public static final RestrictionType VARIABLE                 = new RestrictionType( "VARIABLE" );
+        public static final RestrictionType QUALIFIED_IDENTIFIER     = new RestrictionType( "QUALIFIED_IDENTIFIER" );
+        public static final RestrictionType RETURN_VALUE_RESTRICTION = new RestrictionType( "RETURN_VALUE_RESTRICTION" );
+        public static final RestrictionType ENUM                     = new RestrictionType( "ENUM" );
 
-		private final int index;
+        protected final String              type;
 
-		private RestrictionType(int i) {
-			index = i;
-		}
-	}
+        private RestrictionType(String t) {
+            type = t;
+        }
+    }
 
-	private static int index = 0;
+    private boolean    patternIsNot;
+    private String     constraintGuid;
 
-	private int patternId;
-	private boolean patternIsNot;
-	private int constraintId;
+    // Id of the field that this restriction is related to.
+    private String     fieldGuid;
 
-	// Id of the field that this restriction is related to.
-	private int fieldId;
+    protected Operator operator;
 
-	protected Operator operator;
+    public CauseType getCauseType() {
+        return CauseType.RESTRICTION;
+    }
 
-	public Restriction() {
-		super(index++);
-	}
+    public abstract RestrictionType getRestrictionType();
 
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.RESTRICTION;
-	}
+    @Override
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.RESTRICTION;
+    }
 
-	public CauseType getCauseType() {
-		return CauseType.RESTRICTION;
-	}
+    public Operator getOperator() {
+        return operator;
+    }
 
-	public abstract RestrictionType getRestrictionType();
+    public void setOperator(Operator operator) {
+        this.operator = operator;
+    }
 
-	public Operator getOperator() {
-		return operator;
-	}
+    public String getConstraintGuid() {
+        return constraintGuid;
+    }
 
-	public void setOperator(Operator operator) {
-		this.operator = operator;
-	}
+    public void setConstraintGuid(String constraintGuid) {
+        this.constraintGuid = constraintGuid;
+    }
 
-	public int getConstraintId() {
-		return constraintId;
-	}
+    public String getFieldGuid() {
+        return fieldGuid;
+    }
 
-	public void setConstraintId(int constraintId) {
-		this.constraintId = constraintId;
-	}
+    public void setFieldGuid(String guid) {
+        this.fieldGuid = guid;
+    }
 
-	public int getRuleId() {
-		return ruleId;
-	}
+    public boolean isPatternIsNot() {
+        return patternIsNot;
+    }
 
-	public void setRuleId(int ruleId) {
-		this.ruleId = ruleId;
-	}
-
-	public int getPatternId() {
-		return patternId;
-	}
-
-	public void setPatternId(int patternId) {
-		this.patternId = patternId;
-	}
-
-	public int getFieldId() {
-		return fieldId;
-	}
-
-	public void setFieldId(int fieldId) {
-		this.fieldId = fieldId;
-	}
-
-	public boolean isPatternIsNot() {
-		return patternIsNot;
-	}
-
-	public void setPatternIsNot(boolean patternIsNot) {
-		this.patternIsNot = patternIsNot;
-	}
+    public void setPatternIsNot(boolean patternIsNot) {
+        this.patternIsNot = patternIsNot;
+    }
 }

Deleted: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ReturValueFieldDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ReturValueFieldDescr.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ReturValueFieldDescr.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,9 +0,0 @@
-package org.drools.verifier.components;
-
-/**
- * 
- * @author Toni Rikkola
- */
-public class ReturValueFieldDescr {
-
-}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ReturnValueFieldDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ReturnValueFieldDescr.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ReturnValueFieldDescr.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,13 @@
+package org.drools.verifier.components;
+
+/**
+ * 
+ * @author Toni Rikkola
+ */
+public class ReturnValueFieldDescr extends PatternComponent {
+
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.RETURN_VALUE_FIELD_DESCR;
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ReturnValueRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ReturnValueRestriction.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ReturnValueRestriction.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -6,38 +6,41 @@
  * 
  * @author Toni Rikkola
  */
-public class ReturnValueRestriction extends Restriction implements Cause {
+public class ReturnValueRestriction extends Restriction
+    implements
+    Cause {
 
-	private Object content;
-	private String[] declarations;
-	private String classMethodName;
+    private Object   content;
+    private String[] declarations;
+    private String   classMethodName;
 
-	@Override
-	public RestrictionType getRestrictionType() {
-		return RestrictionType.RETURN_VALUE_RESTRICTION;
-	}
+    @Override
+    public RestrictionType getRestrictionType() {
+        return RestrictionType.RETURN_VALUE_RESTRICTION;
+    }
 
-	public String getClassMethodName() {
-		return classMethodName;
-	}
+    public String getClassMethodName() {
+        return classMethodName;
+    }
 
-	public void setClassMethodName(String classMethodName) {
-		this.classMethodName = classMethodName;
-	}
+    public void setClassMethodName(String classMethodName) {
+        this.classMethodName = classMethodName;
+    }
 
-	public Object getContent() {
-		return content;
-	}
+    public Object getContent() {
+        return content;
+    }
 
-	public void setContent(Object content) {
-		this.content = content;
-	}
+    public void setContent(Object content) {
+        this.content = content;
+    }
 
-	public String[] getDeclarations() {
-		return declarations;
-	}
+    public String[] getDeclarations() {
+        return declarations;
+    }
 
-	public void setDeclarations(String[] declarations) {
-		this.declarations = declarations;
-	}
+    public void setDeclarations(String[] declarations) {
+        this.declarations = declarations;
+    }
+
 }

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/RuleComponent.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/RuleComponent.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/RuleComponent.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,54 @@
+package org.drools.verifier.components;
+
+public abstract class RuleComponent extends PackageComponent
+    implements
+    ChildComponent {
+
+    private String                ruleName;
+    private String                ruleGuid;
+
+    private VerifierComponentType parentType;
+    private String                parentGuid;
+    private int                   orderNumber;
+
+    public String getRuleName() {
+        return ruleName;
+    }
+
+    public void setRuleName(String ruleName) {
+        this.ruleName = ruleName;
+    }
+
+    public String getRuleGuid() {
+        return ruleGuid;
+    }
+
+    public void setRuleGuid(String ruleGuid) {
+        this.ruleGuid = ruleGuid;
+    }
+
+    public VerifierComponentType getParentType() {
+        return parentType;
+    }
+
+    public String getParentGuid() {
+        return parentGuid;
+    }
+
+    public int getOrderNumber() {
+        return orderNumber;
+    }
+
+    public void setParentType(VerifierComponentType parentType) {
+        this.parentType = parentType;
+    }
+
+    public void setParentGuid(String parentGuid) {
+        this.parentGuid = parentGuid;
+    }
+
+    public void setOrderNumber(int orderNumber) {
+        this.orderNumber = orderNumber;
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/RulePackage.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/RulePackage.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/RulePackage.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -7,41 +7,34 @@
  * 
  * @author Toni Rikkola
  */
-public class RulePackage extends VerifierComponent {
+public class RulePackage extends PackageComponent {
 
-	private static int index = 0;
+    private int               offset = 0;
+    private String            name;
+    private Set<VerifierRule> rules  = new HashSet<VerifierRule>();
 
-	private int offset = 0;
-	private String name;
-	private Set<VerifierRule> rules = new HashSet<VerifierRule>();
-
-	public RulePackage() {
-		super(index++);
-	}
-
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.RULE_PACKAGE;
-	}
-	
-	public int getOffset(){ 
-	    offset++;
+    public int getOffset() {
+        offset++;
         return offset % 2;
-	}	
+    }
 
-	public String getName() {
-		return name;
-	}
+    public String getName() {
+        return name;
+    }
 
-	public void setName(String name) {
-		this.name = name;
-	}
+    public void setName(String name) {
+        this.name = name;
+    }
 
-	public Set<VerifierRule> getRules() {
-		return rules;
-	}
+    public Set<VerifierRule> getRules() {
+        return rules;
+    }
 
-	public void setRules(Set<VerifierRule> rules) {
-		this.rules = rules;
-	}
+    public void setRules(Set<VerifierRule> rules) {
+        this.rules = rules;
+    }
+
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.RULE_PACKAGE;
+    }
 }

Deleted: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/RulePossibility.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/RulePossibility.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/RulePossibility.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,64 +0,0 @@
-package org.drools.verifier.components;
-
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.drools.verifier.report.components.Cause;
-import org.drools.verifier.report.components.CauseType;
-
-/**
- * Instance of this class represents a possible combination of
- * PatternPosibilities under one Rule. Each possibility returns true if all the
- * PatternPosibilities in the combination are true.
- *
- * @author Toni Rikkola
- */
-public class RulePossibility extends VerifierComponent implements
-		Serializable, Possibility {
-	private static final long serialVersionUID = 8871361928380977116L;
-
-	private static int index = 0;
-
-	private int ruleId;
-	private Set<Cause> items = new HashSet<Cause>();
-
-	public RulePossibility() {
-		super(index++);
-	}
-
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.RULE_POSSIBILITY;
-	}
-
-	public CauseType getCauseType() {
-		return CauseType.RULE_POSSIBILITY;
-	}
-
-	public Set<Cause> getItems() {
-		return items;
-	}
-
-	public int getAmountOfItems() {
-		return items.size();
-	}
-
-	public int getRuleId() {
-		return ruleId;
-	}
-
-	public void setRuleId(int ruleId) {
-		this.ruleId = ruleId;
-	}
-
-	public void add(PatternPossibility patternPossibility) {
-		items.add(patternPossibility);
-	}
-
-	@Override
-	public String toString() {
-		return "RulePossibility from rule: " + ruleName + ", amount of items:"
-				+ items.size();
-	}
-}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/SubPattern.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/SubPattern.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/SubPattern.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,48 @@
+package org.drools.verifier.components;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.drools.verifier.report.components.Cause;
+import org.drools.verifier.report.components.CauseType;
+
+/**
+ * Instance of this class represents a possible combination of Constraints under
+ * one Pattern. Each possibility returns true if all the Constraints in the
+ * combination are true.
+ *
+ * @author Toni Rikkola
+ */
+public class SubPattern extends PatternComponent
+    implements
+    Possibility {
+    private static final long serialVersionUID = 8871361928380977116L;
+
+    private Set<Cause>        items            = new HashSet<Cause>();
+
+    public CauseType getCauseType() {
+        return CauseType.PATTERN_POSSIBILITY;
+    }
+
+    public Set<Cause> getItems() {
+        return items;
+    }
+
+    public int getAmountOfItems() {
+        return items.size();
+    }
+
+    public void add(Restriction restriction) {
+        items.add( restriction );
+    }
+
+    @Override
+    public String toString() {
+        return "PatternPossibility from rule: " + getRuleName() + ", amount of items:" + items.size();
+    }
+
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.PATTERN_POSSIBILITY;
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/SubRule.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/SubRule.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/SubRule.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,49 @@
+package org.drools.verifier.components;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.drools.verifier.report.components.Cause;
+import org.drools.verifier.report.components.CauseType;
+
+/**
+ * Instance of this class represents a possible combination of
+ * PatternPosibilities under one Rule. Each possibility returns true if all the
+ * PatternPosibilities in the combination are true.
+ *
+ * @author Toni Rikkola
+ */
+public class SubRule extends RuleComponent
+    implements
+    Serializable,
+    Possibility {
+    private static final long serialVersionUID = 8871361928380977116L;
+
+    private Set<Cause>        items            = new HashSet<Cause>();
+
+    public CauseType getCauseType() {
+        return CauseType.RULE_POSSIBILITY;
+    }
+
+    public Set<Cause> getItems() {
+        return items;
+    }
+
+    public int getAmountOfItems() {
+        return items.size();
+    }
+
+    public void add(SubPattern patternPossibility) {
+        items.add( patternPossibility );
+    }
+
+    @Override
+    public String toString() {
+        return "RulePossibility from rule: " + getRuleName() + ", amount of items:" + items.size();
+    }
+
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.RULE_POSSIBILITY;
+    }
+}

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/TextConsequence.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/TextConsequence.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/TextConsequence.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -2,33 +2,29 @@
 
 import org.drools.verifier.report.components.CauseType;
 
-public class TextConsequence extends VerifierComponent implements Consequence {
+public class TextConsequence extends RuleComponent
+    implements
+    Consequence {
 
-	private static int index = 0;
-	private String text;
+    private String text;
 
-	public TextConsequence() {
-		super(index++);
-	}
+    public ConsequenceType getConsequenceType() {
+        return ConsequenceType.TEXT;
+    }
 
-	public ConsequenceType getConsequenceType() {
-		return ConsequenceType.TEXT;
-	}
+    public CauseType getCauseType() {
+        return CauseType.CONSEQUENCE;
+    }
 
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.CONSEQUENCE;
-	}
+    public void setText(String text) {
+        this.text = text;
+    }
 
-	public CauseType getCauseType() {
-		return CauseType.CONSEQUENCE;
-	}
+    public String getText() {
+        return text;
+    }
 
-	public void setText(String text) {
-		this.text = text;
-	}
-
-	public String getText() {
-		return text;
-	}
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.CONSEQUENCE;
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Variable.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Variable.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Variable.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -4,70 +4,55 @@
  * 
  * @author Toni Rikkola
  */
-public class Variable extends VerifierComponent {
+public class Variable extends RuleComponent {
 
-	private static int index;
+    private String objectTypeGuid;
+    private String objectTypeType;
+    private String objectTypeName;
 
-	private int ruleId;
-	private VerifierComponentType objectType;
-	private int objectId;
-	private String objectName;
-	private String name;
+    public String getObjectTypeName() {
+        return objectTypeName;
+    }
 
-	public Variable() {
-		super(index++);
-	}
+    public void setObjectTypeName(String objectTypeName) {
+        this.objectTypeName = objectTypeName;
+    }
 
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.VARIABLE;
-	}
+    private String name;
 
-	public int getRuleId() {
-		return ruleId;
-	}
+    public String getObjectTypeGuid() {
+        return objectTypeGuid;
+    }
 
-	public void setRuleId(int ruleId) {
-		this.ruleId = ruleId;
-	}
+    public void setObjectTypeGuid(String guid) {
+        this.objectTypeGuid = guid;
+    }
 
-	public int getObjectId() {
-		return objectId;
-	}
+    public void setObjectTypeType(String type) {
+        // VerifierComponentType.OBJECT_TYPE dominates VerifierComponentType.FIELD.
+        if ( this.objectTypeType == null || !VerifierComponentType.OBJECT_TYPE.getType().equals( this.objectTypeType ) ) {
+            this.objectTypeType = type;
+        }
+    }
 
-	public void setObjectId(int variableId) {
-		this.objectId = variableId;
-	}
+    public String getName() {
+        return name;
+    }
 
-	public VerifierComponentType getObjectType() {
-		return objectType;
-	}
+    public void setName(String name) {
+        this.name = name;
+    }
 
-	public void setObjectType(VerifierComponentType type) {
-		// VerifierComponentType.CLASS dominates VerifierComponentType.FIELD.
-		if (objectType == null || objectType != VerifierComponentType.CLASS) {
-			this.objectType = type;
-		}
-	}
+    public String getObjectTypeType() {
+        return objectTypeType;
+    }
 
-	public String getName() {
-		return name;
-	}
+    @Override
+    public String toString() {
+        return "Variable name: " + name;
+    }
 
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getObjectName() {
-		return objectName;
-	}
-
-	public void setObjectName(String objectName) {
-		this.objectName = objectName;
-	}
-
-	@Override
-	public String toString() {
-		return "Variable name: " + name;
-	}
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.VARIABLE;
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VariableRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VariableRestriction.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VariableRestriction.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -6,25 +6,27 @@
  * 
  * @author Toni Rikkola
  */
-public class VariableRestriction extends Restriction implements Cause {
+public class VariableRestriction extends Restriction
+    implements
+    Cause {
 
-	protected Variable variable;
+    protected Variable variable;
 
-	public Variable getVariable() {
-		return variable;
-	}
+    public Variable getVariable() {
+        return variable;
+    }
 
-	public void setVariable(Variable variable) {
-		this.variable = variable;
-	}
+    public void setVariable(Variable variable) {
+        this.variable = variable;
+    }
 
-	public RestrictionType getRestrictionType() {
-		return Restriction.RestrictionType.VARIABLE;
-	}
+    public RestrictionType getRestrictionType() {
+        return Restriction.RestrictionType.VARIABLE;
+    }
 
-	@Override
-	public String toString() {
-		return "VariableRestriction from rule '" + ruleName + "' variable '"
-				+ variable + "'";
-	}
+    @Override
+    public String toString() {
+        return "VariableRestriction from rule '" + getRuleName() + "' variable '" + variable + "'";
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierAccessorDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierAccessorDescr.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierAccessorDescr.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -4,16 +4,9 @@
  * 
  * @author Toni Rikkola
  */
-public class VerifierAccessorDescr extends VerifierComponent {
+public class VerifierAccessorDescr extends PatternComponent {
 
-	private static int index = 0;
-
-	public VerifierAccessorDescr() {
-		super(index++);
-	}
-
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.ACCESSOR;
-	}
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.ACCESSOR;
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierAccumulateDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierAccumulateDescr.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierAccumulateDescr.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,111 +1,103 @@
 package org.drools.verifier.components;
 
-
 /**
  * 
  * @author Toni Rikkola
  */
-public class VerifierAccumulateDescr extends VerifierComponent {
+public class VerifierAccumulateDescr extends PatternComponent {
 
-	private static int index = 0;
+    private String   inputPatternGuid;
+    private String   initCode;
+    private String   actionCode;
+    private String   reverseCode;
+    private String   resultCode;
+    private String[] declarations;
+    private String   className;
+    private boolean  externalFunction = false;
+    private String   functionIdentifier;
+    private String   expression;
 
-	private int inputPatternId;
-	private String initCode;
-	private String actionCode;
-	private String reverseCode;
-	private String resultCode;
-	private String[] declarations;
-	private String className;
-	private boolean externalFunction = false;
-	private String functionIdentifier;
-	private String expression;
+    public String getActionCode() {
+        return actionCode;
+    }
 
-	public VerifierAccumulateDescr() {
-		super(index++);
-	}
+    public void setActionCode(String actionCode) {
+        this.actionCode = actionCode;
+    }
 
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.ACCUMULATE;
-	}
+    public String getClassName() {
+        return className;
+    }
 
-	public String getActionCode() {
-		return actionCode;
-	}
+    public void setClassName(String className) {
+        this.className = className;
+    }
 
-	public void setActionCode(String actionCode) {
-		this.actionCode = actionCode;
-	}
+    public String[] getDeclarations() {
+        return declarations;
+    }
 
-	public String getClassName() {
-		return className;
-	}
+    public void setDeclarations(String[] declarations) {
+        this.declarations = declarations;
+    }
 
-	public void setClassName(String className) {
-		this.className = className;
-	}
+    public String getExpression() {
+        return expression;
+    }
 
-	public String[] getDeclarations() {
-		return declarations;
-	}
+    public void setExpression(String expression) {
+        this.expression = expression;
+    }
 
-	public void setDeclarations(String[] declarations) {
-		this.declarations = declarations;
-	}
+    public boolean isExternalFunction() {
+        return externalFunction;
+    }
 
-	public String getExpression() {
-		return expression;
-	}
+    public void setExternalFunction(boolean externalFunction) {
+        this.externalFunction = externalFunction;
+    }
 
-	public void setExpression(String expression) {
-		this.expression = expression;
-	}
+    public String getFunctionIdentifier() {
+        return functionIdentifier;
+    }
 
-	public boolean isExternalFunction() {
-		return externalFunction;
-	}
+    public void setFunctionIdentifier(String functionIdentifier) {
+        this.functionIdentifier = functionIdentifier;
+    }
 
-	public void setExternalFunction(boolean externalFunction) {
-		this.externalFunction = externalFunction;
-	}
+    public String getInitCode() {
+        return initCode;
+    }
 
-	public String getFunctionIdentifier() {
-		return functionIdentifier;
-	}
+    public void setInitCode(String initCode) {
+        this.initCode = initCode;
+    }
 
-	public void setFunctionIdentifier(String functionIdentifier) {
-		this.functionIdentifier = functionIdentifier;
-	}
+    public String getInputPatternGuid() {
+        return inputPatternGuid;
+    }
 
-	public String getInitCode() {
-		return initCode;
-	}
+    public void setInputPatternGuid(String inputPatternGuid) {
+        this.inputPatternGuid = inputPatternGuid;
+    }
 
-	public void setInitCode(String initCode) {
-		this.initCode = initCode;
-	}
+    public String getResultCode() {
+        return resultCode;
+    }
 
-	public int getInputPatternId() {
-		return inputPatternId;
-	}
+    public void setResultCode(String resultCode) {
+        this.resultCode = resultCode;
+    }
 
-	public void setInputPatternId(int inputPatternId) {
-		this.inputPatternId = inputPatternId;
-	}
+    public String getReverseCode() {
+        return reverseCode;
+    }
 
-	public String getResultCode() {
-		return resultCode;
-	}
+    public void setReverseCode(String reverseCode) {
+        this.reverseCode = reverseCode;
+    }
 
-	public void setResultCode(String resultCode) {
-		this.resultCode = resultCode;
-	}
-
-	public String getReverseCode() {
-		return reverseCode;
-	}
-
-	public void setReverseCode(String reverseCode) {
-		this.reverseCode = reverseCode;
-	}
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.ACCUMULATE;
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierCollectDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierCollectDescr.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierCollectDescr.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -4,35 +4,28 @@
  * 
  * @author Toni Rikkola
  */
-public class VerifierCollectDescr extends VerifierComponent {
+public class VerifierCollectDescr extends RuleComponent {
 
-	private static int index = 0;
+    private String insidePatternGuid;
+    private String classMethodName;
 
-	private int insidePatternId;
-	private String classMethodName;
+    public String getInsidePatternGuid() {
+        return insidePatternGuid;
+    }
 
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.COLLECT;
-	}
+    public void setInsidePatternGuid(String guid) {
+        this.insidePatternGuid = guid;
+    }
 
-	public int getInsidePatternId() {
-		return insidePatternId;
-	}
+    public String getClassMethodName() {
+        return classMethodName;
+    }
 
-	public void setInsidePatternId(int insidePatternId) {
-		this.insidePatternId = insidePatternId;
-	}
+    public void setClassMethodName(String classMethodName) {
+        this.classMethodName = classMethodName;
+    }
 
-	public String getClassMethodName() {
-		return classMethodName;
-	}
-
-	public void setClassMethodName(String classMethodName) {
-		this.classMethodName = classMethodName;
-	}
-
-	public VerifierCollectDescr() {
-		super(index++);
-	}
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.COLLECT;
+    }
 }

Deleted: 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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierComponent.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,68 +0,0 @@
-package org.drools.verifier.components;
-
-/**
- * 
- * @author Toni Rikkola
- */
-public abstract class VerifierComponent implements
-		Comparable<VerifierComponent> {
-
-	protected String ruleName;
-	protected int ruleId;
-	protected final int id;
-
-	protected VerifierComponent parent;
-
-	// Order number of this instance under parent.
-	protected int orderNumber = 0;
-
-	public abstract VerifierComponentType getComponentType();
-
-	public int compareTo(VerifierComponent o) {
-		if (id == o.getId()) {
-			return 0;
-		}
-
-		return (id > o.getId() ? 1 : -1);
-	}
-
-	public VerifierComponent(int id) {
-		this.id = id;
-	}
-
-	public int getId() {
-		return id;
-	}
-
-	public String getRuleName() {
-		return ruleName;
-	}
-
-	public void setRuleName(String ruleName) {
-		this.ruleName = ruleName;
-	}
-
-	public VerifierComponent getParent() {
-		return parent;
-	}
-
-	public void setParent(VerifierComponent parent) {
-		this.parent = parent;
-	}
-
-	public int getOrderNumber() {
-		return orderNumber;
-	}
-
-	public void setOrderNumber(int orderNumber) {
-		this.orderNumber = orderNumber;
-	}
-
-	public int getRuleId() {
-		return ruleId;
-	}
-
-	public void setRuleId(int ruleId) {
-		this.ruleId = ruleId;
-	}
-}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierComponentType.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierComponentType.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierComponentType.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -4,34 +4,50 @@
  * 
  * @author Toni Rikkola
  */
-public class VerifierComponentType{
-	public static final VerifierComponentType NOTHING = new VerifierComponentType(0);
-	public static final VerifierComponentType CLASS = new VerifierComponentType(1);
-	public static final VerifierComponentType FIELD = new VerifierComponentType(2);
-	public static final VerifierComponentType RULE = new VerifierComponentType(3);
-	public static final VerifierComponentType CONSTRAINT = new VerifierComponentType(4);
-	public static final VerifierComponentType VARIABLE = new VerifierComponentType(5);
-	public static final VerifierComponentType PATTERN = new VerifierComponentType(6);
-	public static final VerifierComponentType PATTERN_POSSIBILITY = new VerifierComponentType(7);
-	public static final VerifierComponentType RULE_POSSIBILITY = new VerifierComponentType(8);
-	public static final VerifierComponentType RESTRICTION =new VerifierComponentType(9);
-	public static final VerifierComponentType OPERATOR = new VerifierComponentType(10);
-	public static final VerifierComponentType FIELD_CLASS_LINK = new VerifierComponentType(11);
-	public static final VerifierComponentType COLLECT = new VerifierComponentType(12);
-	public static final VerifierComponentType ACCUMULATE = new VerifierComponentType(13);
-	public static final VerifierComponentType FROM = new VerifierComponentType(14);
-	public static final VerifierComponentType EVAL = new VerifierComponentType(15);
-	public static final VerifierComponentType PREDICATE = new VerifierComponentType(16);
-	public static final VerifierComponentType METHOD_ACCESSOR = new VerifierComponentType(17);
-	public static final VerifierComponentType FIELD_ACCESSOR = new VerifierComponentType(18);
-	public static final VerifierComponentType FUNCTION_CALL = new VerifierComponentType(19);
-	public static final VerifierComponentType ACCESSOR = new VerifierComponentType(20);
-	public static final VerifierComponentType RULE_PACKAGE = new VerifierComponentType(21);
-	public static final VerifierComponentType CONSEQUENCE = new VerifierComponentType(22);
+public class VerifierComponentType
+    implements
+    Comparable<VerifierComponentType> {
+    public static final VerifierComponentType UNKNOWN                  = new VerifierComponentType( "UNKNOWN" );
+    public static final VerifierComponentType FIELD                    = new VerifierComponentType( "FIELD" );
+    public static final VerifierComponentType RULE                     = new VerifierComponentType( "RULE" );
+    public static final VerifierComponentType CONSTRAINT               = new VerifierComponentType( "CONSTRAINT" );
+    public static final VerifierComponentType VARIABLE                 = new VerifierComponentType( "VARIABLE" );
+    public static final VerifierComponentType PATTERN                  = new VerifierComponentType( "PATTERN" );
+    public static final VerifierComponentType PATTERN_POSSIBILITY      = new VerifierComponentType( "PATTERN_POSSIBILITY" );
+    public static final VerifierComponentType RULE_POSSIBILITY         = new VerifierComponentType( "RULE_POSSIBILITY" );
+    public static final VerifierComponentType RESTRICTION              = new VerifierComponentType( "RESTRICTION" );
+    public static final VerifierComponentType OPERATOR                 = new VerifierComponentType( "OPERATOR" );
+    public static final VerifierComponentType FIELD_OBJECT_TYPE_LINK   = new VerifierComponentType( "FIELD_CLASS_LINK" );
+    public static final VerifierComponentType COLLECT                  = new VerifierComponentType( "COLLECT" );
+    public static final VerifierComponentType ACCUMULATE               = new VerifierComponentType( "ACCUMULATE" );
+    public static final VerifierComponentType FROM                     = new VerifierComponentType( "FROM" );
+    public static final VerifierComponentType EVAL                     = new VerifierComponentType( "EVAL" );
+    public static final VerifierComponentType PREDICATE                = new VerifierComponentType( "PREDICATE" );
+    public static final VerifierComponentType METHOD_ACCESSOR          = new VerifierComponentType( "METHOD_ACCESSOR" );
+    public static final VerifierComponentType FIELD_ACCESSOR           = new VerifierComponentType( "FIELD_ACCESSOR" );
+    public static final VerifierComponentType FUNCTION_CALL            = new VerifierComponentType( "FUNCTION_CALL" );
+    public static final VerifierComponentType ACCESSOR                 = new VerifierComponentType( "ACCESSOR" );
+    public static final VerifierComponentType RULE_PACKAGE             = new VerifierComponentType( "RULE_PACKAGE" );
+    public static final VerifierComponentType CONSEQUENCE              = new VerifierComponentType( "CONSEQUENCE" );
+    public static final VerifierComponentType OBJECT_TYPE              = new VerifierComponentType( "OBJECT_TYPE" );
+    public static final VerifierComponentType INLINE_EVAL_DESCR        = new VerifierComponentType( "INLINE_EVAL_DESCR" );
+    public static final VerifierComponentType RETURN_VALUE_FIELD_DESCR = new VerifierComponentType( "RETURN_VALUE_FIELD_DESCR" );
 
-	private final int index;
+    private final String                      type;
 
-	private VerifierComponentType(int i) {
-		index = i;
-	}
+    public VerifierComponentType(String t) {
+        type = t;
+    }
+
+    public int compareTo(VerifierComponentType another) {
+        return getType().compareTo( another.getType() );
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public String toString() {
+        return "VerifierComponentType." + type;
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierEvalDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierEvalDescr.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierEvalDescr.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -7,44 +7,39 @@
  *
  * @author Toni Rikkola
  */
-public class VerifierEvalDescr extends VerifierComponent implements Cause {
+public class VerifierEvalDescr extends RuleComponent
+    implements
+    Cause {
 
-	private static int index = 0;
+    private String content;
+    private String classMethodName;
 
-	private String content;
-	private String classMethodName;
+    public CauseType getCauseType() {
+        return CauseType.EVAL;
+    }
 
-	public VerifierEvalDescr() {
-		super(index++);
-	}
+    public String getClassMethodName() {
+        return classMethodName;
+    }
 
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.EVAL;
-	}
+    public void setClassMethodName(String classMethodName) {
+        this.classMethodName = classMethodName;
+    }
 
-	public CauseType getCauseType() {
-		return CauseType.EVAL;
-	}
+    public String getContent() {
+        return content;
+    }
 
-	public String getClassMethodName() {
-		return classMethodName;
-	}
+    public void setContent(String content) {
+        this.content = content;
+    }
 
-	public void setClassMethodName(String classMethodName) {
-		this.classMethodName = classMethodName;
-	}
+    @Override
+    public String toString() {
+        return "Eval, content: " + content;
+    }
 
-	public String getContent() {
-		return content;
-	}
-
-	public void setContent(String content) {
-		this.content = content;
-	}
-
-	@Override
-	public String toString() {
-		return "Eval, content: " + content;
-	}
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.EVAL;
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierFieldAccessDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierFieldAccessDescr.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierFieldAccessDescr.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -4,35 +4,28 @@
  * 
  * @author Toni Rikkola
  */
-public class VerifierFieldAccessDescr extends VerifierComponent {
+public class VerifierFieldAccessDescr extends RuleComponent {
 
-	private static int index = 0;
+    private String fieldName;
+    private String argument;
 
-	private String fieldName;
-	private String argument;
+    public String getArgument() {
+        return argument;
+    }
 
-	public VerifierFieldAccessDescr() {
-		super(index++);
-	}
+    public void setArgument(String argument) {
+        this.argument = argument;
+    }
 
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.FIELD_ACCESSOR;
-	}
+    public String getFieldName() {
+        return fieldName;
+    }
 
-	public String getArgument() {
-		return argument;
-	}
+    public void setFieldName(String fieldName) {
+        this.fieldName = fieldName;
+    }
 
-	public void setArgument(String argument) {
-		this.argument = argument;
-	}
-
-	public String getFieldName() {
-		return fieldName;
-	}
-
-	public void setFieldName(String fieldName) {
-		this.fieldName = fieldName;
-	}
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.FIELD_ACCESSOR;
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierFromDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierFromDescr.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierFromDescr.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -4,35 +4,28 @@
  * 
  * @author Toni Rikkola
  */
-public class VerifierFromDescr extends VerifierComponent {
+public class VerifierFromDescr extends RuleComponent {
 
-	private static int index = 0;
+    private VerifierComponentType dataSourceType;
+    private String                dataSourceGuid;
 
-	private VerifierComponentType dataSourceType;
-	private int dataSourceId;
+    public String getDataSourceGuid() {
+        return dataSourceGuid;
+    }
 
-	public VerifierFromDescr() {
-		super(index++);
-	}
+    public void setDataSourceGuid(String guid) {
+        this.dataSourceGuid = guid;
+    }
 
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.FROM;
-	}
+    public VerifierComponentType getDataSourceType() {
+        return dataSourceType;
+    }
 
-	public int getDataSourceId() {
-		return dataSourceId;
-	}
+    public void setDataSourceType(VerifierComponentType dataSourceType) {
+        this.dataSourceType = dataSourceType;
+    }
 
-	public void setDataSourceId(int dataSourceId) {
-		this.dataSourceId = dataSourceId;
-	}
-
-	public VerifierComponentType getDataSourceType() {
-		return dataSourceType;
-	}
-
-	public void setDataSourceType(VerifierComponentType dataSourceType) {
-		this.dataSourceType = dataSourceType;
-	}
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.FROM;
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierFunctionCallDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierFunctionCallDescr.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierFunctionCallDescr.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -4,35 +4,28 @@
  * 
  * @author Toni Rikkola
  */
-public class VerifierFunctionCallDescr extends VerifierComponent {
+public class VerifierFunctionCallDescr extends RuleComponent {
 
-	private static int index = 0;
+    private String name;
+    private String arguments;
 
-	private String name;
-	private String arguments;
+    public String getArguments() {
+        return arguments;
+    }
 
-	public VerifierFunctionCallDescr() {
-		super(index++);
-	}
+    public void setArguments(String arguments) {
+        this.arguments = arguments;
+    }
 
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.FUNCTION_CALL;
-	}
+    public String getName() {
+        return name;
+    }
 
-	public String getArguments() {
-		return arguments;
-	}
+    public void setName(String name) {
+        this.name = name;
+    }
 
-	public void setArguments(String arguments) {
-		this.arguments = arguments;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.FUNCTION_CALL;
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierMethodAccessDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierMethodAccessDescr.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierMethodAccessDescr.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -4,35 +4,28 @@
  * 
  * @author Toni Rikkola
  */
-public class VerifierMethodAccessDescr extends VerifierComponent {
+public class VerifierMethodAccessDescr extends RuleComponent {
 
-	private static int index = 0;
+    private String methodName;
+    private String arguments;
 
-	private String methodName;
-	private String arguments;
+    public String getArguments() {
+        return arguments;
+    }
 
-	public VerifierMethodAccessDescr() {
-		super(index++);
-	}
+    public void setArguments(String arguments) {
+        this.arguments = arguments;
+    }
 
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.METHOD_ACCESSOR;
-	}
+    public String getMethodName() {
+        return methodName;
+    }
 
-	public String getArguments() {
-		return arguments;
-	}
+    public void setMethodName(String methodName) {
+        this.methodName = methodName;
+    }
 
-	public void setArguments(String arguments) {
-		this.arguments = arguments;
-	}
-
-	public String getMethodName() {
-		return methodName;
-	}
-
-	public void setMethodName(String methodName) {
-		this.methodName = methodName;
-	}
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.METHOD_ACCESSOR;
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierPredicateDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierPredicateDescr.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierPredicateDescr.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -7,45 +7,39 @@
  *
  * @author Toni Rikkola
  */
-public class VerifierPredicateDescr extends VerifierComponent implements
-		Cause {
+public class VerifierPredicateDescr extends RuleComponent
+    implements
+    Cause {
 
-	private static int index = 0;
+    private String content;
+    private String classMethodName;
 
-	private String content;
-	private String classMethodName;
+    public CauseType getCauseType() {
+        return CauseType.PREDICATE;
+    }
 
-	public VerifierPredicateDescr() {
-		super(index++);
-	}
+    public String getClassMethodName() {
+        return classMethodName;
+    }
 
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.PREDICATE;
-	}
+    public void setClassMethodName(String classMethodName) {
+        this.classMethodName = classMethodName;
+    }
 
-	public CauseType getCauseType() {
-		return CauseType.PREDICATE;
-	}
+    public String getContent() {
+        return content;
+    }
 
-	public String getClassMethodName() {
-		return classMethodName;
-	}
+    public void setContent(String content) {
+        this.content = content;
+    }
 
-	public void setClassMethodName(String classMethodName) {
-		this.classMethodName = classMethodName;
-	}
+    @Override
+    public String toString() {
+        return "Predicate id: " + getGuid() + " content: " + content;
+    }
 
-	public String getContent() {
-		return content;
-	}
-
-	public void setContent(String content) {
-		this.content = content;
-	}
-
-	@Override
-	public String toString() {
-		return "Predicate id: " + id + " content: " + content;
-	}
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.PREDICATE;
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierRule.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierRule.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierRule.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -7,73 +7,67 @@
  *
  * @author Toni Rikkola
  */
-public class VerifierRule extends VerifierComponent implements Cause {
+public class VerifierRule extends RuleComponent
+    implements
+    Cause {
 
-	private static int index = 0;
+    private String      ruleSalience;
+    private String      ruleAgendaGroup;
+    private Consequence consequence;
+    private int         lineNumber;
 
-	private String ruleSalience;
-	private String ruleAgendaGroup;
-	private Consequence consequence;
-	private int lineNumber;
+    private int         packageId;
 
-	private int packageId;
+    public CauseType getCauseType() {
+        return CauseType.RULE;
+    }
 
-	public VerifierRule() {
-		super(index++);
-		ruleId = index;
-	}
+    public String getRuleAgendaGroup() {
+        return ruleAgendaGroup;
+    }
 
-	@Override
-	public VerifierComponentType getComponentType() {
-		return VerifierComponentType.RULE;
-	}
+    public void setRuleAgendaGroup(String agendaGroup) {
+        this.ruleAgendaGroup = agendaGroup;
+    }
 
-	public CauseType getCauseType() {
-		return CauseType.RULE;
-	}
+    public String getRuleSalience() {
+        return ruleSalience;
+    }
 
-	public String getRuleAgendaGroup() {
-		return ruleAgendaGroup;
-	}
+    public void setRuleSalience(String salience) {
+        this.ruleSalience = salience;
+    }
 
-	public void setRuleAgendaGroup(String agendaGroup) {
-		this.ruleAgendaGroup = agendaGroup;
-	}
+    public Consequence getConsequence() {
+        return consequence;
+    }
 
-	public String getRuleSalience() {
-		return ruleSalience;
-	}
+    public void setConsequence(Consequence consequence) {
+        this.consequence = consequence;
+    }
 
-	public void setRuleSalience(String salience) {
-		this.ruleSalience = salience;
-	}
+    public int getLineNumber() {
+        return lineNumber;
+    }
 
-	public Consequence getConsequence() {
-		return consequence;
-	}
+    public void setLineNumber(int lineNumber) {
+        this.lineNumber = lineNumber;
+    }
 
-	public void setConsequence(Consequence consequence) {
-		this.consequence = consequence;
-	}
+    @Override
+    public String toString() {
+        return "Rule '" + getRuleName() + "'";
+    }
 
-	public int getLineNumber() {
-		return lineNumber;
-	}
+    public int getPackageId() {
+        return packageId;
+    }
 
-	public void setLineNumber(int lineNumber) {
-		this.lineNumber = lineNumber;
-	}
+    public void setPackageId(int packageId) {
+        this.packageId = packageId;
+    }
 
-	@Override
-	public String toString() {
-		return "Rule '" + ruleName + "'";
-	}
-
-	public int getPackageId() {
-		return packageId;
-	}
-
-	public void setPackageId(int packageId) {
-		this.packageId = packageId;
-	}
+    public VerifierComponentType getVerifierComponentType() {
+        return VerifierComponentType.RULE;
+    }
 }

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/DataTree.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/DataTree.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/DataTree.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,64 @@
+package org.drools.verifier.data;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+public class DataTree<K, V> {
+	private Map<K, Set<V>> map = new TreeMap<K, Set<V>>();
+
+	public void put(K key, V value) {
+		if (map.containsKey(key)) {
+			Set<V> set = map.get(key);
+			set.add(value);
+		} else {
+			Set<V> set = new TreeSet<V>();
+			set.add(value);
+			map.put(key, set);
+		}
+	}
+
+	public Set<K> keySet() {
+		return map.keySet();
+	}
+
+	public Set<V> getBranch(K key) {
+		Set<V> set = map.get(key);
+		if (set != null) {
+			return set;
+		} else {
+			return Collections.emptySet();
+		}
+	}
+
+	public Collection<V> values() {
+		Collection<V> values = new ArrayList<V>();
+
+		for (Set<V> set : map.values()) {
+			for (V value : set) {
+				values.add(value);
+			}
+		}
+
+		return values;
+	}
+
+	public boolean remove(K key, V value) {
+		Set<V> set = map.get(key);
+
+		if (set != null) {
+			return set.remove(value);
+		} else {
+			return false;
+		}
+	}
+
+	@Override
+	public String toString() {
+		return values().toString();
+	}
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierComponent.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierComponent.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierComponent.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,45 @@
+package org.drools.verifier.data;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.verifier.components.VerifierComponentType;
+
+public abstract class VerifierComponent
+    implements
+    Comparable<VerifierComponent> {
+
+    static class GuidFactory {
+
+        private static Map<VerifierComponentType, Integer> guids = new HashMap<VerifierComponentType, Integer>();
+
+        static String getGuid(VerifierComponentType type) {
+            Integer guid = guids.get( type );
+            if ( guid == null ) {
+                guid = 0;
+            }
+
+            Integer result = guid;
+            guids.put( type,
+                       (guid + 1) );
+
+            return result.toString();
+        }
+    }
+
+    private String guid = GuidFactory.getGuid( getVerifierComponentType() );
+
+    public String getGuid() {
+        return guid;
+    }
+
+    public void setGuid(String guid) {
+        this.guid = guid;
+    }
+
+    public abstract VerifierComponentType getVerifierComponentType();
+
+    public int compareTo(VerifierComponent another) {
+        return this.guid.compareTo( another.getGuid() );
+    }
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierData.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierData.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierData.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,46 @@
+package org.drools.verifier.data;
+
+import java.util.Collection;
+
+import org.drools.verifier.components.Field;
+import org.drools.verifier.components.ObjectType;
+import org.drools.verifier.components.Restriction;
+import org.drools.verifier.components.RulePackage;
+import org.drools.verifier.components.Variable;
+import org.drools.verifier.components.VerifierComponentType;
+import org.drools.verifier.components.VerifierRule;
+
+/**
+ * 
+ * @author Toni Rikkola
+ */
+public interface VerifierData {
+
+    public void add(VerifierComponent object);
+
+    public <T extends VerifierComponent> T getVerifierObject(VerifierComponentType type,
+                                                             String guid);
+
+    public <T extends VerifierComponent> Collection<T> getAll(VerifierComponentType type);
+
+    public Collection<VerifierComponent> getAll();
+
+    public Variable getVariableByRuleAndVariableName(String ruleName,
+                                                     String base);
+
+    public ObjectType getObjectTypeByName(String name);
+
+    public Field getFieldByObjectTypeAndFieldName(String base,
+                                                  String fieldName);
+
+    public RulePackage getPackageByName(String name);
+
+    public Collection<VerifierRule> getRulesByFieldId(String guid);
+
+    public Collection<VerifierRule> getRulesByObjectTypeId(String guid);
+
+    public Collection<Restriction> getRestrictionsByFieldGuid(String guid);
+
+    public Collection<ObjectType> getObjectTypesByRuleName(String ruleName);
+
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierDataMaps.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierDataMaps.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierDataMaps.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,184 @@
+package org.drools.verifier.data;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+
+import org.drools.verifier.components.Field;
+import org.drools.verifier.components.FieldObjectTypeLink;
+import org.drools.verifier.components.ObjectType;
+import org.drools.verifier.components.Pattern;
+import org.drools.verifier.components.Restriction;
+import org.drools.verifier.components.RulePackage;
+import org.drools.verifier.components.Variable;
+import org.drools.verifier.components.VerifierComponentType;
+import org.drools.verifier.components.VerifierRule;
+
+/**
+ * 
+ * @author Toni Rikkola
+ */
+class VerifierDataMaps
+    implements
+    VerifierData {
+
+    private Map<VerifierComponentType, Map<String, VerifierComponent>> all                            = new TreeMap<VerifierComponentType, Map<String, VerifierComponent>>();
+
+    private Map<String, RulePackage>                                   packagesByName                 = new TreeMap<String, RulePackage>();
+    private Map<String, ObjectType>                                    objectTypesByName              = new TreeMap<String, ObjectType>();
+    private Map<String, Field>                                         fieldsByObjectTypeAndFieldName = new TreeMap<String, Field>();
+    private DataTree<String, Field>                                    fieldsByObjectTypeId           = new DataTree<String, Field>();
+    private Map<String, FieldObjectTypeLink>                           fieldObjectTypeLinkByPath      = new TreeMap<String, FieldObjectTypeLink>();
+    private DataTree<String, Pattern>                                  patternsByObjectTypeId         = new DataTree<String, Pattern>();
+    private DataTree<String, Pattern>                                  patternsByRuleName             = new DataTree<String, Pattern>();
+    private DataTree<String, Restriction>                              restrictionsByFieldId          = new DataTree<String, Restriction>();
+    private Map<String, Variable>                                      variablesByRuleAndVariableName = new TreeMap<String, Variable>();
+
+    public Collection<ObjectType> getObjectTypesByRuleName(String ruleName) {
+        Set<ObjectType> set = new HashSet<ObjectType>();
+
+        for ( Pattern pattern : patternsByRuleName.getBranch( ruleName ) ) {
+            ObjectType objectType = (ObjectType) getVerifierObject( VerifierComponentType.OBJECT_TYPE,
+                                                                    pattern.getObjectTypeGuid() );
+            set.add( objectType );
+        }
+
+        return set;
+    }
+
+    public ObjectType getObjectTypeByName(String name) {
+        return objectTypesByName.get( name );
+    }
+
+    public Field getFieldByObjectTypeAndFieldName(String objectTypeName,
+                                                  String fieldName) {
+        return fieldsByObjectTypeAndFieldName.get( objectTypeName + "." + fieldName );
+    }
+
+    public Variable getVariableByRuleAndVariableName(String ruleName,
+                                                     String variableName) {
+        return variablesByRuleAndVariableName.get( ruleName + "." + variableName );
+    }
+
+    public FieldObjectTypeLink getFieldObjectTypeLink(int id,
+                                                      int id2) {
+        return fieldObjectTypeLinkByPath.get( id + "." + id2 );
+    }
+
+    public Collection<VerifierComponent> getAll() {
+        List<VerifierComponent> objects = new ArrayList<VerifierComponent>();
+
+        for ( VerifierComponentType type : all.keySet() ) {
+            objects.addAll( all.get( type ).values() );
+        }
+
+        return objects;
+    }
+
+    public Collection<Field> getFieldsByObjectTypeId(String id) {
+        return fieldsByObjectTypeId.getBranch( id );
+    }
+
+    public Collection<VerifierRule> getRulesByObjectTypeId(String id) {
+        Set<VerifierRule> rules = new HashSet<VerifierRule>();
+
+        for ( Pattern pattern : patternsByObjectTypeId.getBranch( id ) ) {
+
+            rules.add( (VerifierRule) getVerifierObject( VerifierComponentType.RULE,
+                                                         pattern.getRuleGuid() ) );
+        }
+
+        return rules;
+    }
+
+    public Collection<VerifierRule> getRulesByFieldId(String id) {
+
+        Set<VerifierRule> rules = new HashSet<VerifierRule>();
+
+        for ( Restriction restriction : restrictionsByFieldId.getBranch( id ) ) {
+
+            rules.add( (VerifierRule) getVerifierObject( VerifierComponentType.RULE,
+                                                         restriction.getRuleGuid() ) );
+        }
+
+        return rules;
+    }
+
+    public RulePackage getPackageByName(String name) {
+        return packagesByName.get( name );
+    }
+
+    public Collection<Restriction> getRestrictionsByFieldGuid(String id) {
+        return restrictionsByFieldId.getBranch( id );
+    }
+
+    public void add(VerifierComponent object) {
+        if ( VerifierComponentType.FIELD.equals( object.getVerifierComponentType() ) ) {
+            Field field = (Field) object;
+            ObjectType objectType = (ObjectType) getVerifierObject( VerifierComponentType.OBJECT_TYPE,
+                                                                    field.getObjectTypeGuid() );
+            fieldsByObjectTypeAndFieldName.put( objectType.getName() + "." + field.getName(),
+                                                field );
+
+            fieldsByObjectTypeId.put( field.getObjectTypeGuid(),
+                                      field );
+        } else if ( VerifierComponentType.VARIABLE.equals( object.getVerifierComponentType() ) ) {
+            Variable variable = (Variable) object;
+            variablesByRuleAndVariableName.put( variable.getRuleName() + "." + variable.getName(),
+                                                variable );
+        } else if ( VerifierComponentType.PATTERN.equals( object.getVerifierComponentType() ) ) {
+            Pattern pattern = (Pattern) object;
+
+            patternsByObjectTypeId.put( pattern.getObjectTypeGuid(),
+                                        pattern );
+            patternsByRuleName.put( pattern.getRuleName(),
+                                    pattern );
+        } else if ( VerifierComponentType.RESTRICTION.equals( object.getVerifierComponentType() ) ) {
+            Restriction restriction = (Restriction) object;
+
+            restrictionsByFieldId.put( restriction.getFieldGuid(),
+                                       restriction );
+        } else if ( VerifierComponentType.FIELD_OBJECT_TYPE_LINK.equals( object.getVerifierComponentType() ) ) {
+            FieldObjectTypeLink link = (FieldObjectTypeLink) object;
+            fieldObjectTypeLinkByPath.put( link.getFieldId() + "." + link.getObjectTypeId(),
+                                           link );
+        } else if ( VerifierComponentType.RULE_PACKAGE.equals( object.getVerifierComponentType() ) ) {
+            RulePackage rulePackage = (RulePackage) object;
+
+            packagesByName.put( rulePackage.getName(),
+                                rulePackage );
+        } else if ( VerifierComponentType.OBJECT_TYPE.equals( object.getVerifierComponentType() ) ) {
+            ObjectType objectType = (ObjectType) object;
+            objectTypesByName.put( objectType.getName(),
+                                   objectType );
+        }
+
+        Map<String, VerifierComponent> map = all.get( object.getVerifierComponentType() );
+
+        if ( map == null ) {
+            map = new TreeMap<String, VerifierComponent>();
+            all.put( object.getVerifierComponentType(),
+                     map );
+        }
+
+        map.put( object.getGuid(),
+                 object );
+
+    }
+
+    //    public <T extends VerifierComponent> Collection<T> getAll(VerifierComponentType type) {
+    public Collection< ? extends VerifierComponent> getAll(VerifierComponentType type) {
+        return all.get( type ).values();
+    }
+
+    //    public <T extends VerifierComponent> T getVerifierObject(VerifierComponentType type,
+    //                                                             String guid) {
+    public VerifierComponent getVerifierObject(VerifierComponentType type,
+                                               String guid) {
+        return all.get( type ).get( guid );
+    }
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierReport.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierReport.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierReport.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,46 @@
+package org.drools.verifier.data;
+
+import java.util.Collection;
+
+import org.drools.verifier.report.components.Gap;
+import org.drools.verifier.report.components.MissingNumberPattern;
+import org.drools.verifier.report.components.RangeCheckCause;
+import org.drools.verifier.report.components.Severity;
+import org.drools.verifier.report.components.VerifierMessageBase;
+
+/**
+ * 
+ * @author Toni Rikkola
+ */
+public interface VerifierReport {
+
+    public void add(Gap gap);
+
+    public void remove(Gap gap);
+
+    public void add(MissingNumberPattern missingNumberPattern);
+
+    public VerifierData getVerifierData(VerifierData data);
+
+    public VerifierData getVerifierData();
+
+    public Collection<RangeCheckCause> getRangeCheckCauses();
+
+    public Collection<RangeCheckCause> getRangeCheckCausesByFieldId(int id);
+
+    public Collection<Gap> getGapsByFieldId(int fieldId);
+
+    public void add(VerifierMessageBase note);
+
+    /**
+     * Return all the items that have given severity value.
+     * 
+     * @param severity
+     *            Severity level of item.
+     * @return Collection of items or an empty list if none was found.
+     */
+    public Collection<VerifierMessageBase> getBySeverity(Severity severity);
+
+    public Collection<RangeCheckCause> getRangeCheckCausesByFieldId(String guid);
+
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierReportFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierReportFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierReportFactory.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,20 @@
+package org.drools.verifier.data;
+
+/**
+ * 
+ * @author Toni Rikkola
+ */
+public class VerifierReportFactory {
+
+	public static VerifierReport newVerifierReport() {
+		return new VerifierReportImpl(newVerifierData());
+	}
+
+	public static VerifierReport newVerifierReport(VerifierData data) {
+		return new VerifierReportImpl(data);
+	}
+
+	public static VerifierData newVerifierData() {
+		return new VerifierDataMaps();
+	}
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierReportImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierReportImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierReportImpl.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,124 @@
+package org.drools.verifier.data;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.drools.verifier.report.components.Gap;
+import org.drools.verifier.report.components.MissingNumberPattern;
+import org.drools.verifier.report.components.RangeCheckCause;
+import org.drools.verifier.report.components.Severity;
+import org.drools.verifier.report.components.VerifierMessageBase;
+
+/**
+ * 
+ * @author Toni Rikkola
+ */
+class VerifierReportImpl
+    implements
+    VerifierReport {
+    private static final long                       serialVersionUID               = -6207688526236713721L;
+
+    private Map<String, Gap>                        gapsById                       = new TreeMap<String, Gap>();
+    private DataTree<String, Gap>                   gapsByFieldId                  = new DataTree<String, Gap>();
+    private Map<String, MissingNumberPattern>       missingNumberPatternsById      = new TreeMap<String, MissingNumberPattern>();
+    private DataTree<String, MissingNumberPattern>  missingNumberPatternsByFieldId = new DataTree<String, MissingNumberPattern>();
+
+    private List<VerifierMessageBase>               messages                       = new ArrayList<VerifierMessageBase>();
+    private DataTree<Severity, VerifierMessageBase> messagesBySeverity             = new DataTree<Severity, VerifierMessageBase>();
+
+    private VerifierData                            data;
+
+    public VerifierReportImpl(VerifierData data) {
+        this.data = data;
+    }
+
+    public void add(VerifierMessageBase message) {
+        messages.add( message );
+        messagesBySeverity.put( message.getSeverity(),
+                                message );
+    }
+
+    public Collection<VerifierMessageBase> getBySeverity(Severity severity) {
+        Collection<VerifierMessageBase> result = messagesBySeverity.getBranch( severity );
+
+        if ( result == null ) {
+            return Collections.emptyList();
+        } else {
+            return result;
+        }
+    }
+
+    public void add(Gap gap) {
+        gapsById.put( gap.getGuid(),
+                      gap );
+
+        // Put by field id.
+        gapsByFieldId.put( gap.getField().getGuid(),
+                           gap );
+    }
+
+    public void remove(Gap gap) {
+        gapsById.remove( gap.getGuid() );
+
+        gapsByFieldId.remove( gap.getField().getGuid(),
+                              gap );
+    }
+
+    public Collection<Gap> getGapsByFieldId(String fieldId) {
+        return gapsByFieldId.getBranch( fieldId );
+    }
+
+    public Collection<RangeCheckCause> getRangeCheckCauses() {
+        Collection<RangeCheckCause> result = new ArrayList<RangeCheckCause>();
+
+        result.addAll( gapsById.values() );
+        result.addAll( missingNumberPatternsById.values() );
+
+        return result;
+    }
+
+    public void add(MissingNumberPattern missingNumberPattern) {
+        missingNumberPatternsById.put( missingNumberPattern.getGuid(),
+                                       missingNumberPattern );
+
+        // Put by field id.
+        missingNumberPatternsByFieldId.put( missingNumberPattern.getField().getGuid(),
+                                            missingNumberPattern );
+    }
+
+    public Collection<RangeCheckCause> getRangeCheckCausesByFieldId(String id) {
+        Collection<RangeCheckCause> result = new ArrayList<RangeCheckCause>();
+
+        result.addAll( gapsByFieldId.getBranch( id ) );
+
+        result.addAll( missingNumberPatternsByFieldId.getBranch( id ) );
+
+        return result;
+    }
+
+    public VerifierData getVerifierData() {
+        return data;
+    }
+
+    public void setVerifierData(VerifierData data) {
+        this.data = data;
+    }
+
+    public VerifierData getVerifierData(VerifierData data) {
+        return this.data;
+    }
+
+    public Collection<Gap> getGapsByFieldId(int fieldId) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Collection<RangeCheckCause> getRangeCheckCausesByFieldId(int id) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/FindMissingNumber.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/FindMissingNumber.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/FindMissingNumber.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,160 @@
+package org.drools.verifier.misc;
+
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.drools.verifier.components.Field;
+import org.drools.verifier.components.LiteralRestriction;
+
+public class FindMissingNumber {
+
+	public static final int MIN_NUMBER_OF_RESTRICTIONS = 4;
+
+	/**
+	 * Test if the values in constraints are in pattern.
+	 * 
+	 * @param restrictions
+	 * @return false if can't find a pattern or constraints list is null or size
+	 *         of the list is under 3.
+	 */
+	public static Number testForPattern(
+			Collection<LiteralRestriction> restrictions) {
+
+		if (restrictions == null
+				|| restrictions.size() < MIN_NUMBER_OF_RESTRICTIONS) {
+			return null;
+		}
+
+		BigDecimal[] numbers = new BigDecimal[restrictions.size()];
+
+		int index = 0;
+		for (LiteralRestriction restriction : restrictions) {
+			if (restriction.getValueType() == Field.FieldType.DOUBLE) {
+				numbers[index++] = BigDecimal.valueOf(restriction
+						.getDoubleValue());
+			} else if (restriction.getValueType() == Field.FieldType.INT) {
+				numbers[index++] = BigDecimal
+						.valueOf(restriction.getIntValue());
+			}
+		}
+
+		Arrays.sort(numbers);
+
+		Number missingNumber = findSumPattern(numbers);
+		if (missingNumber != null) {
+			return missingNumber;
+		} else {
+			missingNumber = findMultiplicationPattern(numbers);
+			if (missingNumber != null) {
+				return missingNumber;
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * Looks for sum pattern, on each step x is added or removed. -x is the same
+	 * as +(-x) so this works for both.
+	 * 
+	 * @param numbers
+	 * @return true if pattern is found.
+	 */
+	protected static Number findSumPattern(BigDecimal[] numbers) {
+		if (numbers == null || numbers.length < MIN_NUMBER_OF_RESTRICTIONS) {
+			return null;
+		}
+		BigDecimal gap = null;
+		Number missingNumber = null;
+
+		BigDecimal a = numbers[0];
+		BigDecimal b = numbers[1];
+		BigDecimal c = numbers[2];
+		BigDecimal d = numbers[3];
+
+		// Uses first four numbers to check if there is a pattern and to
+		// calculate the gap between them. One missing value is allowed.
+		if (b.subtract(a).equals(c.subtract(b))) {
+			gap = b.subtract(a);
+		} else if (c.subtract(b).equals(d.subtract(c))) {
+			gap = c.subtract(b);
+		} else if (b.subtract(a).equals(d.subtract(c))) {
+			gap = b.subtract(a);
+		} else {
+			// No pattern found.
+			return null;
+		}
+
+		for (int i = 0; i < (numbers.length - 1); i++) {
+			BigDecimal first = numbers[i];
+			BigDecimal second = numbers[i + 1];
+
+			if (missingNumber == null && !second.subtract(first).equals(gap)) {
+				missingNumber = second.subtract(gap);
+			} else if (!second.subtract(first).equals(gap)
+					&& missingNumber != null) {
+				// Happends if there is no pattern found, or more than 1
+				// missing number.
+				return null;
+			}
+		}
+
+		return missingNumber;
+	}
+
+	/**
+	 * Looks for multiplication pattern, on each step x multiplied or divided.
+	 * *x is the same as *(1/x) so this works for both.
+	 * 
+	 * @param numbers
+	 * @return true if pattern is found.
+	 */
+	protected static Number findMultiplicationPattern(BigDecimal[] numbers) {
+		if (numbers == null || numbers.length < MIN_NUMBER_OF_RESTRICTIONS) {
+			return null;
+		}
+		try {
+
+			BigDecimal gap = null;
+			Number missingNumber = null;
+
+			BigDecimal a = numbers[0];
+			BigDecimal b = numbers[1];
+			BigDecimal c = numbers[2];
+			BigDecimal d = numbers[3];
+
+			// Uses first four numbers to check if there is a pattern and to
+			// calculate the gap between them. One missing value is allowed.
+			if (b.divide(a).equals(c.divide(b))) {
+				gap = b.divide(a);
+			} else if (c.divide(b).equals(d.divide(c))) {
+				gap = c.divide(b);
+			} else if (b.divide(a).equals(d.divide(c))) {
+				gap = b.divide(a);
+			} else {
+				// No pattern found.
+				return null;
+			}
+
+			BigDecimal first = null;
+			BigDecimal second = null;
+			for (int i = 0; i < (numbers.length - 1); i++) {
+				first = numbers[i];
+				second = numbers[i + 1];
+
+				if (missingNumber == null && !second.divide(first).equals(gap)) {
+					missingNumber = first.multiply(gap);
+				} else if (!second.divide(first).equals(gap)
+						&& missingNumber != null) {
+					// Happends if there is no pattern found, or more than 1
+					// missing number.
+					return null;
+				}
+			}
+			return missingNumber;
+		} catch (Exception e) {
+			return null;
+		}
+	}
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/PackageDescrVisitor.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/PackageDescrVisitor.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/PackageDescrVisitor.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,926 @@
+package org.drools.verifier.misc;
+
+import java.util.Collection;
+
+import org.drools.base.evaluators.Operator;
+import org.drools.lang.descr.AccessorDescr;
+import org.drools.lang.descr.AccumulateDescr;
+import org.drools.lang.descr.AndDescr;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.CollectDescr;
+import org.drools.lang.descr.ConditionalElementDescr;
+import org.drools.lang.descr.DeclarativeInvokerDescr;
+import org.drools.lang.descr.EvalDescr;
+import org.drools.lang.descr.ExistsDescr;
+import org.drools.lang.descr.FieldAccessDescr;
+import org.drools.lang.descr.FieldBindingDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.ForallDescr;
+import org.drools.lang.descr.FromDescr;
+import org.drools.lang.descr.FunctionCallDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
+import org.drools.lang.descr.MethodAccessDescr;
+import org.drools.lang.descr.NotDescr;
+import org.drools.lang.descr.OrDescr;
+import org.drools.lang.descr.PackageDescr;
+import org.drools.lang.descr.PatternDescr;
+import org.drools.lang.descr.PatternSourceDescr;
+import org.drools.lang.descr.PredicateDescr;
+import org.drools.lang.descr.QualifiedIdentifierRestrictionDescr;
+import org.drools.lang.descr.RestrictionConnectiveDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
+import org.drools.verifier.components.Consequence;
+import org.drools.verifier.components.Constraint;
+import org.drools.verifier.components.EnumField;
+import org.drools.verifier.components.EnumRestriction;
+import org.drools.verifier.components.Field;
+import org.drools.verifier.components.LiteralRestriction;
+import org.drools.verifier.components.ObjectType;
+import org.drools.verifier.components.OperatorDescr;
+import org.drools.verifier.components.Pattern;
+import org.drools.verifier.components.SubPattern;
+import org.drools.verifier.components.QualifiedIdentifierRestriction;
+import org.drools.verifier.components.ReturnValueRestriction;
+import org.drools.verifier.components.RulePackage;
+import org.drools.verifier.components.SubRule;
+import org.drools.verifier.components.TextConsequence;
+import org.drools.verifier.components.Variable;
+import org.drools.verifier.components.VariableRestriction;
+import org.drools.verifier.components.VerifierAccessorDescr;
+import org.drools.verifier.components.VerifierAccumulateDescr;
+import org.drools.verifier.components.VerifierCollectDescr;
+import org.drools.verifier.components.VerifierComponentType;
+import org.drools.verifier.components.VerifierEvalDescr;
+import org.drools.verifier.components.VerifierFieldAccessDescr;
+import org.drools.verifier.components.VerifierFromDescr;
+import org.drools.verifier.components.VerifierFunctionCallDescr;
+import org.drools.verifier.components.VerifierMethodAccessDescr;
+import org.drools.verifier.components.VerifierPredicateDescr;
+import org.drools.verifier.components.VerifierRule;
+import org.drools.verifier.data.VerifierComponent;
+import org.drools.verifier.data.VerifierData;
+import org.drools.verifier.solver.Solvers;
+
+/**
+ * @author Toni Rikkola
+ * 
+ */
+public class PackageDescrVisitor {
+
+    private Solvers      solvers           = new Solvers();
+
+    private VerifierData data;
+
+    private RulePackage  currentPackage    = null;
+    private VerifierRule currentRule       = null;
+    private Pattern      currentPattern    = null;
+    private Constraint   currentConstraint = null;
+    private ObjectType   currentObjectType = null;
+    private Field        currentField      = null;
+
+    /**
+     * Adds packageDescr to given VerifierData object
+     * 
+     * @param packageDescr
+     *            PackageDescr that will be visited.
+     * @param data
+     *            VerifierData where the visited objects are added.
+     * @throws UnknownDescriptionException
+     */
+    public void addPackageDescrToData(PackageDescr packageDescr,
+                                      VerifierData data) throws UnknownDescriptionException {
+
+        this.data = data;
+
+        visit( packageDescr );
+
+        formPossibilities();
+    }
+
+    private void visit(Collection< ? > descrs,
+                       VerifierComponent parent) throws UnknownDescriptionException {
+
+        int orderNumber = 0;
+
+        for ( Object o : descrs ) {
+            BaseDescr descr = (BaseDescr) o;
+            if ( descr instanceof PackageDescr ) {
+                visit( (PackageDescr) descr );
+            } else if ( descr instanceof RuleDescr ) {
+                visit( (RuleDescr) descr,
+                       parent );
+            } else if ( descr instanceof PatternDescr ) {
+                visit( (PatternDescr) descr,
+                       parent,
+                       orderNumber );
+            } else if ( descr instanceof VariableRestrictionDescr ) {
+                visit( (VariableRestrictionDescr) descr,
+                       parent,
+                       orderNumber );
+            } else if ( descr instanceof FieldBindingDescr ) {
+                visit( (FieldBindingDescr) descr,
+                       parent,
+                       orderNumber );
+            } else if ( descr instanceof FieldConstraintDescr ) {
+                visit( (FieldConstraintDescr) descr,
+                       parent,
+                       orderNumber );
+            } else if ( descr instanceof RestrictionConnectiveDescr ) {
+                visit( (RestrictionConnectiveDescr) descr,
+                       parent,
+                       orderNumber );
+            } else if ( descr instanceof LiteralRestrictionDescr ) {
+                visit( (LiteralRestrictionDescr) descr,
+                       parent,
+                       orderNumber );
+            } else if ( descr instanceof ReturnValueRestrictionDescr ) {
+                visit( (ReturnValueRestrictionDescr) descr,
+                       parent,
+                       orderNumber );
+            } else if ( descr instanceof QualifiedIdentifierRestrictionDescr ) {
+                visit( (QualifiedIdentifierRestrictionDescr) descr,
+                       parent,
+                       orderNumber );
+            } else if ( descr instanceof FunctionCallDescr ) {
+                visit( (FunctionCallDescr) descr,
+                       parent,
+                       orderNumber );
+            } else if ( descr instanceof PredicateDescr ) {
+                visit( (PredicateDescr) descr,
+                       parent,
+                       orderNumber );
+            } else if ( descr instanceof AccessorDescr ) {
+                visit( (AccessorDescr) descr,
+                       parent,
+                       orderNumber );
+            } else if ( descr instanceof MethodAccessDescr ) {
+                visit( (MethodAccessDescr) descr,
+                       parent,
+                       orderNumber );
+            } else if ( descr instanceof FieldAccessDescr ) {
+                visit( (FieldAccessDescr) descr,
+                       parent,
+                       orderNumber );
+            } else if ( descr instanceof PatternSourceDescr ) {
+                visit( (PatternSourceDescr) descr,
+                       parent );
+            } else if ( descr instanceof ConditionalElementDescr ) {
+                visit( (ConditionalElementDescr) descr,
+                       parent,
+                       orderNumber );
+            }
+
+            orderNumber++;
+        }
+    }
+
+    private VerifierComponent visit(PatternSourceDescr descr,
+                                    VerifierComponent parent) throws UnknownDescriptionException {
+        if ( descr instanceof AccumulateDescr ) {
+            return visit( (AccumulateDescr) descr,
+                          parent );
+        } else if ( descr instanceof CollectDescr ) {
+            return visit( (CollectDescr) descr,
+                          parent );
+        } else if ( descr instanceof FromDescr ) {
+            return visit( (FromDescr) descr,
+                          parent );
+        } else {
+            throw new UnknownDescriptionException( descr );
+        }
+    }
+
+    private VerifierComponent visit(DeclarativeInvokerDescr descr,
+                                    VerifierComponent parent) throws UnknownDescriptionException {
+        if ( descr instanceof AccessorDescr ) {
+            return visit( (AccessorDescr) descr,
+                          parent );
+        } else if ( descr instanceof FieldAccessDescr ) {
+            return visit( (FieldAccessDescr) descr,
+                          parent );
+        } else if ( descr instanceof FunctionCallDescr ) {
+            return visit( (FunctionCallDescr) descr,
+                          parent );
+        } else if ( descr instanceof MethodAccessDescr ) {
+            return visit( (MethodAccessDescr) descr,
+                          parent );
+        } else {
+            throw new UnknownDescriptionException( descr );
+        }
+    }
+
+    private void visit(ConditionalElementDescr descr,
+                       VerifierComponent parent,
+                       int orderNumber) throws UnknownDescriptionException {
+
+        if ( descr instanceof AndDescr ) {
+            visit( (AndDescr) descr,
+                   parent,
+                   orderNumber );
+        } else if ( descr instanceof CollectDescr ) {
+            visit( (CollectDescr) descr,
+                   parent,
+                   orderNumber );
+        } else if ( descr instanceof EvalDescr ) {
+            visit( (EvalDescr) descr,
+                   parent,
+                   orderNumber );
+        } else if ( descr instanceof ExistsDescr ) {
+            visit( (ExistsDescr) descr,
+                   parent );
+        } else if ( descr instanceof ForallDescr ) {
+            visit( (ForallDescr) descr,
+                   parent );
+        } else if ( descr instanceof FromDescr ) {
+            visit( (FromDescr) descr,
+                   parent );
+        } else if ( descr instanceof NotDescr ) {
+            visit( (NotDescr) descr,
+                   parent );
+        } else if ( descr instanceof OrDescr ) {
+            visit( (OrDescr) descr,
+                   parent,
+                   orderNumber );
+        }
+    }
+
+    private void visit(ForallDescr descr,
+                       VerifierComponent parent) throws UnknownDescriptionException {
+        solvers.startForall();
+        visit( descr.getDescrs(),
+               parent );
+        solvers.endForall();
+    }
+
+    private void visit(ExistsDescr descr,
+                       VerifierComponent parent) throws UnknownDescriptionException {
+        solvers.startExists();
+        visit( descr.getDescrs(),
+               parent );
+        solvers.endExists();
+    }
+
+    private void visit(NotDescr descr,
+                       VerifierComponent parent) throws UnknownDescriptionException {
+        solvers.startNot();
+        visit( descr.getDescrs(),
+               parent );
+        solvers.endNot();
+    }
+
+    /**
+     * End leaf
+     * 
+     * @param descr
+     * @return
+     */
+    private VerifierFunctionCallDescr visit(FunctionCallDescr descr,
+                                            VerifierComponent parent,
+                                            int orderNumber) {
+        VerifierFunctionCallDescr functionCall = new VerifierFunctionCallDescr();
+        functionCall.setName( descr.getName() );
+        functionCall.setArguments( descr.getArguments() );
+        functionCall.setOrderNumber( orderNumber );
+        functionCall.setParentGuid( parent.getGuid() );
+        functionCall.setParentType( parent.getVerifierComponentType() );
+
+        return functionCall;
+    }
+
+    /**
+     * End leaf
+     * 
+     * @param descr
+     * @return
+     */
+    private VerifierPredicateDescr visit(PredicateDescr descr,
+                                         VerifierComponent parent,
+                                         int orderNumber) {
+
+        VerifierPredicateDescr predicate = new VerifierPredicateDescr();
+        predicate.setRuleName( currentRule.getRuleName() );
+        predicate.setRuleGuid( currentRule.getGuid() );
+        predicate.setContent( descr.getContent().toString() );
+        predicate.setClassMethodName( descr.getClassMethodName() );
+        predicate.setOrderNumber( orderNumber );
+        predicate.setParentGuid( parent.getGuid() );
+        predicate.setParentType( parent.getVerifierComponentType() );
+
+        data.add( predicate );
+
+        return predicate;
+    }
+
+    /**
+     * End leaf
+     * 
+     * @param descr
+     * @return
+     */
+    private VerifierEvalDescr visit(EvalDescr descr,
+                                    VerifierComponent parent,
+                                    int orderNumber) {
+
+        VerifierEvalDescr eval = new VerifierEvalDescr();
+        eval.setRuleGuid( currentRule.getGuid() );
+        eval.setRuleName( currentRule.getRuleName() );
+        eval.setContent( descr.getContent().toString() );
+        eval.setClassMethodName( descr.getClassMethodName() );
+        eval.setOrderNumber( orderNumber );
+        eval.setParentGuid( parent.getGuid() );
+        eval.setParentType( parent.getVerifierComponentType() );
+
+        data.add( eval );
+
+        return eval;
+    }
+
+    /**
+     * End leaf
+     * 
+     * @param descr
+     * @return
+     * @throws UnknownDescriptionException
+     */
+    private VerifierFromDescr visit(FromDescr descr,
+                                    VerifierComponent parent) throws UnknownDescriptionException {
+        VerifierFromDescr from = new VerifierFromDescr();
+
+        VerifierComponent ds = visit( descr.getDataSource(),
+                                      from );
+        from.setDataSourceGuid( ds.getGuid() );
+        from.setDataSourceType( ds.getVerifierComponentType() );
+        from.setParentGuid( parent.getGuid() );
+        from.setParentType( parent.getVerifierComponentType() );
+
+        return from;
+    }
+
+    private VerifierAccumulateDescr visit(AccumulateDescr descr,
+                                          VerifierComponent parent) throws UnknownDescriptionException {
+        VerifierAccumulateDescr accumulate = new VerifierAccumulateDescr();
+
+        accumulate.setInputPatternGuid( visit( descr.getInputPattern(),
+                                               accumulate,
+                                               0 ) );
+        accumulate.setInitCode( descr.getInitCode() );
+        accumulate.setActionCode( descr.getActionCode() );
+        accumulate.setReverseCode( descr.getReverseCode() );
+        accumulate.setResultCode( descr.getResultCode() );
+
+        // XXX: Array seems to be always null.
+        // accumulate.setDeclarations(descr.getDeclarations());
+
+        accumulate.setClassName( descr.getClassName() );
+        accumulate.setExternalFunction( descr.isExternalFunction() );
+        accumulate.setFunctionIdentifier( descr.getFunctionIdentifier() );
+        accumulate.setExpression( descr.getExpression() );
+        accumulate.setParentGuid( parent.getGuid() );
+        accumulate.setParentType( parent.getVerifierComponentType() );
+
+        return accumulate;
+    }
+
+    private VerifierCollectDescr visit(CollectDescr descr,
+                                       VerifierComponent parent) throws UnknownDescriptionException {
+        VerifierCollectDescr collect = new VerifierCollectDescr();
+        collect.setClassMethodName( descr.getClassMethodName() );
+        collect.setInsidePatternGuid( visit( descr.getInputPattern(),
+                                             collect,
+                                             0 ) );
+        collect.setParentGuid( parent.getGuid() );
+        collect.setParentType( parent.getVerifierComponentType() );
+
+        return collect;
+    }
+
+    private VerifierAccessorDescr visit(AccessorDescr descr,
+                                        VerifierComponent parent,
+                                        int orderNumber) {
+        VerifierAccessorDescr accessor = new VerifierAccessorDescr();
+        accessor.setOrderNumber( orderNumber );
+        accessor.setParentGuid( parent.getGuid() );
+        accessor.setParentType( parent.getVerifierComponentType() );
+        // TODO: I wonder what this descr does.
+        return accessor;
+    }
+
+    /**
+     * End leaf
+     * 
+     * @param descr
+     */
+    private VerifierMethodAccessDescr visit(MethodAccessDescr descr,
+                                            VerifierComponent parent,
+                                            int orderNumber) {
+        VerifierMethodAccessDescr accessor = new VerifierMethodAccessDescr();
+        accessor.setMethodName( descr.getMethodName() );
+        accessor.setArguments( descr.getArguments() );
+        accessor.setOrderNumber( orderNumber );
+        accessor.setParentGuid( parent.getGuid() );
+        accessor.setParentType( parent.getVerifierComponentType() );
+
+        return accessor;
+    }
+
+    /**
+     * End leaf
+     * 
+     * @param descr
+     */
+    private VerifierFieldAccessDescr visit(FieldAccessDescr descr,
+                                           VerifierComponent parent,
+                                           int orderNumber) {
+        VerifierFieldAccessDescr accessor = new VerifierFieldAccessDescr();
+        accessor.setFieldName( descr.getFieldName() );
+        accessor.setArgument( descr.getArgument() );
+        accessor.setOrderNumber( orderNumber );
+        accessor.setParentGuid( parent.getGuid() );
+        accessor.setParentType( parent.getVerifierComponentType() );
+
+        return accessor;
+    }
+
+    private void visit(PackageDescr descr) throws UnknownDescriptionException {
+        RulePackage rulePackage = data.getPackageByName( descr.getName() );
+
+        if ( rulePackage == null ) {
+            rulePackage = new RulePackage();
+
+            rulePackage.setName( descr.getName() );
+            data.add( rulePackage );
+        }
+
+        currentPackage = rulePackage;
+
+        visit( descr.getRules(),
+               rulePackage );
+    }
+
+    private void visit(RuleDescr descr,
+                       VerifierComponent parent) throws UnknownDescriptionException {
+
+        VerifierRule rule = new VerifierRule();
+        currentRule = rule;
+
+        rule.setRuleName( descr.getName() );
+        rule.setRuleSalience( descr.getSalience() );
+        rule.setConsequence( visitConsequence( rule,
+                                               descr.getConsequence() ) );
+        rule.setLineNumber( descr.getLine() );
+        rule.setPackageGuid( currentPackage.getGuid() );
+        rule.setParentGuid( parent.getGuid() );
+        rule.setParentType( parent.getVerifierComponentType() );
+
+        data.add( rule );
+
+        currentPackage.getRules().add( rule );
+
+        solvers.startRuleSolver( rule );
+        visit( descr.getLhs(),
+               rule,
+               0 );
+        solvers.endRuleSolver();
+    }
+
+    /**
+     * Creates verifier object from rule consequence. Currently only supports
+     * text based consequences.
+     * 
+     * @param o
+     *            Consequence object.
+     * @return Verifier object that implements the Consequence interface.
+     */
+    private Consequence visitConsequence(VerifierComponent parent,
+                                         Object o) {
+
+        TextConsequence consequence = new TextConsequence();
+
+        String text = o.toString();
+
+        /*
+         * Strip all comments out of the code.
+         */
+        StringBuffer buffer = new StringBuffer( text );
+        int commentIndex = buffer.indexOf( "//" );
+
+        while ( commentIndex != -1 ) {
+            buffer = buffer.delete( commentIndex,
+                                    buffer.indexOf( "\n",
+                                                    commentIndex ) );
+            commentIndex = buffer.indexOf( "//" );
+        }
+
+        text = buffer.toString();
+
+        /*
+         * Strip all useless characters out of the code.
+         */
+        text = text.replaceAll( "\n",
+                                "" );
+        text = text.replaceAll( "\r",
+                                "" );
+        text = text.replaceAll( "\t",
+                                "" );
+        text = text.replaceAll( " ",
+                                "" );
+
+        consequence.setText( text );
+        consequence.setRuleGuid( currentRule.getGuid() );
+        consequence.setRuleName( currentRule.getRuleName() );
+        consequence.setParentGuid( parent.getGuid() );
+        consequence.setParentType( parent.getVerifierComponentType() );
+
+        data.add( consequence );
+
+        return consequence;
+    }
+
+    private void visit(OrDescr descr,
+                       VerifierComponent parent,
+                       int orderNumber) throws UnknownDescriptionException {
+        OperatorDescr operatorDescr = new OperatorDescr( OperatorDescr.Type.OR );
+        operatorDescr.setOrderNumber( orderNumber );
+        operatorDescr.setParentGuid( parent.getGuid() );
+        operatorDescr.setParentType( parent.getVerifierComponentType() );
+
+        data.add( operatorDescr );
+
+        solvers.startOperator( OperatorDescr.Type.OR );
+        visit( descr.getDescrs(),
+               operatorDescr );
+        solvers.endOperator();
+    }
+
+    private void visit(AndDescr descr,
+                       VerifierComponent parent,
+                       int orderNumber) throws UnknownDescriptionException {
+        OperatorDescr operatorDescr = new OperatorDescr( OperatorDescr.Type.AND );
+        operatorDescr.setOrderNumber( orderNumber );
+        operatorDescr.setParentGuid( parent.getGuid() );
+        operatorDescr.setParentType( parent.getVerifierComponentType() );
+
+        data.add( operatorDescr );
+
+        solvers.startOperator( OperatorDescr.Type.AND );
+        visit( descr.getDescrs(),
+               operatorDescr );
+        solvers.endOperator();
+    }
+
+    private String visit(PatternDescr descr,
+                         VerifierComponent parent,
+                         int orderNumber) throws UnknownDescriptionException {
+
+        ObjectType objectType = findOrCreateNewObjectType( descr.getObjectType() );
+        currentObjectType = objectType;
+
+        Pattern pattern = new Pattern();
+        pattern.setRuleGuid( currentRule.getGuid() );
+        pattern.setRuleName( currentRule.getRuleName() );
+        pattern.setObjectTypeGuid( objectType.getGuid() );
+        pattern.setName( objectType.getName() );
+        pattern.setPatternNot( solvers.getRuleSolver().isChildNot() );
+        pattern.setPatternExists( solvers.getRuleSolver().isExists() );
+        pattern.setPatternForall( solvers.getRuleSolver().isForall() );
+        pattern.setOrderNumber( orderNumber );
+        pattern.setParentGuid( parent.getGuid() );
+        pattern.setParentType( parent.getVerifierComponentType() );
+
+        data.add( pattern );
+        currentPattern = pattern;
+
+        if ( descr.getIdentifier() != null ) {
+            Variable variable = new Variable();
+            variable.setRuleGuid( currentRule.getGuid() );
+            variable.setRuleName( currentRule.getRuleName() );
+            variable.setName( descr.getIdentifier() );
+
+            variable.setObjectTypeType( VerifierComponentType.OBJECT_TYPE.getType() );
+            variable.setObjectTypeGuid( objectType.getGuid() );
+            variable.setObjectTypeType( descr.getObjectType() );
+
+            data.add( variable );
+        }
+
+        // visit source.
+        if ( descr.getSource() != null ) {
+            VerifierComponent source = visit( descr.getSource(),
+                                              pattern );
+            pattern.setSourceGuid( source.getGuid() );
+            pattern.setSourceType( source.getVerifierComponentType() );
+        } else {
+            pattern.setSourceGuid( null );
+            pattern.setSourceType( VerifierComponentType.UNKNOWN );
+        }
+        solvers.startPatternSolver( pattern );
+        visit( descr.getConstraint(),
+               pattern,
+               0 );
+        solvers.endPatternSolver();
+
+        return pattern.getGuid();
+    }
+
+    private void visit(FieldConstraintDescr descr,
+                       VerifierComponent parent,
+                       int orderNumber) throws UnknownDescriptionException {
+
+        Field field = data.getFieldByObjectTypeAndFieldName( currentObjectType.getName(),
+                                                             descr.getFieldName() );
+        if ( field == null ) {
+            field = createField( descr.getFieldName(),
+                                 currentObjectType.getGuid(),
+                                 currentObjectType.getName(),
+                                 parent );
+            data.add( field );
+        }
+        currentField = field;
+
+        Constraint constraint = new Constraint();
+
+        constraint.setRuleGuid( currentRule.getGuid() );
+        constraint.setFieldGuid( currentField.getGuid() );
+        constraint.setFieldName( currentField.getName() );
+        constraint.setPatternGuid( currentPattern.getGuid() );
+        constraint.setPatternIsNot( currentPattern.isPatternNot() );
+        constraint.setFieldGuid( field.getGuid() );
+        constraint.setOrderNumber( orderNumber );
+        constraint.setParentGuid( parent.getGuid() );
+        constraint.setParentType( parent.getVerifierComponentType() );
+
+        data.add( constraint );
+
+        currentConstraint = constraint;
+
+        visit( descr.getRestriction(),
+               constraint,
+               0 );
+    }
+
+    private void visit(RestrictionConnectiveDescr descr,
+                       VerifierComponent parent,
+                       int orderNumber) throws UnknownDescriptionException {
+
+        if ( descr.getConnective() == RestrictionConnectiveDescr.AND ) {
+
+            solvers.startOperator( OperatorDescr.Type.AND );
+            visit( descr.getRestrictions(),
+                   parent );
+            solvers.endOperator();
+
+        } else if ( descr.getConnective() == RestrictionConnectiveDescr.OR ) {
+
+            solvers.startOperator( OperatorDescr.Type.OR );
+            visit( descr.getRestrictions(),
+                   parent );
+            solvers.endOperator();
+
+        } else {
+            throw new UnknownDescriptionException( descr );
+        }
+    }
+
+    /**
+     * End
+     * 
+     * @param descr
+     */
+    private void visit(FieldBindingDescr descr,
+                       VerifierComponent parent,
+                       int orderNumber) {
+
+        Variable variable = new Variable();
+        variable.setRuleGuid( currentRule.getGuid() );
+        variable.setRuleName( currentRule.getRuleName() );
+        variable.setName( descr.getIdentifier() );
+        variable.setOrderNumber( orderNumber );
+        variable.setParentGuid( parent.getGuid() );
+        variable.setParentType( parent.getVerifierComponentType() );
+
+        variable.setObjectTypeType( VerifierComponentType.FIELD.getType() );
+
+        data.add( variable );
+    }
+
+    /**
+     * End
+     * 
+     * Foo( bar == $bar )<br>
+     * $bar is a VariableRestrictionDescr
+     * 
+     * @param descr
+     */
+    private void visit(VariableRestrictionDescr descr,
+                       VerifierComponent parent,
+                       int orderNumber) {
+
+        Variable variable = data.getVariableByRuleAndVariableName( currentRule.getRuleName(),
+                                                                   descr.getIdentifier() );
+        VariableRestriction restriction = new VariableRestriction();
+
+        restriction.setRuleGuid( currentRule.getGuid() );
+        restriction.setRuleName( currentRule.getRuleName() );
+        restriction.setPatternGuid( currentPattern.getGuid() );
+        restriction.setPatternIsNot( currentPattern.isPatternNot() );
+        restriction.setConstraintGuid( currentConstraint.getGuid() );
+        restriction.setFieldGuid( currentConstraint.getFieldGuid() );
+        restriction.setOperator( Operator.determineOperator( descr.getEvaluator(),
+                                                             descr.isNegated() ) );
+        restriction.setVariable( variable );
+        restriction.setOrderNumber( orderNumber );
+        restriction.setParentGuid( parent.getGuid() );
+        restriction.setParentType( parent.getVerifierComponentType() );
+
+        // Set field value, if it is unset.
+        currentField.setFieldType( Field.FieldType.VARIABLE );
+
+        data.add( restriction );
+        solvers.addRestriction( restriction );
+    }
+
+    /**
+     * End
+     * 
+     * @param descr
+     */
+    private void visit(ReturnValueRestrictionDescr descr,
+                       VerifierComponent parent,
+                       int orderNumber) {
+
+        ReturnValueRestriction restriction = new ReturnValueRestriction();
+
+        restriction.setRuleGuid( currentRule.getGuid() );
+        restriction.setRuleName( currentRule.getRuleName() );
+        restriction.setPatternGuid( currentPattern.getGuid() );
+        restriction.setPatternIsNot( currentPattern.isPatternNot() );
+        restriction.setConstraintGuid( currentConstraint.getGuid() );
+        restriction.setFieldGuid( currentConstraint.getFieldGuid() );
+        restriction.setOperator( Operator.determineOperator( descr.getEvaluator(),
+                                                             descr.isNegated() ) );
+        restriction.setClassMethodName( descr.getClassMethodName() );
+        restriction.setContent( descr.getContent() );
+        restriction.setDeclarations( descr.getDeclarations() );
+        restriction.setOrderNumber( orderNumber );
+        restriction.setParentGuid( parent.getGuid() );
+        restriction.setParentType( parent.getVerifierComponentType() );
+
+        data.add( restriction );
+        solvers.addRestriction( restriction );
+
+    }
+
+    /**
+     * End
+     * 
+     * @param descr
+     */
+    private void visit(LiteralRestrictionDescr descr,
+                       VerifierComponent parent,
+                       int orderNumber) {
+
+        LiteralRestriction restriction = new LiteralRestriction();
+
+        restriction.setRuleGuid( currentRule.getGuid() );
+        restriction.setRuleName( currentRule.getRuleName() );
+        restriction.setRuleGuid( currentRule.getGuid() );
+        restriction.setPatternGuid( currentPattern.getGuid() );
+        restriction.setPatternIsNot( currentPattern.isPatternNot() );
+        restriction.setConstraintGuid( currentConstraint.getGuid() );
+        restriction.setFieldGuid( currentConstraint.getFieldGuid() );
+        restriction.setOperator( Operator.determineOperator( descr.getEvaluator(),
+                                                             descr.isNegated() ) );
+        restriction.setValue( descr.getText() );
+        restriction.setOrderNumber( orderNumber );
+        restriction.setParentGuid( parent.getGuid() );
+        restriction.setParentType( parent.getVerifierComponentType() );
+
+        // Set field value, if it is unset.
+        currentField.setFieldType( restriction.getValueType() );
+
+        data.add( restriction );
+        solvers.addRestriction( restriction );
+    }
+
+    /**
+     * End
+     * 
+     * @param descr
+     */
+    private void visit(QualifiedIdentifierRestrictionDescr descr,
+                       VerifierComponent parent,
+                       int orderNumber) {
+
+        String text = descr.getText();
+
+        String base = text.substring( 0,
+                                      text.indexOf( "." ) );
+        String fieldName = text.substring( text.indexOf( "." ) );
+
+        Variable variable = data.getVariableByRuleAndVariableName( currentRule.getRuleName(),
+                                                                   base );
+
+        if ( variable != null ) {
+
+            QualifiedIdentifierRestriction restriction = new QualifiedIdentifierRestriction();
+
+            restriction.setRuleGuid( currentRule.getGuid() );
+            restriction.setPatternGuid( currentPattern.getGuid() );
+            restriction.setPatternIsNot( currentPattern.isPatternNot() );
+            restriction.setConstraintGuid( currentConstraint.getGuid() );
+            restriction.setFieldGuid( currentConstraint.getFieldGuid() );
+            restriction.setOperator( Operator.determineOperator( descr.getEvaluator(),
+                                                                 descr.isNegated() ) );
+            restriction.setVariableGuid( variable.getGuid() );
+            restriction.setVariableName( base );
+            restriction.setVariablePath( fieldName );
+            restriction.setOrderNumber( orderNumber );
+            restriction.setParentGuid( parent.getGuid() );
+            restriction.setParentType( parent.getVerifierComponentType() );
+
+            // Set field value, if it is not set.
+            currentField.setFieldType( Field.FieldType.VARIABLE );
+
+            variable.setObjectTypeType( VerifierComponentType.FIELD.getType() );
+
+            data.add( restriction );
+            solvers.addRestriction( restriction );
+        } else {
+
+            EnumField enumField = (EnumField) data.getFieldByObjectTypeAndFieldName( base,
+                                                                                     fieldName );
+            if ( enumField == null ) {
+                ObjectType objectType = findOrCreateNewObjectType( base );
+
+                enumField = new EnumField();
+
+                enumField.setObjectTypeGuid( objectType.getGuid() );
+                enumField.setObjectTypeName( objectType.getName() );
+                enumField.setName( fieldName );
+
+                objectType.getFields().add( enumField );
+
+                data.add( enumField );
+            }
+
+            EnumRestriction restriction = new EnumRestriction();
+
+            restriction.setRuleGuid( currentRule.getGuid() );
+            restriction.setPatternGuid( currentPattern.getGuid() );
+            restriction.setPatternIsNot( currentPattern.isPatternNot() );
+            restriction.setConstraintGuid( currentConstraint.getGuid() );
+            restriction.setFieldGuid( currentConstraint.getFieldGuid() );
+            restriction.setOperator( Operator.determineOperator( descr.getEvaluator(),
+                                                                 descr.isNegated() ) );
+            restriction.setEnumBaseGuid( enumField.getGuid() );
+            restriction.setEnumBase( base );
+            restriction.setEnumName( fieldName );
+            restriction.setOrderNumber( orderNumber );
+            restriction.setParentGuid( parent.getGuid() );
+            restriction.setParentType( parent.getVerifierComponentType() );
+
+            // Set field value, if it is not set.
+            currentField.setFieldType( Field.FieldType.ENUM );
+
+            data.add( restriction );
+            solvers.addRestriction( restriction );
+        }
+    }
+
+    private ObjectType findOrCreateNewObjectType(String name) {
+        ObjectType objectType = data.getObjectTypeByName( name );
+        if ( objectType == null ) {
+            objectType = new ObjectType();
+            objectType.setName( name );
+            data.add( objectType );
+        }
+        return objectType;
+    }
+
+    private Field createField(String fieldName,
+                              String classGuid,
+                              String className,
+                              VerifierComponent parent) {
+        Field field = new Field();
+        field.setObjectTypeGuid( classGuid );
+        field.setObjectTypeName( className );
+        field.setName( fieldName );
+        field.setParentGuid( parent.getGuid() );
+        field.setParentType( parent.getVerifierComponentType() );
+
+        currentObjectType.getFields().add( field );
+        return field;
+    }
+
+    private void formPossibilities() {
+
+        for ( SubPattern possibility : solvers.getPatternPossibilities() ) {
+            data.add( possibility );
+        }
+        for ( SubRule possibility : solvers.getRulePossibilities() ) {
+            data.add( possibility );
+        }
+    }
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/RuleLoader.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/RuleLoader.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/RuleLoader.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,155 @@
+package org.drools.verifier.misc;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.definition.KnowledgePackage;
+import org.drools.io.Resource;
+import org.drools.io.ResourceFactory;
+import org.drools.verifier.Verifier;
+
+public class RuleLoader {
+
+    // public static Collection<KnowledgePackage> loadPackages() {
+    // return loadPackages(Collections.<Resource, ResourceType> emptyMap());
+    // }
+
+    /**
+     * 
+     * @param resources
+     *            Additional custom rules added by the user.
+     * @return
+     */
+    public static Collection<KnowledgePackage> loadPackages(Map<Resource, ResourceType> resources) {
+
+        KnowledgeBuilderConfiguration kbuilderConfiguration = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
+        kbuilderConfiguration.setProperty( "drools.dialect.java.compiler",
+                                           "JANINO" );
+
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+
+        if ( resources != null ) {
+            for ( Resource resource : resources.keySet() ) {
+                kbuilder.add( resource,
+                              resources.get( resource ) );
+            }
+        }
+
+        return kbuilder.getKnowledgePackages();
+    }
+
+    public static Map<Resource, ResourceType> basicRulesForFullKnowledgeBase() {
+        Map<Resource, ResourceType> resources = new HashMap<Resource, ResourceType>();
+
+        // Missing consequence
+        resources.put( ResourceFactory.newClassPathResource( "Consequence.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        // Always false
+        resources.put( ResourceFactory.newClassPathResource( "alwaysFalse/Patterns.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        // Equivalence
+        resources.put( ResourceFactory.newClassPathResource( "equivalence/Rules.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        // Incoherence
+        resources.put( ResourceFactory.newClassPathResource( "incoherence/Patterns.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        resources.put( ResourceFactory.newClassPathResource( "incoherence/Restrictions.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        // Incompatibility
+        resources.put( ResourceFactory.newClassPathResource( "incompatibility/Patterns.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        resources.put( ResourceFactory.newClassPathResource( "incompatibility/Restrictions.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        // Missing equality
+        resources.put( ResourceFactory.newClassPathResource( "missingEquality/MissingEquality.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        // Opposites
+        resources.put( ResourceFactory.newClassPathResource( "opposites/Patterns.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        resources.put( ResourceFactory.newClassPathResource( "opposites/Restrictions.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        resources.put( ResourceFactory.newClassPathResource( "opposites/Rules.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        // Optimization
+        resources.put( ResourceFactory.newClassPathResource( "optimisation/PatternOrder.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        // TODO: The DRL needs more work
+        //        resources.put( ResourceFactory.newClassPathResource( "optimisation/RestrictionOrder.drl",
+        //                                                             Verifier.class ),
+        //                       ResourceType.DRL );
+        // Overlaps
+        resources.put( ResourceFactory.newClassPathResource( "overlaps/Restrictions.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        // Range checks
+        resources.put( ResourceFactory.newClassPathResource( "rangeChecks/Clean.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        resources.put( ResourceFactory.newClassPathResource( "rangeChecks/Dates.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        resources.put( ResourceFactory.newClassPathResource( "rangeChecks/Doubles.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        resources.put( ResourceFactory.newClassPathResource( "rangeChecks/Integers.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        ResourceFactory.newClassPathResource( "rangeChecks/NumberPatterns.drl",
+                                              Verifier.class );
+        ResourceFactory.newClassPathResource( "rangeChecks/Variables.drl",
+                                              Verifier.class );
+        //         Redundancy
+        resources.put( ResourceFactory.newClassPathResource( "redundancy/Consequence.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        resources.put( ResourceFactory.newClassPathResource( "redundancy/Notes.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        resources.put( ResourceFactory.newClassPathResource( "redundancy/Patterns.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        resources.put( ResourceFactory.newClassPathResource( "redundancy/Possibilities.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+
+        resources.put( ResourceFactory.newClassPathResource( "redundancy/Restrictions.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        resources.put( ResourceFactory.newClassPathResource( "redundancy/Rules.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        resources.put( ResourceFactory.newClassPathResource( "redundancy/Warnings.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        // Reporting
+        resources.put( ResourceFactory.newClassPathResource( "reports/RangeCheckReports.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        // Subsumption
+        resources.put( ResourceFactory.newClassPathResource( "subsumption/Possibilities.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+        resources.put( ResourceFactory.newClassPathResource( "subsumption/Restrictions.drl",
+                                                             Verifier.class ),
+                       ResourceType.DRL );
+
+        return resources;
+    }
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/UnknownDescriptionException.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/UnknownDescriptionException.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/UnknownDescriptionException.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,21 @@
+package org.drools.verifier.misc;
+
+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;
+	}
+
+}

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/ReportModeller.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/ReportModeller.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/ReportModeller.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -3,7 +3,7 @@
 import java.util.Collection;
 
 import org.drools.verifier.components.LiteralRestriction;
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.data.VerifierReport;
 import org.drools.verifier.report.components.Gap;
 import org.drools.verifier.report.components.MissingNumberPattern;
 import org.drools.verifier.report.components.Severity;
@@ -18,10 +18,10 @@
  */
 public class ReportModeller {
 
-	public static String writeXML(VerifierResult result) {
+	public static String writeXML(VerifierReport result) {
 		XStream xstream = new XStream();
 
-		xstream.alias("result", VerifierResult.class);
+		xstream.alias("result", VerifierReport.class);
 		xstream.alias("message", VerifierMessage.class);
 
 		xstream.alias("Gap", Gap.class);
@@ -34,7 +34,7 @@
 		return "<?xml version=\"1.0\"?>\n" + xstream.toXML(result);
 	}
 
-	public static String writePlainText(VerifierResult result) {
+	public static String writePlainText(VerifierReport result) {
 
 		StringBuffer str = new StringBuffer();
 

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/VerfierReportConfigurationOptions.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/VerfierReportConfigurationOptions.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/VerfierReportConfigurationOptions.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,5 @@
+package org.drools.verifier.report;
+
+public enum VerfierReportConfigurationOptions {
+
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/VerifierReportConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/VerifierReportConfiguration.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/VerifierReportConfiguration.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,5 @@
+package org.drools.verifier.report;
+
+public interface VerifierReportConfiguration {
+
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/VerifierReportConfigurationImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/VerifierReportConfigurationImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/VerifierReportConfigurationImpl.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,5 @@
+package org.drools.verifier.report;
+
+public class VerifierReportConfigurationImpl implements VerifierReportConfiguration {
+
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/VerifierReportWriter.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/VerifierReportWriter.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/VerifierReportWriter.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,12 @@
+package org.drools.verifier.report;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.drools.verifier.data.VerifierReport;
+
+public interface VerifierReportWriter {
+
+    public void writeReport(OutputStream out,
+                            VerifierReport result) throws IOException;
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/VerifierReportWriterFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/VerifierReportWriterFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/VerifierReportWriterFactory.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,35 @@
+package org.drools.verifier.report;
+
+import org.drools.verifier.report.html.HTMLReportWriter;
+
+public class VerifierReportWriterFactory {
+
+    public static VerifierReportWriter newPDFReportWriter() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public static VerifierReportWriter newHTMLReportWriter() {
+        return new HTMLReportWriter();
+    }
+
+    /**
+     * Returns the verifier results as plain text.
+     * 
+     * @return Analysis results as plain text.
+     */
+    public static VerifierReportWriter newPlainTextReportWriter() {
+        return null;
+        //        return ReportModeller.writePlainText( result );
+    }
+
+    /**
+     * Returns the verifier results as XML.
+     * 
+     * @return Analysis results as XML
+     */
+    public static VerifierReportWriter newXMLReportWriter() {
+        return null;
+        //        return ReportModeller.writeXML( result );
+    }
+}

Modified: 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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/AlwaysTrue.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -10,7 +10,7 @@
 
 	private static int index = 0;
 
-	private final int id = index++;
+	private final String guid = String.valueOf( index++ );
 
 	private final Cause cause;
 
@@ -27,8 +27,8 @@
 		return CauseType.ALWAYS_TRUE;
 	}
 
-	public int getId() {
-		return id;
+	public String getGuid() {
+		return guid;
 	}
 
 	public Cause getCause() {

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/Cause.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/Cause.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/Cause.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -6,8 +6,7 @@
  */
 public interface Cause {
 
-
-	public int getId();
-
-	public CauseType getCauseType();
+    public String getGuid();
+    
+    public CauseType getCauseType();
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/Incompatibility.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/Incompatibility.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/Incompatibility.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -12,7 +12,7 @@
 
 	private static int index = 0;
 
-	private final int id = index++;
+	private final String guid = String.valueOf( index++ );
 
 	private final Cause left;
 	private final Cause right;
@@ -22,8 +22,8 @@
 		this.right = right;
 	}
 
-	public int getId() {
-		return id;
+	public String getGuid() {
+		return guid;
 	}
 
 	public CauseType getCauseType() {

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/MissingRange.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/MissingRange.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/MissingRange.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -3,64 +3,59 @@
 import org.drools.base.evaluators.Operator;
 import org.drools.verifier.components.Field;
 
-public abstract class MissingRange implements Comparable<MissingRange> {
+public abstract class MissingRange
+    implements
+    Comparable<MissingRange> {
 
-	private static int index = 0;
-	protected final int id = index++;
+    private static int       index = 0;
+    protected final String   guid  = String.valueOf( index++ );
 
-	protected final Field field;
-	protected final Operator operator;
+    protected final Field    field;
+    protected final Operator operator;
 
-	public MissingRange(Field field, Operator operator) {
-		this.field = field;
-		this.operator = operator;
-	}
+    public MissingRange(Field field,
+                        Operator operator) {
+        this.field = field;
+        this.operator = operator;
+    }
 
-	/**
-	 * Takes the given operator e, and returns a reversed version of it.
-	 * 
-	 * @return operator
-	 */
-	public static Operator getReversedOperator(Operator e) {
-		if (e.equals(Operator.NOT_EQUAL)) {
-			return Operator.EQUAL;
-		} else if (e.equals(Operator.EQUAL)) {
-			return Operator.NOT_EQUAL;
-		} else if (e.equals(Operator.GREATER)) {
-			return Operator.LESS_OR_EQUAL;
-		} else if (e.equals(Operator.LESS)) {
-			return Operator.GREATER_OR_EQUAL;
-		} else if (e.equals(Operator.GREATER_OR_EQUAL)) {
-			return Operator.LESS;
-		} else if (e.equals(Operator.LESS_OR_EQUAL)) {
-			return Operator.GREATER;
-		} else {
-			return Operator.determineOperator(e.getOperatorString(), !e
-					.isNegated());
-		}
-	}
+    /**
+     * Takes the given operator e, and returns a reversed version of it.
+     * 
+     * @return operator
+     */
+    public static Operator getReversedOperator(Operator e) {
+        if ( e.equals( Operator.NOT_EQUAL ) ) {
+            return Operator.EQUAL;
+        } else if ( e.equals( Operator.EQUAL ) ) {
+            return Operator.NOT_EQUAL;
+        } else if ( e.equals( Operator.GREATER ) ) {
+            return Operator.LESS_OR_EQUAL;
+        } else if ( e.equals( Operator.LESS ) ) {
+            return Operator.GREATER_OR_EQUAL;
+        } else if ( e.equals( Operator.GREATER_OR_EQUAL ) ) {
+            return Operator.LESS;
+        } else if ( e.equals( Operator.LESS_OR_EQUAL ) ) {
+            return Operator.GREATER;
+        } else {
+            return Operator.determineOperator( e.getOperatorString(),
+                                               !e.isNegated() );
+        }
+    }
 
-	public int compareTo(MissingRange another) {
-		int value = this.id - another.getId();
+    public int compareTo(MissingRange another) {
+        return this.guid.compareTo( another.getGuid() );
+    }
 
-		if (value > 0) {
-			return 1;
-		} else if (value < 0) {
-			return -1;
-		} else {
-			return 0;
-		}
-	}
+    public String getGuid() {
+        return guid;
+    }
 
-	public int getId() {
-		return id;
-	}
+    public Field getField() {
+        return field;
+    }
 
-	public Field getField() {
-		return field;
-	}
-
-	public Operator getOperator() {
-		return operator;
-	}
+    public Operator getOperator() {
+        return operator;
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/Subsumption.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/Subsumption.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/Subsumption.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -8,7 +8,7 @@
 
 	private static int index = 0;
 
-	private final int id = index++;
+	private final String guid = String.valueOf( index++ );
 
 	private final Cause left;
 	private final Cause right;
@@ -18,8 +18,8 @@
 		this.right = right;
 	}
 
-	public int getId() {
-		return id;
+	public String getGuid() {
+		return guid;
 	}
 
 	public CauseType getCauseType() {

Deleted: 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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportModeller.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,121 +0,0 @@
-package org.drools.verifier.report.html;
-
-import java.io.File;
-import java.io.IOException;
-
-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.Severity;
-
-public class ComponentsReportModeller extends ReportModeller {
-
-	public static void writeHTML(String path, VerifierResult result) {
-		VerifierData data = result.getVerifierData();
-
-		// Source folder
-		File sourceFolder = new File(path + UrlFactory.SOURCE_FOLDER);
-		sourceFolder.mkdir();
-
-		// Base files
-		// index.htm
-		writeToFile(path + UrlFactory.SOURCE_FOLDER + File.separator
-				+ UrlFactory.HTML_FILE_INDEX, formPage(UrlFactory.THIS_FOLDER,
-				ComponentsReportVisitor.visitObjectTypeCollection(
-						UrlFactory.THIS_FOLDER, data.getAllObjectTypes())));
-
-		// packages.htm
-		writeToFile(path + UrlFactory.SOURCE_FOLDER + File.separator
-				+ UrlFactory.HTML_FILE_PACKAGES, formPage(
-				UrlFactory.THIS_FOLDER, ComponentsReportVisitor
-						.visitRulePackageCollection(UrlFactory.THIS_FOLDER,
-								data.getAllRulePackages())));
-
-		// Rules
-		String ruleFolder = path + UrlFactory.SOURCE_FOLDER + File.separator
-				+ UrlFactory.RULE_FOLDER;
-		File rulesFolder = new File(ruleFolder);
-		rulesFolder.mkdir();
-		for (VerifierRule rule : data.getAllRules()) {
-			writeToFile(ruleFolder + File.separator + rule.getId() + ".htm",
-					formPage(UrlFactory.PREVIOUS_FOLDER,
-							ComponentsReportVisitor.visitRule(
-									UrlFactory.PREVIOUS_FOLDER, rule, data)));
-		}
-
-		// ObjectTypes
-		String objectTypeFolder = path + UrlFactory.SOURCE_FOLDER
-				+ File.separator + UrlFactory.OBJECT_TYPE_FOLDER;
-		File objectTypesFolder = new File(objectTypeFolder);
-		objectTypesFolder.mkdir();
-		for (ObjectType objectType : data.getAllObjectTypes()) {
-			writeToFile(objectTypeFolder + File.separator + objectType.getId()
-					+ ".htm", formPage(UrlFactory.PREVIOUS_FOLDER,
-					ComponentsReportVisitor.visitObjectType(
-							UrlFactory.PREVIOUS_FOLDER, objectType, data)));
-		}
-
-		// Fields
-		String fieldFolder = path + UrlFactory.SOURCE_FOLDER + File.separator
-				+ UrlFactory.FIELD_FOLDER;
-		File fieldsFolder = new File(fieldFolder);
-		fieldsFolder.mkdir();
-		for (Field field : data.getAllFields()) {
-			writeToFile(fieldFolder + File.separator + field.getId() + ".htm",
-					formPage(UrlFactory.PREVIOUS_FOLDER,
-							ComponentsReportVisitor.visitField(
-									UrlFactory.PREVIOUS_FOLDER, field, result)));
-		}
-
-		// Verifier messages
-		writeMessages(path, result);
-
-		// css files
-		String cssFolder = path + UrlFactory.SOURCE_FOLDER + File.separator
-				+ UrlFactory.CSS_FOLDER;
-		File cssesFolder = new File(cssFolder);
-		cssesFolder.mkdir();
-		writeToFile(cssFolder + File.separator + UrlFactory.CSS_BASIC,
-				ComponentsReportVisitor.getCss(UrlFactory.CSS_BASIC));
-
-		// Image files
-		String imagesFolder = path + UrlFactory.SOURCE_FOLDER + File.separator
-				+ UrlFactory.IMAGES_FOLDER;
-
-		File imgsFolder = new File(imagesFolder);
-		imgsFolder.mkdir();
-
-		try {
-			copyFile(imagesFolder, "hdrlogo_drools50px.gif");
-			copyFile(imagesFolder, "jbossrules_hdrbkg_blue.gif");
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-	}
-
-	private static void writeMessages(String path, VerifierResult result) {
-		VerifierData data = result.getVerifierData();
-
-		String errors = VerifierMessagesVisitor
-				.visitVerifierMessagesCollection(
-						Severity.ERROR.getTuple(),
-						result.getBySeverity(Severity.ERROR),
-						data);
-		String warnings = VerifierMessagesVisitor
-				.visitVerifierMessagesCollection(
-						Severity.WARNING.getTuple(),
-						result.getBySeverity(Severity.WARNING),
-						data);
-		String notes = VerifierMessagesVisitor
-				.visitVerifierMessagesCollection(
-						Severity.NOTE.getTuple(), result
-								.getBySeverity(Severity.NOTE),
-						data);
-
-		writeToFile(path + UrlFactory.SOURCE_FOLDER + File.separator
-				+ UrlFactory.HTML_FILE_VERIFIER_MESSAGES, formPage(
-				UrlFactory.THIS_FOLDER, errors + warnings + notes));
-	}
-}

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportVisitor.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -8,114 +8,142 @@
 import org.drools.verifier.components.ObjectType;
 import org.drools.verifier.components.Restriction;
 import org.drools.verifier.components.RulePackage;
+import org.drools.verifier.components.VerifierComponentType;
 import org.drools.verifier.components.VerifierRule;
-import org.drools.verifier.dao.VerifierData;
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.data.VerifierData;
+import org.drools.verifier.data.VerifierReport;
 import org.drools.verifier.report.components.RangeCheckCause;
 import org.mvel2.templates.TemplateRuntime;
 
 class ComponentsReportVisitor extends ReportVisitor {
 
-	public static String getCss(String fileName) {
-		return readFile(fileName);
-	}
+    public static String getCss(String fileName) {
+        return readFile( fileName );
+    }
 
-	public static String visitRulePackageCollection(String sourceFolder,
-			Collection<RulePackage> packages) {
-		Map<String, Object> map = new HashMap<String, Object>();
-		map.put("sourceFolder", sourceFolder);
-		map.put("ruleFolder", UrlFactory.RULE_FOLDER);
+    public static String visitRulePackageCollection(String sourceFolder,
+                                                    Collection<RulePackage> packages) {
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put( "sourceFolder",
+                 sourceFolder );
+        map.put( "ruleFolder",
+                 UrlFactory.RULE_FOLDER );
 
-		map.put("rulePackages", packages);
+        map.put( "rulePackages",
+                 packages );
 
-		String myTemplate = readFile("packages.htm");
+        String myTemplate = readFile( "packages.htm" );
 
-		String result = String.valueOf(TemplateRuntime.eval(myTemplate, map));
+        String result = String.valueOf( TemplateRuntime.eval( myTemplate,
+                                                              map ) );
 
-		return result;
-	}
+        return result;
+    }
 
-	public static String visitObjectTypeCollection(String sourceFolder,
-			Collection<ObjectType> objectTypes) {
-		Map<String, Object> map = new HashMap<String, Object>();
-		map.put("sourceFolder", sourceFolder);
-		map.put("objectTypeFolder", sourceFolder + "/"
-				+ UrlFactory.OBJECT_TYPE_FOLDER);
-		map.put("fieldFolder", UrlFactory.FIELD_FOLDER);
-		map.put("objectTypes", objectTypes);
+    public static String visitObjectTypeCollection(String sourceFolder,
+                                                   Collection<ObjectType> objectTypes) {
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put( "sourceFolder",
+                 sourceFolder );
+        map.put( "objectTypeFolder",
+                 sourceFolder + "/" + UrlFactory.OBJECT_TYPE_FOLDER );
+        map.put( "fieldFolder",
+                 UrlFactory.FIELD_FOLDER );
+        map.put( "objectTypes",
+                 objectTypes );
 
-		String myTemplate = readFile("objectTypes.htm");
+        String myTemplate = readFile( "objectTypes.htm" );
 
-		return String.valueOf(TemplateRuntime.eval(myTemplate, map));
-	}
+        return String.valueOf( TemplateRuntime.eval( myTemplate,
+                                                     map ) );
+    }
 
-	public static String visitRule(String sourceFolder, VerifierRule rule,
-			VerifierData data) {
-		Collection<ObjectType> objectTypes = data.getObjectTypesByRuleName(rule
-				.getRuleName());
+    public static String visitRule(String sourceFolder,
+                                   VerifierRule rule,
+                                   VerifierData data) {
+        Collection<ObjectType> objectTypes = data.getObjectTypesByRuleName( rule.getRuleName() );
 
-		Map<String, Object> map = new HashMap<String, Object>();
-		map.put("sourceFolder", sourceFolder);
-		map.put("objectTypeFolder", UrlFactory.OBJECT_TYPE_FOLDER);
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put( "sourceFolder",
+                 sourceFolder );
+        map.put( "objectTypeFolder",
+                 UrlFactory.OBJECT_TYPE_FOLDER );
 
-		map.put("rule", rule);
-		map.put("objectTypes", objectTypes);
+        map.put( "rule",
+                 rule );
+        map.put( "objectTypes",
+                 objectTypes );
 
-		String myTemplate = readFile("rule.htm");
+        String myTemplate = readFile( "rule.htm" );
 
-		return String.valueOf(TemplateRuntime.eval(myTemplate, map));
-	}
+        return String.valueOf( TemplateRuntime.eval( myTemplate,
+                                                     map ) );
+    }
 
-	public static String visitObjectType(String sourceFolder,
-			ObjectType objectType, VerifierData data) {
-		Collection<VerifierRule> rules = data.getRulesByObjectTypeId(objectType
-				.getId());
+    public static String visitObjectType(String sourceFolder,
+                                         ObjectType objectType,
+                                         VerifierData data) {
+        Collection<VerifierRule> rules = data.getRulesByObjectTypeId( objectType.getGuid() );
 
-		Map<String, Object> map = new HashMap<String, Object>();
-		map.put("sourceFolder", sourceFolder);
-		map.put("ruleFolder", UrlFactory.RULE_FOLDER);
-		map.put("fieldFolder", UrlFactory.FIELD_FOLDER);
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put( "sourceFolder",
+                 sourceFolder );
+        map.put( "ruleFolder",
+                 UrlFactory.RULE_FOLDER );
+        map.put( "fieldFolder",
+                 UrlFactory.FIELD_FOLDER );
 
-		map.put("objectType", objectType);
-		map.put("rules", rules);
+        map.put( "objectType",
+                 objectType );
+        map.put( "rules",
+                 rules );
 
-		String myTemplate = readFile("objectType.htm");
+        String myTemplate = readFile( "objectType.htm" );
 
-		return String.valueOf(TemplateRuntime.eval(myTemplate, map));
-	}
+        return String.valueOf( TemplateRuntime.eval( myTemplate,
+                                                     map ) );
+    }
 
-	public static String visitField(String sourceFolder, Field field,
-			VerifierResult result) {
-		VerifierData data = result.getVerifierData();
-		ObjectType objectType = data.getObjectTypeById(field.getObjectTypeId());
-		Collection<VerifierRule> rules = data.getRulesByFieldId(field.getId());
+    public static String visitField(String sourceFolder,
+                                    Field field,
+                                    VerifierReport result) {
+        VerifierData data = result.getVerifierData();
+        ObjectType objectType = data.getVerifierObject( VerifierComponentType.OBJECT_TYPE,
+                                                        field.getObjectTypeGuid() );
+        Collection<VerifierRule> rules = data.getRulesByFieldId( field.getGuid() );
 
-		Map<String, Object> map = new HashMap<String, Object>();
-		map.put("sourceFolder", sourceFolder);
-		map.put("ruleFolder", UrlFactory.RULE_FOLDER);
-		map.put("objectTypeFolder", UrlFactory.OBJECT_TYPE_FOLDER);
-		map.put("fieldFolder", UrlFactory.FIELD_FOLDER);
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put( "sourceFolder",
+                 sourceFolder );
+        map.put( "ruleFolder",
+                 UrlFactory.RULE_FOLDER );
+        map.put( "objectTypeFolder",
+                 UrlFactory.OBJECT_TYPE_FOLDER );
+        map.put( "fieldFolder",
+                 UrlFactory.FIELD_FOLDER );
 
-		map.put("field", field);
-		map.put("objectType", objectType);
-		map.put("rules", rules);
+        map.put( "field",
+                 field );
+        map.put( "objectType",
+                 objectType );
+        map.put( "rules",
+                 rules );
 
-		if (field.getFieldType() == Field.FieldType.DOUBLE
-				|| field.getFieldType() == Field.FieldType.DATE
-				|| field.getFieldType() == Field.FieldType.INT) {
-			Collection<RangeCheckCause> causes = result
-					.getRangeCheckCausesByFieldId(field.getId());
-			Collection<Restriction> restrictions = data
-					.getRestrictionsByFieldId(field.getId());
-			map.put("ranges", "Ranges:"
-					+ MissingRangesReportVisitor.visitRanges(
-							UrlFactory.PREVIOUS_FOLDER, restrictions, causes));
-		} else {
-			map.put("ranges", "");
-		}
+        if ( field.getFieldType() == Field.FieldType.DOUBLE || field.getFieldType() == Field.FieldType.DATE || field.getFieldType() == Field.FieldType.INT ) {
+            Collection<RangeCheckCause> causes = result.getRangeCheckCausesByFieldId( field.getGuid() );
+            Collection<Restriction> restrictions = data.getRestrictionsByFieldGuid( field.getGuid() );
+            map.put( "ranges",
+                     "Ranges:" + MissingRangesReportVisitor.visitRanges( UrlFactory.PREVIOUS_FOLDER,
+                                                                         restrictions,
+                                                                         causes ) );
+        } else {
+            map.put( "ranges",
+                     "" );
+        }
 
-		String myTemplate = readFile("field.htm");
+        String myTemplate = readFile( "field.htm" );
 
-		return String.valueOf(TemplateRuntime.eval(myTemplate, map));
-	}
+        return String.valueOf( TemplateRuntime.eval( myTemplate,
+                                                     map ) );
+    }
 }

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/HTMLReportWriter.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/HTMLReportWriter.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/HTMLReportWriter.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,108 @@
+package org.drools.verifier.report.html;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.zip.ZipOutputStream;
+
+import org.drools.verifier.components.Field;
+import org.drools.verifier.components.ObjectType;
+import org.drools.verifier.components.RulePackage;
+import org.drools.verifier.components.VerifierComponentType;
+import org.drools.verifier.components.VerifierRule;
+import org.drools.verifier.data.VerifierData;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.report.VerifierReportWriter;
+import org.drools.verifier.report.components.Severity;
+
+public class HTMLReportWriter extends ReportModeller
+    implements
+    VerifierReportWriter {
+
+    public void writeReport(OutputStream out,
+                            VerifierReport result) throws IOException {
+
+        zout = new ZipOutputStream( out );
+
+        VerifierData data = result.getVerifierData();
+
+        // Base files
+        // index.htm
+        writeToFile( UrlFactory.SOURCE_FOLDER + File.separator + UrlFactory.HTML_FILE_INDEX,
+                     formPage( UrlFactory.THIS_FOLDER,
+                               ComponentsReportVisitor.visitObjectTypeCollection( UrlFactory.THIS_FOLDER,
+                                                                                  data.<ObjectType> getAll( VerifierComponentType.OBJECT_TYPE ) ) ) );
+
+        // packages.htm
+        writeToFile( UrlFactory.SOURCE_FOLDER + File.separator + UrlFactory.HTML_FILE_PACKAGES,
+                     formPage( UrlFactory.THIS_FOLDER,
+                               ComponentsReportVisitor.visitRulePackageCollection( UrlFactory.THIS_FOLDER,
+                                                                                   data.<RulePackage> getAll( VerifierComponentType.RULE_PACKAGE ) ) ) );
+
+        // Rules
+        String ruleFolder = UrlFactory.SOURCE_FOLDER + File.separator + UrlFactory.RULE_FOLDER;
+        for ( VerifierRule rule : data.<VerifierRule> getAll( VerifierComponentType.RULE ) ) {
+            writeToFile( ruleFolder + File.separator + rule.getGuid() + ".htm",
+                         formPage( UrlFactory.PREVIOUS_FOLDER,
+                                   ComponentsReportVisitor.visitRule( UrlFactory.PREVIOUS_FOLDER,
+                                                                      rule,
+                                                                      data ) ) );
+        }
+
+        // ObjectTypes
+        String objectTypeFolder = UrlFactory.SOURCE_FOLDER + File.separator + UrlFactory.OBJECT_TYPE_FOLDER;
+        for ( ObjectType objectType : data.<ObjectType> getAll( VerifierComponentType.OBJECT_TYPE ) ) {
+            writeToFile( objectTypeFolder + File.separator + objectType.getGuid() + ".htm",
+                         formPage( UrlFactory.PREVIOUS_FOLDER,
+                                   ComponentsReportVisitor.visitObjectType( UrlFactory.PREVIOUS_FOLDER,
+                                                                            objectType,
+                                                                            data ) ) );
+        }
+
+        // Fields
+        String fieldFolder = UrlFactory.SOURCE_FOLDER + File.separator + UrlFactory.FIELD_FOLDER;
+        for ( Field field : data.<Field> getAll( VerifierComponentType.FIELD ) ) {
+            writeToFile( fieldFolder + File.separator + field.getGuid() + ".htm",
+                         formPage( UrlFactory.PREVIOUS_FOLDER,
+                                   ComponentsReportVisitor.visitField( UrlFactory.PREVIOUS_FOLDER,
+                                                                       field,
+                                                                       result ) ) );
+        }
+
+        // Verifier messages
+        writeMessages( result );
+
+        // css files
+        String cssFolder = UrlFactory.SOURCE_FOLDER + File.separator + UrlFactory.CSS_FOLDER;
+        writeToFile( cssFolder + File.separator + UrlFactory.CSS_BASIC,
+                     ComponentsReportVisitor.getCss( UrlFactory.CSS_BASIC ) );
+
+        // Image files
+        String imagesFolder = UrlFactory.SOURCE_FOLDER + File.separator + UrlFactory.IMAGES_FOLDER;
+
+        copyFile( imagesFolder,
+                  "hdrlogo_drools50px.gif" );
+        copyFile( imagesFolder,
+                  "jbossrules_hdrbkg_blue.gif" );
+
+        zout.close();
+    }
+
+    private void writeMessages(VerifierReport result) throws IOException {
+        VerifierData data = result.getVerifierData();
+
+        String errors = VerifierMessagesVisitor.visitVerifierMessagesCollection( Severity.ERROR.getTuple(),
+                                                                                 result.getBySeverity( Severity.ERROR ),
+                                                                                 data );
+        String warnings = VerifierMessagesVisitor.visitVerifierMessagesCollection( Severity.WARNING.getTuple(),
+                                                                                   result.getBySeverity( Severity.WARNING ),
+                                                                                   data );
+        String notes = VerifierMessagesVisitor.visitVerifierMessagesCollection( Severity.NOTE.getTuple(),
+                                                                                result.getBySeverity( Severity.NOTE ),
+                                                                                data );
+
+        writeToFile( UrlFactory.SOURCE_FOLDER + File.separator + UrlFactory.HTML_FILE_VERIFIER_MESSAGES,
+                     formPage( UrlFactory.THIS_FOLDER,
+                               errors + warnings + notes ) );
+    }
+}

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/MissingRangesReportVisitor.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/MissingRangesReportVisitor.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/MissingRangesReportVisitor.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -10,167 +10,187 @@
 import org.drools.verifier.components.Field;
 import org.drools.verifier.components.LiteralRestriction;
 import org.drools.verifier.components.Restriction;
-import org.drools.verifier.dao.DataTree;
-import org.drools.verifier.dao.VerifierData;
+import org.drools.verifier.components.VerifierComponentType;
+import org.drools.verifier.data.DataTree;
+import org.drools.verifier.data.VerifierData;
 import org.drools.verifier.report.components.RangeCheckCause;
 import org.drools.verifier.report.components.VerifierRangeCheckMessage;
 import org.mvel2.templates.TemplateRuntime;
 
 class MissingRangesReportVisitor extends ReportVisitor {
 
-	public static Collection<String> visitRestrictionsCollection(
-			String sourceFolder, Collection<Restriction> restrictions,
-			Collection<RangeCheckCause> causes) {
-		DataTree<Object, DataRow> dt = new DataTree<Object, DataRow>();
-		Collection<String> stringRows = new ArrayList<String>();
+    public static Collection<String> visitRestrictionsCollection(String sourceFolder,
+                                                                 Collection<Restriction> restrictions,
+                                                                 Collection<RangeCheckCause> causes) {
+        DataTree<Object, DataRow> dt = new DataTree<Object, DataRow>();
+        Collection<String> stringRows = new ArrayList<String>();
 
-		for (RangeCheckCause cause : causes) {
-			dt.put(cause.getValueAsObject(), new DataRow(null, null, cause
-					.getOperator(), cause.getValueAsString()));
-		}
+        for ( RangeCheckCause cause : causes ) {
+            dt.put( cause.getValueAsObject(),
+                    new DataRow( null,
+                                 null,
+                                 cause.getOperator(),
+                                 cause.getValueAsString() ) );
+        }
 
-		for (Restriction r : restrictions) {
-			if (r instanceof LiteralRestriction) {
-				try {
-					LiteralRestriction restriction = (LiteralRestriction) r;
+        for ( Restriction r : restrictions ) {
+            if ( r instanceof LiteralRestriction ) {
+                try {
+                    LiteralRestriction restriction = (LiteralRestriction) r;
 
-					dt.put(restriction.getValueAsObject(), new DataRow(
-							restriction.getRuleId(), restriction.getRuleName(),
-							restriction.getOperator(), restriction
-									.getValueAsString()));
-				} catch (Exception e) {
-					e.printStackTrace();
-				}
-			}
-		}
+                    dt.put( restriction.getValueAsObject(),
+                            new DataRow( restriction.getRuleGuid(),
+                                         restriction.getRuleName(),
+                                         restriction.getOperator(),
+                                         restriction.getValueAsString() ) );
+                } catch ( Exception e ) {
+                    e.printStackTrace();
+                }
+            }
+        }
 
-		DataRow previous = null;
-		for (Iterator<DataRow> iterator = dt.values().iterator(); iterator
-				.hasNext();) {
-			DataRow current = iterator.next();
+        DataRow previous = null;
+        for ( Iterator<DataRow> iterator = dt.values().iterator(); iterator.hasNext(); ) {
+            DataRow current = iterator.next();
 
-			if (previous != null) {
-				// Check if previous and current are from the same rule.
-				if (previous.ruleId == null && current.ruleId == null
-						&& !previous.operator.equals(Operator.EQUAL)
-						&& !previous.operator.equals(Operator.NOT_EQUAL)
-						&& !current.operator.equals(Operator.EQUAL)
-						&& !current.operator.equals(Operator.NOT_EQUAL)) {
-					// Combine these two.
-					stringRows.add("Missing : " + previous + " .. " + current);
+            if ( previous != null ) {
+                // Check if previous and current are from the same rule.
+                if ( previous.ruleId == null && current.ruleId == null && !previous.operator.equals( Operator.EQUAL ) && !previous.operator.equals( Operator.NOT_EQUAL ) && !current.operator.equals( Operator.EQUAL )
+                     && !current.operator.equals( Operator.NOT_EQUAL ) ) {
+                    // Combine these two.
+                    stringRows.add( "Missing : " + previous + " .. " + current );
 
-					current = iterator.next();
+                    current = iterator.next();
 
-				} else if (previous.ruleId != null
-						&& previous.ruleId.equals(current.ruleId)) {
-					// Combine these two.
-					stringRows.add(UrlFactory.getRuleUrl(sourceFolder,
-							current.ruleId, current.ruleName)
-							+ " : "
-							+ previous.toString()
-							+ " "
-							+ current.toString());
+                } else if ( previous.ruleId != null && previous.ruleId.equals( current.ruleId ) ) {
+                    // Combine these two.
+                    stringRows.add( UrlFactory.getRuleUrl( sourceFolder,
+                                                           current.ruleId,
+                                                           current.ruleName ) + " : " + previous.toString() + " " + current.toString() );
 
-					current = iterator.next();
+                    current = iterator.next();
 
-				} else if (!iterator.hasNext()) { // If this is last row
-					// Print previous and current if they were not merged.
-					processRangeOutput(previous, stringRows, sourceFolder);
-					processRangeOutput(current, stringRows, sourceFolder);
+                } else if ( !iterator.hasNext() ) { // If this is last row
+                    // Print previous and current if they were not merged.
+                    processRangeOutput( previous,
+                                        stringRows,
+                                        sourceFolder );
+                    processRangeOutput( current,
+                                        stringRows,
+                                        sourceFolder );
 
-				} else { // If they are not from the same rule
-					// Print previous.
-					processRangeOutput(previous, stringRows, sourceFolder);
-				}
-			} else if (!iterator.hasNext()) {
-				processRangeOutput(current, stringRows, sourceFolder);
-			}
+                } else { // If they are not from the same rule
+                    // Print previous.
+                    processRangeOutput( previous,
+                                        stringRows,
+                                        sourceFolder );
+                }
+            } else if ( !iterator.hasNext() ) {
+                processRangeOutput( current,
+                                    stringRows,
+                                    sourceFolder );
+            }
 
-			// Set current as previous.
-			previous = current;
-		}
+            // Set current as previous.
+            previous = current;
+        }
 
-		return stringRows;
-	}
+        return stringRows;
+    }
 
-	public static String visitRanges(String sourceFolder,
-			Collection<Restriction> restrictions,
-			Collection<RangeCheckCause> causes) {
-		Map<String, Object> map = new HashMap<String, Object>();
+    public static String visitRanges(String sourceFolder,
+                                     Collection<Restriction> restrictions,
+                                     Collection<RangeCheckCause> causes) {
+        Map<String, Object> map = new HashMap<String, Object>();
 
-		map.put("lines", visitRestrictionsCollection(sourceFolder,
-				restrictions, causes));
+        map.put( "lines",
+                 visitRestrictionsCollection( sourceFolder,
+                                              restrictions,
+                                              causes ) );
 
-		String myTemplate = readFile("ranges.htm");
+        String myTemplate = readFile( "ranges.htm" );
 
-		String result = String.valueOf(TemplateRuntime.eval(myTemplate, map));
+        String result = String.valueOf( TemplateRuntime.eval( myTemplate,
+                                                              map ) );
 
-		return result;
-	}
+        return result;
+    }
 
-	private static void processRangeOutput(DataRow dataRow,
-			Collection<String> stringRows, String sourceFolder) {
+    private static void processRangeOutput(DataRow dataRow,
+                                           Collection<String> stringRows,
+                                           String sourceFolder) {
 
-		if (dataRow.ruleId == null) {
-			stringRows.add("Missing : " + dataRow.toString());
-		} else {
-			stringRows.add(UrlFactory.getRuleUrl(sourceFolder, dataRow.ruleId,
-					dataRow.ruleName)
-					+ " : " + dataRow.toString());
-		}
-	}
+        if ( dataRow.ruleId == null ) {
+            stringRows.add( "Missing : " + dataRow.toString() );
+        } else {
+            stringRows.add( UrlFactory.getRuleUrl( sourceFolder,
+                                                   dataRow.ruleId,
+                                                   dataRow.ruleName ) + " : " + dataRow.toString() );
+        }
+    }
 
-	public static String visitRangeCheckMessage(String sourceFolder,
-			VerifierRangeCheckMessage message, VerifierData data) {
-		Collection<Restriction> restrictions = data
-				.getRestrictionsByFieldId(message.getFaulty().getId());
-		Field field = (Field) message.getFaulty();
+    public static String visitRangeCheckMessage(String sourceFolder,
+                                                VerifierRangeCheckMessage message,
+                                                VerifierData data) {
+        Field field = (Field) message.getFaulty();
+        Collection<Restriction> restrictions = data.getRestrictionsByFieldGuid( field.getGuid() );
 
-		Map<String, Object> map = new HashMap<String, Object>();
-		map.put("header", processHeader(sourceFolder));
-		map.put("sourceFolder", sourceFolder);
-		map.put("fieldFolder", sourceFolder + "/" + UrlFactory.FIELD_FOLDER);
-		map.put("objectTypeFolder", sourceFolder + "/"
-				+ UrlFactory.OBJECT_TYPE_FOLDER);
-		map
-				.put("packageFolder", sourceFolder + "/"
-						+ UrlFactory.PACKAGE_FOLDER);
-		map.put("cssStyle", createStyleTag(sourceFolder + "/"
-				+ UrlFactory.CSS_FOLDER + "/" + UrlFactory.CSS_BASIC));
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put( "header",
+                 processHeader( sourceFolder ) );
+        map.put( "sourceFolder",
+                 sourceFolder );
+        map.put( "fieldFolder",
+                 sourceFolder + "/" + UrlFactory.FIELD_FOLDER );
+        map.put( "objectTypeFolder",
+                 sourceFolder + "/" + UrlFactory.OBJECT_TYPE_FOLDER );
+        map.put( "packageFolder",
+                 sourceFolder + "/" + UrlFactory.PACKAGE_FOLDER );
+        map.put( "cssStyle",
+                 createStyleTag( sourceFolder + "/" + UrlFactory.CSS_FOLDER + "/" + UrlFactory.CSS_BASIC ) );
 
-		map.put("field", field);
-		map.put("objectType", data.getObjectTypeById(field.getObjectTypeId()));
-		map.put("ranges", visitRanges(UrlFactory.THIS_FOLDER, restrictions,
-				message.getCauses()));
+        map.put( "field",
+                 field );
+        map.put( "objectType",
+                 data.getVerifierObject( VerifierComponentType.OBJECT_TYPE,
+                                         field.getObjectTypeGuid() ) );
+        map.put( "ranges",
+                 visitRanges( UrlFactory.THIS_FOLDER,
+                              restrictions,
+                              message.getCauses() ) );
 
-		String myTemplate = readFile("missingRange.htm");
+        String myTemplate = readFile( "missingRange.htm" );
 
-		String result = String.valueOf(TemplateRuntime.eval(myTemplate, map));
+        String result = String.valueOf( TemplateRuntime.eval( myTemplate,
+                                                              map ) );
 
-		return result;
-	}
+        return result;
+    }
 }
 
-class DataRow implements Comparable<DataRow> {
-	public String ruleName;
-	protected Integer ruleId;
-	protected Operator operator;
-	protected String value;
+class DataRow
+    implements
+    Comparable<DataRow> {
+    public String      ruleName;
+    protected String   ruleId;
+    protected Operator operator;
+    protected String   value;
 
-	public int compareTo(DataRow o) {
-		return operator.getOperatorString().compareTo(
-				o.operator.getOperatorString());
-	}
+    public int compareTo(DataRow o) {
+        return operator.getOperatorString().compareTo( o.operator.getOperatorString() );
+    }
 
-	public DataRow(Integer ruleId, String ruleName, Operator operator,
-			String valueAsString) {
-		this.ruleId = ruleId;
-		this.ruleName = ruleName;
-		this.operator = operator;
-		this.value = valueAsString;
-	}
+    public DataRow(String ruleId,
+                   String ruleName,
+                   Operator operator,
+                   String valueAsString) {
+        this.ruleId = ruleId;
+        this.ruleName = ruleName;
+        this.operator = operator;
+        this.value = valueAsString;
+    }
 
-	public String toString() {
-		return operator.getOperatorString() + " " + value;
-	}
+    public String toString() {
+        return operator.getOperatorString() + " " + value;
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ReportModeller.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ReportModeller.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ReportModeller.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,71 +1,79 @@
 package org.drools.verifier.report.html;
 
-import java.io.BufferedWriter;
+import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.jar.JarEntry;
+import java.util.zip.ZipOutputStream;
 
 import org.mvel2.templates.TemplateRuntime;
 
-
 abstract class ReportModeller {
 
-	protected static String formPage(String sourceFolder, String content) {
-		Map<String, Object> map = new HashMap<String, Object>();
-		String myTemplate = VerifierMessagesVisitor.readFile("frame.htm");
+    protected ZipOutputStream zout;
 
-		map.put("cssStyle", ReportVisitor.createStyleTag(sourceFolder + "/"
-				+ UrlFactory.CSS_FOLDER + "/" + UrlFactory.CSS_BASIC));
-		map.put("sourceFolder", sourceFolder);
-		map.put("header", ReportVisitor.processHeader(sourceFolder));
-		map.put("content", content);
+    protected String formPage(String sourceFolder,
+                              String content) {
+        Map<String, Object> map = new HashMap<String, Object>();
+        String myTemplate = VerifierMessagesVisitor.readFile( "frame.htm" );
 
-		return String.valueOf(TemplateRuntime.eval(myTemplate, map));
-	}
+        map.put( "cssStyle",
+                 ReportVisitor.createStyleTag( sourceFolder + "/" + UrlFactory.CSS_FOLDER + "/" + UrlFactory.CSS_BASIC ) );
+        map.put( "sourceFolder",
+                 sourceFolder );
+        map.put( "header",
+                 ReportVisitor.processHeader( sourceFolder ) );
+        map.put( "content",
+                 content );
 
-	public static void copyFile(String destination, String filename)
-			throws IOException {
+        return String.valueOf( TemplateRuntime.eval( myTemplate,
+                                                     map ) );
+    }
 
-		File source = new File(ComponentsReportModeller.class.getResource(
-				filename).getFile());
-		File dest = new File(destination + File.separator + filename);
+    public void copyFile(String destination,
+                         String filename) throws IOException {
+        zout.putNextEntry( new JarEntry( destination + File.separator + filename ) );
 
-		if (!dest.exists()) {
-			dest.createNewFile();
-		}
-		InputStream in = null;
-		OutputStream out = null;
-		try {
-			in = new FileInputStream(source);
-			out = new FileOutputStream(dest);
+        File source = new File( HTMLReportWriter.class.getResource( filename ).getFile() );
+        InputStream in = new FileInputStream( source );
 
-			// Transfer bytes from in to out
-			byte[] buf = new byte[1024];
-			int len;
-			while ((len = in.read(buf)) > 0) {
-				out.write(buf, 0, len);
-			}
-		} finally {
-			in.close();
-			out.close();
-		}
+        // Transfer bytes from in to out
+        byte[] buf = new byte[1024];
+        int len;
+        while ( (len = in.read( buf )) > 0 ) {
+            zout.write( buf,
+                        0,
+                        len );
+        }
+        in.close();
+        zout.closeEntry();
+    }
 
-	}
+    protected void writeToFile(String fileName,
+                               String text) throws IOException {
+        zout.putNextEntry( new JarEntry( fileName ) );
 
-	protected static void writeToFile(String fileName, String text) {
-		try {
-			FileWriter fstream = new FileWriter(fileName);
-			BufferedWriter out = new BufferedWriter(fstream);
-			out.write(text);
-			out.close();
-		} catch (Exception e) {
-			System.err.println(e.getMessage());
-		}
-	}
+        ByteArrayInputStream i = new ByteArrayInputStream( text.getBytes() );
+
+        int len = 0;
+        byte[] copyBuf = new byte[1024];
+        while ( len != -1 ) {
+
+            len = i.read( copyBuf,
+                          0,
+                          copyBuf.length );
+            if ( len > 0 ) {
+                zout.write( copyBuf,
+                            0,
+                            len );
+            }
+        }
+
+        i.close();
+        zout.closeEntry();
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/UrlFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/UrlFactory.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/UrlFactory.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -8,45 +8,47 @@
  */
 class UrlFactory {
 
-	public static final String THIS_FOLDER = ".";
-	public static final String PREVIOUS_FOLDER = "..";
+    public static final String THIS_FOLDER                 = ".";
+    public static final String PREVIOUS_FOLDER             = "..";
 
-	public static final String SOURCE_FOLDER = "report";
-	public static final String OBJECT_TYPE_FOLDER = "objectTypes";
-	public static final String FIELD_FOLDER = "fields";
-	public static final String RULE_FOLDER = "rules";
-	public static final String PACKAGE_FOLDER = "packages";
-	public static final String CSS_FOLDER = "css";
+    public static final String SOURCE_FOLDER               = "report";
+    public static final String OBJECT_TYPE_FOLDER          = "objectTypes";
+    public static final String FIELD_FOLDER                = "fields";
+    public static final String RULE_FOLDER                 = "rules";
+    public static final String PACKAGE_FOLDER              = "packages";
+    public static final String CSS_FOLDER                  = "css";
 
-	public static final String CSS_BASIC = "basic.css";
+    public static final String CSS_BASIC                   = "basic.css";
 
-	public static final String IMAGES_FOLDER = "images";
+    public static final String IMAGES_FOLDER               = "images";
 
-	public static final String HTML_FILE_INDEX = "index.htm";
-	public static final String HTML_FILE_PACKAGES = "packages.htm";
-	public static final String HTML_FILE_VERIFIER_MESSAGES = "verifierMessages.htm";
+    public static final String HTML_FILE_INDEX             = "index.htm";
+    public static final String HTML_FILE_PACKAGES          = "packages.htm";
+    public static final String HTML_FILE_VERIFIER_MESSAGES = "verifierMessages.htm";
 
-	/**
-	 * Finds a link to object if one exists.
-	 * 
-	 * @param o
-	 *            Object that might have a page that can be linked.
-	 * @return Link to objects page or the toString() text if no link could not
-	 *         be created.
-	 */
-	public static String getUrl(Object o) {
-		if (o instanceof VerifierRule) {
-			VerifierRule rule = (VerifierRule) o;
-			return getRuleUrl(UrlFactory.RULE_FOLDER, rule.getId(), rule
-					.getRuleName());
-		}
+    /**
+     * Finds a link to object if one exists.
+     * 
+     * @param o
+     *            Object that might have a page that can be linked.
+     * @return Link to objects page or the toString() text if no link could not
+     *         be created.
+     */
+    public static String getUrl(Object o) {
+        if ( o instanceof VerifierRule ) {
+            VerifierRule rule = (VerifierRule) o;
+            return getRuleUrl( UrlFactory.RULE_FOLDER,
+                               rule.getGuid(),
+                               rule.getRuleName() );
+        }
 
-		return o.toString();
-	}
+        return o.toString();
+    }
 
-	static String getRuleUrl(String sourceFolder, int ruleId, String ruleName) {
-		return "<a href=\"" + sourceFolder + "/" + RULE_FOLDER + "/" + ruleId
-				+ ".htm\">" + ruleName + "</a>";
-	}
+    static String getRuleUrl(String sourceFolder,
+                             String ruleId,
+                             String ruleName) {
+        return "<a href=\"" + sourceFolder + "/" + RULE_FOLDER + "/" + ruleId + ".htm\">" + ruleName + "</a>";
+    }
 
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/VerifierMessagesVisitor.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/VerifierMessagesVisitor.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/VerifierMessagesVisitor.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -5,7 +5,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.drools.verifier.dao.VerifierData;
+import org.drools.verifier.data.VerifierData;
 import org.drools.verifier.report.components.Cause;
 import org.drools.verifier.report.components.VerifierMessage;
 import org.drools.verifier.report.components.VerifierMessageBase;

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/solver/PatternSolver.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/solver/PatternSolver.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/solver/PatternSolver.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,24 @@
+package org.drools.verifier.solver;
+
+import org.drools.verifier.components.OperatorDescr;
+import org.drools.verifier.components.Pattern;
+import org.drools.verifier.solver.Solver;
+
+/**
+ * Takes a list of Constraints and makes possibilities from them.
+ * 
+ * @author Toni Rikkola
+ */
+class PatternSolver extends Solver {
+
+	private Pattern pattern;
+
+	public PatternSolver(Pattern pattern) {
+		super(OperatorDescr.Type.OR);
+		this.pattern = pattern;
+	}
+
+	public Pattern getPattern() {
+		return pattern;
+	}
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/solver/RuleSolver.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/solver/RuleSolver.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/solver/RuleSolver.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,24 @@
+package org.drools.verifier.solver;
+
+import org.drools.verifier.components.OperatorDescr;
+import org.drools.verifier.components.VerifierRule;
+import org.drools.verifier.solver.Solver;
+
+/**
+ * Takes a list of Constraints and makes possibilities from them.
+ * 
+ * @author Toni Rikkola
+ */
+public class RuleSolver extends Solver {
+
+    private VerifierRule rule;
+
+    public RuleSolver(VerifierRule rule) {
+        super( OperatorDescr.Type.OR );
+        this.rule = (VerifierRule) rule;
+    }
+
+    public VerifierRule getRule() {
+        return rule;
+    }
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/solver/Solver.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/solver/Solver.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/solver/Solver.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,158 @@
+package org.drools.verifier.solver;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.drools.verifier.components.OperatorDescr;
+import org.drools.verifier.data.VerifierComponent;
+
+/**
+ * Takes a list of Constraints and makes possibilities from them.
+ * 
+ * @author Toni Rikkola
+ */
+class Solver {
+
+    private List<Set<VerifierComponent>> possibilityLists = new ArrayList<Set<VerifierComponent>>();
+    private Solver                       subSolver        = null;
+    private boolean                      isChildExists    = false;
+    private boolean                      isChildForall    = false;
+    private boolean                      isChildNot       = false;
+
+    private OperatorDescr.Type           type;
+
+    protected Solver(OperatorDescr.Type type) {
+        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 ( type == OperatorDescr.Type.AND ) {
+                if ( possibilityLists.isEmpty() ) {
+                    possibilityLists.add( new HashSet<VerifierComponent>() );
+                }
+                for ( Set<VerifierComponent> set : possibilityLists ) {
+                    set.add( descr );
+                }
+            } else if ( type == OperatorDescr.Type.OR ) {
+                Set<VerifierComponent> set = new HashSet<VerifierComponent>();
+                set.add( descr );
+                possibilityLists.add( set );
+            }
+        }
+    }
+
+    /**
+     * Ends subSolvers data collection.
+     * 
+     */
+    protected void end() {
+        if ( subSolver != null && subSolver.subSolver == null ) {
+            if ( type == OperatorDescr.Type.AND ) {
+                if ( possibilityLists.isEmpty() ) {
+                    possibilityLists.add( new HashSet<VerifierComponent>() );
+                }
+
+                List<Set<VerifierComponent>> newPossibilities = new ArrayList<Set<VerifierComponent>>();
+
+                List<Set<VerifierComponent>> sets = subSolver.getPossibilityLists();
+                for ( Set<VerifierComponent> possibilityList : possibilityLists ) {
+
+                    for ( Set<VerifierComponent> set : sets ) {
+                        Set<VerifierComponent> newSet = new HashSet<VerifierComponent>();
+                        newSet.addAll( possibilityList );
+                        newSet.addAll( set );
+                        newPossibilities.add( newSet );
+                    }
+                }
+                possibilityLists = newPossibilities;
+
+            } else if ( type == OperatorDescr.Type.OR ) {
+
+                possibilityLists.addAll( subSolver.getPossibilityLists() );
+
+            }
+
+            subSolver = null;
+
+        } else if ( subSolver != null && subSolver.subSolver != null ) {
+
+            subSolver.end();
+        }
+
+    }
+
+    public void setChildForall(boolean b) {
+        if ( subSolver != null ) {
+            subSolver.setChildForall( b );
+        } else {
+            isChildForall = b;
+        }
+    }
+
+    public void setChildExists(boolean b) {
+        if ( subSolver != null ) {
+            subSolver.setChildExists( b );
+        } else {
+            isChildExists = b;
+        }
+    }
+
+    public void setChildNot(boolean b) {
+        if ( subSolver != null ) {
+            subSolver.setChildNot( b );
+        } else {
+            isChildNot = b;
+        }
+    }
+
+    public boolean isForall() {
+        if ( subSolver != null ) {
+            return subSolver.isForall();
+        } else {
+            return isChildForall;
+        }
+    }
+
+    public boolean isExists() {
+        if ( subSolver != null ) {
+            return subSolver.isExists();
+        } else {
+            return isChildExists;
+        }
+    }
+
+    public boolean isChildNot() {
+        if ( subSolver != null ) {
+            return subSolver.isChildNot();
+        } else {
+            return isChildNot;
+        }
+    }
+
+    public List<Set<VerifierComponent>> getPossibilityLists() {
+        return possibilityLists;
+    }
+}

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/solver/Solvers.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/solver/Solvers.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/solver/Solvers.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,173 @@
+package org.drools.verifier.solver;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import org.drools.verifier.components.OperatorDescr;
+import org.drools.verifier.components.Pattern;
+import org.drools.verifier.components.SubPattern;
+import org.drools.verifier.components.Restriction;
+import org.drools.verifier.components.SubRule;
+import org.drools.verifier.components.VerifierRule;
+import org.drools.verifier.data.VerifierComponent;
+
+/**
+ * 
+ * @author Toni Rikkola
+ */
+public class Solvers {
+
+    private RuleSolver               ruleSolver           = null;
+    private PatternSolver            patternSolver        = null;
+
+    private List<SubPattern> patternPossibilities = new ArrayList<SubPattern>();
+    private List<SubRule>    rulePossibilities    = new ArrayList<SubRule>();
+
+    public void startRuleSolver(VerifierRule rule) {
+        ruleSolver = new RuleSolver( rule );
+    }
+
+    public void endRuleSolver() {
+        createRulePossibilities();
+        ruleSolver = null;
+    }
+
+    public void startPatternSolver(Pattern pattern) {
+        patternSolver = new PatternSolver( pattern );
+
+        patternSolver.getPattern().setPatternNot( ruleSolver.isChildNot() );
+    }
+
+    public void endPatternSolver() {
+        createPatternPossibilities();
+        patternSolver = null;
+    }
+
+    public void startForall() {
+        if ( patternSolver != null ) {
+            patternSolver.setChildForall( true );
+        } else if ( ruleSolver != null ) {
+            ruleSolver.setChildForall( true );
+        }
+    }
+
+    public void endForall() {
+        if ( patternSolver != null ) {
+            patternSolver.setChildForall( false );
+        } else if ( ruleSolver != null ) {
+            ruleSolver.setChildForall( false );
+        }
+    }
+
+    public void startExists() {
+        if ( patternSolver != null ) {
+            patternSolver.setChildExists( true );
+        } else if ( ruleSolver != null ) {
+            ruleSolver.setChildExists( true );
+        }
+    }
+
+    public void endExists() {
+        if ( patternSolver != null ) {
+            patternSolver.setChildExists( false );
+        } else if ( ruleSolver != null ) {
+            ruleSolver.setChildExists( false );
+        }
+    }
+
+    public void startNot() {
+        if ( patternSolver != null ) {
+            patternSolver.setChildNot( true );
+        } else if ( ruleSolver != null ) {
+            ruleSolver.setChildNot( true );
+        }
+    }
+
+    public void endNot() {
+        if ( patternSolver != null ) {
+            patternSolver.setChildNot( false );
+        } else if ( ruleSolver != null ) {
+            ruleSolver.setChildNot( false );
+        }
+    }
+
+    public void startOperator(OperatorDescr.Type type) {
+        if ( patternSolver != null ) {
+            patternSolver.addOperator( type );
+        } else if ( ruleSolver != null ) {
+            ruleSolver.addOperator( type );
+        }
+    }
+
+    public void endOperator() {
+        if ( patternSolver != null ) {
+            patternSolver.end();
+        } else if ( ruleSolver != null ) {
+            ruleSolver.end();
+        }
+    }
+
+    public void addRestriction(Restriction restriction) {
+        patternSolver.add( restriction );
+    }
+
+    private void createPatternPossibilities() {
+        for ( Set<VerifierComponent> list : patternSolver.getPossibilityLists() ) {
+            SubPattern possibility = new SubPattern();
+
+            possibility.setRuleGuid( ruleSolver.getRule().getGuid() );
+            possibility.setRuleName( ruleSolver.getRule().getRuleName() );
+            possibility.setRuleGuid( ruleSolver.getRule().getGuid() );
+            possibility.setPatternGuid( patternSolver.getPattern().getGuid() );
+
+            for ( VerifierComponent descr : list ) {
+                possibility.add( (Restriction) descr );
+            }
+
+            ruleSolver.add( possibility );
+            patternPossibilities.add( possibility );
+        }
+    }
+
+    private void createRulePossibilities() {
+        for ( Set<VerifierComponent> list : ruleSolver.getPossibilityLists() ) {
+            SubRule possibility = new SubRule();
+
+            possibility.setRuleGuid( ruleSolver.getRule().getGuid() );
+            possibility.setRuleName( ruleSolver.getRule().getRuleName() );
+            possibility.setRuleGuid( ruleSolver.getRule().getGuid() );
+
+            for ( VerifierComponent descr : list ) {
+                SubPattern patternPossibility = (SubPattern) descr;
+                possibility.add( patternPossibility );
+            }
+
+            rulePossibilities.add( possibility );
+        }
+    }
+
+    public List<SubPattern> getPatternPossibilities() {
+        return patternPossibilities;
+    }
+
+    public void setPatternPossibilities(List<SubPattern> patternPossibilities) {
+        this.patternPossibilities = patternPossibilities;
+    }
+
+    public List<SubRule> getRulePossibilities() {
+        return rulePossibilities;
+    }
+
+    public void setRulePossibilities(List<SubRule> rulePossibilities) {
+        this.rulePossibilities = rulePossibilities;
+    }
+
+    public PatternSolver getPatternSolver() {
+        return patternSolver;
+    }
+
+    public RuleSolver getRuleSolver() {
+        return ruleSolver;
+    }
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/Consequence.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/Consequence.drl	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/Consequence.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -5,12 +5,12 @@
 import org.drools.verifier.components.VerifierRule;
 import org.drools.verifier.components.TextConsequence;
 import org.drools.verifier.report.components.VerifierMessage;
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.data.VerifierReport;
 import org.drools.verifier.report.components.Severity;
 import org.drools.verifier.report.components.MessageType;
 
 #declare any global variables here
-global VerifierResult result;
+global VerifierReport result;
 
 
 rule "No action - possibly commented out"
@@ -18,7 +18,7 @@
 		$c :TextConsequence( ( text == null || matches "" ) )
 
 		$r :VerifierRule(
-			id == $c.ruleId
+			guid matches $c.ruleGuid
 		)
 	then
 		result.add( new VerifierMessage(

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysFalse/Patterns.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -7,7 +7,7 @@
 package org.drools.verifier.alwaysFalse
 #list any import classes here.
 import org.drools.verifier.components.Pattern;
-import org.drools.verifier.components.PatternPossibility;
+import org.drools.verifier.components.SubPattern;
 import org.drools.verifier.components.VerifierRule;
 
 import org.drools.verifier.report.components.Severity;
@@ -15,9 +15,9 @@
 import org.drools.verifier.report.components.Incompatibility;
 import org.drools.verifier.report.components.VerifierMessage;
 
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.data.VerifierReport;
 
-global VerifierResult result;
+global VerifierReport result;
 
 #
 # Finds patterns that are always false.
@@ -38,12 +38,12 @@
 		$p :Pattern()
 		
 		# Check that there is at least one pattern possibility.
-		exists PatternPossibility( patternId == $p.id )
+		exists SubPattern( patternGuid == $p.guid )
 		
 		# All the pattern possibilities for pattern need to be in conflict
 		forall( 
-			$pp :PatternPossibility(
-				patternId == $p.id
+			$pp :SubPattern(
+				patternGuid matches $p.guid
 			)
 			
 			Incompatibility( 
@@ -52,7 +52,7 @@
 			)
 		)
 		
-		$r :VerifierRule( id == $p.ruleId )
+		$r :VerifierRule( guid == $p.ruleGuid )
 	then 
 		# Report an error
 		result.add( new VerifierMessage(

Modified: 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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysFalse/Rules.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -7,16 +7,16 @@
 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.components.SubRule;
 
 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;
+import org.drools.verifier.data.VerifierReport;
 
-global VerifierResult result;
+global VerifierReport result;
 
 #
 # Finds rules that are always false.
@@ -35,8 +35,8 @@
 		
 		# All the rule possibilities for rule need to be in conflict
 		forall( 
-			$rp :RulePossibility(
-				ruleId == $r.id
+			$rp :SubRule(
+				ruleGuid matches $r.guid
 			)
 			
 			Incompatibility( 

Modified: 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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysTrue/Patterns.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -9,7 +9,7 @@
 
 import org.drools.verifier.components.Restriction;
 import org.drools.verifier.components.Pattern;
-import org.drools.verifier.components.PatternPossibility;
+import org.drools.verifier.components.SubPattern;
 import org.drools.verifier.components.VerifierRule;
 
 import org.drools.verifier.report.components.AlwaysTrue;
@@ -18,9 +18,9 @@
 import org.drools.verifier.report.components.Severity;
 import org.drools.verifier.report.components.MessageType;
 
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.data.VerifierReport;
 
-global VerifierResult result;
+global VerifierReport result;
 
 
 
@@ -28,7 +28,7 @@
 	when
 		a :Restriction()
 		b :Restriction()
-		$pp :PatternPossibility()
+		$pp :SubPattern()
 		
 		Opposites(
 			(
@@ -53,8 +53,8 @@
 	when
 		$p :Pattern()
 		
-		$pp :PatternPossibility(
-			patternId == $p.id
+		$pp :SubPattern(
+			patternGuid matches $p.guid
 		)
 
 		# For each restriction in pattern possibility 
@@ -96,13 +96,13 @@
 		$p :Pattern()
 
 		# Only report the ones that have restrictions.
-		exists PatternPossibility( patternId == $p.id )
+		exists SubPattern( patternGuid == $p.guid )
 		
 		# For each restriction in each pattern possibility for current pattern, 
 		# there needs to be an opposite.
 		forall(
-			$pp :PatternPossibility(
-				patternId == $p.id
+			$pp :SubPattern(
+				patternGuid matches $p.guid
 			)
 			
 			AlwaysTrue(
@@ -110,7 +110,7 @@
 			)
 		)
 		
-		$r :VerifierRule( id == $p.ruleId )
+		$r :VerifierRule( guid matches $p.ruleGuid )
 	then 
 		result.add( new VerifierMessage(
 								Severity.NOTE,

Modified: 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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/alwaysTrue/Rules.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -8,8 +8,8 @@
 
 
 import org.drools.verifier.components.Pattern;
-import org.drools.verifier.components.PatternPossibility;
-import org.drools.verifier.components.RulePossibility;
+import org.drools.verifier.components.SubPattern;
+import org.drools.verifier.components.SubRule;
 import org.drools.verifier.components.VerifierRule;
 
 import org.drools.verifier.report.components.AlwaysTrue;
@@ -18,9 +18,9 @@
 import org.drools.verifier.report.components.Severity;
 import org.drools.verifier.report.components.MessageType;
 
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.data.VerifierReport;
 
-global VerifierResult result;
+global VerifierReport result;
 
 #
 # Finds rule possibilities that are always true.
@@ -35,13 +35,13 @@
 	when
 		$r :VerifierRule()
 
-		$rp :RulePossibility(
-			ruleId == $r.id
+		$rp :SubRule(
+			ruleGuid matches $r.guid
 		)
 		
 		# Each pattern possibility in rule possibility needs to be always true.
 		forall(
-			$pp :PatternPossibility(
+			$pp :SubPattern(
 				this memberOf $rp.items
 			)
 				
@@ -67,8 +67,8 @@
 		$r :VerifierRule()
 
 		forall(
-			$rp :RulePossibility(
-				ruleId == $r.id
+			$rp :SubRule(
+				ruleGuid matches $r.guid
 			)
 			
 			AlwaysTrue(

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/equivalence/Rules.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -16,7 +16,7 @@
 		# Check that VerifierRule $left and $right have redundant fields.
 		$left :VerifierRule()
 		$right :VerifierRule( 
-			id != $left.id, 
+			guid not matches $left.guid, 
 			ruleAgendaGroup == $left.ruleAgendaGroup
 		)
 		

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incoherence/Patterns.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -4,8 +4,8 @@
 #list any import classes here.
 import org.drools.verifier.components.VerifierRule;
 import org.drools.verifier.components.LiteralRestriction;
-import org.drools.verifier.components.PatternPossibility;
-import org.drools.verifier.components.RulePossibility;
+import org.drools.verifier.components.SubPattern;
+import org.drools.verifier.components.SubRule;
 import org.drools.verifier.components.Pattern;
 import org.drools.verifier.components.VariableRestriction;
 import org.drools.verifier.report.components.Cause;
@@ -14,7 +14,7 @@
 import org.drools.verifier.report.components.Severity;
 import org.drools.verifier.report.components.MessageType;
 
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.data.VerifierReport;
 
 import java.util.Collection;
 import java.util.ArrayList;
@@ -22,7 +22,7 @@
 import org.drools.base.evaluators.Operator;
 
 #declare any global variables here
-global VerifierResult result;
+global VerifierReport result;
 
 #
 # If two Patterns are in conflict.
@@ -40,40 +40,40 @@
 		)
 	
 		$r2 :LiteralRestriction(
-			ruleId == $r1.ruleId,
+			ruleGuid matches $r1.ruleGuid,
 			patternIsNot == false,
 			restrictionType == $r1.restrictionType,
-			fieldId == $r1.fieldId,
+			fieldGuid matches $r1.fieldGuid,
 			valueType == $r1.valueType,
 			operator == $r1.operator
 		)
 
 		eval( $r1.compareValues( $r2 ) == 0 )
 
-		$pp1 :PatternPossibility(
-			patternId == $r1.patternId
+		$pp1 :SubPattern(
+			patternGuid matches $r1.patternGuid
 		)
 
-		$pp2 :PatternPossibility(
-			patternId == $r2.patternId
+		$pp2 :SubPattern(
+			patternGuid matches $r2.patternGuid
 		)
 
-		# There is a problem if both of these are in the same RulePossibility.
-		$rp :RulePossibility(
+		# There is a problem if both of these are in the same SubRule.
+		$rp :SubRule(
 			 items contains $pp1,
 			 items contains $pp2
 		)
 
 		$p1 :Pattern(
-			id == $r1.patternId
+			guid matches $r1.patternGuid
 		)
 
 		$p2 :Pattern(
-			id == $r2.patternId
+			guid matches $r2.patternGuid
 		)
 
 		$r :VerifierRule(
-			id == $rp.ruleId
+			guid matches $rp.ruleGuid
 		)
 	then
 		Collection list = new ArrayList();
@@ -107,39 +107,39 @@
 		)
 
 		$r2 :VariableRestriction(
-			ruleId == $r1.ruleId,
+			ruleGuid matches $r1.ruleGuid,
 			patternIsNot == false,
-			fieldId == $r1.fieldId,
-			variable.objectId == $r1.variable.objectId,
-			variable.objectType == $r1.variable.objectType,
+			fieldGuid matches $r1.fieldGuid,
+			variable.objectTypeGuid matches $r1.variable.objectTypeGuid,
+			variable.objectTypeType == $r1.variable.objectTypeType,
 			operator == $r1.operator
 		)
 
-		$pp1 :PatternPossibility(
-			patternId == $r1.patternId
+		$pp1 :SubPattern(
+			patternGuid matches $r1.patternGuid
 		)
 
-		$pp2 :PatternPossibility(
-			patternId == $r2.patternId
+		$pp2 :SubPattern(
+			patternGuid matches $r2.patternGuid
 		)
 
-		# There is a problem if both of these are in the same RulePossibility.
-		$rp :RulePossibility(
+		# There is a problem if both of these are in the same SubRule.
+		$rp :SubRule(
 			 items contains $pp1,
 			 items contains $pp2
 		)
 
 
 		$p1 :Pattern(
-			id == $r1.patternId
+			guid matches $r1.patternGuid
 		)
 
 		$p2 :Pattern(
-			id == $r2.patternId
+			guid matches $r2.patternGuid
 		)
 
 		$r :VerifierRule(
-			id == $rp.ruleId
+			guid matches $rp.ruleGuid
 		)
 	then
 		Collection list = new ArrayList();
@@ -173,38 +173,38 @@
 		)
 
 		$r2 :LiteralRestriction(
-			ruleId == $r1.ruleId,
+			ruleGuid matches $r1.ruleGuid,
 			patternIsNot == false,
 			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL || == Operator.EQUAL ),
-			fieldId == $r1.fieldId
+			fieldGuid matches $r1.fieldGuid
 		)
 
 		eval( $r1.compareValues( $r2 ) == -1 )
 
-		$pp1 :PatternPossibility(
-			patternId == $r1.patternId
+		$pp1 :SubPattern(
+			patternGuid matches $r1.patternGuid
 		)
 
-		$pp2 :PatternPossibility(
-			patternId == $r2.patternId
+		$pp2 :SubPattern(
+			patternGuid matches $r2.patternGuid
 		)
 
-		# There is a problem if both of these are in the same RulePossibility.
-		$rp :RulePossibility(
+		# There is a problem if both of these are in the same SubRule.
+		$rp :SubRule(
 			 items contains $pp1,
 			 items contains $pp2
 		)
 
 		$p1 :Pattern(
-			id == $r1.patternId
+			guid matches $r1.patternGuid
 		)
 
 		$p2 :Pattern(
-			id == $r2.patternId
+			guid matches $r2.patternGuid
 		)
 
 		$r :VerifierRule(
-			id == $rp.ruleId
+			guid matches $rp.ruleGuid
 		)
 	then
 		Collection list = new ArrayList();
@@ -238,38 +238,38 @@
 		)
 
 		$r2 :LiteralRestriction(
-			ruleId == $r1.ruleId,
+			ruleGuid matches $r1.ruleGuid,
 			patternIsNot == false,
 			( operator == Operator.LESS || == Operator.LESS_OR_EQUAL || == Operator.EQUAL ),
-			fieldId == $r1.fieldId
+			fieldGuid matches $r1.fieldGuid
 		)
 
 		eval( $r1.compareValues( $r2 ) == 1 )
 
-		$pp1 :PatternPossibility(
-			patternId == $r1.patternId
+		$pp1 :SubPattern(
+			patternGuid matches $r1.patternGuid
 		)
 
-		$pp2 :PatternPossibility(
-			patternId == $r2.patternId
+		$pp2 :SubPattern(
+			patternGuid matches $r2.patternGuid
 		)
 
-		# There is a problem if both of these are in the same RulePossibility.
-		$rp :RulePossibility(
+		# There is a problem if both of these are in the same SubRule.
+		$rp :SubRule(
 			 items contains $pp1,
 			 items contains $pp2
 		)
 
 		$p1 :Pattern(
-			id == $r1.patternId
+			guid matches $r1.patternGuid
 		)
 
 		$p2 :Pattern(
-			id == $r2.patternId
+			guid matches $r2.patternGuid
 		)
 
 		$r :VerifierRule(
-			id == $rp.ruleId
+			guid matches $rp.ruleGuid
 		)
 	then
 		Collection list = new ArrayList();
@@ -303,39 +303,39 @@
 		)
 
 		$r2 :LiteralRestriction(
-			ruleId == $r1.ruleId,
+			ruleGuid matches $r1.ruleGuid,
 			patternIsNot == false,
 			# It is also a problem if the value is NOT_EQUAL, but there is already a rule for that.
 			( operator != Operator.EQUAL && != Operator.NOT_EQUAL ),
-			fieldId == $r1.fieldId
+			fieldGuid matches $r1.fieldGuid
 		)
 
 		eval( $r1.compareValues( $r2 ) == 0 )
 
-		$pp1 :PatternPossibility(
-			patternId == $r1.patternId
+		$pp1 :SubPattern(
+			patternGuid matches $r1.patternGuid
 		)
 
-		$pp2 :PatternPossibility(
-			patternId == $r2.patternId
+		$pp2 :SubPattern(
+			patternGuid matches $r2.patternGuid
 		)
 
-		# There is a problem if both of these are in the same RulePossibility.
-		$rp :RulePossibility(
+		# There is a problem if both of these are in the same SubRule.
+		$rp :SubRule(
 			 items contains $pp1,
 			 items contains $pp2
 		)
 
 		$p1 :Pattern(
-			id == $r1.patternId
+			guid matches $r1.patternGuid
 		)
 
 		$p2 :Pattern(
-			id == $r2.patternId
+			guid matches $r2.patternGuid
 		)
 
 		$r :VerifierRule(
-			id == $rp.ruleId
+			guid matches $rp.ruleGuid
 		)
 then
 		Collection list = new ArrayList();
@@ -369,39 +369,39 @@
 		)
 
 		$r2 :VariableRestriction(
-			ruleId == $r1.ruleId,
+			ruleGuid matches $r1.ruleGuid,
 			patternIsNot == false,
-			fieldId == $r1.fieldId,
-			variable.objectId == $r1.variable.objectId,
-			variable.objectType == $r1.variable.objectType,
+			fieldGuid matches $r1.fieldGuid,
+			variable.objectTypeGuid matches $r1.variable.objectTypeGuid,
+			variable.objectTypeType == $r1.variable.objectTypeType,
 			# It is also a problem if the value is NOT_EQUAL, but there is already a rule for that.
 			( operator != Operator.EQUAL && != Operator.NOT_EQUAL )
 		)
 
-		$pp1 :PatternPossibility(
-			patternId == $r1.patternId
+		$pp1 :SubPattern(
+			patternGuid matches $r1.patternGuid
 		)
 
-		$pp2 :PatternPossibility(
-			patternId == $r2.patternId
+		$pp2 :SubPattern(
+			patternGuid matches $r2.patternGuid
 		)
 
-		# There is a problem if both of these are in the same RulePossibility.
-		$rp :RulePossibility(
+		# There is a problem if both of these are in the same SubRule.
+		$rp :SubRule(
 			 items contains $pp1,
 			 items contains $pp2
 		)
 
 		$p1 :Pattern(
-			id == $r1.patternId
+			guid matches $r1.patternGuid
 		)
 
 		$p2 :Pattern(
-			id == $r2.patternId
+			guid matches $r2.patternGuid
 		)
 
 		$r :VerifierRule(
-			id == $rp.ruleId
+			guid matches $rp.ruleGuid
 		)
 then
 		Collection list = new ArrayList();
@@ -435,38 +435,38 @@
 		)
 
 		$r2 :LiteralRestriction(
-			ruleId == $r1.ruleId,
+			ruleGuid matches $r1.ruleGuid,
 			patternIsNot == false,
 			operator == Operator.EQUAL,
-			fieldId == $r1.fieldId
+			fieldGuid matches $r1.fieldGuid
 		)
 
 		eval( $r1.compareValues( $r2 ) == 0 )
 
-		$pp1 :PatternPossibility(
-			patternId == $r1.patternId
+		$pp1 :SubPattern(
+			patternGuid matches $r1.patternGuid
 		)
 
-		$pp2 :PatternPossibility(
-			patternId == $r2.patternId
+		$pp2 :SubPattern(
+			patternGuid matches $r2.patternGuid
 		)
 
-		# There is a problem if both of these are in the same RulePossibility.
-		$rp :RulePossibility(
+		# There is a problem if both of these are in the same SubRule.
+		$rp :SubRule(
 			 items contains $pp1,
 			 items contains $pp2
 		)
 
 		$p1 :Pattern(
-			id == $r1.patternId
+			guid matches $r1.patternGuid
 		)
 
 		$p2 :Pattern(
-			id == $r2.patternId
+			guid matches $r2.patternGuid
 		)
 
 		$r :VerifierRule(
-			id == $rp.ruleId
+			guid matches $rp.ruleGuid
 		)
 then
 		Collection list = new ArrayList();
@@ -501,38 +501,38 @@
 		)
 
 		$r2 :VariableRestriction(
-			ruleId == $r1.ruleId,
+			ruleGuid matches $r1.ruleGuid,
 			patternIsNot == false,
-			fieldId == $r1.fieldId,
-			variable.objectId == $r1.variable.objectId,
-			variable.objectType == $r1.variable.objectType,
+			fieldGuid matches $r1.fieldGuid,
+			variable.objectTypeGuid == $r1.variable.objectTypeGuid,
+			variable.objectTypeType == $r1.variable.objectTypeType,
 			operator == Operator.EQUAL
 		)
 
-		$pp1 :PatternPossibility(
-			patternId == $r1.patternId
+		$pp1 :SubPattern(
+			patternGuid matches $r1.patternGuid
 		)
 
-		$pp2 :PatternPossibility(
-			patternId == $r2.patternId
+		$pp2 :SubPattern(
+			patternGuid matches $r2.patternGuid
 		)
 
-		# There is a problem if both of these are in the same RulePossibility.
-		$rp :RulePossibility(
+		# There is a problem if both of these are in the same SubRule.
+		$rp :SubRule(
 			 items contains $pp1,
 			 items contains $pp2
 		)
 
 		$p1 :Pattern(
-			id == $r1.patternId
+			guid matches $r1.patternGuid
 		)
 
 		$p2 :Pattern(
-			id == $r2.patternId
+			guid matches $r2.patternGuid
 		)
 
 		$r :VerifierRule(
-			id == $rp.ruleId
+			guid matches $rp.ruleGuid
 		)
 then
 		Collection list = new ArrayList();

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incoherence/Restrictions.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -3,7 +3,7 @@
 
 #list any import classes here.
 import org.drools.verifier.components.LiteralRestriction;
-import org.drools.verifier.components.PatternPossibility;
+import org.drools.verifier.components.SubPattern;
 import org.drools.verifier.components.Pattern;
 import org.drools.verifier.components.VariableRestriction;
 import org.drools.verifier.report.components.Cause;
@@ -11,7 +11,7 @@
 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;
+import org.drools.verifier.data.VerifierReport;
 
 import java.util.Collection;
 import java.util.ArrayList;
@@ -19,7 +19,7 @@
 import org.drools.base.evaluators.Operator;
 
 #declare any global variables here
-global VerifierResult result;
+global VerifierReport result;
 
 #
 # If two LiteralRestrictions are in conflict.
@@ -37,24 +37,24 @@
 		)
 
 		$r2 :LiteralRestriction(
-			patternId == $r1.patternId,
+			patternGuid matches $r1.patternGuid,
 			restrictionType == $r1.restrictionType,
-			fieldId == $r1.fieldId,
+			fieldGuid matches $r1.fieldGuid,
 			valueType == $r1.valueType,
-			id != $r1.id,
+			guid not matches $r1.guid,
 			# Operator needs to be reversed to what the other one has.
 			eval( operator == MissingRange.getReversedOperator( $r1.getOperator() ))
 		)
 
 		eval( $r1.compareValues( $r2 ) == 0 )
 
-		# There is a problem if both of these are in the same PatternPossibility.
-		$pp :PatternPossibility(
+		# There is a problem if both of these are in the same SubPattern.
+		$pp :SubPattern(
 			 items contains $r1,
 			 items contains $r2
 		)
 
-		$p :Pattern( id == $pp.patternId )
+		$p :Pattern( guid matches $pp.patternGuid )
 	then
 		Collection list = new ArrayList();
 		list.add( $r1 );
@@ -84,23 +84,23 @@
 		)
 
 		$r2 :LiteralRestriction(
-			patternId == $r1.patternId,
+			patternGuid matches $r1.patternGuid,
 			restrictionType == $r1.restrictionType,
-			fieldId == $r1.fieldId,
+			fieldGuid matches $r1.fieldGuid,
 			valueType == $r1.valueType,
 			( operator == Operator.LESS_OR_EQUAL || == Operator.LESS),
-			id != $r1.id
+			guid not matches $r1.guid
 		)
 
 		eval( $r1.compareValues( $r2 ) == 1 )
 
-		# There is a problem if both of these are in the same PatternPossibility.
-		$pp :PatternPossibility(
+		# There is a problem if both of these are in the same SubPattern.
+		$pp :SubPattern(
 			 items contains $r1,
 			 items contains $r2
 		)
 
-		$p :Pattern( id == $pp.patternId )
+		$p :Pattern( guid matches $pp.patternGuid )
 	then
 		Collection list = new ArrayList();
 		list.add( $r1 );
@@ -130,23 +130,23 @@
 		)
 
 		$r2 :LiteralRestriction(
-			patternId == $r1.patternId,
+			patternGuid matches $r1.patternGuid,
 			restrictionType == $r1.restrictionType,
-			fieldId == $r1.fieldId,
+			fieldGuid matches $r1.fieldGuid,
 			valueType == $r1.valueType,
 			( operator == Operator.LESS_OR_EQUAL || == Operator.LESS || == Operator.EQUAL ),
-			id != $r1.id
+			guid not matches $r1.guid
 		)
 
 		eval( $r1.compareValues( $r2 ) == 1 )
 
-		# There is a problem if both of these are in the same PatternPossibility.
-		$pp :PatternPossibility(
+		# There is a problem if both of these are in the same SubPattern.
+		$pp :SubPattern(
 			 items contains $r1,
 			 items contains $r2
 		)
 
-		$p :Pattern( id == $pp.patternId )
+		$p :Pattern( guid matches $pp.patternGuid )
 	then
 		Collection list = new ArrayList();
 		list.add( $r1 );
@@ -176,23 +176,23 @@
 		)
 
 		$r2 :LiteralRestriction(
-			patternId == $r1.patternId,
+			patternGuid matches $r1.patternGuid,
 			restrictionType == $r1.restrictionType,
-			fieldId == $r1.fieldId,
+			fieldGuid matches $r1.fieldGuid,
 			valueType == $r1.valueType,
 			operator == Operator.EQUAL,
-			id != $r1.id
+			guid not matches $r1.guid
 		)
 
 		eval( $r1.compareValues( $r2 ) == 1 )
 
-		# There is a problem if both of these are in the same PatternPossibility.
-		$pp :PatternPossibility(
+		# There is a problem if both of these are in the same SubPattern.
+		$pp :SubPattern(
 			 items contains $r1,
 			 items contains $r2
 		)
 
-		$p :Pattern( id == $pp.patternId )
+		$p :Pattern( guid matches $pp.patternGuid )
 	then
 		Collection list = new ArrayList();
 		list.add( $r1 );
@@ -222,23 +222,23 @@
 		)
 
 		$r2 :LiteralRestriction(
-			patternId == $r1.patternId,
+			patternGuid matches $r1.patternGuid,
 			restrictionType == $r1.restrictionType,
-			fieldId == $r1.fieldId,
+			fieldGuid matches $r1.fieldGuid,
 			valueType == $r1.valueType,
 			operator == Operator.GREATER,
-			id != $r1.id
+			guid not matches $r1.guid
 		)
 
 		eval( $r1.compareValues( $r2 ) == 0 )
 
-		# There is a problem if both of these are in the same PatternPossibility.
-		$pp :PatternPossibility(
+		# There is a problem if both of these are in the same SubPattern.
+		$pp :SubPattern(
 			 items contains $r1,
 			 items contains $r2
 		)
 
-		$p :Pattern( id == $pp.patternId )
+		$p :Pattern( guid matches $pp.patternGuid )
 	then
 		Collection list = new ArrayList();
 		list.add( $r1 );
@@ -270,22 +270,22 @@
 		)
 
 		$r2 :VariableRestriction(
-			patternId == $r1.patternId,
-			fieldId == $r1.fieldId,
-			id != $r1.id,
-			variable.objectId == $r1.variable.objectId,
-			variable.objectType == $r1.variable.objectType,
+			patternGuid matches $r1.patternGuid,
+			fieldGuid matches $r1.fieldGuid,
+			guid not matches $r1.guid,
+			variable.objectTypeGuid matches $r1.variable.objectTypeGuid,
+			variable.objectTypeType == $r1.variable.objectTypeType,
 			# Operator needs to be reversed to what the other one has.
 			eval( operator == MissingRange.getReversedOperator( $r1.getOperator() ))
 		)
 
-		# There is a problem if both of these are in the same PatternPossibility.
-		$pp :PatternPossibility(
+		# There is a problem if both of these are in the same SubPattern.
+		$pp :SubPattern(
 			 items contains $r1,
 			 items contains $r2
 		)
 
-		$p :Pattern( id == $pp.patternId )
+		$p :Pattern( guid matches $pp.patternGuid )
 	then
 		Collection list = new ArrayList();
 		list.add( $r1 );
@@ -315,21 +315,21 @@
 		)
 
 		$r2 :VariableRestriction(
-			patternId == $r1.patternId,
-			fieldId == $r1.fieldId,
+			patternGuid matches $r1.patternGuid,
+			fieldGuid matches $r1.fieldGuid,
 			operator == Operator.GREATER,
-			variable.objectId == $r1.variable.objectId,
-			variable.objectType == $r1.variable.objectType,
-			id != $r1.id
+			variable.objectTypeGuid == $r1.variable.objectTypeGuid,
+			variable.objectTypeType == $r1.variable.objectTypeType,
+			guid not matches $r1.guid
 		)
 
-		# There is a problem if both of these are in the same PatternPossibility.
-		$pp :PatternPossibility(
+		# There is a problem if both of these are in the same SubPattern.
+		$pp :SubPattern(
 			 items contains $r1,
 			 items contains $r2
 		)
 
-		$p :Pattern( id == $pp.patternId )
+		$p :Pattern( guid matches $pp.patternGuid )
 	then
 		Collection list = new ArrayList();
 		list.add( $r1 );

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incompatibility/Patterns.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -3,13 +3,13 @@
 
 #list any import classes here.
 import org.drools.verifier.components.Restriction;
-import org.drools.verifier.components.PatternPossibility;
+import org.drools.verifier.components.SubPattern;
 
 import org.drools.verifier.report.components.Incompatibility;
 
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.data.VerifierReport;
 
-global VerifierResult result;
+global VerifierReport result;
 
 #
 # Pattern possibilities are incompatible if any of the restrictions are incompatible.
@@ -30,11 +30,11 @@
 	when
 		$incompatibility :Incompatibility()
 		
-		$pp1 :PatternPossibility(
+		$pp1 :SubPattern(
 			items contains $incompatibility.left
 		)
 		
-		$pp2 :PatternPossibility(
+		$pp2 :SubPattern(
 			items contains $incompatibility.right
 		)
 		

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/incompatibility/Restrictions.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -24,10 +24,10 @@
 
 		$r2 :LiteralRestriction(
 			restrictionType == $r1.restrictionType,
-			fieldId == $r1.fieldId,
+			fieldGuid matches $r1.fieldGuid,
 			valueType == $r1.valueType,
 			( operator == Operator.LESS_OR_EQUAL || == Operator.LESS || == Operator.EQUAL ),
-			id != $r1.id
+			guid not matches $r1.guid
 		)
 
 		eval( $r1.compareValues( $r2 ) == 1 )
@@ -49,10 +49,10 @@
 
 		$r2 :LiteralRestriction(
 			restrictionType == $r1.restrictionType,
-			fieldId == $r1.fieldId,
+			fieldGuid matches $r1.fieldGuid,
 			valueType == $r1.valueType,
 			operator == Operator.EQUAL,
-			id != $r1.id
+			guid not matches $r1.guid
 		)
 
 		eval( $r1.compareValues( $r2 ) == 1 )
@@ -74,10 +74,10 @@
 
 		$r2 :LiteralRestriction(
 			restrictionType == $r1.restrictionType,
-			fieldId == $r1.fieldId,
+			fieldGuid matches $r1.fieldGuid,
 			valueType == $r1.valueType,
 			operator == Operator.GREATER,
-			id != $r1.id
+			guid not matches $r1.guid
 		)
 
 		eval( $r1.compareValues( $r2 ) == 0 )
@@ -98,11 +98,11 @@
 		)
 
 		$r2 :VariableRestriction(
-			fieldId == $r1.fieldId,
+			fieldGuid matches $r1.fieldGuid,
 			operator == Operator.GREATER,
-			variable.objectId == $r1.variable.objectId,
-			variable.objectType == $r1.variable.objectType,
-			id != $r1.id
+			variable.objectTypeGuid == $r1.variable.objectTypeGuid,
+			variable.objectTypeType == $r1.variable.objectTypeType,
+			guid not matches $r1.guid
 		)
 	then
 		insert( new Incompatibility( $r1, $r2 ) );

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/missingEquality/MissingEquality.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/missingEquality/MissingEquality.drl	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/missingEquality/MissingEquality.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -12,12 +12,12 @@
 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;
+import org.drools.verifier.data.VerifierReport;
 
 
 
 #declare any global variables here
-global VerifierResult result;
+global VerifierReport result;
 
 #
 # Informs that there are inequalities, but not equality being catered for.
@@ -37,7 +37,7 @@
 				)
 			and
 				not LiteralRestriction(
-					fieldId == $r.fieldId,
+					fieldGuid matches $r.fieldGuid,
 					operator == Operator.NOT_EQUAL,
 					patternIsNot == $r.patternIsNot,
 					valueAsString matches $r.valueAsString
@@ -48,7 +48,7 @@
 				)
 			and
 				not LiteralRestriction(
-					fieldId == $r.fieldId,
+					fieldGuid matches $r.fieldGuid,
 					operator == Operator.EQUAL,
 					patternIsNot == $r.patternIsNot,
 					valueAsString matches $r.valueAsString
@@ -63,7 +63,7 @@
 				)
 			and
 				not LiteralRestriction(
-					fieldId == $r.fieldId,
+					fieldGuid matches $r.fieldGuid,
 					operator == MatchesEvaluatorsDefinition.NOT_MATCHES,
 					patternIsNot == $r.patternIsNot,
 					valueAsString matches $r.valueAsString
@@ -75,7 +75,7 @@
 				)
 			and
 				not LiteralRestriction(
-					fieldId == $r.fieldId,
+					fieldGuid matches $r.fieldGuid,
 					operator == MatchesEvaluatorsDefinition.MATCHES,
 					patternIsNot == $r.patternIsNot,
 					valueAsString matches $r.valueAsString
@@ -111,11 +111,11 @@
 				)
 			and
 				not VariableRestriction(
-					fieldId == $r.fieldId,
+					fieldGuid matches $r.fieldGuid,
 					operator == Operator.NOT_EQUAL,
 					patternIsNot == $r.patternIsNot,
-					variable.objectId == $r.variable.objectId,
-					variable.objectType == $r.variable.objectType
+					variable.objectTypeGuid matches $r.variable.objectTypeGuid,
+					variable.objectTypeType == $r.variable.objectTypeType
 				)
 		) or (
 				$r :VariableRestriction(
@@ -123,11 +123,11 @@
 				)
 			and
 				not VariableRestriction(
-					fieldId == $r.fieldId,
+					fieldGuid matches $r.fieldGuid,
 					operator == Operator.EQUAL,
 					patternIsNot == $r.patternIsNot,
-					variable.objectId == $r.variable.objectId,
-					variable.objectType == $r.variable.objectType
+					variable.objectTypeGuid matches $r.variable.objectTypeGuid,
+					variable.objectTypeType == $r.variable.objectTypeType
 				)
 		#
 		# matches and not matches
@@ -138,11 +138,11 @@
 				)
 			and
 				not VariableRestriction(
-					fieldId == $r.fieldId,
+					fieldGuid matches $r.fieldGuid,
 					operator == MatchesEvaluatorsDefinition.NOT_MATCHES,
 					patternIsNot == $r.patternIsNot,
-					variable.objectId == $r.variable.objectId,
-					variable.objectType == $r.variable.objectType
+					variable.objectTypeGuid matches $r.variable.objectTypeGuid,
+					variable.objectTypeType == $r.variable.objectTypeType
 				)
 		) or (
 				$r :VariableRestriction(
@@ -150,11 +150,11 @@
 				)
 			and
 				not VariableRestriction(
-					fieldId == $r.fieldId,
+					fieldGuid matches $r.fieldGuid,
 					operator == MatchesEvaluatorsDefinition.MATCHES,
 					patternIsNot == $r.patternIsNot,
-					variable.objectId == $r.variable.objectId,
-					variable.objectType == $r.variable.objectType
+					variable.objectTypeGuid matches $r.variable.objectTypeGuid,
+					variable.objectTypeType == $r.variable.objectTypeType
 				)
 		#
 		# memberof and not memberof
@@ -165,11 +165,11 @@
 				)
 			and
 				not VariableRestriction(
-					fieldId == $r.fieldId,
+					fieldGuid matches $r.fieldGuid,
 					operator == SetEvaluatorsDefinition.NOT_MEMBEROF,
 					patternIsNot == $r.patternIsNot,
-					variable.objectId == $r.variable.objectId,
-					variable.objectType == $r.variable.objectType
+					variable.objectTypeGuid matches $r.variable.objectTypeGuid,
+					variable.objectTypeType == $r.variable.objectTypeType
 				)
 		) or (
 				$r :VariableRestriction(
@@ -177,11 +177,11 @@
 				)
 			and
 				not VariableRestriction(
-					fieldId == $r.fieldId,
+					fieldGuid matches $r.fieldGuid,
 					operator == SetEvaluatorsDefinition.MEMBEROF,
 					patternIsNot == $r.patternIsNot,
-					variable.objectId == $r.variable.objectId,
-					variable.objectType == $r.variable.objectType
+					variable.objectTypeGuid matches $r.variable.objectTypeGuid,
+					variable.objectTypeType == $r.variable.objectTypeType
 				)
 		#
 		# contains and not contains
@@ -192,11 +192,11 @@
 				)
 			and
 				not VariableRestriction(
-					fieldId == $r.fieldId,
+					fieldGuid matches $r.fieldGuid,
 					operator == SetEvaluatorsDefinition.NOT_CONTAINS,
 					patternIsNot == $r.patternIsNot,
-					variable.objectId == $r.variable.objectId,
-					variable.objectType == $r.variable.objectType
+					variable.objectTypeGuid matches $r.variable.objectTypeGuid,
+					variable.objectTypeType == $r.variable.objectTypeType
 				)
 		) or (
 				$r :VariableRestriction(
@@ -204,11 +204,11 @@
 				)
 			and
 				not VariableRestriction(
-					fieldId == $r.fieldId,
+					fieldGuid matches $r.fieldGuid,
 					operator == SetEvaluatorsDefinition.CONTAINS,
 					patternIsNot == $r.patternIsNot,
-					variable.objectId == $r.variable.objectId,
-					variable.objectType == $r.variable.objectType
+					variable.objectTypeGuid matches $r.variable.objectTypeGuid,
+					variable.objectTypeType == $r.variable.objectTypeType
 				)
 		)
 	then

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Patterns.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -3,14 +3,14 @@
 
 #list any import classes here.
 import org.drools.verifier.components.Restriction;
-import org.drools.verifier.components.PatternPossibility;
+import org.drools.verifier.components.SubPattern;
 
 import org.drools.verifier.report.components.Opposites;
 
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.data.VerifierReport;
 
 #declare any global variables here
-global VerifierResult result;
+global VerifierReport result;
 
 
 #
@@ -34,11 +34,11 @@
 	when
 		$opposites :Opposites()
 		
-		$pp1 :PatternPossibility(
+		$pp1 :SubPattern(
 			items contains $opposites.left
 		)
 		
-		$pp2 :PatternPossibility(
+		$pp2 :SubPattern(
 			items contains $opposites.right
 		)
 		

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Restrictions.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -14,12 +14,12 @@
 import org.drools.verifier.report.components.Opposites;
 import org.drools.verifier.report.components.MissingRange;
 
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.data.VerifierReport;
 
 import org.drools.base.evaluators.Operator;
 
 #declare any global variables here
-global VerifierResult result;
+global VerifierReport result;
 
 #
 # If two LiteralRestrictions are in conflict.
@@ -36,9 +36,9 @@
 		)
 
 		$right :LiteralRestriction(
-			fieldId == $left.fieldId,
+			fieldGuid matches $left.fieldGuid,
 			valueType == $left.valueType,
-			id != $left.id,
+			guid not matches $left.guid,
 			# Operator needs to be reversed to what the other one has.
 			eval( operator == MissingRange.getReversedOperator( $left.getOperator() ))
 		)
@@ -72,10 +72,10 @@
 
 		$right :LiteralRestriction(
 			restrictionType == $left.restrictionType,
-			fieldId == $left.fieldId,
+			fieldGuid matches $left.fieldGuid,
 			valueType == $left.valueType,
 			operator == Operator.LESS,
-			id != $left.id
+			guid not matches $left.guid
 		)
 		
 		eval( $left.compareValues( $right ) == 0 )
@@ -107,10 +107,10 @@
 
 		$right :LiteralRestriction(
 			restrictionType == $left.restrictionType,
-			fieldId == $left.fieldId,
+			fieldGuid matches $left.fieldGuid,
 			valueType == $left.valueType,
 			operator == Operator.LESS_OR_EQUAL,
-			id != $left.id
+			guid not matches $left.guid
 		)
 		
 		eval( $left.compareValues( $right ) == 0 )
@@ -144,10 +144,10 @@
 
 		$right :LiteralRestriction(
 			restrictionType == $left.restrictionType,
-			fieldId == $left.fieldId,
+			fieldGuid matches $left.fieldGuid,
 			valueType == $left.valueType,
 			operator == Operator.GREATER,
-			id != $left.id
+			guid not matches $left.guid
 		)
 		
 		eval( $left.compareValues( $right ) == 1 )
@@ -180,10 +180,10 @@
 
 		$right :LiteralRestriction(
 			restrictionType == $left.restrictionType,
-			fieldId == $left.fieldId,
+			fieldGuid matches $left.fieldGuid,
 			valueType == $left.valueType,
 			operator == Operator.LESS_OR_EQUAL,
-			id != $left.id
+			guid not matches $left.guid
 		)
 		
 		eval( $left.compareValues( $right ) == 1 )
@@ -212,10 +212,10 @@
 		$r1 :VariableRestriction()
 
 		$r2 :VariableRestriction(
-			fieldId == $r1.fieldId,
-			id != $r1.id,
-			variable.objectId == $r1.variable.objectId,
-			variable.objectType == $r1.variable.objectType,
+			fieldGuid matches $r1.fieldGuid,
+			guid not matches $r1.guid,
+			variable.objectTypeGuid matches $r1.variable.objectTypeGuid,
+			variable.objectTypeType == $r1.variable.objectTypeType,
 			# Operator needs to be reverse to what the other one has.
 			eval( operator == MissingRange.getReversedOperator( $r1.getOperator() ))
 		)

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/optimisation/PatternOrder.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/optimisation/PatternOrder.drl	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/optimisation/PatternOrder.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -9,16 +9,16 @@
 import org.drools.verifier.components.VerifierRule;
 import org.drools.verifier.components.OperatorDescr;
 import org.drools.verifier.components.VerifierEvalDescr;
-import org.drools.verifier.components.VerifierComponent;
+import org.drools.verifier.components.RuleComponent;
+import org.drools.verifier.data.VerifierComponent;
 import org.drools.verifier.components.VerifierComponentType;
 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;
+import org.drools.verifier.data.VerifierReport;
 
-
 #declare any global variables here
-global VerifierResult result;
+global VerifierReport result;
 
 
 
@@ -37,20 +37,22 @@
 		$operator :OperatorDescr()
 
 		$eval :VerifierEvalDescr(
-			parent == $operator
+			parentGuid matches $operator.guid,
+			parentType == $operator.verifierComponentType
 		)
 
-		# Any other VerifierComponent that is not predicate or operator
-		$other :VerifierComponent(
-			parent == $operator,
+		# Any other RuleComponent that is not predicate or operator
+		$other :RuleComponent(
+			parentGuid matches $operator.guid,
+			parentType == $operator.verifierComponentType,
 			orderNumber > $eval.orderNumber,
-			( componentType != VerifierComponentType.OPERATOR && != VerifierComponentType.EVAL )
+			( verifierComponentType != VerifierComponentType.OPERATOR && != VerifierComponentType.EVAL )
 		)
 
 		$rule :VerifierRule(
-			id == $eval.ruleId
+			guid matches $eval.ruleGuid
 		)
-	then
+	then	
 		Collection list = new ArrayList();
 		list.add( $eval );
 		list.add( $other );
@@ -64,4 +66,4 @@
 								"), could be before (" +
 								$eval + ").",
 								list ) );
-end
+end
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/optimisation/RestrictionOrder.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/optimisation/RestrictionOrder.drl	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/optimisation/RestrictionOrder.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -8,20 +8,23 @@
 import org.drools.base.evaluators.Operator;
 import org.drools.base.evaluators.MatchesEvaluatorsDefinition;
 
+import org.drools.verifier.components.SubPattern;
 import org.drools.verifier.components.Restriction;
+import org.drools.verifier.components.Constraint;
 import org.drools.verifier.components.Pattern;
 import org.drools.verifier.components.VerifierRule;
 import org.drools.verifier.components.OperatorDescr;
 import org.drools.verifier.components.VerifierPredicateDescr;
-import org.drools.verifier.components.VerifierComponent;
+import org.drools.verifier.data.VerifierComponent;
 import org.drools.verifier.components.VerifierComponentType;
+import org.drools.verifier.components.RuleComponent;
 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;
+import org.drools.verifier.data.VerifierReport;
 
 #declare any global variables here
-global VerifierResult result;
+global VerifierReport result;
 
 
 # Informs that rule would be more effective if the less expensive
@@ -33,84 +36,51 @@
 #
 rule "Optimise restrictions inside operator"
 	when
-		$operator :OperatorDescr()
 
+		$sp : SubPattern()
+	
 		(
 				$r1 :Restriction(
-					parent.parent == $operator,
 					( operator == Operator.EQUAL || == MatchesEvaluatorsDefinition.MATCHES )
-				)
+				) from $sp.items
 			and
-				# There is no reason to check if there is a less expensive constraint
-				# if this one has a restriction that is more expensive.
-				not Restriction(
-					parent == $r1.parent,
-					( operator == Operator.GREATER || == Operator.LESS || == Operator.GREATER_OR_EQUAL || == Operator.LESS_OR_EQUAL || == MatchesEvaluatorsDefinition.NOT_MATCHES || == Operator.NOT_EQUAL )
-				)
-			and
 				$r2 :Restriction(
-					parent.parent == $operator,
-					parent.orderNumber < $r1.parent.orderNumber,
+					guid != $r1.guid,
 					( operator == Operator.GREATER || == Operator.LESS || == Operator.GREATER_OR_EQUAL || == Operator.LESS_OR_EQUAL || == MatchesEvaluatorsDefinition.NOT_MATCHES || == Operator.NOT_EQUAL )
-				)
-			and
-				# The other restriction should not have any less expensive restrictions.
-				not Restriction(
-					parent == $r2.parent,
-					( operator == Operator.EQUAL || == MatchesEvaluatorsDefinition.MATCHES )
-				)
+				) from $sp.items
 		) or (
 				$r1 :Restriction(
-					parent.parent == $operator,
 					( operator == Operator.GREATER || == Operator.LESS )
-				)
+				) from $sp.items
 			and
-				# There is no reason to check if there is a less expensive constraint
-				# if this one has a restriction that is more expensive.
-				not Restriction(
-					parent == $r1.parent,
-					( operator == Operator.GREATER_OR_EQUAL || == Operator.LESS_OR_EQUAL || == MatchesEvaluatorsDefinition.NOT_MATCHES || == Operator.NOT_EQUAL )
-				)
-			and
 				$r2 :Restriction(
-					parent.parent == $operator,
-					parent.orderNumber < $r1.parent.orderNumber,
+					guid != $r1.guid,
 					( operator == Operator.GREATER_OR_EQUAL || == Operator.LESS_OR_EQUAL || == MatchesEvaluatorsDefinition.NOT_MATCHES || == Operator.NOT_EQUAL )
-				)
-			and
-				# The other restriction should not have any less expensive restrictions.
-				not Restriction(
-					parent == $r2.parent,
-					( operator == Operator.EQUAL || == MatchesEvaluatorsDefinition.MATCHES || == Operator.GREATER || == Operator.LESS )
-				)
+				) from $sp.items
 		) or (
 				$r1 :Restriction(
-					parent.parent == $operator,
 					( operator == Operator.GREATER_OR_EQUAL || == Operator.LESS_OR_EQUAL )
-				)
+				) from $sp.items
 			and
-				# There is no reason to check if there is a less expensive constraint
-				# if this one has a restriction that is more expensive.
-				not Restriction(
-					parent == $r1.parent,
-					( operator == MatchesEvaluatorsDefinition.NOT_MATCHES || == Operator.NOT_EQUAL )
-				)
-			and
 				$r2 :Restriction(
-					parent.parent == $operator,
-					parent.orderNumber < $r1.parent.orderNumber,
+					guid != $r1.guid,
 					( operator == MatchesEvaluatorsDefinition.NOT_MATCHES || == Operator.NOT_EQUAL )
-				)
-			and
-				# The other restriction should not have any less expensive restrictions.
-				not Restriction(
-					parent == $r2.parent,
-					( operator == Operator.EQUAL || == MatchesEvaluatorsDefinition.MATCHES || == Operator.GREATER || == Operator.LESS || == Operator.GREATER_OR_EQUAL || == Operator.LESS_OR_EQUAL )
-				)
+				) from $sp.items
 		)
+		
+		$c :Constraint(
+			guid matches $r1.parentGuid,
+			verifierComponentType == $r1.parentType
+		)
+		
+		Constraint(
+			guid matches $r2.parentGuid,
+			orderNumber < $c.orderNumber,
+			verifierComponentType == $r2.parentType
+		)
 
 		$pattern :Pattern(
-			id == $r1.patternId
+			guid == $sp.patternGuid
 		)
 	then
 		Collection list = new ArrayList();
@@ -128,6 +98,7 @@
 								list ) );
 end
 
+
 # Informs that rule would be more effective if the less expensive
 # component was on the left side.
 #
@@ -143,7 +114,8 @@
 				)
 			and
 				$r2 :Restriction(
-					parent == $r1.parent,
+					parentGuid == $r1.parentGuid,
+					parentType == $r1.parentType,
 					orderNumber < $r1.orderNumber,
 					( operator 	== Operator.GREATER || 
 								== Operator.LESS || 
@@ -159,7 +131,8 @@
 				)
 			and
 				$r2 :Restriction(
-					parent == $r1.parent,
+					parentGuid == $r1.parentGuid,
+					parentType == $r1.parentType,
 					orderNumber < $r1.orderNumber,
 					( operator 	== Operator.GREATER_OR_EQUAL || 
 								== Operator.LESS_OR_EQUAL || 
@@ -173,14 +146,15 @@
 				)
 			and
 				$r2 :Restriction(
-					parent == $r1.parent,
+					parentGuid == $r1.parentGuid,
+					parentType == $r1.parentType,
 					orderNumber < $r1.orderNumber,
 					( operator == MatchesEvaluatorsDefinition.NOT_MATCHES || == Operator.NOT_EQUAL )
 				)
 		)
 
 		$pattern :Pattern(
-			id == $r1.patternId
+			guid == $r1.patternGuid
 		)
 	then
 		Collection list = new ArrayList();
@@ -209,18 +183,20 @@
 		$operator :OperatorDescr()
 
 		$predicate :VerifierPredicateDescr(
-			parent == $operator
+			parentGuid matches $operator.guid,
+			parentType == $operator.verifierComponentType
 		)
 
 		# Any other VerifierComponent that is not predicate or operator
-		$other :VerifierComponent(
-			parent == $operator,
+		$other :RuleComponent(
+			parentGuid matches $operator.guid,
+			parentType == $operator.verifierComponentType,
 			orderNumber > $predicate.orderNumber,
-			( componentType != VerifierComponentType.OPERATOR && != VerifierComponentType.PREDICATE )
+			( verifierComponentType != VerifierComponentType.OPERATOR && != VerifierComponentType.PREDICATE )
 		)
 
 		$rule :VerifierRule(
-			id == $predicate.ruleId
+			guid == $predicate.ruleGuid
 		)
 	then
 		Collection list = new ArrayList();

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/overlaps/Restrictions.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -5,7 +5,7 @@
 import java.util.Collection;
 import java.util.ArrayList;
 
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.data.VerifierReport;
 
 import org.drools.verifier.components.LiteralRestriction;
 import org.drools.verifier.components.Field.FieldType;
@@ -17,7 +17,7 @@
 import org.drools.verifier.report.components.MessageType;
 
 #declare any global variables here
-global VerifierResult result;
+global VerifierReport result;
 
 #
 # Fires when two restrictions are overlapping.
@@ -36,19 +36,19 @@
 		# There is subsumption between two restrictions
 		$subsumption :Subsumption(
 			left.causeType == CauseType.RESTRICTION,
-			$leftId :left.id,
-			$rightId :right.id
+			$leftGuid :left.guid,
+			$rightGuid :right.guid
 		)
 		
 		$left :LiteralRestriction(
-			id == $leftId
+			guid matches $leftGuid
 		)
 		$right :LiteralRestriction(
-			id == $rightId
+			guid matches $rightGuid
 		)
 		# There is no restriction between these two restrictions.
 		not	$center :LiteralRestriction(
-				fieldId == $left.fieldId,
+				fieldGuid matches $left.fieldGuid,
 				eval( $center.compareValues( $left ) == 1 ),
 				eval( $center.compareValues( $right ) == -1 )
 		)

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Clean.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -7,10 +7,10 @@
 import org.drools.verifier.report.components.Gap;  
 import org.drools.verifier.report.components.MissingNumberPattern;
 
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.data.VerifierReport;
 
 #declare any global variables here
-global VerifierResult result;
+global VerifierReport result;
 
 #
 # Merges existing gaps from working memory. Cleans out the data for actual reporting.
@@ -45,7 +45,7 @@
 			operator == Operator.GREATER_OR_EQUAL
 		)
 		$g2 :Gap( 
-			id != $g1.id,
+			guid not matches $g1.guid,
 			field == $g1.field,
 			operator == Operator.LESS_OR_EQUAL,
 			valueAsString == $g1.valueAsString
@@ -90,7 +90,7 @@
 
 		# Covered x < 100
 		$higher :LiteralRestriction( 
-			fieldId == $lower.fieldId,
+			fieldGuid matches $lower.fieldGuid,
 			intValue > $lower.intValue,
 			patternIsNot == $lower.patternIsNot,
 			( operator == Operator.LESS || == Operator.LESS_OR_EQUAL)
@@ -99,7 +99,7 @@
 		# No "<" or "<=" restrictions between these two
 		not LiteralRestriction( 
 			( operator == Operator.LESS_OR_EQUAL || == Operator.LESS ),
-			fieldId == $lower.fieldId,
+			fieldGuid matches $lower.fieldGuid,
 			patternIsNot == $lower.patternIsNot, 
 			intValue > $lower.intValue,
 			intValue < $higher.intValue
@@ -107,7 +107,7 @@
 
 		# gap ( x < 50 ) or ( x > 50 ) or ( x <= 70 )
 		$gap :Gap(
-			restriction.fieldId == $lower.fieldId,
+			restriction.fieldGuid matches $lower.fieldGuid,
 			restriction.patternIsNot == $lower.patternIsNot,
 			restriction.intValue > $lower.intValue,
 			restriction.intValue < $higher.intValue
@@ -142,7 +142,7 @@
 
 		# Covered x < 100
 		$higher :LiteralRestriction( 
-			fieldId == $lower.fieldId,
+			fieldGuid matches $lower.fieldGuid,
 			intValue > $lower.intValue,
 			patternIsNot == $lower.patternIsNot,
 			( operator == Operator.LESS || == Operator.LESS_OR_EQUAL)
@@ -151,7 +151,7 @@
 		# No "<" or "<=" restrictions between these two
 		not LiteralRestriction( 
 			( operator == Operator.GREATER_OR_EQUAL || == Operator.GREATER ),
-			fieldId == $lower.fieldId,
+			fieldGuid matches $lower.fieldGuid,
 			patternIsNot == $lower.patternIsNot, 
 			intValue > $lower.intValue,
 			intValue < $higher.intValue
@@ -159,7 +159,7 @@
 
 		# gap ( x < 50 ) or ( x > 50 ) or ( x >= 70 )
 		$gap :Gap(
-			restriction.fieldId == $lower.fieldId,
+			restriction.fieldGuid matches $lower.fieldGuid,
 			restriction.patternIsNot == $lower.patternIsNot,
 			restriction.intValue > $lower.intValue,
 			restriction.intValue < $higher.intValue
@@ -194,7 +194,7 @@
 
 		# Covered x < 100.0
 		$higher :LiteralRestriction( 
-			fieldId == $lower.fieldId,
+			fieldGuid matches $lower.fieldGuid,
 			doubleValue > $lower.doubleValue,
 			patternIsNot == $lower.patternIsNot,
 			( operator == Operator.LESS || == Operator.LESS_OR_EQUAL)
@@ -203,7 +203,7 @@
 		# No "<" or "<=" restrictions between these two
 		not LiteralRestriction( 
 			( operator == Operator.LESS_OR_EQUAL || == Operator.LESS ),
-			fieldId == $lower.fieldId,
+			fieldGuid matches $lower.fieldGuid,
 			patternIsNot == $lower.patternIsNot, 
 			doubleValue > $lower.doubleValue,
 			doubleValue < $higher.doubleValue
@@ -211,7 +211,7 @@
 
 		# gap ( x < 50.0 ) or ( x > 50.0 ) or ( x <= 70.0 )
 		$gap :Gap(
-			restriction.fieldId == $lower.fieldId,
+			restriction.fieldGuid matches $lower.fieldGuid,
 			restriction.patternIsNot == $lower.patternIsNot,
 			restriction.doubleValue > $lower.doubleValue,
 			restriction.doubleValue < $higher.doubleValue
@@ -246,7 +246,7 @@
 
 		# Covered x < 100.0
 		$higher :LiteralRestriction( 
-			fieldId == $lower.fieldId,
+			fieldGuid matches $lower.fieldGuid,
 			doubleValue > $lower.doubleValue,
 			patternIsNot == $lower.patternIsNot,
 			( operator == Operator.LESS || == Operator.LESS_OR_EQUAL)
@@ -255,7 +255,7 @@
 		# No "<" or "<=" restrictions between these two
 		not LiteralRestriction( 
 			( operator == Operator.GREATER_OR_EQUAL || == Operator.GREATER ),
-			fieldId == $lower.fieldId,
+			fieldGuid matches $lower.fieldGuid,
 			patternIsNot == $lower.patternIsNot, 
 			doubleValue > $lower.doubleValue,
 			doubleValue < $higher.doubleValue
@@ -263,7 +263,7 @@
 
 		# gap ( x < 50.0 ) or ( x > 50.0 ) or ( x >= 70.0 )
 		$gap :Gap(
-			restriction.fieldId == $lower.fieldId,
+			restriction.fieldGuid matches $lower.fieldGuid,
 			restriction.patternIsNot == $lower.patternIsNot,
 			restriction.doubleValue > $lower.doubleValue,
 			restriction.doubleValue < $higher.doubleValue
@@ -298,7 +298,7 @@
 
 		# Covered x < "20-Oct-2007"
 		$higher :LiteralRestriction( 
-			fieldId == $lower.fieldId,
+			fieldGuid matches $lower.fieldGuid,
 			patternIsNot == $lower.patternIsNot,
 			( operator == Operator.LESS || == Operator.LESS_OR_EQUAL),
 			eval( dateValue.after( $lower.getDateValue() ) )
@@ -307,7 +307,7 @@
 		# No "<" or "<=" restrictions between these two
 		not LiteralRestriction( 
 			( operator == Operator.LESS_OR_EQUAL || == Operator.LESS ),
-			fieldId == $lower.fieldId,
+			fieldGuid matches $lower.fieldGuid,
 			patternIsNot == $lower.patternIsNot, 
 			eval( dateValue.after( $lower.getDateValue() ) ),
 			eval( dateValue.before( $higher.getDateValue() ) )
@@ -315,7 +315,7 @@
 
 		# gap ( x < "10-Oct-2007" ) or ( x > "10-Oct-2007" ) or ( x <= "15-Oct-2007" )
 		$gap :Gap(
-			restriction.fieldId == $lower.fieldId,
+			restriction.fieldGuid matches $lower.fieldGuid,
 			restriction.patternIsNot == $lower.patternIsNot,
 			eval( restriction.getDateValue().after( $lower.getDateValue() ) ),
 			eval( restriction.getDateValue().before( $higher.getDateValue() ) )
@@ -350,7 +350,7 @@
 
 		# Covered x < "20-Oct-2007"
 		$higher :LiteralRestriction( 
-			fieldId == $lower.fieldId,
+			fieldGuid matches $lower.fieldGuid,
 			patternIsNot == $lower.patternIsNot,
 			( operator == Operator.LESS || == Operator.LESS_OR_EQUAL),
 			eval( dateValue.after( $lower.getDateValue() ) )
@@ -359,7 +359,7 @@
 		# No ">" or ">=" restrictions between these two
 		not LiteralRestriction( 
 			( operator == Operator.GREATER_OR_EQUAL || == Operator.GREATER ),
-			fieldId == $lower.fieldId,
+			fieldGuid matches $lower.fieldGuid,
 			patternIsNot == $lower.patternIsNot,
 			eval( dateValue.after( $lower.getDateValue() ) ),
 			eval( dateValue.before( $higher.getDateValue() ) )
@@ -367,7 +367,7 @@
 
 		# gap ( x < "10-Oct-2007" ) or ( x > "10-Oct-2007" ) or ( x >= "15-Oct-2007" )
 		$gap :Gap(
-			restriction.fieldId == $lower.fieldId,
+			restriction.fieldGuid matches $lower.fieldGuid,
 			restriction.patternIsNot == $lower.patternIsNot,
 			eval( restriction.getDateValue().after( $lower.getDateValue() ) ),
 			eval( restriction.getDateValue().before( $higher.getDateValue() ) )
@@ -375,4 +375,4 @@
 	then
 		retract( $gap );
 		result.remove( $gap );
-end
+end
\ No newline at end of file

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Dates.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -5,17 +5,16 @@
 import org.drools.base.evaluators.Operator;
 
 import org.drools.verifier.components.*;
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.data.VerifierReport;
 import org.drools.verifier.report.components.Gap;
 
 import java.util.Date;
 import java.util.Calendar;
 import java.util.GregorianCalendar;
 
-import org.drools.verifier.dao.VerifierResult;
 
 #declare any global variables here
-global VerifierResult result;
+global VerifierReport result;
 
 function boolean checkDates(Date d1, Date d2, boolean up) {
 		Calendar c1 = new GregorianCalendar();
@@ -41,13 +40,13 @@
 		
 		# Foo( bar > "27-Oct-2007" )
 		$r :LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			operator == Operator.GREATER
 		)
 		
 		# Check if Foo( bar == "27-Oct-2007" || <= "27-Oct-2007" ) is missing.
 		not	LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator  == Operator.EQUAL || == Operator.LESS_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			eval( dateValue.equals($r.getDateValue()) ) 
@@ -72,13 +71,13 @@
 		
 		# Foo( bar > "27-Oct-2007" )
 		$r :LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			operator == Operator.LESS
 		)
 		
 		# Check if Foo( bar == "27-Oct-2007" || <= "27-Oct-2007" ) is missing.
 		not	LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator  == Operator.EQUAL || == Operator.GREATER_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			eval( dateValue.equals($r.getDateValue()) ) 
@@ -104,13 +103,13 @@
 
 		# Foo( bar == "27-Oct-2007" ) 
 		$r :LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator == Operator.EQUAL || == Operator.LESS_OR_EQUAL )
 		)
 
 		# Check if Foo( bar > "27-Oct-2007" || >= "27-Oct-2007" ) is missing.
 		not	LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			eval( dateValue.equals($r.getDateValue()) ) 
@@ -118,7 +117,7 @@
 		
 		# Check if Foo( bar == "28-Oct-2007" || >= "28-Oct-2007" ) is missing.
 		not	LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator == Operator.EQUAL || == Operator.GREATER_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			eval( checkDates( dateValue, $r.getDateValue(), true ) ) 
@@ -144,13 +143,13 @@
 
 		# Foo( bar == "27-Oct-2007" ) 
 		$r :LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator == Operator.EQUAL || == Operator.GREATER_OR_EQUAL )
 		)
 
 		# Check if Foo( bar < "27-Oct-2007" || <= "27-Oct-2007" ) is missing.
 		not	LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator == Operator.LESS || == Operator.LESS_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			eval( dateValue.equals($r.getDateValue()) ) 
@@ -158,7 +157,7 @@
 		
 		# Check if Foo( bar == "26-Oct-2007" || <= "26-Oct-2007" ) is missing.
 		not	LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator == Operator.EQUAL || == Operator.LESS_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			eval( checkDates( dateValue, $r.getDateValue(), false ) )
@@ -168,4 +167,4 @@
 		
 		result.add( gap );
 		insert( gap );
-end
+end
\ No newline at end of file

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Doubles.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -7,10 +7,10 @@
 import org.drools.verifier.components.*;
 import org.drools.verifier.report.components.Gap;
 
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.data.VerifierReport;
 
 #declare any global variables here
-global VerifierResult result;
+global VerifierReport result;
 
 
 # If all ranges are not checked for a field.
@@ -26,13 +26,13 @@
 		
 		# Foo( bar > 42 )
 		$r :LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			operator == Operator.GREATER
 		)
 		
 		# Check if Foo( bar == 42 || <= 42 ) is missing.
 		not	LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator  == Operator.EQUAL || == Operator.LESS_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			doubleValue == $r.doubleValue 
@@ -57,13 +57,13 @@
 		
 		# Foo( bar > 42 )
 		$r :LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			operator == Operator.LESS
 		)
 		
 		# Check if Foo( bar == 42 || <= 42 ) is missing.
 		not	LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator  == Operator.EQUAL || == Operator.GREATER_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			doubleValue == $r.doubleValue 
@@ -89,13 +89,13 @@
 
 		# Foo( bar == 42 ) 
 		$r :LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator == Operator.EQUAL || == Operator.LESS_OR_EQUAL )
 		)
 
 		# Check if Foo( bar > 42 || >= 42 ) is missing.
 		not	LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			doubleValue == $r.doubleValue 
@@ -121,13 +121,13 @@
 
 		# Foo( bar == 42 ) 
 		$r :LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator == Operator.EQUAL || == Operator.GREATER_OR_EQUAL )
 		)
 
 		# Check if Foo( bar < 42 || <= 42 ) is missing.
 		not	LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator == Operator.LESS || == Operator.LESS_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			doubleValue == $r.doubleValue 

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Integers.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -7,9 +7,9 @@
 import org.drools.verifier.components.*;
 import org.drools.verifier.report.components.Gap;
 
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.data.VerifierReport;
 
-global VerifierResult result;
+global VerifierReport result;
 
 # If all ranges are not checked for a field.
 # 
@@ -24,13 +24,13 @@
 		
 		# Foo( bar > 42 )
 		$r :LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			operator == Operator.GREATER
 		)
 		
 		# Check if Foo( bar == 42 || <= 42 ) is missing.
 		not	LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator  == Operator.EQUAL || == Operator.LESS_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			intValue == $r.intValue 
@@ -55,13 +55,13 @@
 		
 		# Foo( bar > 42 )
 		$r :LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			operator == Operator.LESS
 		)
 		
 		# Check if Foo( bar == 42 || <= 42 ) is missing.
 		not	LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator  == Operator.EQUAL || == Operator.GREATER_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			intValue == $r.intValue 
@@ -87,13 +87,13 @@
 
 		# Foo( bar == 42 ) 
 		$r :LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator == Operator.EQUAL || == Operator.LESS_OR_EQUAL )
 		)
 
 		# Check if Foo( bar > 42 || >= 42 ) is missing.
 		not	LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			intValue == $r.intValue 
@@ -101,7 +101,7 @@
 		
 		# Check if Foo( bar == 43 || >= 43 ) is missing.
 		not	LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator == Operator.EQUAL || == Operator.GREATER_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			eval( intValue == $r.getIntValue() + 1 ) 
@@ -127,13 +127,13 @@
 
 		# Foo( bar == 42 ) 
 		$r :LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator == Operator.EQUAL || == Operator.GREATER_OR_EQUAL )
 		)
 
 		# Check if Foo( bar < 42 || <= 42 ) is missing.
 		not	LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator == Operator.LESS || == Operator.LESS_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			intValue == $r.intValue 
@@ -141,7 +141,7 @@
 		
 		# Check if Foo( bar == 41 || <= 41 ) is missing.
 		not	LiteralRestriction( 
-			fieldId == $f.id, 
+			fieldGuid matches $f.guid, 
 			( operator == Operator.EQUAL || == Operator.LESS_OR_EQUAL ), 
 			patternIsNot == $r.patternIsNot, 
 			eval( intValue == $r.getIntValue() - 1 ) 

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/NumberPatterns.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -9,13 +9,13 @@
 import org.drools.verifier.report.components.Cause;
 import org.drools.verifier.FindMissingNumber;
 
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.data.VerifierReport;
 
 import java.util.ArrayList;
 import java.util.List;
 
 #declare any global variables here
-global VerifierResult result;
+global VerifierReport result;
 
 #
 # If all pattern ranges are not checked for a field.
@@ -44,7 +44,7 @@
 			$list :ArrayList( size > FindMissingNumber.MIN_NUMBER_OF_RESTRICTIONS )
 				from collect(
 					LiteralRestriction( 
-						fieldId == $f.id, 
+						fieldId == $f.guid, 
 						patternIsNot == true, 
 						operator == Operator.EQUAL
 					)
@@ -75,7 +75,7 @@
 			$list :ArrayList( size > FindMissingNumber.MIN_NUMBER_OF_RESTRICTIONS )
 				from collect(
 					LiteralRestriction( 
-						fieldId == $f.id, 
+						fieldId == $f.guid, 
 						patternIsNot == false, 
 						operator == Operator.NOT_EQUAL
 					)
@@ -85,7 +85,7 @@
 			$list :ArrayList( size > FindMissingNumber.MIN_NUMBER_OF_RESTRICTIONS )
 				from collect(
 					LiteralRestriction( 
-						fieldId == $f.id, 
+						fieldId == $f.guid, 
 						patternIsNot == true, 
 						operator == Operator.NOT_EQUAL
 					)

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Variables.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Variables.drl	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Variables.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -2,7 +2,7 @@
 
 #list any import classes here.
 import org.drools.verifier.components.*;
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.data.VerifierReport;
 import org.drools.verifier.report.components.Gap;
 
 import java.util.ArrayList;
@@ -11,7 +11,7 @@
 import java.util.Locale;
 
 #declare any global variables here
-global VerifierResult result
+#global VerifierReport result;
 
 /*
 # If all ranges are not checked for a field.
@@ -29,44 +29,44 @@
 		# Find another variable that points to the same field. 
 		# Find another constraint and check if it continues to check the range for this field.
 		(
-				$r :VariableRestriction( fieldId == $f.id, evaluator == ">" )
+				$r :VariableRestriction( fieldId == $f.guid, evaluator == ">" )
 			and
 				$v1 :Variable( id == $r.variableId )
 			and
-				$v2 :Variable( objectId == $v1.objectId, objectType == $v1.objectType, id != $v1.id)
+				$v2 :Variable( objectId == $v1.objectId, objectType == $v1.objectType, id != $v1.guid)
 			and
-				not VariableRestriction( fieldId == $f.id, ( evaluator == "==" || == "<=" ), 
-														variableId == $v2.id,
+				not VariableRestriction( fieldId == $f.guid, ( evaluator == "==" || == "<=" ), 
+														variableId == $v2.guid,
 														patternIsNot == $r.patternIsNot )
 		) or (
-				$r :VariableRestriction( fieldId == $f.id, evaluator == "<" )
+				$r :VariableRestriction( fieldId == $f.guid, evaluator == "<" )
 			and
 				$v1 :Variable( id == $r.variableId )
 			and
-				$v2 :Variable( objectId == $v1.objectId, objectType == $v1.objectType, id != $v1.id)
+				$v2 :Variable( objectId == $v1.objectId, objectType == $v1.objectType, id != $v1.guid)
 			and
-				not VariableRestriction( fieldId == $f.id, ( evaluator == "==" || == ">=" ), 
-														variableId == $v2.id,
+				not VariableRestriction( fieldId == $f.guid, ( evaluator == "==" || == ">=" ), 
+														variableId == $v2.guid,
 														patternIsNot == $r.patternIsNot )
 		) or (
-				$r :VariableRestriction( fieldId == $f.id, evaluator == "<=" )
+				$r :VariableRestriction( fieldId == $f.guid, evaluator == "<=" )
 			and
 				$v1 :Variable( id == $r.variableId )
 			and
-				$v2 :Variable( objectId == $v1.objectId, objectType == $v1.objectType, id != $v1.id)
+				$v2 :Variable( objectId == $v1.objectId, objectType == $v1.objectType, id != $v1.guid)
 			and
-				not VariableRestriction( fieldId == $f.id, evaluator == ">", 
-														variableId == $v2.id,
+				not VariableRestriction( fieldId == $f.guid, evaluator == ">", 
+														variableId == $v2.guid,
 														patternIsNot == $r.patternIsNot )
 		) or (
-				$r :VariableRestriction( fieldId == $f.id, evaluator == ">=" )
+				$r :VariableRestriction( fieldId == $f.guid, evaluator == ">=" )
 			and
 				$v1 :Variable( id == $r.variableId )
 			and
-				$v2 :Variable( objectId == $v1.objectId, objectType == $v1.objectType, id != $v1.id)
+				$v2 :Variable( objectId == $v1.objectId, objectType == $v1.objectType, id != $v1.guid)
 			and
-				not VariableRestriction( fieldId == $f.id, evaluator == "<", 
-														variableId == $v2.id,
+				not VariableRestriction( fieldId == $f.guid, evaluator == "<", 
+														variableId == $v2.guid,
 														patternIsNot == $r.patternIsNot )
 		)
 		$rule :VerifierRule( id == $r.ruleId )

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Consequence.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Consequence.drl	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Consequence.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -18,7 +18,7 @@
 		# Check that VerifierRule $left and $right have redundant fields.
 		$left :TextConsequence()
 		$right :TextConsequence(
-			id != $left.id,
+			guid not matches $left.guid,
 			text == $left.text
 		)
 

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Notes.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Notes.drl	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Notes.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -2,7 +2,7 @@
 package org.drools.verifier.redundancy
 
 #list any import classes here.
-global VerifierResult result;
+global VerifierReport result;
 
 
 
@@ -10,9 +10,9 @@
 import java.util.Collection;
 import java.util.ArrayList;
 
-import org.drools.verifier.components.PatternPossibility;
-import org.drools.verifier.components.RulePossibility;
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.components.SubPattern;
+import org.drools.verifier.components.SubRule;
+import org.drools.verifier.data.VerifierReport;
 import org.drools.verifier.report.components.Redundancy;
 import org.drools.verifier.report.components.VerifierMessage;
 import org.drools.verifier.report.components.Cause;
@@ -36,7 +36,7 @@
 			left.causeType == CauseType.RESTRICTION
 		)
 
-		$pp :PatternPossibility(
+		$pp :SubPattern(
 			items contains $r.left,
 			items contains $r.right
 		)
@@ -63,7 +63,7 @@
 			left.causeType == CauseType.PATTERN_POSSIBILITY
 		)
 
-		RulePossibility(
+		SubRule(
 			items contains $r.left,
 			items contains $r.right
 		)

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Patterns.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -16,11 +16,11 @@
 		# Check that Patterns $left and $right have redundant fields.
 		$left :Pattern()
 		$right :Pattern(
-			id != $left.id,
-	  		objectTypeId == $left.objectTypeId,
+			guid not matches $left.guid,
+	  		objectTypeGuid matches $left.objectTypeGuid,
 	  		# TODO: In some cases the source might be redundant with different sources.
 	 		sourceType == $left.sourceType,
-	  		sourceId == $left.sourceId,
+	  		sourceGuid == $left.sourceGuid,
 	  		patternNot == $left.patternNot,
 	  		patternExists == $left.patternExists,
 	  		patternForall == $left.patternForall
@@ -29,8 +29,8 @@
 		# Has possibilities, if the there is no possibilities,
 		# then the Redundancy type is STRONG.
 		# Because these patterns have no restrictions.
-		exists PatternPossibility( patternId == $left.id )
-		exists PatternPossibility( patternId == $right.id )
+		exists SubPattern( patternGuid matches $left.guid )
+		exists SubPattern( patternGuid matches $right.guid )
 
 		# Check that there is not already a pair with these values.
 		not Redundancy(
@@ -55,19 +55,19 @@
 		# Check that Patterns $left and $right have redundant fields.
 		$left :Pattern()
 		$right :Pattern(
-			id != $left.id,
-	  		objectTypeId == $left.objectTypeId,
+			guid not matches $left.guid,
+	  		objectTypeGuid == $left.objectTypeGuid,
 	  		# TODO: In some cases the source might be redundant with different sources.
 	 		sourceType == $left.sourceType,
-	  		sourceId == $left.sourceId,
+	  		sourceGuid == $left.sourceGuid,
 	  		patternNot == $left.patternNot,
 	  		patternExists == $left.patternExists,
 	  		patternForall == $left.patternForall
 		)
 
 		# Not possibilities
-		not PatternPossibility( patternId == $left.id )
-		not PatternPossibility( patternId == $right.id )
+		not SubPattern( patternGuid matches $left.guid )
+		not SubPattern( patternGuid matches $right.guid )
 
 		# Check that there is not already a pair with these values.
 		not Redundancy(

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Possibilities.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -35,27 +35,27 @@
 
 		# Find two PatternPossibilities.
 		(
-				$pp1 :PatternPossibility(
-					eval( patternId == $redundancy.getLeft().getId() )
+				$pp1 :SubPattern(
+					eval( patternGuid.equals( $redundancy.getLeft().getGuid() ) )
 				)
 			and
-				$pp2 :PatternPossibility(
-					eval( patternId == $redundancy.getRight().getId() )
+				$pp2 :SubPattern(
+					eval( patternGuid.equals( $redundancy.getRight().getGuid() ) )
 				)
 		) or (
-				$pp1 :PatternPossibility(
-					eval( patternId == $redundancy.getRight().getId() )
+				$pp1 :SubPattern(
+					eval( patternGuid.equals( $redundancy.getRight().getGuid() ) )
 				)
 			and
-				$pp2 :PatternPossibility(
-					eval( patternId == $redundancy.getLeft().getId() )
+				$pp2 :SubPattern(
+					eval( patternGuid.equals( $redundancy.getLeft().getGuid() ) )
 				)
 		)
 
 		# For every restriction in $pp1 there is a redundancy to $pp2.
 		forall(
 			$r :Restriction(
-				patternId == $pp1.patternId,
+				patternGuid matches $pp1.patternGuid,
 				this memberOf $pp1.items
 			)
 
@@ -75,7 +75,7 @@
 		# For every restriction in $pp2 there is a redundancy to $pp1.
 		forall(
 			$r :Restriction(
-				patternId == $pp2.patternId,
+				patternGuid matches $pp2.patternGuid,
 				this memberOf $pp2.items
 			)
 
@@ -121,17 +121,17 @@
 		)
 
 		# Find two RulePossibilities.
-		$rp1 :RulePossibility(
-			eval( ruleId == $redundancy.getLeft().getId() )
+		$rp1 :SubRule(
+			eval( ruleGuid.equals( $redundancy.getLeft().getGuid() ) )
 		)
-		$rp2 :RulePossibility(
-			eval( ruleId == $redundancy.getRight().getId() )
+		$rp2 :SubRule(
+			eval( ruleGuid.equals( $redundancy.getRight().getGuid() ) )
 		)
 
 		# For every pattern possibility in $rp1 there is a redundant pattern possibility in $rp2.
 		forall(
-			$pp :PatternPossibility(
-				ruleId == $rp1.ruleId,
+			$pp :SubPattern(
+				ruleGuid matches $rp1.ruleGuid,
 				this memberOf $rp1.items
 			)
 
@@ -145,8 +145,8 @@
 
 		# For every pattern possibility in $rp2 there is a redundant pattern possibility in $rp1.
 		forall(
-			$pp :PatternPossibility(
-				ruleId == $rp2.ruleId,
+			$pp :SubPattern(
+				ruleGuid matches $rp2.ruleGuid,
 				this memberOf $rp2.items
 			)
 
@@ -158,4 +158,4 @@
 		)
 	then
 		insert( new Redundancy( RedundancyType.STRONG, $rp1, $rp2 ) );
-end
+end
\ No newline at end of file

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Restrictions.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -13,10 +13,10 @@
 		# Check that Restrictions $left and $right have redundant fields.
 		$left :VariableRestriction()
 		$right :VariableRestriction(
-			id != $left.id,
+			guid not matches $left.guid,
 			operator == $left.operator,
-			variable.objectType == $left.variable.objectType,
-			variable.objectId == $left.variable.objectId
+			variable.objectTypeType == $left.variable.objectTypeType,
+			variable.objectTypeGuid matches $left.variable.objectTypeGuid
 		)
 		# Check that there is not already a pair with these values.
 		not Redundancy(
@@ -41,7 +41,7 @@
 		and
 		(
 				$right :LiteralRestriction(
-					id != $left.id,
+					guid not matches $left.guid,
 					operator == $left.operator,
 					valueType == $left.valueType,
 					valueType == Field.FieldType.BOOLEAN,
@@ -49,7 +49,7 @@
 				)
 			or
 				$right :LiteralRestriction(
-					id != $left.id,
+					guid not matches $left.guid,
 					operator == $left.operator,
 					valueType == $left.valueType,
 					valueType == Field.FieldType.STRING,
@@ -57,7 +57,7 @@
 				)
 			or
 				$right :LiteralRestriction(
-					id != $left.id,
+					guid not matches $left.guid,
 					operator == $left.operator,
 					valueType == $left.valueType,
 					valueType == Field.FieldType.INT,
@@ -65,7 +65,7 @@
 				)
 			or
 				$right :LiteralRestriction(
-					id != $left.id,
+					guid not matches $left.guid,
 					operator == $left.operator,
 					valueType == $left.valueType,
 					valueType == Field.FieldType.DOUBLE,
@@ -73,7 +73,7 @@
 				)
 			or
 				$right :LiteralRestriction(
-					id != $left.id,
+					guid not matches $left.guid,
 					operator == $left.operator,
 					valueType == $left.valueType,
 					valueType == Field.FieldType.DATE,
@@ -82,22 +82,22 @@
 			or
 			(
 				$right :LiteralRestriction(
-					id != $left.id,
+					guid not matches $left.guid,
 					operator == $left.operator,
 					valueType == $left.valueType,
 					valueType == Field.FieldType.VARIABLE
 				)
 				and
 					$v :Variable(
-						objectType == VerifierComponentType.FIELD,
-						objectId == $left.id
+						objectTypeType == VerifierComponentType.FIELD,
+						objectTypeGuid matches $left.guid
 					)
 				and
 					Variable(
-						objectType == VerifierComponentType.FIELD,
-						objectId == $right.id,
-						objectName == $v.objectName,
-						name == $v.name
+						objectTypeType == VerifierComponentType.FIELD,
+						objectTypeGuid matches $right.guid,
+						objectTypeName == $v.objectTypeName,
+						name matches $v.name
 					)
 			)
 		)
@@ -112,4 +112,4 @@
 		)
 	then
 		insert( new Redundancy( RedundancyType.STRONG, $left, $right ) );
-end
+end
\ No newline at end of file

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Rules.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -19,7 +19,7 @@
 		# Check that VerifierRule $left and $right have redundant fields.
 		$left :VerifierRule()
 		$right :VerifierRule(
-			id != $left.id,
+			guid not matches $left.guid,
 			ruleAgendaGroup == $left.ruleAgendaGroup
 		)
 

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Warnings.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Warnings.drl	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Warnings.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -2,7 +2,7 @@
 package org.drools.verifier.redundancy
 
 #list any import classes here.
-global VerifierResult result;
+global VerifierReport result;
 
 
 
@@ -10,8 +10,8 @@
 import java.util.Collection;
 import java.util.ArrayList;
 
-import org.drools.verifier.components.RulePossibility;
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.components.SubRule;
+import org.drools.verifier.data.VerifierReport;
 import org.drools.verifier.report.components.Redundancy;
 import org.drools.verifier.report.components.RedundancyType;
 import org.drools.verifier.report.components.VerifierMessage;
@@ -45,14 +45,14 @@
 		)
 
 		# Check that redundant possibilities are from redundant rules
-		exists RulePossibility(
+		exists SubRule(
 			this == $rulePossibilityRedundancy.left,
-			eval( ruleId == $ruleRedundancy.getLeft().getId() )
+			eval( ruleGuid.equals( $ruleRedundancy.getLeft().getGuid() ) )
 		)
 
-		exists RulePossibility(
+		exists SubRule(
 			this == $rulePossibilityRedundancy.right,
-			eval( ruleId == $ruleRedundancy.getRight().getId() )
+			eval( ruleGuid.equals( $ruleRedundancy.getRight().getGuid() ) )
 		)
 
 		# Check that the possibilties are redundant to each other.
@@ -104,17 +104,17 @@
 		)
 
 		# Check that redundant possibilities are from redundant rules
-		exists RulePossibility(
+		exists SubRule(
 			this == $rulePossibilityRedundancy.left,
-			eval( ruleId == $ruleRedundancy.getLeft().getId() )
+			eval( ruleGuid.equals( $ruleRedundancy.getLeft().getGuid() ) )
 		)
 
-		exists RulePossibility(
+		exists SubRule(
 			this == $rulePossibilityRedundancy.right,
-			eval( ruleId == $ruleRedundancy.getRight().getId() )
+			eval( ruleGuid.equals( $ruleRedundancy.getRight().getGuid() ) )
 		)
 
-		# Check that the left side is redundant to right, but the right side is not redudant to left.
+		# Check that the left side is redundant to right, but the right side is not redundant to left.
 		not Redundancy(
 			left.causeType == CauseType.RULE_POSSIBILITY,
 			left == $rulePossibilityRedundancy.right,

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/field.htm
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/field.htm	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/field.htm	2009-10-24 18:25:51 UTC (rev 29799)
@@ -4,13 +4,13 @@
 	<div>
 		Name: @{field.name}<br/>
 		Type: @{field.fieldType}<br/>
-		Belongs to class: <a href="@{sourceFolder}/@{objectTypeFolder}/@{objectType.id}.htm">@{objectType.name}</a>
+		Belongs to class: <a href="@{sourceFolder}/@{objectTypeFolder}/@{objectType.guid}.htm">@{objectType.name}</a>
 	</div>
 	<div>
 		Rules that use this component:
 		<ul>
 			@foreach{rule:rules}
-			<li><a href="@{sourceFolder}/@{ruleFolder}/@{rule.id}.htm">@{rule.ruleName}</a></li>
+			<li><a href="@{sourceFolder}/@{ruleFolder}/@{rule.guid}.htm">@{rule.ruleName}</a></li>
 			@end{}
 		</ul>
 	</div>

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/missingRange.htm	2009-10-24 18:25:51 UTC (rev 29799)
@@ -2,9 +2,9 @@
         <table>
         	<tr>
 	            <th><a href=
-	            "@{sourceFolder}/@{objectTypeFolder}/@{objectType.id}.htm">
+	            "@{sourceFolder}/@{objectTypeFolder}/@{objectType.guid}.htm">
 	            @{objectType.name}</a>.<a href=
-	            "@{sourceFolder}/@{fieldFolder}/@{field.id}.htm">@{field.name}</a></th>
+	            "@{sourceFolder}/@{fieldFolder}/@{field.guid}.htm">@{field.name}</a></th>
 			</tr>
             <tr>
                 <td >

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/objectType.htm
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/objectType.htm	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/objectType.htm	2009-10-24 18:25:51 UTC (rev 29799)
@@ -9,7 +9,7 @@
 		@if{objectType.fields != null && !objectType.fields.empty}
 			<ul>
 				@foreach{field:objectType.fields}
-				<li>@{field.fieldType}&nbsp;<a href="@{sourceFolder}/@{fieldFolder}/@{field.id}.htm">@{field.name}</a></li>
+				<li>@{field.fieldType}&nbsp;<a href="@{sourceFolder}/@{fieldFolder}/@{field.guid}.htm">@{field.name}</a></li>
 				@end{}
 			</ul>
 		@else{}
@@ -22,7 +22,7 @@
 		Rules that use this component:
 		<ul>
 			@foreach{rule:rules}
-			<li><a href="@{sourceFolder}/@{ruleFolder}/@{rule.id}.htm">@{rule.ruleName}</a></li>
+			<li><a href="@{sourceFolder}/@{ruleFolder}/@{rule.guid}.htm">@{rule.ruleName}</a></li>
 			@end{}
 		</ul>
 	</div>

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/objectTypes.htm
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/objectTypes.htm	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/objectTypes.htm	2009-10-24 18:25:51 UTC (rev 29799)
@@ -9,10 +9,10 @@
         </tr>
 			@foreach{objectType:objectTypes}
 	    	<tr class="row@{objectType.offset}">
-	                <td><a href="@{sourceFolder}/@{objectTypeFolder}/@{objectType.id}.htm">@{objectType.name}</a></td>
+	                <td><a href="@{sourceFolder}/@{objectTypeFolder}/@{objectType.guid}.htm">@{objectType.name}</a></td>
 					<td>
 				@foreach{field:objectType.fields}
-					@{field.fieldType}&nbsp;<a href="@{sourceFolder}/@{fieldFolder}/@{field.id}.htm">@{field.name}</a>@end{","}
+					@{field.fieldType}&nbsp;<a href="@{sourceFolder}/@{fieldFolder}/@{field.guid}.htm">@{field.name}</a>@end{","}
 					</td>
         	</tr>
 			@end{}

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/packages.htm
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/packages.htm	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/packages.htm	2009-10-24 18:25:51 UTC (rev 29799)
@@ -10,7 +10,7 @@
         		<td>
         			<ul>
 					@foreach{rule:rulePackage.rules}
-						<li class="row@{rulePackage.offset}" ><a href="@{sourceFolder}/@{ruleFolder}/@{rule.id}.htm">@{rule.ruleName}</a></li>@end{}
+						<li class="row@{rulePackage.offset}" ><a href="@{sourceFolder}/@{ruleFolder}/@{rule.guid}.htm">@{rule.ruleName}</a></li>@end{}
 					</ul>
 				</td>
         	</tr>

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/rule.htm
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/rule.htm	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/report/html/rule.htm	2009-10-24 18:25:51 UTC (rev 29799)
@@ -8,7 +8,7 @@
 		Patterns:
 		<ul>
 			@foreach{objectType:objectTypes}
-			<li><a href="@{sourceFolder}/@{objectTypeFolder}/@{objectType.id}.htm">@{objectType.name}</a></li>
+			<li><a href="@{sourceFolder}/@{objectTypeFolder}/@{objectType.guid}.htm">@{objectType.name}</a></li>
 			@end{}
 		</ul>
 	</div>

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/reports/RangeCheckReports.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/reports/RangeCheckReports.drl	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/reports/RangeCheckReports.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -4,7 +4,7 @@
 #list any import classes here.
 import org.drools.verifier.components.Field;
 import org.drools.verifier.report.components.VerifierRangeCheckMessage;
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.data.VerifierReport;
 import org.drools.verifier.report.components.MissingRange;
 import org.drools.verifier.report.components.Severity;
 import org.drools.verifier.report.components.MessageType;
@@ -12,7 +12,7 @@
 import java.util.ArrayList;
 
 #declare any global variables here
-global VerifierResult result
+global VerifierReport result
 
 
 #

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Possibilities.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -3,8 +3,8 @@
 
 import org.drools.verifier.components.Restriction;
 import org.drools.verifier.components.Pattern;
-import org.drools.verifier.components.PatternPossibility;
-import org.drools.verifier.components.RulePossibility;
+import org.drools.verifier.components.SubPattern;
+import org.drools.verifier.components.SubRule;
 import org.drools.verifier.report.components.Redundancy;
 import org.drools.verifier.report.components.Subsumption;
 import org.drools.verifier.report.components.CauseType;
@@ -33,11 +33,11 @@
 		)
 
 		# Find two PatternPossibilities.
-		$pp1 :PatternPossibility(
-			eval( patternId == $redundancy.getLeft().getId() )
+		$pp1 :SubPattern(
+			eval( patternGuid.equals( $redundancy.getLeft().getGuid() ) )
 		)
-		$pp2 :PatternPossibility(
-			eval( patternId == $redundancy.getRight().getId() )
+		$pp2 :SubPattern(
+			eval( patternGuid.equals( $redundancy.getRight().getGuid() ) )
 		)		
 		
 		# For every restriction in $pp1 there is a redundancy to restriction in $pp2.
@@ -100,16 +100,16 @@
 		)
 
 		# Find two RulePossibilities.
-		$rp1 :RulePossibility(
-			eval( ruleId == $redundancy.getLeft().getId() )
+		$rp1 :SubRule(
+			eval( ruleGuid.equals( $redundancy.getLeft().getGuid() ) )
 		)
-		$rp2 :RulePossibility(
-			eval( ruleId == $redundancy.getRight().getId() )
+		$rp2 :SubRule(
+			eval( ruleGuid.equals( $redundancy.getRight().getGuid() ) )
 		)
 		
-		# For every PatternPossibility in $rp1 there is a redundancy to PatternPossibility in $rp2.
+		# For every SubPattern in $rp1 there is a redundancy to SubPattern in $rp2.
 		forall(
-			$pp :PatternPossibility(
+			$pp :SubPattern(
 				this memberOf $rp1.items
 			)
 
@@ -119,14 +119,14 @@
 			)
 		)
 		
-		# There is no PatternPossibility on $rp2 that has no redundancy in $rp1 
-		# and has a lower order number than an existing PatternPossibility from $rp2 to $rp1.
+		# There is no SubPattern on $rp2 that has no redundancy in $rp1 
+		# and has a lower order number than an existing SubPattern from $rp2 to $rp1.
 		not(
-				$pp1 :PatternPossibility(
+				$pp1 :SubPattern(
 					this memberOf $rp2.items
 				)
 			and
-				$pp2 :PatternPossibility(
+				$pp2 :SubPattern(
 					this memberOf $rp2.items,
 					orderNumber > $pp1.orderNumber
 				)

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Restrictions.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -27,7 +27,7 @@
 
 		# Covered x > 100
 		$higher :LiteralRestriction( 
-			fieldId == $lower.fieldId,
+			fieldGuid matches $lower.fieldGuid,
 			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL || == Operator.EQUAL)
 		)
 		
@@ -54,7 +54,7 @@
 
 		# Covered x < 100
 		$lower :LiteralRestriction( 
-			fieldId == $higher.fieldId,
+			fieldGuid matches $higher.fieldGuid,
 			( operator == Operator.LESS || == Operator.LESS_OR_EQUAL || == Operator.EQUAL)
 		)
 		

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/ConsequenceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/ConsequenceTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/ConsequenceTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -9,8 +9,8 @@
 import org.drools.StatelessSession;
 import org.drools.base.RuleNameMatchesAgendaFilter;
 import org.drools.verifier.components.VerifierRule;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 import org.drools.verifier.report.components.Severity;
 import org.drools.verifier.report.components.VerifierMessage;
 import org.drools.verifier.report.components.VerifierMessageBase;
@@ -30,7 +30,7 @@
 
         session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "No action - possibly commented out" ) );
 
-        VerifierResult result = VerifierResultFactory.createVerifierResult();
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
 
         Collection< ? extends Object> testData = getTestData( this.getClass().getResourceAsStream( "ConsequenceTest.drl" ),
                                                               result.getVerifierData() );

Deleted: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/FindMissingNumberTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/FindMissingNumberTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/FindMissingNumberTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,129 +0,0 @@
-package org.drools.verifier;
-
-import java.math.BigDecimal;
-
-import junit.framework.TestCase;
-
-public class FindMissingNumberTest extends TestCase {
-
-	public void testfindSumPattern() {
-		// Sum +2 missing number 4
-		assertTrue(FindMissingNumber.findSumPattern(
-				new BigDecimal[] { BigDecimal.valueOf(2),
-						BigDecimal.valueOf(6), BigDecimal.valueOf(8),
-						BigDecimal.valueOf(10) }).doubleValue() == 4);
-		// +10 missing number 50
-		assertTrue(FindMissingNumber.findSumPattern(
-				new BigDecimal[] { BigDecimal.valueOf(10),
-						BigDecimal.valueOf(20), BigDecimal.valueOf(30),
-						BigDecimal.valueOf(40), BigDecimal.valueOf(60),
-						BigDecimal.valueOf(70) }).doubleValue() == 50);
-		// +66 missing number 308
-		assertTrue(FindMissingNumber.findSumPattern(
-				new BigDecimal[] { BigDecimal.valueOf(110),
-						BigDecimal.valueOf(176), BigDecimal.valueOf(242),
-						BigDecimal.valueOf(374) }).doubleValue() == 308);
-
-		// Deduction -2 missing number 8
-		assertTrue(FindMissingNumber.findSumPattern(
-				new BigDecimal[] { BigDecimal.valueOf(10),
-						BigDecimal.valueOf(6), BigDecimal.valueOf(4),
-						BigDecimal.valueOf(2) }).doubleValue() == 8);
-		// -337 missing number -11
-		assertTrue(FindMissingNumber.findSumPattern(
-				new BigDecimal[] { BigDecimal.valueOf(663),
-						BigDecimal.valueOf(326), BigDecimal.valueOf(-348),
-						BigDecimal.valueOf(-685) }).doubleValue() == -11);
-		// -31 missing number 4350
-		assertTrue(FindMissingNumber.findSumPattern(
-				new BigDecimal[] { BigDecimal.valueOf(4443),
-						BigDecimal.valueOf(4412), BigDecimal.valueOf(4381),
-						BigDecimal.valueOf(4319) }).doubleValue() == 4350);
-
-		// Not valid
-		// Not in pattern.
-		assertTrue(FindMissingNumber.findSumPattern(new BigDecimal[] {
-				BigDecimal.valueOf(1), BigDecimal.valueOf(2),
-				BigDecimal.valueOf(4), BigDecimal.valueOf(6),
-				BigDecimal.valueOf(8), BigDecimal.valueOf(11) }) == null);
-		assertTrue(FindMissingNumber.findSumPattern(new BigDecimal[] {
-				BigDecimal.valueOf(5), BigDecimal.valueOf(3),
-				BigDecimal.valueOf(54353), BigDecimal.valueOf(54554),
-				BigDecimal.valueOf(232), BigDecimal.valueOf(123) }) == null);
-		// No missing values.
-		assertTrue(FindMissingNumber.findSumPattern(new BigDecimal[] {
-				BigDecimal.valueOf(2), BigDecimal.valueOf(4),
-				BigDecimal.valueOf(6), BigDecimal.valueOf(8),
-				BigDecimal.valueOf(10), BigDecimal.valueOf(12),
-				BigDecimal.valueOf(14) }) == null);
-		assertTrue(FindMissingNumber.findSumPattern(new BigDecimal[] {
-				BigDecimal.valueOf(10), BigDecimal.valueOf(20),
-				BigDecimal.valueOf(30), BigDecimal.valueOf(40),
-				BigDecimal.valueOf(50), BigDecimal.valueOf(60) }) == null);
-		assertTrue(FindMissingNumber.findSumPattern(new BigDecimal[] {
-				BigDecimal.valueOf(-15), BigDecimal.valueOf(-10),
-				BigDecimal.valueOf(-5), BigDecimal.valueOf(0),
-				BigDecimal.valueOf(5), BigDecimal.valueOf(10),
-				BigDecimal.valueOf(15) }) == null);
-		// Under 4 values always returns null.
-		assertTrue(FindMissingNumber.findSumPattern(new BigDecimal[] {
-				BigDecimal.valueOf(2), BigDecimal.valueOf(4),
-				BigDecimal.valueOf(6) }) == null);
-		assertTrue(FindMissingNumber.findSumPattern(new BigDecimal[] {
-				BigDecimal.valueOf(2), BigDecimal.valueOf(4) }) == null);
-		assertTrue(FindMissingNumber.findSumPattern(new BigDecimal[] { BigDecimal
-				.valueOf(2) }) == null);
-	}
-
-	public void testFindMultiplicationPattern() {
-
-		// Multiplication
-		// *2 missing number 4
-		assertTrue(FindMissingNumber.findMultiplicationPattern(
-				new BigDecimal[] { BigDecimal.valueOf(2),
-						BigDecimal.valueOf(8), BigDecimal.valueOf(16),
-						BigDecimal.valueOf(32), BigDecimal.valueOf(64) })
-				.doubleValue() == 4);
-		// *17 missing number 383214
-		assertTrue(FindMissingNumber.findMultiplicationPattern(
-				new BigDecimal[] { BigDecimal.valueOf(78),
-						BigDecimal.valueOf(1326), BigDecimal.valueOf(22542),
-						BigDecimal.valueOf(6514638) }).doubleValue() == 383214);
-		// *1,23 missing number 2016.6957
-		assertTrue(FindMissingNumber.findMultiplicationPattern(
-				new BigDecimal[] { BigDecimal.valueOf(1333),
-						BigDecimal.valueOf(1639.59),
-						BigDecimal.valueOf(2480.535711),
-						BigDecimal.valueOf(3051.05892453) }).doubleValue() == 2016.6957);
-
-		// Division
-		// /2 (*0.5) missing number 128
-		assertTrue(FindMissingNumber.findMultiplicationPattern(
-				new BigDecimal[] { BigDecimal.valueOf(256),
-						BigDecimal.valueOf(64), BigDecimal.valueOf(32),
-						BigDecimal.valueOf(16), BigDecimal.valueOf(8),
-						BigDecimal.valueOf(4), BigDecimal.valueOf(2) })
-				.doubleValue() == 128);
-		// /10 (*0.1) missing number 1
-		assertTrue(FindMissingNumber.findMultiplicationPattern(
-				new BigDecimal[] { BigDecimal.valueOf(10000),
-						BigDecimal.valueOf(1000), BigDecimal.valueOf(100),
-						BigDecimal.valueOf(10), BigDecimal.valueOf(0.1),
-						BigDecimal.valueOf(0.01) }).doubleValue() == 1);
-
-		// Not valid
-		// Not in pattern.
-		assertTrue(FindMissingNumber.findMultiplicationPattern(new BigDecimal[] {
-				BigDecimal.valueOf(111.2), BigDecimal.valueOf(3323),
-				BigDecimal.valueOf(234.434), BigDecimal.valueOf(44343),
-				BigDecimal.valueOf(434) }) == null);
-		assertTrue(FindMissingNumber.findMultiplicationPattern(new BigDecimal[] {
-				BigDecimal.valueOf(1), BigDecimal.valueOf(2),
-				BigDecimal.valueOf(3), BigDecimal.valueOf(4),
-				BigDecimal.valueOf(5), BigDecimal.valueOf(6),
-				BigDecimal.valueOf(7), BigDecimal.valueOf(5),
-				BigDecimal.valueOf(4), BigDecimal.valueOf(3),
-				BigDecimal.valueOf(2), BigDecimal.valueOf(1),
-				BigDecimal.valueOf(1), BigDecimal.valueOf(1) }) == null);
-	}
-}

Modified: 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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/PatternSolverDRLTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -3,9 +3,9 @@
 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;
+import org.drools.verifier.components.SubPattern;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 
 /**
  * 
@@ -26,7 +26,7 @@
 		rule.append("       order.setOrderDiscount( 6.0 ); ");
 		rule.append("end");
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(
 				new ByteArrayInputStream(rule.toString().getBytes()), result
 						.getVerifierData());
@@ -36,8 +36,8 @@
 		// 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 (o instanceof SubPattern) {
+				SubPattern pp = (SubPattern) o;
 				if (pp.getItems().size() == 2) {
 
 					patternCount++;

Deleted: 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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/PatternSolverTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,373 +0,0 @@
-package org.drools.verifier;
-
-import java.util.List;
-import java.util.Set;
-
-import junit.framework.TestCase;
-
-import org.drools.verifier.components.LiteralRestriction;
-import org.drools.verifier.components.OperatorDescr;
-import org.drools.verifier.components.Pattern;
-import org.drools.verifier.components.VerifierComponent;
-
-/**
- * 
- * @author Toni Rikkola
- * 
- */
-public class PatternSolverTest extends TestCase {
-
-	/**
-	 * <pre>
-	 *      and
-	 *     /   \
-	 *  descr  descr2
-	 * </pre>
-	 * 
-	 * result:<br>
-	 * descr && descr2
-	 */
-	public void testAddBasicAnd() {
-		Pattern pattern = new Pattern();
-
-		LiteralRestriction literalRestriction = new LiteralRestriction();
-		LiteralRestriction literalRestriction2 = new LiteralRestriction();
-
-		PatternSolver solver = new PatternSolver(pattern);
-
-		solver.addOperator(OperatorDescr.Type.AND);
-		solver.add(literalRestriction);
-		solver.add(literalRestriction2);
-		solver.end();
-
-		List<Set<VerifierComponent>> list = solver.getPossibilityLists();
-		assertEquals(1, list.size());
-		assertEquals(2, list.get(0).size());
-	}
-
-	/**
-	 * <pre>
-	 *       or
-	 *      /  \
-	 *  descr descr2
-	 * </pre>
-	 * 
-	 * result:<br>
-	 * descr<br>
-	 * or<br>
-	 * descr2
-	 */
-	public void testAddBasicOr() {
-		Pattern pattern = new Pattern();
-
-		LiteralRestriction literalRestriction = new LiteralRestriction();
-		LiteralRestriction literalRestriction2 = new LiteralRestriction();
-
-		PatternSolver solver = new PatternSolver(pattern);
-
-		solver.addOperator(OperatorDescr.Type.OR);
-		solver.add(literalRestriction);
-		solver.add(literalRestriction2);
-		solver.end();
-
-		List<Set<VerifierComponent>> list = solver.getPossibilityLists();
-		assertEquals(2, list.size());
-		assertEquals(1, list.get(0).size());
-		assertEquals(1, list.get(1).size());
-	}
-
-	/**
-	 * <pre>
-	 *       or
-	 *      /  \
-	 *  descr  and
-	 *         / \
-	 *    descr2 descr3
-	 * </pre>
-	 * 
-	 * result:<br>
-	 * descr <br>
-	 * or<br>
-	 * descr2 && descr3
-	 */
-	public void testAddOrAnd() {
-		Pattern pattern = new Pattern();
-
-		LiteralRestriction literalRestriction = new LiteralRestriction();
-		LiteralRestriction literalRestriction2 = new LiteralRestriction();
-		LiteralRestriction literalRestriction3 = new LiteralRestriction();
-
-		PatternSolver solver = new PatternSolver(pattern);
-
-		solver.addOperator(OperatorDescr.Type.OR);
-		solver.add(literalRestriction);
-		solver.addOperator(OperatorDescr.Type.AND);
-		solver.add(literalRestriction2);
-		solver.add(literalRestriction3);
-		solver.end();
-		solver.end();
-
-		List<Set<VerifierComponent>> list = solver.getPossibilityLists();
-		assertEquals(2, list.size());
-
-		assertEquals(1, list.get(0).size());
-		assertTrue(list.get(0).contains(literalRestriction));
-
-		assertEquals(2, list.get(1).size());
-		assertTrue(list.get(1).contains(literalRestriction2));
-		assertTrue(list.get(1).contains(literalRestriction3));
-	}
-
-	/**
-	 * <pre>
-	 *       and
-	 *      /  \
-	 *  descr   or
-	 *         / \
-	 *    descr2 descr3
-	 * </pre>
-	 * 
-	 * result:<br>
-	 * descr && descr2 <br>
-	 * or<br>
-	 * descr && descr3
-	 */
-	public void testAddAndOr() {
-		Pattern pattern = new Pattern();
-
-		LiteralRestriction literalRestriction = new LiteralRestriction();
-		LiteralRestriction literalRestriction2 = new LiteralRestriction();
-		LiteralRestriction literalRestriction3 = new LiteralRestriction();
-
-		PatternSolver solver = new PatternSolver(pattern);
-
-		solver.addOperator(OperatorDescr.Type.AND);
-		solver.add(literalRestriction);
-		solver.addOperator(OperatorDescr.Type.OR);
-		solver.add(literalRestriction2);
-		solver.add(literalRestriction3);
-		solver.end();
-		solver.end();
-
-		List<Set<VerifierComponent>> list = solver.getPossibilityLists();
-		assertEquals(2, list.size());
-
-		assertEquals(2, list.get(0).size());
-		assertTrue(list.get(0).contains(literalRestriction));
-		assertTrue(list.get(0).contains(literalRestriction2));
-
-		assertEquals(2, list.get(1).size());
-		assertTrue(list.get(1).contains(literalRestriction));
-		assertTrue(list.get(1).contains(literalRestriction3));
-	}
-
-	/**
-	 * <pre>
-	 *            and
-	 *         /        \
-	 *       or          or
-	 *      /  \         / \
-	 * descr descr2 descr3 descr4
-	 * </pre>
-	 * 
-	 * result:<br>
-	 * descr && descr3<br>
-	 * or<br>
-	 * descr && descr4<br>
-	 * or<br>
-	 * descr2 && descr3<br>
-	 * or<br>
-	 * descr2 && descr4
-	 */
-	public void testAddAndOrOr() {
-		Pattern pattern = new Pattern();
-
-		LiteralRestriction literalRestriction = new LiteralRestriction();
-		LiteralRestriction literalRestriction2 = new LiteralRestriction();
-		LiteralRestriction literalRestriction3 = new LiteralRestriction();
-		LiteralRestriction literalRestriction4 = new LiteralRestriction();
-
-		PatternSolver solver = new PatternSolver(pattern);
-
-		solver.addOperator(OperatorDescr.Type.AND);
-		solver.addOperator(OperatorDescr.Type.OR);
-		solver.add(literalRestriction);
-		solver.add(literalRestriction2);
-		solver.end();
-		solver.addOperator(OperatorDescr.Type.OR);
-		solver.add(literalRestriction3);
-		solver.add(literalRestriction4);
-		solver.end();
-		solver.end();
-
-		List<Set<VerifierComponent>> list = solver.getPossibilityLists();
-		assertEquals(4, list.size());
-
-		assertEquals(2, list.get(0).size());
-		assertTrue(list.get(0).contains(literalRestriction));
-		assertTrue(list.get(0).contains(literalRestriction3));
-
-		assertEquals(2, list.get(1).size());
-		assertTrue(list.get(1).contains(literalRestriction));
-		assertTrue(list.get(1).contains(literalRestriction4));
-
-		assertEquals(2, list.get(2).size());
-		assertTrue(list.get(2).contains(literalRestriction2));
-		assertTrue(list.get(2).contains(literalRestriction3));
-
-		assertEquals(2, list.get(3).size());
-		assertTrue(list.get(3).contains(literalRestriction2));
-		assertTrue(list.get(3).contains(literalRestriction4));
-	}
-
-	/**
-	 * <pre>
-	 *             or
-	 *         /        \
-	 *       and         and
-	 *      /  \         / \
-	 * descr descr2 descr3 descr4
-	 * </pre>
-	 * 
-	 * result:<br>
-	 * descr && descr2<br>
-	 * or<br>
-	 * descr3 && descr4
-	 */
-	public void testAddOrAndAnd() {
-		Pattern pattern = new Pattern();
-
-		LiteralRestriction literalRestriction = new LiteralRestriction();
-		LiteralRestriction literalRestriction2 = new LiteralRestriction();
-		LiteralRestriction literalRestriction3 = new LiteralRestriction();
-		LiteralRestriction literalRestriction4 = new LiteralRestriction();
-
-		PatternSolver solver = new PatternSolver(pattern);
-
-		solver.addOperator(OperatorDescr.Type.OR);
-		solver.addOperator(OperatorDescr.Type.AND);
-		solver.add(literalRestriction);
-		solver.add(literalRestriction2);
-		solver.end();
-		solver.addOperator(OperatorDescr.Type.AND);
-		solver.add(literalRestriction3);
-		solver.add(literalRestriction4);
-		solver.end();
-		solver.end();
-
-		List<Set<VerifierComponent>> list = solver.getPossibilityLists();
-		assertEquals(2, list.size());
-
-		assertEquals(2, list.get(0).size());
-		assertTrue(list.get(0).contains(literalRestriction));
-		assertTrue(list.get(0).contains(literalRestriction2));
-
-		assertEquals(2, list.get(1).size());
-		assertTrue(list.get(1).contains(literalRestriction3));
-		assertTrue(list.get(1).contains(literalRestriction4));
-	}
-
-	/**
-	 * <pre>
-	 *             or
-	 *         /        \
-	 *       and         or
-	 *      /  \         / \
-	 * descr descr2 descr3 descr4
-	 * </pre>
-	 * 
-	 * result:<br>
-	 * descr && descr2<br>
-	 * or<br>
-	 * descr3<br>
-	 * or<br>
-	 * descr4
-	 */
-	public void testAddOrAndOr() {
-		Pattern pattern = new Pattern();
-
-		LiteralRestriction literalRestriction = new LiteralRestriction();
-		LiteralRestriction literalRestriction2 = new LiteralRestriction();
-		LiteralRestriction literalRestriction3 = new LiteralRestriction();
-		LiteralRestriction literalRestriction4 = new LiteralRestriction();
-
-		PatternSolver solver = new PatternSolver(pattern);
-
-		solver.addOperator(OperatorDescr.Type.OR);
-		solver.addOperator(OperatorDescr.Type.AND);
-		solver.add(literalRestriction);
-		solver.add(literalRestriction2);
-		solver.end();
-		solver.addOperator(OperatorDescr.Type.OR);
-		solver.add(literalRestriction3);
-		solver.add(literalRestriction4);
-		solver.end();
-		solver.end();
-
-		List<Set<VerifierComponent>> list = solver.getPossibilityLists();
-		assertEquals(3, list.size());
-
-		assertEquals(2, list.get(0).size());
-		assertTrue(list.get(0).contains(literalRestriction));
-		assertTrue(list.get(0).contains(literalRestriction2));
-
-		assertEquals(1, list.get(1).size());
-		assertTrue(list.get(1).contains(literalRestriction3));
-
-		assertEquals(1, list.get(2).size());
-		assertTrue(list.get(2).contains(literalRestriction4));
-	}
-
-	/**
-	 * <pre>
-	 *                   and
-	 *          /         |      \
-	 *       and         or       descr5
-	 *      /  \         / \
-	 * descr descr2 descr3 descr4
-	 * </pre>
-	 * 
-	 * result:<br>
-	 * descr && descr2 && descr3 && descr5<br>
-	 * or<br>
-	 * descr && descr2 && descr4 && descr5<br>
-	 */
-	public void testAddOrAndOrDescr() {
-		Pattern pattern = new Pattern();
-
-		LiteralRestriction literalRestriction = new LiteralRestriction();
-		LiteralRestriction literalRestriction2 = new LiteralRestriction();
-		LiteralRestriction literalRestriction3 = new LiteralRestriction();
-		LiteralRestriction literalRestriction4 = new LiteralRestriction();
-		LiteralRestriction literalRestriction5 = new LiteralRestriction();
-
-		PatternSolver solver = new PatternSolver(pattern);
-
-		solver.addOperator(OperatorDescr.Type.AND);
-		solver.addOperator(OperatorDescr.Type.AND);
-		solver.add(literalRestriction);
-		solver.add(literalRestriction2);
-		solver.end();
-		solver.addOperator(OperatorDescr.Type.OR);
-		solver.add(literalRestriction3);
-		solver.add(literalRestriction4);
-		solver.end();
-		solver.add(literalRestriction5);
-		solver.end();
-
-		List<Set<VerifierComponent>> list = solver.getPossibilityLists();
-		assertEquals(2, list.size());
-
-		assertEquals(4, list.get(0).size());
-		assertTrue(list.get(0).contains(literalRestriction));
-		assertTrue(list.get(0).contains(literalRestriction2));
-		assertTrue(list.get(0).contains(literalRestriction3));
-		assertTrue(list.get(0).contains(literalRestriction5));
-
-		assertEquals(4, list.get(1).size());
-		assertTrue(list.get(1).contains(literalRestriction));
-		assertTrue(list.get(1).contains(literalRestriction2));
-		assertTrue(list.get(1).contains(literalRestriction4));
-		assertTrue(list.get(1).contains(literalRestriction4));
-	}
-}

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/RangeCheckDatesTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/RangeCheckDatesTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/RangeCheckDatesTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -8,8 +8,8 @@
 import org.drools.StatelessSession;
 import org.drools.StatelessSessionResult;
 import org.drools.base.RuleNameMatchesAgendaFilter;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 import org.drools.verifier.report.components.Gap;
 
 /**
@@ -30,7 +30,7 @@
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Range check for dates, if smaller than or equal is missing"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("MissingRangesForDates.drl"), result
 				.getVerifierData());
@@ -68,7 +68,7 @@
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Range check for dates, if greater than or equal is missing"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("MissingRangesForDates.drl"), result
 				.getVerifierData());
@@ -106,7 +106,7 @@
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Range check for dates, equal and greater than"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("MissingRangesForDates.drl"), result
 				.getVerifierData());
@@ -145,7 +145,7 @@
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Range check for dates, equal and smaller than"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("MissingRangesForDates.drl"), result
 				.getVerifierData());

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/RangeCheckDoublesTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/RangeCheckDoublesTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/RangeCheckDoublesTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -8,8 +8,8 @@
 import org.drools.StatelessSession;
 import org.drools.StatelessSessionResult;
 import org.drools.base.RuleNameMatchesAgendaFilter;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 import org.drools.verifier.report.components.Gap;
 
 /**
@@ -27,7 +27,7 @@
 				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 						"Range check for doubles, if smaller than or equal is missing"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("MissingRangesForDoubles.drl"), result
 				.getVerifierData());
@@ -66,7 +66,7 @@
 				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 						"Range check for doubles, if greater than or equal is missing"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("MissingRangesForDoubles.drl"), result
 				.getVerifierData());
@@ -104,7 +104,7 @@
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Range check for doubles, equal and greater than"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("MissingRangesForDoubles.drl"), result
 				.getVerifierData());
@@ -144,7 +144,7 @@
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Range check for doubles, equal and smaller than"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("MissingRangesForDoubles.drl"), result
 				.getVerifierData());

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/RangeCheckIntegersTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/RangeCheckIntegersTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/RangeCheckIntegersTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -8,8 +8,8 @@
 import org.drools.StatelessSession;
 import org.drools.StatelessSessionResult;
 import org.drools.base.RuleNameMatchesAgendaFilter;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 import org.drools.verifier.report.components.Gap;
 
 /**
@@ -27,7 +27,7 @@
 				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 						"Range check for integers, if smaller than or equal is missing"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("MissingRangesForInts.drl"), result
 				.getVerifierData());
@@ -66,7 +66,7 @@
 				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 						"Range check for integers, if greater than or equal is missing"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("MissingRangesForInts.drl"), result
 				.getVerifierData());
@@ -104,7 +104,7 @@
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Range check for integers, equal and greater than"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("MissingRangesForInts.drl"), result
 				.getVerifierData());
@@ -143,7 +143,7 @@
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Range check for integers, equal and smaller than"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("MissingRangesForInts.drl"), result
 				.getVerifierData());

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/SolversTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -9,11 +9,12 @@
 import org.drools.verifier.components.LiteralRestriction;
 import org.drools.verifier.components.OperatorDescr;
 import org.drools.verifier.components.Pattern;
-import org.drools.verifier.components.PatternPossibility;
+import org.drools.verifier.components.SubPattern;
 import org.drools.verifier.components.Restriction;
-import org.drools.verifier.components.RulePossibility;
+import org.drools.verifier.components.SubRule;
 import org.drools.verifier.components.VerifierRule;
 import org.drools.verifier.report.components.Cause;
+import org.drools.verifier.solver.Solvers;
 
 /**
  * 
@@ -69,7 +70,7 @@
 
 		solvers.endRuleSolver();
 
-		List<RulePossibility> list = solvers.getRulePossibilities();
+		List<SubRule> list = solvers.getRulePossibilities();
 		assertEquals(1, list.size());
 		assertEquals(2, list.get(0).getItems().size());
 
@@ -82,8 +83,8 @@
 		result2.add(r4);
 
 		Object[] possibilies = list.get(0).getItems().toArray();
-		PatternPossibility p1 = (PatternPossibility) possibilies[0];
-		PatternPossibility p2 = (PatternPossibility) possibilies[1];
+		SubPattern p1 = (SubPattern) possibilies[0];
+		SubPattern p2 = (SubPattern) possibilies[1];
 
 		/*
 		 * Order may change but it doesn't matter.
@@ -125,7 +126,7 @@
 		solvers.endPatternSolver();
 		solvers.endRuleSolver();
 
-		List<RulePossibility> list = solvers.getRulePossibilities();
+		List<SubRule> list = solvers.getRulePossibilities();
 		assertEquals(1, list.size());
 		assertEquals(1, list.get(0).getItems().size());
 
@@ -135,7 +136,7 @@
 
 		Set<Cause> set = list.get(0).getItems();
 		for (Cause cause : set) {
-			PatternPossibility possibility = (PatternPossibility) cause;
+			SubPattern possibility = (SubPattern) cause;
 			assertTrue(possibility.getItems().containsAll(result));
 		}
 	}

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/SubsumptantPossibilitiesRuleTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/SubsumptantPossibilitiesRuleTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/SubsumptantPossibilitiesRuleTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -12,221 +12,245 @@
 import org.drools.StatelessSessionResult;
 import org.drools.base.RuleNameMatchesAgendaFilter;
 import org.drools.verifier.components.LiteralRestriction;
-import org.drools.verifier.components.PatternPossibility;
-import org.drools.verifier.components.RulePossibility;
-import org.drools.verifier.components.VerifierComponent;
+import org.drools.verifier.components.SubPattern;
+import org.drools.verifier.components.RuleComponent;
+import org.drools.verifier.components.SubRule;
 import org.drools.verifier.report.components.PartialRedundancy;
 import org.drools.verifier.report.components.Redundancy;
 import org.drools.verifier.report.components.Subsumption;
 
 public class SubsumptantPossibilitiesRuleTest extends TestBase {
 
-	private static final String RULE_NAME = "Find subsumptant Possibilities";
+    private static final String RULE_NAME = "Find subsumptant Possibilities";
 
-	public void testFake() {
-		assertTrue(true);
-	}
+    public void testFake() {
+        assertTrue( true );
+    }
 
-	public void fixmetestSubsumptantPossibilitiesPattern() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("redundancy/Possibilities.drl"));
+    public void fixmetestSubsumptantPossibilitiesPattern() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "redundancy/Possibilities.drl" ) );
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(RULE_NAME));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( RULE_NAME ) );
 
-		String ruleName1 = "Rule 1";
-		String ruleName2 = "Rule 2";
+        String ruleName1 = "Rule 1";
+        String ruleName2 = "Rule 2";
 
-		StatelessSessionResult sessionResult = session
-				.executeWithResults(createSubsumptantPatternData(ruleName1,
-						ruleName2));
+        StatelessSessionResult sessionResult = session.executeWithResults( createSubsumptantPatternData( ruleName1,
+                                                                                                         ruleName2 ) );
 
-		Map<String, Set<String>> map = createSubsumptionMap(sessionResult
-				.iterateObjects());
+        Map<String, Set<String>> map = createSubsumptionMap( sessionResult.iterateObjects() );
 
-		assertTrue(TestBase.mapContains(map, ruleName2, ruleName1));
+        assertTrue( TestBase.mapContains( map,
+                                          ruleName2,
+                                          ruleName1 ) );
 
-		if (!map.isEmpty()) {
-			fail("More subsumpt cases than was expected.");
-		}
-	}
+        if ( !map.isEmpty() ) {
+            fail( "More subsumpt cases than was expected." );
+        }
+    }
 
-	public void fixmetestSubsumptantPossibilitiesRule() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("redundancy/Possibilities.drl"));
+    public void fixmetestSubsumptantPossibilitiesRule() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "redundancy/Possibilities.drl" ) );
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(RULE_NAME));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( RULE_NAME ) );
 
-		String ruleName1 = "Rule 1";
-		String ruleName2 = "Rule 2";
+        String ruleName1 = "Rule 1";
+        String ruleName2 = "Rule 2";
 
-		StatelessSessionResult sessionResult = session
-				.executeWithResults(createSubsumptantRuleData(ruleName1,
-						ruleName2));
+        StatelessSessionResult sessionResult = session.executeWithResults( createSubsumptantRuleData( ruleName1,
+                                                                                                      ruleName2 ) );
 
-		Map<String, Set<String>> map = createSubsumptionMap(sessionResult
-				.iterateObjects());
+        Map<String, Set<String>> map = createSubsumptionMap( sessionResult.iterateObjects() );
 
-		assertTrue(TestBase.mapContains(map, ruleName2, ruleName1));
+        assertTrue( TestBase.mapContains( map,
+                                          ruleName2,
+                                          ruleName1 ) );
 
-		if (!map.isEmpty()) {
-			fail("More subsumpt cases than was expected.");
-		}
-	}
+        if ( !map.isEmpty() ) {
+            fail( "More subsumpt cases than was expected." );
+        }
+    }
 
-	public void fixmetestSubsumptantPossibilitiesBoth() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("redundancy/Possibilities.drl"));
+    public void fixmetestSubsumptantPossibilitiesBoth() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "redundancy/Possibilities.drl" ) );
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(RULE_NAME));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( RULE_NAME ) );
 
-		String ruleName1 = "Rule 1";
-		String ruleName2 = "Rule 2";
-		String ruleName3 = "Rule 3";
-		String ruleName4 = "Rule 4";
-		String ruleName5 = "Rule 5";
-		String ruleName6 = "Rule 6";
-		String ruleName7 = "Rule 7";
-		String ruleName8 = "Rule 8";
-		String ruleName9 = "Rule 9";
-		String ruleName10 = "Rule 10";
-		String ruleName11 = "Rule 11";
-		String ruleName12 = "Rule 12";
+        String ruleName1 = "Rule 1";
+        String ruleName2 = "Rule 2";
+        String ruleName3 = "Rule 3";
+        String ruleName4 = "Rule 4";
+        String ruleName5 = "Rule 5";
+        String ruleName6 = "Rule 6";
+        String ruleName7 = "Rule 7";
+        String ruleName8 = "Rule 8";
+        String ruleName9 = "Rule 9";
+        String ruleName10 = "Rule 10";
+        String ruleName11 = "Rule 11";
+        String ruleName12 = "Rule 12";
 
-		// Rule data
-		Collection<Object> data = createSubsumptantRuleData(ruleName1,
-				ruleName2);
-		data.addAll(createSubsumptantRuleData(ruleName3, ruleName4));
-		data.addAll(createSubsumptantRuleData(ruleName5, ruleName6));
+        // Rule data
+        Collection<Object> data = createSubsumptantRuleData( ruleName1,
+                                                             ruleName2 );
+        data.addAll( createSubsumptantRuleData( ruleName3,
+                                                ruleName4 ) );
+        data.addAll( createSubsumptantRuleData( ruleName5,
+                                                ruleName6 ) );
 
-		// Pattern data.
-		data.addAll(createSubsumptantPatternData(ruleName7, ruleName8));
-		data.addAll(createSubsumptantPatternData(ruleName9, ruleName10));
-		data.addAll(createSubsumptantPatternData(ruleName11, ruleName12));
+        // Pattern data.
+        data.addAll( createSubsumptantPatternData( ruleName7,
+                                                   ruleName8 ) );
+        data.addAll( createSubsumptantPatternData( ruleName9,
+                                                   ruleName10 ) );
+        data.addAll( createSubsumptantPatternData( ruleName11,
+                                                   ruleName12 ) );
 
-		StatelessSessionResult sessionResult = session.executeWithResults(data);
+        StatelessSessionResult sessionResult = session.executeWithResults( data );
 
-		Map<String, Set<String>> map = createSubsumptionMap(sessionResult
-				.iterateObjects());
+        Map<String, Set<String>> map = createSubsumptionMap( sessionResult.iterateObjects() );
 
-		assertTrue(TestBase.mapContains(map, ruleName2, ruleName1));
-		assertTrue(TestBase.mapContains(map, ruleName4, ruleName3));
-		assertTrue(TestBase.mapContains(map, ruleName6, ruleName5));
+        assertTrue( TestBase.mapContains( map,
+                                          ruleName2,
+                                          ruleName1 ) );
+        assertTrue( TestBase.mapContains( map,
+                                          ruleName4,
+                                          ruleName3 ) );
+        assertTrue( TestBase.mapContains( map,
+                                          ruleName6,
+                                          ruleName5 ) );
 
-		assertTrue(TestBase.mapContains(map, ruleName8, ruleName7));
-		assertTrue(TestBase.mapContains(map, ruleName10, ruleName9));
-		assertTrue(TestBase.mapContains(map, ruleName12, ruleName11));
+        assertTrue( TestBase.mapContains( map,
+                                          ruleName8,
+                                          ruleName7 ) );
+        assertTrue( TestBase.mapContains( map,
+                                          ruleName10,
+                                          ruleName9 ) );
+        assertTrue( TestBase.mapContains( map,
+                                          ruleName12,
+                                          ruleName11 ) );
 
-		if (!map.isEmpty()) {
-			fail("More subsumpt cases than was expected.");
-		}
-	}
+        if ( !map.isEmpty() ) {
+            fail( "More subsumpt cases than was expected." );
+        }
+    }
 
-	private Collection<Object> createSubsumptantPatternData(String ruleName1,
-			String ruleName2) {
+    private Collection<Object> createSubsumptantPatternData(String ruleName1,
+                                                            String ruleName2) {
 
-		Collection<Object> data = new ArrayList<Object>();
+        Collection<Object> data = new ArrayList<Object>();
 
-		LiteralRestriction lr1 = new LiteralRestriction();
-		lr1.setRuleName(ruleName1);
-		LiteralRestriction lr2 = new LiteralRestriction();
-		lr2.setRuleName(ruleName1);
+        LiteralRestriction lr1 = new LiteralRestriction();
+        lr1.setRuleName( ruleName1 );
+        LiteralRestriction lr2 = new LiteralRestriction();
+        lr2.setRuleName( ruleName1 );
 
-		PatternPossibility pp1 = new PatternPossibility();
-		pp1.setRuleName(ruleName1);
-		pp1.add(lr1);
-		pp1.add(lr2);
+        SubPattern pp1 = new SubPattern();
+        pp1.setRuleName( ruleName1 );
+        pp1.add( lr1 );
+        pp1.add( lr2 );
 
-		LiteralRestriction lr3 = new LiteralRestriction();
-		lr3.setRuleName(ruleName2);
+        LiteralRestriction lr3 = new LiteralRestriction();
+        lr3.setRuleName( ruleName2 );
 
-		PatternPossibility pp2 = new PatternPossibility();
-		pp2.setRuleName(ruleName2);
-		pp2.add(lr3);
+        SubPattern pp2 = new SubPattern();
+        pp2.setRuleName( ruleName2 );
+        pp2.add( lr3 );
 
-		Redundancy redundancy1 = new Redundancy(lr1, lr3);
+        Redundancy redundancy1 = new Redundancy( lr1,
+                                                 lr3 );
 
-		PartialRedundancy pr1 = new PartialRedundancy(pp1, pp2, redundancy1);
-		PartialRedundancy pr2 = new PartialRedundancy(pp2, pp1, redundancy1);
+        PartialRedundancy pr1 = new PartialRedundancy( pp1,
+                                                       pp2,
+                                                       redundancy1 );
+        PartialRedundancy pr2 = new PartialRedundancy( pp2,
+                                                       pp1,
+                                                       redundancy1 );
 
-		data.add(lr1);
-		data.add(lr2);
-		data.add(lr3);
-		data.add(pp1);
-		data.add(pp2);
-		data.add(redundancy1);
-		data.add(pr1);
-		data.add(pr2);
+        data.add( lr1 );
+        data.add( lr2 );
+        data.add( lr3 );
+        data.add( pp1 );
+        data.add( pp2 );
+        data.add( redundancy1 );
+        data.add( pr1 );
+        data.add( pr2 );
 
-		return data;
-	}
+        return data;
+    }
 
-	private Collection<Object> createSubsumptantRuleData(String ruleName1,
-			String ruleName2) {
+    private Collection<Object> createSubsumptantRuleData(String ruleName1,
+                                                         String ruleName2) {
 
-		Collection<Object> data = new ArrayList<Object>();
+        Collection<Object> data = new ArrayList<Object>();
 
-		PatternPossibility pp1 = new PatternPossibility();
-		pp1.setRuleName(ruleName1);
-		PatternPossibility pp2 = new PatternPossibility();
-		pp2.setRuleName(ruleName1);
+        SubPattern pp1 = new SubPattern();
+        pp1.setRuleName( ruleName1 );
+        SubPattern pp2 = new SubPattern();
+        pp2.setRuleName( ruleName1 );
 
-		RulePossibility rp1 = new RulePossibility();
-		rp1.setRuleName(ruleName1);
-		rp1.add(pp1);
-		rp1.add(pp2);
+        SubRule rp1 = new SubRule();
+        rp1.setRuleName( ruleName1 );
+        rp1.add( pp1 );
+        rp1.add( pp2 );
 
-		PatternPossibility pp3 = new PatternPossibility();
-		pp3.setRuleName(ruleName2);
+        SubPattern pp3 = new SubPattern();
+        pp3.setRuleName( ruleName2 );
 
-		RulePossibility rp2 = new RulePossibility();
-		rp2.setRuleName(ruleName2);
-		rp2.add(pp3);
+        SubRule rp2 = new SubRule();
+        rp2.setRuleName( ruleName2 );
+        rp2.add( pp3 );
 
-		Redundancy redundancy1 = new Redundancy(pp1, pp3);
+        Redundancy redundancy1 = new Redundancy( pp1,
+                                                 pp3 );
 
-		PartialRedundancy pr1 = new PartialRedundancy(rp1, rp2, redundancy1);
-		PartialRedundancy pr2 = new PartialRedundancy(rp2, rp1, redundancy1);
+        PartialRedundancy pr1 = new PartialRedundancy( rp1,
+                                                       rp2,
+                                                       redundancy1 );
+        PartialRedundancy pr2 = new PartialRedundancy( rp2,
+                                                       rp1,
+                                                       redundancy1 );
 
-		data.add(pp1);
-		data.add(pp2);
-		data.add(rp1);
-		data.add(pp3);
-		data.add(rp2);
-		data.add(redundancy1);
-		data.add(pr1);
-		data.add(pr2);
+        data.add( pp1 );
+        data.add( pp2 );
+        data.add( rp1 );
+        data.add( pp3 );
+        data.add( rp2 );
+        data.add( redundancy1 );
+        data.add( pr1 );
+        data.add( pr2 );
 
-		return data;
-	}
+        return data;
+    }
 
-	/**
-	 * Creates redundancy map from Redundancy objects, one rule may have several
-	 * redundancy dependencies.
-	 * 
-	 * @param iter
-	 * @return
-	 */
-	private Map<String, Set<String>> createSubsumptionMap(Iterator iter) {
+    /**
+     * Creates redundancy map from Redundancy objects, one rule may have several
+     * redundancy dependencies.
+     * 
+     * @param iter
+     * @return
+     */
+    private Map<String, Set<String>> createSubsumptionMap(Iterator iter) {
 
-		Map<String, Set<String>> map = new HashMap<String, Set<String>>();
-		while (iter.hasNext()) {
-			Object o = (Object) iter.next();
-			if (o instanceof Subsumption) {
-				Subsumption s = (Subsumption) o;
-				VerifierComponent left = (VerifierComponent) s.getLeft();
-				VerifierComponent right = (VerifierComponent) s.getRight();
+        Map<String, Set<String>> map = new HashMap<String, Set<String>>();
+        while ( iter.hasNext() ) {
+            Object o = (Object) iter.next();
+            if ( o instanceof Subsumption ) {
+                Subsumption s = (Subsumption) o;
+                RuleComponent left = (RuleComponent) s.getLeft();
+                RuleComponent right = (RuleComponent) s.getRight();
 
-				if (map.containsKey(left.getRuleName())) {
-					Set<String> set = map.get(left.getRuleName());
-					set.add(right.getRuleName());
-				} else {
-					Set<String> set = new HashSet<String>();
-					set.add(right.getRuleName());
-					map.put(left.getRuleName(), set);
-				}
-			}
-		}
+                if ( map.containsKey( left.getRuleName() ) ) {
+                    Set<String> set = map.get( left.getRuleName() );
+                    set.add( right.getRuleName() );
+                } else {
+                    Set<String> set = new HashSet<String>();
+                    set.add( right.getRuleName() );
+                    map.put( left.getRuleName(),
+                             set );
+                }
+            }
+        }
 
-		return map;
-	}
+        return map;
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/TestBase.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/TestBase.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/TestBase.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -16,7 +16,8 @@
 import org.drools.compiler.PackageBuilder;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.rule.Package;
-import org.drools.verifier.dao.VerifierData;
+import org.drools.verifier.data.VerifierData;
+import org.drools.verifier.misc.PackageDescrVisitor;
 import org.drools.verifier.report.components.Cause;
 
 /**
@@ -108,7 +109,7 @@
         Reader drlReader = new InputStreamReader( stream );
         PackageDescr descr = new DrlParser().parse( drlReader );
 
-        PackageDescrFlattener ruleFlattener = new PackageDescrFlattener();
+        PackageDescrVisitor ruleFlattener = new PackageDescrVisitor();
 
         ruleFlattener.addPackageDescrToData( descr,
                                              data );

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,51 +1,40 @@
 package org.drools.verifier;
 
-import java.io.InputStreamReader;
-
 import junit.framework.TestCase;
 
-import org.drools.RuleBase;
-import org.drools.compiler.DrlParser;
-import org.drools.lang.descr.PackageDescr;
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.builder.ResourceType;
+import org.drools.io.impl.ClassPathResource;
+import org.drools.verifier.builder.VerifierBuilder;
+import org.drools.verifier.builder.VerifierBuilderFactory;
+import org.drools.verifier.data.VerifierReport;
 import org.drools.verifier.report.components.Severity;
+import org.drools.verifier.report.components.VerifierMessageBase;
 
 public class VerifierTest extends TestCase {
 
-    public void testAnalyzer() throws Exception {
-        Verifier anal = new Verifier();
+    public void testVerifier() {
+        VerifierBuilder vBuilder = VerifierBuilderFactory.newVerifierBuilder();
 
-        DrlParser p = new DrlParser();
-        InputStreamReader reader = new InputStreamReader( this.getClass().getResourceAsStream( "Misc3.drl" ) );
-        PackageDescr pkg = p.parse( reader );
-        assertFalse( p.hasErrors() );
+        // Check that the builder works.
+        assertFalse( vBuilder.hasErrors() );
+        assertEquals( 0,
+                      vBuilder.getErrors().size() );
 
-        anal.addPackageDescr( pkg );
-        assertTrue( "Firing verifier failed.",
-                    anal.fireAnalysis() );
+        Verifier verifier = vBuilder.newVerifier();
 
-        VerifierResult result = anal.getResult();
-        assertNotNull( result );
+        verifier.addResourcesToVerify( new ClassPathResource( "Misc3.drl",
+                                                              Verifier.class ),
+                                       ResourceType.DRL );
+
+        assertFalse( verifier.hasErrors() );
         assertEquals( 0,
-                      result.getBySeverity( Severity.ERROR ).size() );
-        assertEquals( 10,
-                      result.getBySeverity( Severity.WARNING ).size() );
-        assertEquals( 16,
-                      result.getBySeverity( Severity.NOTE ).size() );
+                      verifier.getErrors().size() );
 
-        //check it again
-        anal = new Verifier();
+        boolean works = verifier.fireAnalysis();
 
-        p = new DrlParser();
-        reader = new InputStreamReader( this.getClass().getResourceAsStream( "Misc3.drl" ) );
-        pkg = p.parse( reader );
-        assertFalse( p.hasErrors() );
+        assertTrue( works );
 
-        anal.addPackageDescr( pkg );
-        assertTrue( "Firing verifier failed.",
-                    anal.fireAnalysis() );
-
-        result = anal.getResult();
+        VerifierReport result = verifier.getResult();
         assertNotNull( result );
         assertEquals( 0,
                       result.getBySeverity( Severity.ERROR ).size() );
@@ -56,32 +45,47 @@
 
     }
 
-    public void testCacheKnowledgeBase() throws Exception {
-        Verifier anal = new Verifier();
-        DrlParser p = new DrlParser();
-        InputStreamReader reader = new InputStreamReader( this.getClass().getResourceAsStream( "Misc3.drl" ) );
-        PackageDescr pkg = p.parse( reader );
-        assertFalse( p.hasErrors() );
+    public void testCustomRule() {
 
-        anal.addPackageDescr( pkg );
-        anal.fireAnalysis();
+        VerifierBuilder vBuilder = VerifierBuilderFactory.newVerifierBuilder();
 
-        RuleBase original = Verifier.verifierKnowledgeBase;
+        VerifierConfiguration vConfiguration = vBuilder.newVerifierConfiguration();
 
-        Verifier anal2 = new Verifier();
+        // Check that the builder works.
+        assertFalse( vBuilder.hasErrors() );
+        assertEquals( 0,
+                      vBuilder.getErrors().size() );
 
-        assertSame( original,
-                    Verifier.verifierKnowledgeBase );
+        vConfiguration.getVerifyingResources().put( new ClassPathResource( "FindPatterns.drl",
+                                                                           Verifier.class ),
+                                                    ResourceType.DRL );
 
-        try {
-            anal2.reloadAnalysisKnowledgeBase();
-        } catch ( Exception e ) {
-            fail( "Couldn't reload the knowledge base." );
-        }
+        Verifier verifier = vBuilder.newVerifier( vConfiguration );
 
-        assertNotSame( original,
-                       Verifier.verifierKnowledgeBase );
+        verifier.addResourcesToVerify( new ClassPathResource( "Misc3.drl",
+                                                              Verifier.class ),
+                                       ResourceType.DRL );
 
+        assertFalse( verifier.hasErrors() );
+        assertEquals( 0,
+                      verifier.getErrors().size() );
+
+        boolean works = verifier.fireAnalysis();
+
+        assertTrue( works );
+
+        VerifierReport result = verifier.getResult();
+        assertNotNull( result );
+        assertEquals( 0,
+                      result.getBySeverity( Severity.ERROR ).size() );
+        assertEquals( 0,
+                      result.getBySeverity( Severity.WARNING ).size() );
+        assertEquals( 6,
+                      result.getBySeverity( Severity.NOTE ).size() );
+
+        for ( VerifierMessageBase m : result.getBySeverity( Severity.NOTE ) ) {
+            assertEquals( "This pattern was found.",
+                          m.getMessage() );
+        }
     }
-
 }

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTestStandalone.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -1,19 +1,21 @@
 package org.drools.verifier;
 
-import java.io.BufferedWriter;
-import java.io.FileWriter;
-import java.io.InputStreamReader;
+import java.io.FileOutputStream;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.Set;
 
-import org.drools.compiler.DrlParser;
-import org.drools.lang.descr.PackageDescr;
+import org.drools.builder.ResourceType;
+import org.drools.io.ResourceFactory;
+import org.drools.verifier.builder.VerifierBuilderFactory;
 import org.drools.verifier.components.Field;
 import org.drools.verifier.components.ObjectType;
+import org.drools.verifier.components.VerifierComponentType;
 import org.drools.verifier.components.VerifierRule;
-import org.drools.verifier.dao.VerifierResult;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.report.VerifierReportWriter;
+import org.drools.verifier.report.VerifierReportWriterFactory;
 import org.drools.verifier.report.components.Cause;
 import org.drools.verifier.report.components.Severity;
 import org.drools.verifier.report.components.VerifierMessage;
@@ -25,121 +27,107 @@
  */
 class VerifierTestStandalone {
 
-	public static final void main(String[] args) {
-		try {
+    public static final void main(String[] args) {
+        try {
 
-			Collection<String> fileNames = new ArrayList<String>();
+            Collection<String> fileNames = new ArrayList<String>();
 
-			// Test data
-			// fileNames.add("MissingRangesForDates.drl");
-			// fileNames.add("MissingRangesForDoubles.drl");
-			// fileNames.add("MissingRangesForInts.drl");
-			// fileNames.add("MissingRangesForVariables.drl");
-			// fileNames.add("Misc.drl");
-			// fileNames.add("Misc2.drl");
-			// fileNames.add("Misc3.drl");
-			fileNames.add("Enums.drl");
-			// fileNames.add("ConsequenceTest.drl");
-			// fileNames.add("optimisation/OptimisationRestrictionOrderTest.drl");
-			// fileNames.add("optimisation/OptimisationPatternOrderTest.drl");
+            // Test data
+            // fileNames.add("MissingRangesForDates.drl");
+            // fileNames.add("MissingRangesForDoubles.drl");
+            // fileNames.add("MissingRangesForInts.drl");
+            // fileNames.add("MissingRangesForVariables.drl");
+            // fileNames.add("Misc.drl");
+            // fileNames.add("Misc2.drl");
+            // fileNames.add("Misc3.drl");
+            fileNames.add( "Enums.drl" );
+            // fileNames.add("ConsequenceTest.drl");
+            // fileNames.add("optimisation/OptimisationRestrictionOrderTest.drl");
+            // fileNames.add("optimisation/OptimisationPatternOrderTest.drl");
 
-			DrlParser parser = new DrlParser();
-			Verifier a = new Verifier();
+            Verifier verifier = VerifierBuilderFactory.newVerifierBuilder().newVerifier();
 
-			for (String s : fileNames) {
-				PackageDescr descr = parser.parse(new InputStreamReader(
-						Verifier.class.getResourceAsStream(s)));
-				a.addPackageDescr(descr);
-			}
+            for ( String s : fileNames ) {
+                verifier.addResourcesToVerify( ResourceFactory.newClassPathResource( s,
+                                                                              Verifier.class ),
+                                        ResourceType.DRL );
+            }
 
-			a.fireAnalysis();
-			// System.out.print(a.getResultAsPlainText());
-			// System.out.print(a.getResultAsXML());
-			// a.writeComponentsHTML("/stash/");
-			// a.writeComponentsHTML("/Users/michaelneale/foo.html");
-			a.writeComponentsHTML("/home/trikkola/");
-			// a.writeComponentsHTML("c:/");
+            verifier.fireAnalysis();
+            // System.out.print(a.getResultAsPlainText());
+            // System.out.print(a.getResultAsXML());
+            // a.writeComponentsHTML("/stash/");
+            // a.writeComponentsHTML("/Users/michaelneale/foo.html");
+            //			a.writeComponentsHTML("/home/trikkola/");
+            // a.writeComponentsHTML("c:/");
 
-			VerifierResult result = a.getResult();
-			Collection<VerifierMessageBase> msgs = result
-					.getBySeverity(Severity.ERROR);
+            VerifierReport result = verifier.getResult();
 
-			for (Iterator iterator = msgs.iterator(); iterator.hasNext();) {
-				VerifierMessageBase msg = (VerifierMessageBase) iterator.next();
-				System.out.println("ERR: " + msg.getMessage());
-			}
+            VerifierReportWriter reportwriter = VerifierReportWriterFactory.newHTMLReportWriter();
+            FileOutputStream out = new FileOutputStream( "/Users/rikkola/Desktop/testReport.zip" );
 
-			msgs = result.getBySeverity(Severity.WARNING);
-			for (Iterator iterator = msgs.iterator(); iterator.hasNext();) {
-				VerifierMessageBase msg = (VerifierMessageBase) iterator.next();
-				System.out.println("WARN (" + msg.getClass().getSimpleName()
-						+ "): " + msg.getMessage());
-				System.out.println("\t FAULT: ["
-						+ msg.getClass().getSimpleName() + "] "
-						+ msg.getFaulty());
-				if (msg instanceof VerifierMessage) {
-					System.out.println("\t CAUSES (message):");
-					VerifierMessage amsg = (VerifierMessage) msg;
-					for (Iterator iterator2 = amsg.getCauses().iterator(); iterator2
-							.hasNext();) {
-						Cause c = (Cause) iterator2.next();
-						System.out.println("\t\t ["
-								+ c.getClass().getSimpleName() + "]" + c);
+            reportwriter.writeReport( out,
+                                      result );
 
-					}
+            Collection<VerifierMessageBase> msgs = result.getBySeverity( Severity.ERROR );
 
-				} else if (msg instanceof VerifierRangeCheckMessage) {
-					System.out.println("\t CAUSES (range):");
-					VerifierRangeCheckMessage amsg = (VerifierRangeCheckMessage) msg;
-					for (Iterator iterator2 = amsg.getCauses().iterator(); iterator2
-							.hasNext();) {
-						Cause c = (Cause) iterator2.next();
-						System.out.println("\t\t" + c);
+            for ( Iterator iterator = msgs.iterator(); iterator.hasNext(); ) {
+                VerifierMessageBase msg = (VerifierMessageBase) iterator.next();
+                System.out.println( "ERR: " + msg.getMessage() );
+            }
 
-					}
+            msgs = result.getBySeverity( Severity.WARNING );
+            for ( Iterator iterator = msgs.iterator(); iterator.hasNext(); ) {
+                VerifierMessageBase msg = (VerifierMessageBase) iterator.next();
+                System.out.println( "WARN (" + msg.getClass().getSimpleName() + "): " + msg.getMessage() );
+                System.out.println( "\t FAULT: [" + msg.getClass().getSimpleName() + "] " + msg.getFaulty() );
+                if ( msg instanceof VerifierMessage ) {
+                    System.out.println( "\t CAUSES (message):" );
+                    VerifierMessage amsg = (VerifierMessage) msg;
+                    for ( Iterator iterator2 = amsg.getCauses().iterator(); iterator2.hasNext(); ) {
+                        Cause c = (Cause) iterator2.next();
+                        System.out.println( "\t\t [" + c.getClass().getSimpleName() + "]" + c );
 
-				}
-			}
+                    }
 
-			msgs = result.getBySeverity(Severity.NOTE);
-			for (Iterator iterator = msgs.iterator(); iterator.hasNext();) {
-				VerifierMessageBase msg = (VerifierMessageBase) iterator.next();
-				System.out.println("NOTE: " + msg.getMessage());
-				System.out.println("\t" + msg.getFaulty());
-			}
+                } else if ( msg instanceof VerifierRangeCheckMessage ) {
+                    System.out.println( "\t CAUSES (range):" );
+                    VerifierRangeCheckMessage amsg = (VerifierRangeCheckMessage) msg;
+                    for ( Iterator iterator2 = amsg.getCauses().iterator(); iterator2.hasNext(); ) {
+                        Cause c = (Cause) iterator2.next();
+                        System.out.println( "\t\t" + c );
 
-			Collection<ObjectType> classes = result.getVerifierData()
-					.getAllObjectTypes();
-			for (Iterator iterator = classes.iterator(); iterator.hasNext();) {
-				ObjectType c = (ObjectType) iterator.next();
+                    }
 
-				Collection<VerifierRule> cr = result.getVerifierData()
-						.getRulesByObjectTypeId(c.getId());
-				System.err.println("Class rules:" + cr);
-				Set<Field> flds = c.getFields();
-				for (Iterator iterator2 = flds.iterator(); iterator2.hasNext();) {
-					Field f = (Field) iterator2.next();
-					cr = result.getVerifierData().getRulesByFieldId(f.getId());
-					System.err.println("Field rules: " + cr);
+                }
+            }
 
-				}
-			}
+            msgs = result.getBySeverity( Severity.NOTE );
+            for ( Iterator iterator = msgs.iterator(); iterator.hasNext(); ) {
+                VerifierMessageBase msg = (VerifierMessageBase) iterator.next();
+                System.out.println( "NOTE: " + msg.getMessage() );
+                System.out.println( "\t" + msg.getFaulty() );
+            }
 
-			// System.err.println(a.getResultAsPlainText());
-			// System.out.println(result.toString());
-		} catch (Throwable t) {
-			t.printStackTrace();
-		}
-	}
+            Collection<ObjectType> classes = result.getVerifierData().getAll( VerifierComponentType.OBJECT_TYPE );
+            for ( Iterator iterator = classes.iterator(); iterator.hasNext(); ) {
+                ObjectType c = (ObjectType) iterator.next();
 
-	private static void writeToFile(String fileName, String text) {
-		try {
-			FileWriter fstream = new FileWriter(fileName);
-			BufferedWriter out = new BufferedWriter(fstream);
-			out.write(text);
-			out.close();
-		} catch (Exception e) {
-			System.err.println(e.getMessage());
-		}
-	}
+                Collection<VerifierRule> cr = result.getVerifierData().getRulesByObjectTypeId( c.getGuid() );
+                System.err.println( "Class rules:" + cr );
+                Set<Field> flds = c.getFields();
+                for ( Iterator iterator2 = flds.iterator(); iterator2.hasNext(); ) {
+                    Field f = (Field) iterator2.next();
+                    cr = result.getVerifierData().getRulesByFieldId( f.getGuid() );
+                    System.err.println( "Field rules: " + cr );
+
+                }
+            }
+
+            // System.err.println(a.getResultAsPlainText());
+            // System.out.println(result.toString());
+        } catch ( Throwable t ) {
+            t.printStackTrace();
+        }
+    }
 }

Modified: 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/alwaysFalse/AlwaysFalseTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysFalse/AlwaysFalseTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -9,13 +9,13 @@
 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.SubPattern;
 import org.drools.verifier.components.Restriction;
-import org.drools.verifier.components.RulePossibility;
+import org.drools.verifier.components.SubRule;
 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.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 import org.drools.verifier.report.components.Incompatibility;
 import org.drools.verifier.report.components.Severity;
 import org.drools.verifier.report.components.VerifierMessage;
@@ -33,7 +33,7 @@
 
         session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Pattern that is always false" ) );
 
-        VerifierResult result = VerifierResultFactory.createVerifierResult();
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
         Collection<Object> data = new ArrayList<Object>();
 
         session.setGlobal( "result",
@@ -42,14 +42,14 @@
         // This pattern has an error.
         VerifierRule rule1 = new VerifierRule();
         Pattern pattern1 = new Pattern();
-        pattern1.setRuleId( rule1.getId() );
+        pattern1.setRuleGuid( rule1.getGuid() );
 
         Restriction r1 = new LiteralRestriction();
         Restriction r2 = new LiteralRestriction();
         Incompatibility i1 = new Incompatibility( r1,
                                                   r2 );
-        PatternPossibility pp1 = new PatternPossibility();
-        pp1.setPatternId( pattern1.getId() );
+        SubPattern pp1 = new SubPattern();
+        pp1.setPatternGuid( pattern1.getGuid() );
         pp1.add( r1 );
         pp1.add( r2 );
 
@@ -57,19 +57,19 @@
         Restriction r4 = new VariableRestriction();
         Incompatibility i2 = new Incompatibility( r1,
                                                   r2 );
-        PatternPossibility pp2 = new PatternPossibility();
-        pp2.setPatternId( pattern1.getId() );
+        SubPattern pp2 = new SubPattern();
+        pp2.setPatternGuid( pattern1.getGuid() );
         pp2.add( r1 );
         pp2.add( r2 );
 
         // This pattern does not have an error.
         Pattern pattern2 = new Pattern();
-        pattern2.setRuleId( rule1.getId() );
+        pattern2.setRuleGuid( rule1.getGuid() );
 
         Restriction r5 = new LiteralRestriction();
         Restriction r6 = new LiteralRestriction();
-        PatternPossibility pp3 = new PatternPossibility();
-        pp3.setPatternId( pattern2.getId() );
+        SubPattern pp3 = new SubPattern();
+        pp3.setPatternGuid( pattern2.getGuid() );
         pp3.add( r5 );
         pp3.add( r6 );
 
@@ -77,8 +77,8 @@
         Restriction r8 = new VariableRestriction();
         Incompatibility i4 = new Incompatibility( r7,
                                                   r8 );
-        PatternPossibility pp4 = new PatternPossibility();
-        pp4.setPatternId( pattern2.getId() );
+        SubPattern pp4 = new SubPattern();
+        pp4.setPatternGuid( pattern2.getGuid() );
         pp4.add( r7 );
         pp4.add( r8 );
 
@@ -147,7 +147,7 @@
 
         session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Pattern that is always false" ) );
 
-        VerifierResult result = VerifierResultFactory.createVerifierResult();
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
         Collection<Object> data = new ArrayList<Object>();
 
         session.setGlobal( "result",
@@ -156,7 +156,7 @@
         // This pattern has an error.
         VerifierRule rule1 = new VerifierRule();
         Pattern pattern1 = new Pattern();
-        pattern1.setRuleId( rule1.getId() );
+        pattern1.setRuleGuid( rule1.getGuid() );
 
         data.add( rule1 );
         data.add( pattern1 );
@@ -176,7 +176,7 @@
 
         session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Rule that is always false" ) );
 
-        VerifierResult result = VerifierResultFactory.createVerifierResult();
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
         Collection<Object> data = new ArrayList<Object>();
 
         session.setGlobal( "result",
@@ -185,40 +185,40 @@
         // This rule has an error.
         VerifierRule rule1 = new VerifierRule();
 
-        PatternPossibility pp1 = new PatternPossibility();
-        PatternPossibility pp2 = new PatternPossibility();
+        SubPattern pp1 = new SubPattern();
+        SubPattern pp2 = new SubPattern();
         Incompatibility i1 = new Incompatibility( pp1,
                                                   pp2 );
-        RulePossibility rp1 = new RulePossibility();
-        rp1.setRuleId( rule1.getId() );
+        SubRule rp1 = new SubRule();
+        rp1.setRuleGuid( rule1.getGuid() );
         rp1.add( pp1 );
         rp1.add( pp2 );
 
-        PatternPossibility pp3 = new PatternPossibility();
-        PatternPossibility pp4 = new PatternPossibility();
+        SubPattern pp3 = new SubPattern();
+        SubPattern pp4 = new SubPattern();
         Incompatibility i2 = new Incompatibility( pp1,
                                                   pp2 );
-        RulePossibility rp2 = new RulePossibility();
-        rp2.setRuleId( rule1.getId() );
+        SubRule rp2 = new SubRule();
+        rp2.setRuleGuid( rule1.getGuid() );
         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() );
+        SubPattern pp5 = new SubPattern();
+        SubPattern pp6 = new SubPattern();
+        SubRule rp3 = new SubRule();
+        rp3.setRuleGuid( rule2.getGuid() );
         rp3.add( pp5 );
         rp3.add( pp6 );
 
-        PatternPossibility pp7 = new PatternPossibility();
-        PatternPossibility pp8 = new PatternPossibility();
+        SubPattern pp7 = new SubPattern();
+        SubPattern pp8 = new SubPattern();
         Incompatibility i4 = new Incompatibility( pp7,
                                                   pp8 );
-        RulePossibility rp4 = new RulePossibility();
-        rp4.setRuleId( rule2.getId() );
+        SubRule rp4 = new SubRule();
+        rp4.setRuleGuid( rule2.getGuid() );
         rp4.add( pp7 );
         rp4.add( pp8 );
 

Modified: 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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysTrue/AlwaysTruePatternTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -10,12 +10,12 @@
 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.SubPattern;
 import org.drools.verifier.components.Restriction;
 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.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 import org.drools.verifier.report.components.AlwaysTrue;
 import org.drools.verifier.report.components.Opposites;
 import org.drools.verifier.report.components.Severity;
@@ -34,7 +34,7 @@
 
         session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Pattern possibility that is always true" ) );
 
-        VerifierResult result = VerifierResultFactory.createVerifierResult();
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
         Collection<Object> data = new ArrayList<Object>();
 
         session.setGlobal( "result",
@@ -47,8 +47,8 @@
         Restriction r2 = new LiteralRestriction();
         Opposites o1 = new Opposites( r1,
                                       r2 );
-        PatternPossibility pp1 = new PatternPossibility();
-        pp1.setPatternId( pattern1.getId() );
+        SubPattern pp1 = new SubPattern();
+        pp1.setPatternGuid( pattern1.getGuid() );
         pp1.add( r1 );
         pp1.add( r2 );
 
@@ -56,8 +56,8 @@
         Restriction r4 = new VariableRestriction();
         Opposites o2 = new Opposites( r1,
                                       r2 );
-        PatternPossibility pp2 = new PatternPossibility();
-        pp2.setPatternId( pattern1.getId() );
+        SubPattern pp2 = new SubPattern();
+        pp2.setPatternGuid( pattern1.getGuid() );
         pp2.add( r1 );
         pp2.add( r2 );
 
@@ -66,8 +66,8 @@
 
         Restriction r5 = new LiteralRestriction();
         Restriction r6 = new LiteralRestriction();
-        PatternPossibility pp3 = new PatternPossibility();
-        pp3.setPatternId( pattern2.getId() );
+        SubPattern pp3 = new SubPattern();
+        pp3.setPatternGuid( pattern2.getGuid() );
         pp3.add( r5 );
         pp3.add( r6 );
 
@@ -75,8 +75,8 @@
         Restriction r8 = new VariableRestriction();
         Opposites o4 = new Opposites( r7,
                                       r8 );
-        PatternPossibility pp4 = new PatternPossibility();
-        pp4.setPatternId( pattern2.getId() );
+        SubPattern pp4 = new SubPattern();
+        pp4.setPatternGuid( pattern2.getGuid() );
         pp4.add( r7 );
         pp4.add( r8 );
 
@@ -136,7 +136,7 @@
 
         session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Pattern that is always true" ) );
 
-        VerifierResult result = VerifierResultFactory.createVerifierResult();
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
         Collection<Object> data = new ArrayList<Object>();
 
         session.setGlobal( "result",
@@ -146,25 +146,25 @@
 
         // This pattern is always true.
         Pattern pattern1 = new Pattern();
-        pattern1.setRuleId( rule1.getId() );
+        pattern1.setRuleGuid( rule1.getGuid() );
 
-        PatternPossibility pp1 = new PatternPossibility();
-        pp1.setPatternId( pattern1.getId() );
+        SubPattern pp1 = new SubPattern();
+        pp1.setPatternGuid( pattern1.getGuid() );
         AlwaysTrue alwaysTrue1 = new AlwaysTrue( pp1 );
 
-        PatternPossibility pp2 = new PatternPossibility();
-        pp2.setPatternId( pattern1.getId() );
+        SubPattern pp2 = new SubPattern();
+        pp2.setPatternGuid( pattern1.getGuid() );
         AlwaysTrue alwaysTrue2 = new AlwaysTrue( pp2 );
 
         // This pattern is okay.
         Pattern pattern2 = new Pattern();
-        pattern2.setRuleId( rule1.getId() );
+        pattern2.setRuleGuid( rule1.getGuid() );
 
-        PatternPossibility pp3 = new PatternPossibility();
-        pp3.setPatternId( pattern2.getId() );
+        SubPattern pp3 = new SubPattern();
+        pp3.setPatternGuid( pattern2.getGuid() );
 
-        PatternPossibility pp4 = new PatternPossibility();
-        pp4.setPatternId( pattern2.getId() );
+        SubPattern pp4 = new SubPattern();
+        pp4.setPatternGuid( pattern2.getGuid() );
         AlwaysTrue alwaysTrue4 = new AlwaysTrue( pp4 );
 
         data.add( rule1 );

Modified: 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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/alwaysTrue/AlwaysTrueRuleTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -8,11 +8,11 @@
 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.SubPattern;
+import org.drools.verifier.components.SubRule;
 import org.drools.verifier.components.VerifierRule;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 import org.drools.verifier.report.components.AlwaysTrue;
 import org.drools.verifier.report.components.Severity;
 import org.drools.verifier.report.components.VerifierMessage;
@@ -25,155 +25,155 @@
  */
 public class AlwaysTrueRuleTest extends TestBase {
 
-	public void testPatternPossibilities() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Rules.drl"));
+    public void testPatternPossibilities() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Rules.drl" ) );
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Rule possibility that is always true"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Rule possibility that is always true" ) );
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
-		Collection<Object> data = new ArrayList<Object>();
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
+        Collection<Object> data = new ArrayList<Object>();
 
-		session.setGlobal("result", result);
+        session.setGlobal( "result",
+                           result );
 
-		// This rule is always true.
-		VerifierRule rule1 = new VerifierRule();
+        // 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);
+        SubRule rp1 = new SubRule();
+        SubPattern pp1 = new SubPattern();
+        pp1.setRuleGuid( rule1.getGuid() );
+        AlwaysTrue alwaysTrue1 = new AlwaysTrue( pp1 );
+        SubPattern pp2 = new SubPattern();
+        pp2.setRuleGuid( rule1.getGuid() );
+        AlwaysTrue alwaysTrue2 = new AlwaysTrue( pp2 );
 
-		rp1.add(pp1);
-		rp1.add(pp2);
+        rp1.add( pp1 );
+        rp1.add( pp2 );
 
-		// This rule is okay.
-		VerifierRule rule2 = new VerifierRule();
+        // 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);
+        SubRule rp2 = new SubRule();
+        SubPattern pp3 = new SubPattern();
+        pp3.setRuleGuid( rule2.getGuid() );
+        SubPattern pp4 = new SubPattern();
+        pp4.setRuleGuid( rule2.getGuid() );
+        AlwaysTrue alwaysTrue4 = new AlwaysTrue( pp4 );
 
-		rp2.add(pp3);
-		rp2.add(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( 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);
+        data.add( rule2 );
+        data.add( rp2 );
+        data.add( pp3 );
+        data.add( pp4 );
+        data.add( alwaysTrue4 );
 
-		StatelessSessionResult sessionResult = session.executeWithResults(data);
-		Iterator iter = sessionResult.iterateObjects();
+        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);
-				}
-			}
-		}
+        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);
-	}
+        assertTrue( rp1true );
+        assertTrue( rp2true );
+        assertFalse( rp3true );
+        assertTrue( rp4true );
+    }
 
-	public void testPatterns() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Rules.drl"));
+    public void testPatterns() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Rules.drl" ) );
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Rule that is always true"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Rule that is always true" ) );
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
-		Collection<Object> data = new ArrayList<Object>();
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
+        Collection<Object> data = new ArrayList<Object>();
 
-		session.setGlobal("result", result);
+        session.setGlobal( "result",
+                           result );
 
-		// This rule is always true.
-		VerifierRule rule1 = new VerifierRule();
+        // This rule is always true.
+        VerifierRule rule1 = new VerifierRule();
 
-		RulePossibility rp1 = new RulePossibility();
-		rp1.setRuleId(rule1.getId());
-		AlwaysTrue alwaysTrue1 = new AlwaysTrue(rp1);
+        SubRule rp1 = new SubRule();
+        rp1.setRuleGuid( rule1.getGuid() );
+        AlwaysTrue alwaysTrue1 = new AlwaysTrue( rp1 );
 
-		RulePossibility rp2 = new RulePossibility();
-		rp2.setRuleId(rule1.getId());
-		AlwaysTrue alwaysTrue2 = new AlwaysTrue(rp2);
+        SubRule rp2 = new SubRule();
+        rp2.setRuleGuid( rule1.getGuid() );
+        AlwaysTrue alwaysTrue2 = new AlwaysTrue( rp2 );
 
-		// This rule is okay.
-		VerifierRule rule2 = new VerifierRule();
+        // This rule is okay.
+        VerifierRule rule2 = new VerifierRule();
 
-		RulePossibility rp3 = new RulePossibility();
-		rp3.setRuleId(rule2.getId());
+        SubRule rp3 = new SubRule();
+        rp3.setRuleGuid( rule2.getGuid() );
 
-		RulePossibility rp4 = new RulePossibility();
-		rp4.setRuleId(rule2.getId());
-		AlwaysTrue alwaysTrue4 = new AlwaysTrue(rp4);
+        SubRule rp4 = new SubRule();
+        rp4.setRuleGuid( rule2.getGuid() );
+        AlwaysTrue alwaysTrue4 = new AlwaysTrue( rp4 );
 
-		data.add(rule1);
-		data.add(rp1);
-		data.add(rp2);
-		data.add(alwaysTrue1);
-		data.add(alwaysTrue2);
+        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);
+        data.add( rule2 );
+        data.add( rp3 );
+        data.add( rp4 );
+        data.add( alwaysTrue4 );
 
-		session.executeWithResults(data);
+        session.executeWithResults( data );
 
-		Iterator<VerifierMessageBase> iter = result.getBySeverity(
-				Severity.WARNING).iterator();
+        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)");
-				}
-			}
-		}
+        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);
-	}
+        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

Added: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/data/VerifierDataMapsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/data/VerifierDataMapsTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/data/VerifierDataMapsTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,318 @@
+package org.drools.verifier.data;
+
+import java.util.Collection;
+
+import junit.framework.TestCase;
+
+import org.drools.verifier.components.Constraint;
+import org.drools.verifier.components.EnumField;
+import org.drools.verifier.components.EnumRestriction;
+import org.drools.verifier.components.Field;
+import org.drools.verifier.components.FieldObjectTypeLink;
+import org.drools.verifier.components.InlineEvalDescr;
+import org.drools.verifier.components.LiteralRestriction;
+import org.drools.verifier.components.ObjectType;
+import org.drools.verifier.components.OperatorDescr;
+import org.drools.verifier.components.Pattern;
+import org.drools.verifier.components.SubPattern;
+import org.drools.verifier.components.QualifiedIdentifierRestriction;
+import org.drools.verifier.components.Restriction;
+import org.drools.verifier.components.ReturnValueFieldDescr;
+import org.drools.verifier.components.ReturnValueRestriction;
+import org.drools.verifier.components.RulePackage;
+import org.drools.verifier.components.SubRule;
+import org.drools.verifier.components.TextConsequence;
+import org.drools.verifier.components.Variable;
+import org.drools.verifier.components.VariableRestriction;
+import org.drools.verifier.components.VerifierAccessorDescr;
+import org.drools.verifier.components.VerifierAccumulateDescr;
+import org.drools.verifier.components.VerifierCollectDescr;
+import org.drools.verifier.components.VerifierComponentType;
+import org.drools.verifier.components.VerifierEvalDescr;
+import org.drools.verifier.components.VerifierFieldAccessDescr;
+import org.drools.verifier.components.VerifierFromDescr;
+import org.drools.verifier.components.VerifierMethodAccessDescr;
+import org.drools.verifier.components.VerifierPredicateDescr;
+import org.drools.verifier.components.VerifierRule;
+
+public class VerifierDataMapsTest extends TestCase {
+
+    public void testSaveVerifierComponentAndGet() {
+        VerifierData data = VerifierReportFactory.newVerifierData();
+
+        VerifierRule rule = new VerifierRule();
+        rule.setGuid( "0" );
+
+        data.add( rule );
+
+        Collection<VerifierComponent> all = data.getAll();
+
+        assertEquals( 1,
+                      all.size() );
+        assertEquals( rule,
+                      all.toArray()[0] );
+
+        Collection<VerifierRule> rules = data.getAll( VerifierComponentType.RULE );
+
+        assertEquals( 1,
+                      rules.size() );
+        assertEquals( rule,
+                      rules.toArray()[0] );
+
+        VerifierRule rule2 = data.getVerifierObject( VerifierComponentType.RULE,
+                                                     "0" );
+
+        assertNotNull( rule2 );
+        assertEquals( rule,
+                      rule2 );
+    }
+
+    public void testSaveVerifierComponentAndGetForAllComponentTypes() {
+
+        saveVerifierComponentAndGet( fillTestValues( new Constraint() ) );
+        saveVerifierComponentAndGet( fillTestValues( new FieldObjectTypeLink() ) );
+        saveVerifierComponentAndGet( fillTestValues( new InlineEvalDescr() ) );
+        saveVerifierComponentAndGet( fillTestValues( new ObjectType() ) );
+        saveVerifierComponentAndGet( fillTestValues( new OperatorDescr() ) );
+        saveVerifierComponentAndGet( fillTestValues( new SubPattern() ) );
+        saveVerifierComponentAndGet( fillTestValues( new ReturnValueFieldDescr() ) );
+        saveVerifierComponentAndGet( fillTestValues( new RulePackage() ) );
+        saveVerifierComponentAndGet( fillTestValues( new SubRule() ) );
+        saveVerifierComponentAndGet( fillTestValues( new TextConsequence() ) );
+        saveVerifierComponentAndGet( fillTestValues( new Variable() ) );
+        saveVerifierComponentAndGet( fillTestValues( new VerifierAccessorDescr() ) );
+        saveVerifierComponentAndGet( fillTestValues( new VerifierAccumulateDescr() ) );
+        saveVerifierComponentAndGet( fillTestValues( new VerifierCollectDescr() ) );
+        saveVerifierComponentAndGet( fillTestValues( new VerifierEvalDescr() ) );
+        saveVerifierComponentAndGet( fillTestValues( new VerifierFieldAccessDescr() ) );
+        saveVerifierComponentAndGet( fillTestValues( new VerifierFromDescr() ) );
+        saveVerifierComponentAndGet( fillTestValues( new VerifierMethodAccessDescr() ) );
+        saveVerifierComponentAndGet( fillTestValues( new VerifierPredicateDescr() ) );
+        saveVerifierComponentAndGet( fillTestValues( new VerifierRule() ) );
+    }
+
+    public void testSaveVerifierComponentAndGetForAllFields() {
+        saveVerifierComponentAndGet( (Field) fillTestValues( new EnumField() ) );
+        saveVerifierComponentAndGet( (Field) fillTestValues( new Field() ) );
+    }
+
+    public void testSaveVerifierComponentAndGetForAllRestrictions() {
+        saveVerifierComponentAndGet( (Restriction) fillTestValues( new LiteralRestriction() ) );
+        saveVerifierComponentAndGet( (Restriction) fillTestValues( new EnumRestriction() ) );
+        saveVerifierComponentAndGet( (Restriction) fillTestValues( new QualifiedIdentifierRestriction() ) );
+        saveVerifierComponentAndGet( (Restriction) fillTestValues( new ReturnValueRestriction() ) );
+        saveVerifierComponentAndGet( (Restriction) fillTestValues( new ReturnValueRestriction() ) );
+        saveVerifierComponentAndGet( (Restriction) fillTestValues( new VariableRestriction() ) );
+    }
+
+    public void testSavePatternAndGet() {
+        VerifierData data = VerifierReportFactory.newVerifierData();
+
+        VerifierRule rule = (VerifierRule) fillTestValues( new VerifierRule() );
+        rule.setRuleName( "test" );
+        assertNotNull( rule.getRuleName() );
+        assertEquals( "test",
+                      rule.getRuleName() );
+
+        ObjectType objectType = (ObjectType) fillTestValues( new ObjectType() );
+        Pattern pattern = (Pattern) fillTestValues( new Pattern() );
+
+        pattern.setRuleGuid( rule.getGuid() );
+        assertNotNull( pattern.getRuleGuid() );
+        assertEquals( rule.getGuid(),
+                      pattern.getRuleGuid() );
+
+        pattern.setRuleName( rule.getRuleName() );
+        assertNotNull( pattern.getRuleName() );
+        assertEquals( rule.getRuleName(),
+                      pattern.getRuleName() );
+
+        pattern.setObjectTypeGuid( objectType.getGuid() );
+        assertNotNull( pattern.getObjectTypeGuid() );
+        assertEquals( objectType.getGuid(),
+                      pattern.getObjectTypeGuid() );
+
+        data.add( rule );
+        data.add( objectType );
+        data.add( pattern );
+
+        Collection<VerifierComponent> all = data.getAll();
+
+        assertEquals( 3,
+                      all.size() );
+        assertTrue( all.contains( pattern ) );
+        assertTrue( all.contains( objectType ) );
+        assertTrue( all.contains( rule ) );
+
+        Collection<VerifierComponent> components = data.getAll( pattern.getVerifierComponentType() );
+
+        assertEquals( 1,
+                      components.size() );
+        assertEquals( pattern,
+                      components.toArray()[0] );
+
+        VerifierComponent objectType2 = data.getVerifierObject( objectType.getVerifierComponentType(),
+                                                                objectType.getGuid() );
+
+        assertNotNull( objectType2 );
+        assertEquals( objectType,
+                      objectType2 );
+
+        VerifierComponent rule2 = data.getVerifierObject( rule.getVerifierComponentType(),
+                                                          rule.getGuid() );
+
+        assertNotNull( rule2 );
+        assertEquals( rule,
+                      rule2 );
+    }
+
+    private VerifierComponent fillTestValues(VerifierComponent component) {
+        component.setGuid( "0" );
+
+        assertNotNull( component.getGuid() );
+        assertNotNull( component.getVerifierComponentType() );
+
+        return component;
+    }
+
+    private void saveVerifierComponentAndGet(Field field) {
+        VerifierData data = VerifierReportFactory.newVerifierData();
+
+        ObjectType objectType = (ObjectType) fillTestValues( new ObjectType() );
+
+        field.setObjectTypeGuid( objectType.getGuid() );
+
+        data.add( objectType );
+        data.add( field );
+
+        Collection<VerifierComponent> all = data.getAll();
+
+        assertEquals( 2,
+                      all.size() );
+        assertTrue( all.contains( objectType ) );
+        assertTrue( all.contains( field ) );
+
+        Collection<VerifierComponent> fields = data.getAll( field.getVerifierComponentType() );
+
+        assertEquals( 1,
+                      fields.size() );
+        assertEquals( field,
+                      fields.toArray()[0] );
+
+        VerifierComponent field2 = data.getVerifierObject( field.getVerifierComponentType(),
+                                                           field.getGuid() );
+
+        assertNotNull( field2 );
+        assertEquals( field,
+                      field2 );
+
+        Collection<VerifierComponent> objectTypes = data.getAll( objectType.getVerifierComponentType() );
+
+        assertEquals( 1,
+                      objectTypes.size() );
+        assertEquals( objectType,
+                      objectTypes.toArray()[0] );
+
+        VerifierComponent objectType2 = data.getVerifierObject( objectType.getVerifierComponentType(),
+                                                                objectType.getGuid() );
+
+        assertNotNull( objectType2 );
+        assertEquals( objectType,
+                      objectType2 );
+    }
+
+    private void saveVerifierComponentAndGet(Restriction component) {
+        VerifierData data = VerifierReportFactory.newVerifierData();
+
+        ObjectType objectType = (ObjectType) fillTestValues( new ObjectType() );
+
+        Field field = (Field) fillTestValues( new Field() );
+        field.setObjectTypeGuid( objectType.getGuid() );
+
+        component.setFieldGuid( field.getGuid() );
+
+        assertNotNull( component.getFieldGuid() );
+
+        data.add( objectType );
+        data.add( field );
+        data.add( component );
+
+        Collection<VerifierComponent> all = data.getAll();
+
+        assertEquals( 3,
+                      all.size() );
+        assertTrue( all.contains( objectType ) );
+        assertTrue( all.contains( field ) );
+        assertTrue( all.contains( component ) );
+
+        Collection<VerifierComponent> components = data.getAll( component.getVerifierComponentType() );
+
+        assertEquals( 1,
+                      components.size() );
+        assertEquals( component,
+                      components.toArray()[0] );
+
+        VerifierComponent component2 = data.getVerifierObject( component.getVerifierComponentType(),
+                                                               component.getGuid() );
+
+        assertNotNull( component2 );
+        assertEquals( component,
+                      component2 );
+
+        Collection<VerifierComponent> fields = data.getAll( field.getVerifierComponentType() );
+
+        assertEquals( 1,
+                      fields.size() );
+        assertEquals( field,
+                      fields.toArray()[0] );
+
+        VerifierComponent field2 = data.getVerifierObject( field.getVerifierComponentType(),
+                                                           field.getGuid() );
+
+        assertNotNull( field2 );
+        assertEquals( field,
+                      field2 );
+
+        Collection<VerifierComponent> objectTypes = data.getAll( objectType.getVerifierComponentType() );
+
+        assertEquals( 1,
+                      objectTypes.size() );
+        assertEquals( objectType,
+                      objectTypes.toArray()[0] );
+
+        VerifierComponent objectType2 = data.getVerifierObject( objectType.getVerifierComponentType(),
+                                                                objectType.getGuid() );
+
+        assertNotNull( objectType2 );
+        assertEquals( objectType,
+                      objectType2 );
+    }
+
+    private void saveVerifierComponentAndGet(VerifierComponent component) {
+        VerifierData data = VerifierReportFactory.newVerifierData();
+
+        data.add( component );
+
+        Collection<VerifierComponent> all = data.getAll();
+
+        assertEquals( 1,
+                      all.size() );
+        assertEquals( component,
+                      all.toArray()[0] );
+
+        Collection<VerifierComponent> components = data.getAll( component.getVerifierComponentType() );
+
+        assertEquals( 1,
+                      components.size() );
+        assertEquals( component,
+                      components.toArray()[0] );
+
+        VerifierComponent component2 = data.getVerifierObject( component.getVerifierComponentType(),
+                                                               component.getGuid() );
+
+        assertNotNull( component2 );
+        assertEquals( component,
+                      component2 );
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/equivalence/EquivalentRulesTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/equivalence/EquivalentRulesTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/equivalence/EquivalentRulesTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -10,8 +10,8 @@
 import org.drools.base.RuleNameMatchesAgendaFilter;
 import org.drools.verifier.TestBase;
 import org.drools.verifier.components.VerifierRule;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 import org.drools.verifier.redundancy.RedundancyTestBase;
 import org.drools.verifier.report.components.Redundancy;
 
@@ -40,7 +40,7 @@
 		data.add(rule2);
 		data.add(r1);
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		session.setGlobal("result", result);
 
 		StatelessSessionResult sessionResult = session.executeWithResults(data);

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/incoherence/IncoherentPatternsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/incoherence/IncoherentPatternsTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/incoherence/IncoherentPatternsTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -9,8 +9,8 @@
 import org.drools.base.RuleNameMatchesAgendaFilter;
 import org.drools.verifier.TestBase;
 import org.drools.verifier.components.VerifierRule;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 import org.drools.verifier.report.components.Severity;
 import org.drools.verifier.report.components.VerifierMessage;
 import org.drools.verifier.report.components.VerifierMessageBase;
@@ -22,14 +22,14 @@
  */
 public class IncoherentPatternsTest extends TestBase {
 
-	public void testIncoherentPatternsInRulePossibility() throws Exception {
+	public void testIncoherentPatternsInSubRule() throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
 				.getResourceAsStream("Patterns.drl"));
 
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Incoherent Patterns in rule possibility"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("PatternsTest.drl"), result
 				.getVerifierData());
@@ -62,7 +62,7 @@
 		}
 	}
 
-	public void testIncoherentPatternsInRulePossibilityVariables()
+	public void testIncoherentPatternsInSubRuleVariables()
 			throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
 				.getResourceAsStream("Patterns.drl"));
@@ -70,7 +70,7 @@
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Incoherent Patterns in rule possibility, variables"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("PatternsTest.drl"), result
 				.getVerifierData());
@@ -104,7 +104,7 @@
 		}
 	}
 
-	public void testIncoherentPatternsInRulePossibilityRangesLess()
+	public void testIncoherentPatternsInSubRuleRangesLess()
 			throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
 				.getResourceAsStream("Patterns.drl"));
@@ -113,7 +113,7 @@
 				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 						"Incoherent Patterns in rule possibility, ranges when not conflicts with lesser value"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("PatternsTest.drl"), result
 				.getVerifierData());
@@ -145,7 +145,7 @@
 		}
 	}
 
-	public void testIncoherentPatternsInRulePossibilityRangesGreater()
+	public void testIncoherentPatternsInSubRuleRangesGreater()
 			throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
 				.getResourceAsStream("Patterns.drl"));
@@ -154,7 +154,7 @@
 				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 						"Incoherent Patterns in rule possibility, ranges when not conflicts with greater value"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("PatternsTest.drl"), result
 				.getVerifierData());
@@ -186,7 +186,7 @@
 		}
 	}
 
-	public void testIncoherentPatternsInRulePossibilityRangesEqualOrUnequal()
+	public void testIncoherentPatternsInSubRuleRangesEqualOrUnequal()
 			throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
 				.getResourceAsStream("Patterns.drl"));
@@ -195,7 +195,7 @@
 				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 						"Incoherent Patterns in rule possibility, ranges when not conflicts with equal or unequal value"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("PatternsTest.drl"), result
 				.getVerifierData());
@@ -227,7 +227,7 @@
 		}
 	}
 
-	public void testIncoherentPatternsInRulePossibilityRangesEqualOrUnequalVariables()
+	public void testIncoherentPatternsInSubRuleRangesEqualOrUnequalVariables()
 			throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
 				.getResourceAsStream("Patterns.drl"));
@@ -236,7 +236,7 @@
 				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 						"Incoherent Patterns in rule possibility, ranges when not conflicts with equal or unequal variables"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("PatternsTest.drl"), result
 				.getVerifierData());
@@ -267,7 +267,7 @@
 		}
 	}
 
-	public void testIncoherentPatternsInRulePossibilityRangesEqualValue()
+	public void testIncoherentPatternsInSubRuleRangesEqualValue()
 			throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
 				.getResourceAsStream("Patterns.drl"));
@@ -276,7 +276,7 @@
 				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 						"Incoherent Patterns in rule possibility, ranges when not conflicts with equal value"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("PatternsTest.drl"), result
 				.getVerifierData());
@@ -307,7 +307,7 @@
 		}
 	}
 
-	public void testIncoherentPatternsInRulePossibilityRangesEqualVariable()
+	public void testIncoherentPatternsInSubRuleRangesEqualVariable()
 			throws Exception {
 		StatelessSession session = getStatelessSession(this.getClass()
 				.getResourceAsStream("Patterns.drl"));
@@ -316,7 +316,7 @@
 				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 						"Incoherent Patterns in rule possibility, ranges when not conflicts with equal variable"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("PatternsTest.drl"), result
 				.getVerifierData());

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/incoherence/IncoherentRestrictionsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/incoherence/IncoherentRestrictionsTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/incoherence/IncoherentRestrictionsTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -9,8 +9,8 @@
 import org.drools.base.RuleNameMatchesAgendaFilter;
 import org.drools.verifier.TestBase;
 import org.drools.verifier.components.Pattern;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 import org.drools.verifier.report.components.Severity;
 import org.drools.verifier.report.components.VerifierMessage;
 import org.drools.verifier.report.components.VerifierMessageBase;
@@ -22,12 +22,12 @@
  */
 public class IncoherentRestrictionsTest extends TestBase {
 
-    public void testIncoherentLiteralRestrictionsInPatternPossibility() throws Exception {
+    public void testIncoherentLiteralRestrictionsInSubPattern() throws Exception {
         StatelessSession session = getStatelessSession( getClass().getResourceAsStream( "Restrictions.drl" ) );
 
         session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Incoherent LiteralRestrictions in pattern possibility" ) );
 
-        VerifierResult result = VerifierResultFactory.createVerifierResult();
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
         Collection< ? extends Object> testData = getTestData( getClass().getResourceAsStream( "RestrictionsTest.drl" ),
                                                               result.getVerifierData() );
 
@@ -57,12 +57,12 @@
         }
     }
 
-    public void testIncoherentLiteralRestrictionsInPatternPossibilityImpossibleRanges() throws Exception {
+    public void testIncoherentLiteralRestrictionsInSubPatternImpossibleRanges() throws Exception {
         StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Restrictions.drl" ) );
 
         session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Incoherent LiteralRestrictions with ranges in pattern possibility, impossible ranges" ) );
 
-        VerifierResult result = VerifierResultFactory.createVerifierResult();
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
         Collection< ? extends Object> testData = getTestData( this.getClass().getResourceAsStream( "RestrictionsTest.drl" ),
                                                               result.getVerifierData() );
 
@@ -91,12 +91,12 @@
         }
     }
 
-    public void testIncoherentLiteralRestrictionsInPatternPossibilityImpossibleEqualityLess() throws Exception {
+    public void testIncoherentLiteralRestrictionsInSubPatternImpossibleEqualityLess() throws Exception {
         StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Restrictions.drl" ) );
 
         session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Incoherent LiteralRestrictions with ranges in pattern possibility, impossible equality less or equal" ) );
 
-        VerifierResult result = VerifierResultFactory.createVerifierResult();
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
         Collection< ? extends Object> testData = getTestData( this.getClass().getResourceAsStream( "RestrictionsTest.drl" ),
                                                               result.getVerifierData() );
 
@@ -126,12 +126,12 @@
         }
     }
 
-    public void testIncoherentLiteralRestrictionsInPatternPossibilityImpossibleEqualityGreater() throws Exception {
+    public void testIncoherentLiteralRestrictionsInSubPatternImpossibleEqualityGreater() throws Exception {
         StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Restrictions.drl" ) );
 
         session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Incoherent LiteralRestrictions with ranges in pattern possibility, impossible equality greater" ) );
 
-        VerifierResult result = VerifierResultFactory.createVerifierResult();
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
         Collection< ? extends Object> testData = getTestData( this.getClass().getResourceAsStream( "RestrictionsTest.drl" ),
                                                               result.getVerifierData() );
 
@@ -160,12 +160,12 @@
         }
     }
 
-    public void testIncoherentLiteralRestrictionsInPatternPossibilityImpossibleRange() throws Exception {
+    public void testIncoherentLiteralRestrictionsInSubPatternImpossibleRange() throws Exception {
         StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Restrictions.drl" ) );
 
         session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Incoherent LiteralRestrictions with ranges in pattern possibility, impossible range" ) );
 
-        VerifierResult result = VerifierResultFactory.createVerifierResult();
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
         Collection< ? extends Object> testData = getTestData( this.getClass().getResourceAsStream( "RestrictionsTest.drl" ),
                                                               result.getVerifierData() );
 
@@ -194,12 +194,12 @@
         }
     }
 
-    public void testIncoherentVariableRestrictionsInPatternPossibility() throws Exception {
+    public void testIncoherentVariableRestrictionsInSubPattern() throws Exception {
         StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Restrictions.drl" ) );
 
         session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Incoherent VariableRestrictions in pattern possibility" ) );
 
-        VerifierResult result = VerifierResultFactory.createVerifierResult();
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
         Collection< ? extends Object> testData = getTestData( this.getClass().getResourceAsStream( "RestrictionsTest.drl" ),
                                                               result.getVerifierData() );
 
@@ -230,12 +230,12 @@
         }
     }
 
-    public void testIncoherentVariableRestrictionsInPatternPossibilityImpossibleRange() throws Exception {
+    public void testIncoherentVariableRestrictionsInSubPatternImpossibleRange() throws Exception {
         StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Restrictions.drl" ) );
 
         session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Incoherent VariableRestrictions in pattern possibility, impossible range" ) );
 
-        VerifierResult result = VerifierResultFactory.createVerifierResult();
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
         Collection< ? extends Object> testData = getTestData( this.getClass().getResourceAsStream( "RestrictionsTest.drl" ),
                                                               result.getVerifierData() );
 

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/incompatibility/IncompatibilityPatternsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/incompatibility/IncompatibilityPatternsTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/incompatibility/IncompatibilityPatternsTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -10,7 +10,7 @@
 import org.drools.base.RuleNameMatchesAgendaFilter;
 import org.drools.verifier.TestBase;
 import org.drools.verifier.components.LiteralRestriction;
-import org.drools.verifier.components.PatternPossibility;
+import org.drools.verifier.components.SubPattern;
 import org.drools.verifier.components.Restriction;
 import org.drools.verifier.report.components.Cause;
 import org.drools.verifier.report.components.CauseType;
@@ -30,8 +30,8 @@
 		/*
 		 * Working pair
 		 */
-		PatternPossibility pp1 = new PatternPossibility();
-		PatternPossibility pp2 = new PatternPossibility();
+		SubPattern pp1 = new SubPattern();
+		SubPattern pp2 = new SubPattern();
 
 		Restriction r1 = new LiteralRestriction();
 		pp1.add(r1);
@@ -51,8 +51,8 @@
 		/*
 		 * Another working pair.
 		 */
-		PatternPossibility pp3 = new PatternPossibility();
-		PatternPossibility pp4 = new PatternPossibility();
+		SubPattern pp3 = new SubPattern();
+		SubPattern pp4 = new SubPattern();
 
 		Restriction r5 = new LiteralRestriction();
 		pp3.add(r5);

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/incompatibility/IncompatibilityRestrictionsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/incompatibility/IncompatibilityRestrictionsTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/incompatibility/IncompatibilityRestrictionsTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -19,247 +19,243 @@
 
 public class IncompatibilityRestrictionsTest extends IncompatibilityBase {
 
-	public void testLiteralRestrictionsIncompatibilityLessOrEqual()
-			throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Restrictions.drl"));
+    public void testLiteralRestrictionsIncompatibilityLessOrEqual() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Restrictions.drl" ) );
 
-		session
-				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-						"Incompatible LiteralRestrictions with ranges in pattern possibility, impossible equality less or equal"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Incompatible LiteralRestrictions with ranges in pattern possibility, impossible equality less or equal" ) );
 
-		Collection<Object> data = new ArrayList<Object>();
+        Collection<Object> data = new ArrayList<Object>();
 
-		/*
-		 * Working pair
-		 */
-		LiteralRestriction r1 = new LiteralRestriction();
-		r1.setOperator(Operator.EQUAL);
-		r1.setPatternId(0);
-		r1.setFieldId(0);
-		r1.setValue("10");
+        /*
+         * Working pair
+         */
+        LiteralRestriction r1 = new LiteralRestriction();
+        r1.setOperator( Operator.EQUAL );
+        r1.setPatternGuid( "0" );
+        r1.setFieldGuid( "0" );
+        r1.setValue( "10" );
 
-		LiteralRestriction r2 = new LiteralRestriction();
-		r2.setOperator(Operator.LESS);
-		r2.setPatternId(0);
-		r2.setFieldId(0);
-		r2.setValue("1");
+        LiteralRestriction r2 = new LiteralRestriction();
+        r2.setOperator( Operator.LESS );
+        r2.setPatternGuid( "0" );
+        r2.setFieldGuid( "0" );
+        r2.setValue( "1" );
 
-		/*
-		 * Pair that doesn't work.
-		 */
-		LiteralRestriction r3 = new LiteralRestriction();
-		r3.setOperator(Operator.GREATER_OR_EQUAL);
-		r3.setPatternId(1);
-		r3.setFieldId(1);
-		r3.setValue("1");
+        /*
+         * Pair that doesn't work.
+         */
+        LiteralRestriction r3 = new LiteralRestriction();
+        r3.setOperator( Operator.GREATER_OR_EQUAL );
+        r3.setPatternGuid( "1" );
+        r3.setFieldGuid( "1" );
+        r3.setValue( "1" );
 
-		LiteralRestriction r4 = new LiteralRestriction();
-		r4.setOperator(Operator.EQUAL);
-		r4.setPatternId(1);
-		r4.setFieldId(1);
-		r4.setValue("10");
+        LiteralRestriction r4 = new LiteralRestriction();
+        r4.setOperator( Operator.EQUAL );
+        r4.setPatternGuid( "1" );
+        r4.setFieldGuid( "1" );
+        r4.setValue( "10" );
 
-		data.add(r1);
-		data.add(r2);
-		data.add(r3);
-		data.add(r4);
+        data.add( r1 );
+        data.add( r2 );
+        data.add( r3 );
+        data.add( r4 );
 
-		StatelessSessionResult sessionResult = session.executeWithResults(data);
+        StatelessSessionResult sessionResult = session.executeWithResults( data );
 
-		Map<Cause, Set<Cause>> map = createIncompatibilityMap(CauseType.RESTRICTION,
-				sessionResult.iterateObjects());
+        Map<Cause, Set<Cause>> map = createIncompatibilityMap( CauseType.RESTRICTION,
+                                                               sessionResult.iterateObjects() );
 
-		assertTrue((TestBase.causeMapContains(map, r1, r2) ^ TestBase
-				.causeMapContains(map, r2, r1)));
+        assertTrue( (TestBase.causeMapContains( map,
+                                                r1,
+                                                r2 ) ^ TestBase.causeMapContains( map,
+                                                                                  r2,
+                                                                                  r1 )) );
 
-		if (!map.isEmpty()) {
-			fail("More incompatibilities than was expected.");
-		}
-	}
+        if ( !map.isEmpty() ) {
+            fail( "More incompatibilities than was expected." );
+        }
+    }
 
-	public void testLiteralRestrictionsIncompatibilityGreater()
-			throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Restrictions.drl"));
+    public void testLiteralRestrictionsIncompatibilityGreater() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Restrictions.drl" ) );
 
-		session
-				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-						"Incompatible LiteralRestrictions with ranges in pattern possibility, impossible equality greater"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Incompatible LiteralRestrictions with ranges in pattern possibility, impossible equality greater" ) );
 
-		Collection<Object> data = new ArrayList<Object>();
+        Collection<Object> data = new ArrayList<Object>();
 
-		/*
-		 * Working pair
-		 */
-		LiteralRestriction r1 = new LiteralRestriction();
-		r1.setOperator(Operator.GREATER);
-		r1.setPatternId(0);
-		r1.setFieldId(0);
-		r1.setValue("10");
+        /*
+         * Working pair
+         */
+        LiteralRestriction r1 = new LiteralRestriction();
+        r1.setOperator( Operator.GREATER );
+        r1.setPatternGuid( "0" );
+        r1.setFieldGuid( "0" );
+        r1.setValue( "10" );
 
-		LiteralRestriction r2 = new LiteralRestriction();
-		r2.setOperator(Operator.EQUAL);
-		r2.setPatternId(0);
-		r2.setFieldId(0);
-		r2.setValue("1");
+        LiteralRestriction r2 = new LiteralRestriction();
+        r2.setOperator( Operator.EQUAL );
+        r2.setPatternGuid( "0" );
+        r2.setFieldGuid( "0" );
+        r2.setValue( "1" );
 
-		/*
-		 * Pair that doesn't work.
-		 */
-		LiteralRestriction r3 = new LiteralRestriction();
-		r3.setOperator(Operator.GREATER_OR_EQUAL);
-		r3.setPatternId(1);
-		r3.setFieldId(1);
-		r3.setValue("1");
+        /*
+         * Pair that doesn't work.
+         */
+        LiteralRestriction r3 = new LiteralRestriction();
+        r3.setOperator( Operator.GREATER_OR_EQUAL );
+        r3.setPatternGuid( "1" );
+        r3.setFieldGuid( "1" );
+        r3.setValue( "1" );
 
-		LiteralRestriction r4 = new LiteralRestriction();
-		r4.setOperator(Operator.EQUAL);
-		r4.setPatternId(1);
-		r4.setFieldId(1);
-		r4.setValue("10");
+        LiteralRestriction r4 = new LiteralRestriction();
+        r4.setOperator( Operator.EQUAL );
+        r4.setPatternGuid( "1" );
+        r4.setFieldGuid( "1" );
+        r4.setValue( "10" );
 
-		data.add(r1);
-		data.add(r2);
-		data.add(r3);
-		data.add(r4);
+        data.add( r1 );
+        data.add( r2 );
+        data.add( r3 );
+        data.add( r4 );
 
-		StatelessSessionResult sessionResult = session.executeWithResults(data);
+        StatelessSessionResult sessionResult = session.executeWithResults( data );
 
-		Map<Cause, Set<Cause>> map = createIncompatibilityMap(CauseType.RESTRICTION,
-				sessionResult.iterateObjects());
+        Map<Cause, Set<Cause>> map = createIncompatibilityMap( CauseType.RESTRICTION,
+                                                               sessionResult.iterateObjects() );
 
-		assertTrue((TestBase.causeMapContains(map, r1, r2) ^ TestBase
-				.causeMapContains(map, r2, r1)));
+        assertTrue( (TestBase.causeMapContains( map,
+                                                r1,
+                                                r2 ) ^ TestBase.causeMapContains( map,
+                                                                                  r2,
+                                                                                  r1 )) );
 
-		if (!map.isEmpty()) {
-			fail("More incompatibilities than was expected.");
-		}
-	}
+        if ( !map.isEmpty() ) {
+            fail( "More incompatibilities than was expected." );
+        }
+    }
 
-	public void testLiteralRestrictionsIncompatibilityImpossibleRange()
-			throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Restrictions.drl"));
+    public void testLiteralRestrictionsIncompatibilityImpossibleRange() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Restrictions.drl" ) );
 
-		session
-				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-						"Incompatible LiteralRestrictions with ranges in pattern possibility, impossible range"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Incompatible LiteralRestrictions with ranges in pattern possibility, impossible range" ) );
 
-		Collection<Object> data = new ArrayList<Object>();
+        Collection<Object> data = new ArrayList<Object>();
 
-		/*
-		 * Working pair
-		 */
-		LiteralRestriction r1 = new LiteralRestriction();
-		r1.setOperator(Operator.GREATER);
-		r1.setPatternId(0);
-		r1.setFieldId(0);
-		r1.setValue("10");
+        /*
+         * Working pair
+         */
+        LiteralRestriction r1 = new LiteralRestriction();
+        r1.setOperator( Operator.GREATER );
+        r1.setPatternGuid( "0" );
+        r1.setFieldGuid( "0" );
+        r1.setValue( "10" );
 
-		LiteralRestriction r2 = new LiteralRestriction();
-		r2.setOperator(Operator.LESS);
-		r2.setPatternId(0);
-		r2.setFieldId(0);
-		r2.setValue("10");
+        LiteralRestriction r2 = new LiteralRestriction();
+        r2.setOperator( Operator.LESS );
+        r2.setPatternGuid( "0" );
+        r2.setFieldGuid( "0" );
+        r2.setValue( "10" );
 
-		/*
-		 * Pair that doesn't work.
-		 */
-		LiteralRestriction r3 = new LiteralRestriction();
-		r3.setOperator(Operator.GREATER_OR_EQUAL);
-		r3.setPatternId(1);
-		r3.setFieldId(1);
-		r3.setValue("1");
+        /*
+         * Pair that doesn't work.
+         */
+        LiteralRestriction r3 = new LiteralRestriction();
+        r3.setOperator( Operator.GREATER_OR_EQUAL );
+        r3.setPatternGuid( "1" );
+        r3.setFieldGuid( "1" );
+        r3.setValue( "1" );
 
-		LiteralRestriction r4 = new LiteralRestriction();
-		r4.setOperator(Operator.EQUAL);
-		r4.setPatternId(1);
-		r4.setFieldId(1);
-		r4.setValue("10");
+        LiteralRestriction r4 = new LiteralRestriction();
+        r4.setOperator( Operator.EQUAL );
+        r4.setPatternGuid( "1" );
+        r4.setFieldGuid( "1" );
+        r4.setValue( "10" );
 
-		data.add(r1);
-		data.add(r2);
-		data.add(r3);
-		data.add(r4);
+        data.add( r1 );
+        data.add( r2 );
+        data.add( r3 );
+        data.add( r4 );
 
-		StatelessSessionResult sessionResult = session.executeWithResults(data);
+        StatelessSessionResult sessionResult = session.executeWithResults( data );
 
-		Map<Cause, Set<Cause>> map = createIncompatibilityMap(CauseType.RESTRICTION,
-				sessionResult.iterateObjects());
+        Map<Cause, Set<Cause>> map = createIncompatibilityMap( CauseType.RESTRICTION,
+                                                               sessionResult.iterateObjects() );
 
-		assertTrue((TestBase.causeMapContains(map, r1, r2) ^ TestBase
-				.causeMapContains(map, r2, r1)));
+        assertTrue( (TestBase.causeMapContains( map,
+                                                r1,
+                                                r2 ) ^ TestBase.causeMapContains( map,
+                                                                                  r2,
+                                                                                  r1 )) );
 
-		if (!map.isEmpty()) {
-			fail("More incompatibilities than was expected.");
-		}
-	}
+        if ( !map.isEmpty() ) {
+            fail( "More incompatibilities than was expected." );
+        }
+    }
 
-	public void testVariableRestrictionsIncompatibilityImpossibleRange()
-			throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Restrictions.drl"));
+    public void testVariableRestrictionsIncompatibilityImpossibleRange() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Restrictions.drl" ) );
 
-		session
-				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-						"Incoherent VariableRestrictions in pattern possibility, impossible range"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Incoherent VariableRestrictions in pattern possibility, impossible range" ) );
 
-		Collection<Object> data = new ArrayList<Object>();
+        Collection<Object> data = new ArrayList<Object>();
 
-		/*
-		 * Working pair
-		 */
-		Variable variable1 = new Variable();
-		variable1.setObjectId(0);
-		variable1.setObjectType(VerifierComponentType.FIELD);
+        /*
+         * Working pair
+         */
+        Variable variable1 = new Variable();
+        variable1.setObjectTypeGuid( "0" );
+        variable1.setObjectTypeType( VerifierComponentType.FIELD.getType() );
 
-		VariableRestriction r1 = new VariableRestriction();
-		r1.setOperator(Operator.GREATER);
-		r1.setPatternId(0);
-		r1.setFieldId(0);
-		r1.setVariable(variable1);
+        VariableRestriction r1 = new VariableRestriction();
+        r1.setOperator( Operator.GREATER );
+        r1.setPatternGuid( "0" );
+        r1.setFieldGuid( "0" );
+        r1.setVariable( variable1 );
 
-		VariableRestriction r2 = new VariableRestriction();
-		r2.setOperator(Operator.LESS);
-		r2.setPatternId(0);
-		r2.setFieldId(0);
-		r2.setVariable(variable1);
+        VariableRestriction r2 = new VariableRestriction();
+        r2.setOperator( Operator.LESS );
+        r2.setPatternGuid( "0" );
+        r2.setFieldGuid( "0" );
+        r2.setVariable( variable1 );
 
-		/*
-		 * Pair that doesn't work.
-		 */
-		Variable variable2 = new Variable();
-		variable2.setObjectId(1);
-		variable2.setObjectType(VerifierComponentType.FIELD);
+        /*
+         * Pair that doesn't work.
+         */
+        Variable variable2 = new Variable();
+        variable2.setObjectTypeGuid( "1" );
+        variable2.setObjectTypeType( VerifierComponentType.FIELD.getType() );
 
-		VariableRestriction r3 = new VariableRestriction();
-		r3.setOperator(Operator.GREATER_OR_EQUAL);
-		r3.setPatternId(1);
-		r3.setFieldId(1);
-		r3.setVariable(variable2);
+        VariableRestriction r3 = new VariableRestriction();
+        r3.setOperator( Operator.GREATER_OR_EQUAL );
+        r3.setPatternGuid( "1" );
+        r3.setFieldGuid( "1" );
+        r3.setVariable( variable2 );
 
-		VariableRestriction r4 = new VariableRestriction();
-		r4.setOperator(Operator.EQUAL);
-		r4.setPatternId(1);
-		r4.setFieldId(1);
-		r4.setVariable(variable2);
+        VariableRestriction r4 = new VariableRestriction();
+        r4.setOperator( Operator.EQUAL );
+        r4.setPatternGuid( "1" );
+        r4.setFieldGuid( "1" );
+        r4.setVariable( variable2 );
 
-		data.add(r1);
-		data.add(r2);
-		data.add(r3);
-		data.add(r4);
+        data.add( r1 );
+        data.add( r2 );
+        data.add( r3 );
+        data.add( r4 );
 
-		StatelessSessionResult sessionResult = session.executeWithResults(data);
+        StatelessSessionResult sessionResult = session.executeWithResults( data );
 
-		Map<Cause, Set<Cause>> map = createIncompatibilityMap(CauseType.RESTRICTION,
-				sessionResult.iterateObjects());
+        Map<Cause, Set<Cause>> map = createIncompatibilityMap( CauseType.RESTRICTION,
+                                                               sessionResult.iterateObjects() );
 
-		assertTrue((TestBase.causeMapContains(map, r1, r2) ^ TestBase
-				.causeMapContains(map, r2, r1)));
+        assertTrue( (TestBase.causeMapContains( map,
+                                                r1,
+                                                r2 ) ^ TestBase.causeMapContains( map,
+                                                                                  r2,
+                                                                                  r1 )) );
 
-		if (!map.isEmpty()) {
-			fail("More incompatibilities than was expected.");
-		}
-	}
+        if ( !map.isEmpty() ) {
+            fail( "More incompatibilities than was expected." );
+        }
+    }
 }

Added: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/misc/FindMissingNumberTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/misc/FindMissingNumberTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/misc/FindMissingNumberTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,131 @@
+package org.drools.verifier.misc;
+
+import java.math.BigDecimal;
+
+import org.drools.verifier.misc.FindMissingNumber;
+
+import junit.framework.TestCase;
+
+public class FindMissingNumberTest extends TestCase {
+
+	public void testfindSumPattern() {
+		// Sum +2 missing number 4
+		assertTrue(FindMissingNumber.findSumPattern(
+				new BigDecimal[] { BigDecimal.valueOf(2),
+						BigDecimal.valueOf(6), BigDecimal.valueOf(8),
+						BigDecimal.valueOf(10) }).doubleValue() == 4);
+		// +10 missing number 50
+		assertTrue(FindMissingNumber.findSumPattern(
+				new BigDecimal[] { BigDecimal.valueOf(10),
+						BigDecimal.valueOf(20), BigDecimal.valueOf(30),
+						BigDecimal.valueOf(40), BigDecimal.valueOf(60),
+						BigDecimal.valueOf(70) }).doubleValue() == 50);
+		// +66 missing number 308
+		assertTrue(FindMissingNumber.findSumPattern(
+				new BigDecimal[] { BigDecimal.valueOf(110),
+						BigDecimal.valueOf(176), BigDecimal.valueOf(242),
+						BigDecimal.valueOf(374) }).doubleValue() == 308);
+
+		// Deduction -2 missing number 8
+		assertTrue(FindMissingNumber.findSumPattern(
+				new BigDecimal[] { BigDecimal.valueOf(10),
+						BigDecimal.valueOf(6), BigDecimal.valueOf(4),
+						BigDecimal.valueOf(2) }).doubleValue() == 8);
+		// -337 missing number -11
+		assertTrue(FindMissingNumber.findSumPattern(
+				new BigDecimal[] { BigDecimal.valueOf(663),
+						BigDecimal.valueOf(326), BigDecimal.valueOf(-348),
+						BigDecimal.valueOf(-685) }).doubleValue() == -11);
+		// -31 missing number 4350
+		assertTrue(FindMissingNumber.findSumPattern(
+				new BigDecimal[] { BigDecimal.valueOf(4443),
+						BigDecimal.valueOf(4412), BigDecimal.valueOf(4381),
+						BigDecimal.valueOf(4319) }).doubleValue() == 4350);
+
+		// Not valid
+		// Not in pattern.
+		assertTrue(FindMissingNumber.findSumPattern(new BigDecimal[] {
+				BigDecimal.valueOf(1), BigDecimal.valueOf(2),
+				BigDecimal.valueOf(4), BigDecimal.valueOf(6),
+				BigDecimal.valueOf(8), BigDecimal.valueOf(11) }) == null);
+		assertTrue(FindMissingNumber.findSumPattern(new BigDecimal[] {
+				BigDecimal.valueOf(5), BigDecimal.valueOf(3),
+				BigDecimal.valueOf(54353), BigDecimal.valueOf(54554),
+				BigDecimal.valueOf(232), BigDecimal.valueOf(123) }) == null);
+		// No missing values.
+		assertTrue(FindMissingNumber.findSumPattern(new BigDecimal[] {
+				BigDecimal.valueOf(2), BigDecimal.valueOf(4),
+				BigDecimal.valueOf(6), BigDecimal.valueOf(8),
+				BigDecimal.valueOf(10), BigDecimal.valueOf(12),
+				BigDecimal.valueOf(14) }) == null);
+		assertTrue(FindMissingNumber.findSumPattern(new BigDecimal[] {
+				BigDecimal.valueOf(10), BigDecimal.valueOf(20),
+				BigDecimal.valueOf(30), BigDecimal.valueOf(40),
+				BigDecimal.valueOf(50), BigDecimal.valueOf(60) }) == null);
+		assertTrue(FindMissingNumber.findSumPattern(new BigDecimal[] {
+				BigDecimal.valueOf(-15), BigDecimal.valueOf(-10),
+				BigDecimal.valueOf(-5), BigDecimal.valueOf(0),
+				BigDecimal.valueOf(5), BigDecimal.valueOf(10),
+				BigDecimal.valueOf(15) }) == null);
+		// Under 4 values always returns null.
+		assertTrue(FindMissingNumber.findSumPattern(new BigDecimal[] {
+				BigDecimal.valueOf(2), BigDecimal.valueOf(4),
+				BigDecimal.valueOf(6) }) == null);
+		assertTrue(FindMissingNumber.findSumPattern(new BigDecimal[] {
+				BigDecimal.valueOf(2), BigDecimal.valueOf(4) }) == null);
+		assertTrue(FindMissingNumber.findSumPattern(new BigDecimal[] { BigDecimal
+				.valueOf(2) }) == null);
+	}
+
+	public void testFindMultiplicationPattern() {
+
+		// Multiplication
+		// *2 missing number 4
+		assertTrue(FindMissingNumber.findMultiplicationPattern(
+				new BigDecimal[] { BigDecimal.valueOf(2),
+						BigDecimal.valueOf(8), BigDecimal.valueOf(16),
+						BigDecimal.valueOf(32), BigDecimal.valueOf(64) })
+				.doubleValue() == 4);
+		// *17 missing number 383214
+		assertTrue(FindMissingNumber.findMultiplicationPattern(
+				new BigDecimal[] { BigDecimal.valueOf(78),
+						BigDecimal.valueOf(1326), BigDecimal.valueOf(22542),
+						BigDecimal.valueOf(6514638) }).doubleValue() == 383214);
+		// *1,23 missing number 2016.6957
+		assertTrue(FindMissingNumber.findMultiplicationPattern(
+				new BigDecimal[] { BigDecimal.valueOf(1333),
+						BigDecimal.valueOf(1639.59),
+						BigDecimal.valueOf(2480.535711),
+						BigDecimal.valueOf(3051.05892453) }).doubleValue() == 2016.6957);
+
+		// Division
+		// /2 (*0.5) missing number 128
+		assertTrue(FindMissingNumber.findMultiplicationPattern(
+				new BigDecimal[] { BigDecimal.valueOf(256),
+						BigDecimal.valueOf(64), BigDecimal.valueOf(32),
+						BigDecimal.valueOf(16), BigDecimal.valueOf(8),
+						BigDecimal.valueOf(4), BigDecimal.valueOf(2) })
+				.doubleValue() == 128);
+		// /10 (*0.1) missing number 1
+		assertTrue(FindMissingNumber.findMultiplicationPattern(
+				new BigDecimal[] { BigDecimal.valueOf(10000),
+						BigDecimal.valueOf(1000), BigDecimal.valueOf(100),
+						BigDecimal.valueOf(10), BigDecimal.valueOf(0.1),
+						BigDecimal.valueOf(0.01) }).doubleValue() == 1);
+
+		// Not valid
+		// Not in pattern.
+		assertTrue(FindMissingNumber.findMultiplicationPattern(new BigDecimal[] {
+				BigDecimal.valueOf(111.2), BigDecimal.valueOf(3323),
+				BigDecimal.valueOf(234.434), BigDecimal.valueOf(44343),
+				BigDecimal.valueOf(434) }) == null);
+		assertTrue(FindMissingNumber.findMultiplicationPattern(new BigDecimal[] {
+				BigDecimal.valueOf(1), BigDecimal.valueOf(2),
+				BigDecimal.valueOf(3), BigDecimal.valueOf(4),
+				BigDecimal.valueOf(5), BigDecimal.valueOf(6),
+				BigDecimal.valueOf(7), BigDecimal.valueOf(5),
+				BigDecimal.valueOf(4), BigDecimal.valueOf(3),
+				BigDecimal.valueOf(2), BigDecimal.valueOf(1),
+				BigDecimal.valueOf(1), BigDecimal.valueOf(1) }) == null);
+	}
+}

Added: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/misc/PackageDescrVisitorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/misc/PackageDescrVisitorTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/misc/PackageDescrVisitorTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,45 @@
+package org.drools.verifier.misc;
+
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.Collection;
+
+import org.drools.compiler.DrlParser;
+import org.drools.compiler.DroolsParserException;
+import org.drools.lang.descr.PackageDescr;
+import org.drools.verifier.Verifier;
+import org.drools.verifier.data.VerifierComponent;
+import org.drools.verifier.data.VerifierData;
+import org.drools.verifier.data.VerifierReportFactory;
+
+import junit.framework.TestCase;
+
+public class PackageDescrVisitorTest extends TestCase {
+
+    public void testVisit() throws DroolsParserException,
+                           UnknownDescriptionException {
+        PackageDescrVisitor visitor = new PackageDescrVisitor();
+        VerifierData data = VerifierReportFactory.newVerifierData();
+
+        assertNotNull( data );
+
+        Reader drlReader = new InputStreamReader( Verifier.class.getResourceAsStream( "Misc3.drl" ) );
+        PackageDescr packageDescr = new DrlParser().parse( drlReader );
+
+        assertNotNull( packageDescr );
+
+        visitor.addPackageDescrToData( packageDescr,
+                                       data );
+
+        Collection<VerifierComponent> all = data.getAll();
+
+        assertNotNull( all );
+        assertEquals( 49,
+                      all.size() );
+
+//        for ( VerifierComponent verifierComponent : all ) {
+//            System.out.println( verifierComponent );
+//        }
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/missingEquality/MissingEqualityTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/missingEquality/MissingEqualityTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/missingEquality/MissingEqualityTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -9,8 +9,8 @@
 import org.drools.verifier.TestBase;
 import org.drools.verifier.components.LiteralRestriction;
 import org.drools.verifier.components.VariableRestriction;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 import org.drools.verifier.report.components.Cause;
 import org.drools.verifier.report.components.Severity;
 import org.drools.verifier.report.components.VerifierMessage;
@@ -25,7 +25,7 @@
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Missing restriction in LiteralRestrictions"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("MissingEqualityTest.drl"), result
 				.getVerifierData());
@@ -65,7 +65,7 @@
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Missing restriction in VariableRestrictions"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> testData = getTestData(this.getClass()
 				.getResourceAsStream("MissingEqualityTest.drl"), result
 				.getVerifierData());

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/opposites/OppositePatternsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/opposites/OppositePatternsTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/opposites/OppositePatternsTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -10,7 +10,7 @@
 import org.drools.base.RuleNameMatchesAgendaFilter;
 import org.drools.verifier.TestBase;
 import org.drools.verifier.components.LiteralRestriction;
-import org.drools.verifier.components.PatternPossibility;
+import org.drools.verifier.components.SubPattern;
 import org.drools.verifier.components.Restriction;
 import org.drools.verifier.report.components.Cause;
 import org.drools.verifier.report.components.CauseType;
@@ -30,8 +30,8 @@
 		/*
 		 * Working pair
 		 */
-		PatternPossibility pp1 = new PatternPossibility();
-		PatternPossibility pp2 = new PatternPossibility();
+		SubPattern pp1 = new SubPattern();
+		SubPattern pp2 = new SubPattern();
 
 		Restriction r1 = new LiteralRestriction();
 		pp1.add(r1);
@@ -51,8 +51,8 @@
 		/*
 		 * Pair that doesn't work.
 		 */
-		PatternPossibility pp3 = new PatternPossibility();
-		PatternPossibility pp4 = new PatternPossibility();
+		SubPattern pp3 = new SubPattern();
+		SubPattern pp4 = new SubPattern();
 
 		Restriction r5 = new LiteralRestriction();
 		pp3.add(r5);

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	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/opposites/OppositeRestrictionsTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -20,301 +20,310 @@
 
 public class OppositeRestrictionsTest extends OppositesBase {
 
-	public void testLiteralRestrictionOpposite() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Restrictions.drl"));
+    public void testLiteralRestrictionOpposite() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Restrictions.drl" ) );
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Opposite LiteralRestrictions"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Opposite LiteralRestrictions" ) );
 
-		Collection<Object> data = new ArrayList<Object>();
+        Collection<Object> data = new ArrayList<Object>();
 
-		LiteralRestriction r1 = new LiteralRestriction();
-		r1.setFieldId(0);
-		r1.setOperator(Operator.EQUAL);
-		r1.setValue("1");
+        LiteralRestriction r1 = new LiteralRestriction();
+        r1.setFieldGuid( "0" );
+        r1.setOperator( Operator.EQUAL );
+        r1.setValue( "1" );
 
-		LiteralRestriction r2 = new LiteralRestriction();
-		r2.setFieldId(0);
-		r2.setOperator(Operator.NOT_EQUAL);
-		r2.setValue("1");
+        LiteralRestriction r2 = new LiteralRestriction();
+        r2.setFieldGuid( "0" );
+        r2.setOperator( Operator.NOT_EQUAL );
+        r2.setValue( "1" );
 
-		LiteralRestriction r3 = new LiteralRestriction();
-		r3.setFieldId(0);
-		r3.setOperator(Operator.EQUAL);
-		r3.setValue("1.0");
+        LiteralRestriction r3 = new LiteralRestriction();
+        r3.setFieldGuid( "0" );
+        r3.setOperator( Operator.EQUAL );
+        r3.setValue( "1.0" );
 
-		LiteralRestriction r4 = new LiteralRestriction();
-		r4.setFieldId(0);
-		r4.setOperator(Operator.NOT_EQUAL);
-		r4.setValue("1.0");
+        LiteralRestriction r4 = new LiteralRestriction();
+        r4.setFieldGuid( "0" );
+        r4.setOperator( Operator.NOT_EQUAL );
+        r4.setValue( "1.0" );
 
-		LiteralRestriction r5 = new LiteralRestriction();
-		r5.setFieldId(0);
-		r5.setOperator(MatchesEvaluatorsDefinition.MATCHES);
-		r5.setValue("foo");
+        LiteralRestriction r5 = new LiteralRestriction();
+        r5.setFieldGuid( "0" );
+        r5.setOperator( MatchesEvaluatorsDefinition.MATCHES );
+        r5.setValue( "foo" );
 
-		LiteralRestriction r6 = new LiteralRestriction();
-		r6.setFieldId(0);
-		r6.setOperator(MatchesEvaluatorsDefinition.NOT_MATCHES);
-		r6.setValue("foo");
+        LiteralRestriction r6 = new LiteralRestriction();
+        r6.setFieldGuid( "0" );
+        r6.setOperator( MatchesEvaluatorsDefinition.NOT_MATCHES );
+        r6.setValue( "foo" );
 
-		data.add(r1);
-		data.add(r2);
-		data.add(r3);
-		data.add(r4);
-		data.add(r5);
-		data.add(r6);
+        data.add( r1 );
+        data.add( r2 );
+        data.add( r3 );
+        data.add( r4 );
+        data.add( r5 );
+        data.add( r6 );
 
-		StatelessSessionResult sessionResult = session.executeWithResults(data);
+        StatelessSessionResult sessionResult = session.executeWithResults( data );
 
-		Map<Cause, Set<Cause>> map = createOppositesMap(CauseType.RESTRICTION,
-				sessionResult.iterateObjects());
+        Map<Cause, Set<Cause>> map = createOppositesMap( CauseType.RESTRICTION,
+                                                         sessionResult.iterateObjects() );
 
-		assertTrue((TestBase.causeMapContains(map, r1, r2) ^ TestBase
-				.causeMapContains(map, r2, r1)));
-		assertTrue((TestBase.causeMapContains(map, r3, r4) ^ TestBase
-				.causeMapContains(map, r4, r3)));
-		assertTrue((TestBase.causeMapContains(map, r5, r6) ^ TestBase
-				.causeMapContains(map, r6, r5)));
+        assertTrue( (TestBase.causeMapContains( map,
+                                                r1,
+                                                r2 ) ^ TestBase.causeMapContains( map,
+                                                                                  r2,
+                                                                                  r1 )) );
+        assertTrue( (TestBase.causeMapContains( map,
+                                                r3,
+                                                r4 ) ^ TestBase.causeMapContains( map,
+                                                                                  r4,
+                                                                                  r3 )) );
+        assertTrue( (TestBase.causeMapContains( map,
+                                                r5,
+                                                r6 ) ^ TestBase.causeMapContains( map,
+                                                                                  r6,
+                                                                                  r5 )) );
 
-		if (!map.isEmpty()) {
-			fail("More opposites than was expected.");
-		}
-	}
+        if ( !map.isEmpty() ) {
+            fail( "More opposites than was expected." );
+        }
+    }
 
-	public void testLiteralRestrictionOppositeWithRangesGreaterOrEqualAndLess()
-			throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Restrictions.drl"));
+    public void testLiteralRestrictionOppositeWithRangesGreaterOrEqualAndLess() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Restrictions.drl" ) );
 
-		session
-				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-						"Opposite LiteralRestrictions with ranges, greater or equal - less"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Opposite LiteralRestrictions with ranges, greater or equal - less" ) );
 
-		Collection<Object> data = new ArrayList<Object>();
+        Collection<Object> data = new ArrayList<Object>();
 
-		LiteralRestriction r1 = new LiteralRestriction();
-		r1.setFieldId(0);
-		r1.setOperator(Operator.GREATER_OR_EQUAL);
-		r1.setValue("1");
+        LiteralRestriction r1 = new LiteralRestriction();
+        r1.setFieldGuid( "0" );
+        r1.setOperator( Operator.GREATER_OR_EQUAL );
+        r1.setValue( "1" );
 
-		LiteralRestriction r2 = new LiteralRestriction();
-		r2.setFieldId(0);
-		r2.setOperator(Operator.LESS);
-		r2.setValue("1");
+        LiteralRestriction r2 = new LiteralRestriction();
+        r2.setFieldGuid( "0" );
+        r2.setOperator( Operator.LESS );
+        r2.setValue( "1" );
 
-		data.add(r1);
-		data.add(r2);
+        data.add( r1 );
+        data.add( r2 );
 
-		StatelessSessionResult sessionResult = session.executeWithResults(data);
+        StatelessSessionResult sessionResult = session.executeWithResults( data );
 
-		Map<Cause, Set<Cause>> map = createOppositesMap(CauseType.RESTRICTION,
-				sessionResult.iterateObjects());
+        Map<Cause, Set<Cause>> map = createOppositesMap( CauseType.RESTRICTION,
+                                                         sessionResult.iterateObjects() );
 
-		assertTrue((TestBase.causeMapContains(map, r1, r2) ^ TestBase
-				.causeMapContains(map, r2, r1)));
+        assertTrue( (TestBase.causeMapContains( map,
+                                                r1,
+                                                r2 ) ^ TestBase.causeMapContains( map,
+                                                                                  r2,
+                                                                                  r1 )) );
 
-		if (!map.isEmpty()) {
-			fail("More opposites than was expected.");
-		}
-	}
+        if ( !map.isEmpty() ) {
+            fail( "More opposites than was expected." );
+        }
+    }
 
-	public void testLiteralRestrictionOppositeWithRangesGreaterAndLessOrEqual()
-			throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Restrictions.drl"));
+    public void testLiteralRestrictionOppositeWithRangesGreaterAndLessOrEqual() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Restrictions.drl" ) );
 
-		session
-				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-						"Opposite LiteralRestrictions with ranges, greater - less or equal"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Opposite LiteralRestrictions with ranges, greater - less or equal" ) );
 
-		Collection<Object> data = new ArrayList<Object>();
+        Collection<Object> data = new ArrayList<Object>();
 
-		LiteralRestriction r1 = new LiteralRestriction();
-		r1.setFieldId(0);
-		r1.setOperator(Operator.GREATER);
-		r1.setValue("1");
+        LiteralRestriction r1 = new LiteralRestriction();
+        r1.setFieldGuid( "0" );
+        r1.setOperator( Operator.GREATER );
+        r1.setValue( "1" );
 
-		LiteralRestriction r2 = new LiteralRestriction();
-		r2.setFieldId(0);
-		r2.setOperator(Operator.LESS_OR_EQUAL);
-		r2.setValue("1");
+        LiteralRestriction r2 = new LiteralRestriction();
+        r2.setFieldGuid( "0" );
+        r2.setOperator( Operator.LESS_OR_EQUAL );
+        r2.setValue( "1" );
 
-		data.add(r1);
-		data.add(r2);
+        data.add( r1 );
+        data.add( r2 );
 
-		StatelessSessionResult sessionResult = session.executeWithResults(data);
+        StatelessSessionResult sessionResult = session.executeWithResults( data );
 
-		Map<Cause, Set<Cause>> map = createOppositesMap(CauseType.RESTRICTION,
-				sessionResult.iterateObjects());
+        Map<Cause, Set<Cause>> map = createOppositesMap( CauseType.RESTRICTION,
+                                                         sessionResult.iterateObjects() );
 
-		assertTrue((TestBase.causeMapContains(map, r1, r2) ^ TestBase
-				.causeMapContains(map, r2, r1)));
+        assertTrue( (TestBase.causeMapContains( map,
+                                                r1,
+                                                r2 ) ^ TestBase.causeMapContains( map,
+                                                                                  r2,
+                                                                                  r1 )) );
 
-		if (!map.isEmpty()) {
-			fail("More opposites than was expected.");
-		}
-	}
+        if ( !map.isEmpty() ) {
+            fail( "More opposites than was expected." );
+        }
+    }
 
-	public void testLiteralRestrictionOppositeWithRangesLessAndGreaterForIntsAndDates()
-			throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Restrictions.drl"));
+    public void testLiteralRestrictionOppositeWithRangesLessAndGreaterForIntsAndDates() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Restrictions.drl" ) );
 
-		session
-				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-						"Opposite LiteralRestrictions with ranges, less - greater for ints and dates"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Opposite LiteralRestrictions with ranges, less - greater for ints and dates" ) );
 
-		Collection<Object> data = new ArrayList<Object>();
+        Collection<Object> data = new ArrayList<Object>();
 
-		LiteralRestriction r1 = new LiteralRestriction();
-		r1.setFieldId(0);
-		r1.setOperator(Operator.GREATER);
-		r1.setValue("0");
+        LiteralRestriction r1 = new LiteralRestriction();
+        r1.setFieldGuid( "0" );
+        r1.setOperator( Operator.GREATER );
+        r1.setValue( "0" );
 
-		LiteralRestriction r2 = new LiteralRestriction();
-		r2.setFieldId(0);
-		r2.setOperator(Operator.LESS);
-		r2.setValue("1");
+        LiteralRestriction r2 = new LiteralRestriction();
+        r2.setFieldGuid( "0" );
+        r2.setOperator( Operator.LESS );
+        r2.setValue( "1" );
 
-		data.add(r1);
-		data.add(r2);
+        data.add( r1 );
+        data.add( r2 );
 
-		StatelessSessionResult sessionResult = session.executeWithResults(data);
+        StatelessSessionResult sessionResult = session.executeWithResults( data );
 
-		Map<Cause, Set<Cause>> map = createOppositesMap(CauseType.RESTRICTION,
-				sessionResult.iterateObjects());
+        Map<Cause, Set<Cause>> map = createOppositesMap( CauseType.RESTRICTION,
+                                                         sessionResult.iterateObjects() );
 
-		assertTrue((TestBase.causeMapContains(map, r1, r2) ^ TestBase
-				.causeMapContains(map, r2, r1)));
+        assertTrue( (TestBase.causeMapContains( map,
+                                                r1,
+                                                r2 ) ^ TestBase.causeMapContains( map,
+                                                                                  r2,
+                                                                                  r1 )) );
 
-		if (!map.isEmpty()) {
-			fail("More opposites than was expected.");
-		}
-	}
+        if ( !map.isEmpty() ) {
+            fail( "More opposites than was expected." );
+        }
+    }
 
-	public void testLiteralRestrictionOppositeWithRangesLessOrEqualAndGreaterOrEqualForIntsAndDates()
-			throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Restrictions.drl"));
+    public void testLiteralRestrictionOppositeWithRangesLessOrEqualAndGreaterOrEqualForIntsAndDates() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Restrictions.drl" ) );
 
-		session
-				.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-						"Opposite LiteralRestrictions with ranges, less or equal - greater or equal for ints and dates"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Opposite LiteralRestrictions with ranges, less or equal - greater or equal for ints and dates" ) );
 
-		Collection<Object> data = new ArrayList<Object>();
+        Collection<Object> data = new ArrayList<Object>();
 
-		LiteralRestriction r1 = new LiteralRestriction();
-		r1.setFieldId(0);
-		r1.setOperator(Operator.GREATER_OR_EQUAL);
-		r1.setValue("1");
+        LiteralRestriction r1 = new LiteralRestriction();
+        r1.setFieldGuid( "0" );
+        r1.setOperator( Operator.GREATER_OR_EQUAL );
+        r1.setValue( "1" );
 
-		LiteralRestriction r2 = new LiteralRestriction();
-		r2.setFieldId(0);
-		r2.setOperator(Operator.LESS_OR_EQUAL);
-		r2.setValue("0");
+        LiteralRestriction r2 = new LiteralRestriction();
+        r2.setFieldGuid( "0" );
+        r2.setOperator( Operator.LESS_OR_EQUAL );
+        r2.setValue( "0" );
 
-		data.add(r1);
-		data.add(r2);
+        data.add( r1 );
+        data.add( r2 );
 
-		StatelessSessionResult sessionResult = session.executeWithResults(data);
+        StatelessSessionResult sessionResult = session.executeWithResults( data );
 
-		Map<Cause, Set<Cause>> map = createOppositesMap(CauseType.RESTRICTION,
-				sessionResult.iterateObjects());
+        Map<Cause, Set<Cause>> map = createOppositesMap( CauseType.RESTRICTION,
+                                                         sessionResult.iterateObjects() );
 
-		assertTrue((TestBase.causeMapContains(map, r1, r2) ^ TestBase
-				.causeMapContains(map, r2, r1)));
+        assertTrue( (TestBase.causeMapContains( map,
+                                                r1,
+                                                r2 ) ^ TestBase.causeMapContains( map,
+                                                                                  r2,
+                                                                                  r1 )) );
 
-		if (!map.isEmpty()) {
-			fail("More opposites than was expected.");
-		}
-	}
+        if ( !map.isEmpty() ) {
+            fail( "More opposites than was expected." );
+        }
+    }
 
-	public void testVariableRestrictionOpposite() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Restrictions.drl"));
+    public void testVariableRestrictionOpposite() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Restrictions.drl" ) );
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Opposite VariableRestrictions"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Opposite VariableRestrictions" ) );
 
-		Collection<Object> data = new ArrayList<Object>();
+        Collection<Object> data = new ArrayList<Object>();
 
-		/*
-		 * Working pair
-		 */
-		Variable variable1 = new Variable();
-		variable1.setObjectId(1);
-		variable1.setObjectType(VerifierComponentType.FIELD);
+        /*
+         * Working pair
+         */
+        Variable variable1 = new Variable();
+        variable1.setObjectTypeGuid( "1" );
+        variable1.setObjectTypeType( VerifierComponentType.FIELD.getType() );
 
-		VariableRestriction r1 = new VariableRestriction();
-		r1.setPatternId(0);
-		r1.setFieldId(0);
-		r1.setOperator(Operator.GREATER_OR_EQUAL);
-		r1.setVariable(variable1);
+        VariableRestriction r1 = new VariableRestriction();
+        r1.setPatternGuid( "0" );
+        r1.setFieldGuid( "0" );
+        r1.setOperator( Operator.GREATER_OR_EQUAL );
+        r1.setVariable( variable1 );
 
-		VariableRestriction r2 = new VariableRestriction();
-		r1.setPatternId(0);
-		r2.setFieldId(0);
-		r2.setOperator(Operator.LESS);
-		r2.setVariable(variable1);
+        VariableRestriction r2 = new VariableRestriction();
+        r1.setPatternGuid( "0" );
+        r2.setFieldGuid( "0" );
+        r2.setOperator( Operator.LESS );
+        r2.setVariable( variable1 );
 
-		String containsOperator = "contains";
+        String containsOperator = "contains";
 
-		Variable variable2 = new Variable();
-		variable2.setObjectId(2);
-		variable2.setObjectType(VerifierComponentType.FIELD);
+        Variable variable2 = new Variable();
+        variable2.setObjectTypeGuid( "2" );
+        variable2.setObjectTypeType( VerifierComponentType.FIELD.getType() );
 
-		VariableRestriction r3 = new VariableRestriction();
-		r3.setPatternId(1);
-		r3.setFieldId(1);
-		r3.setOperator(Operator.determineOperator(containsOperator, false));
-		r3.setVariable(variable2);
+        VariableRestriction r3 = new VariableRestriction();
+        r3.setPatternGuid( "1" );
+        r3.setFieldGuid( "1" );
+        r3.setOperator( Operator.determineOperator( containsOperator,
+                                                    false ) );
+        r3.setVariable( variable2 );
 
-		VariableRestriction r4 = new VariableRestriction();
-		r4.setPatternId(1);
-		r4.setFieldId(1);
-		r4.setOperator(Operator.determineOperator(containsOperator, true));
-		r4.setVariable(variable2);
+        VariableRestriction r4 = new VariableRestriction();
+        r4.setPatternGuid( "1" );
+        r4.setFieldGuid( "1" );
+        r4.setOperator( Operator.determineOperator( containsOperator,
+                                                    true ) );
+        r4.setVariable( variable2 );
 
-		/*
-		 * Pair that doesn't work.
-		 */
-		Variable variable3 = new Variable();
-		variable3.setObjectId(3);
-		variable3.setObjectType(VerifierComponentType.FIELD);
+        /*
+         * Pair that doesn't work.
+         */
+        Variable variable3 = new Variable();
+        variable3.setObjectTypeGuid( "3" );
+        variable3.setObjectTypeType( VerifierComponentType.FIELD.getType() );
 
-		VariableRestriction r5 = new VariableRestriction();
-		r5.setPatternId(2);
-		r5.setFieldId(1);
-		r5.setOperator(Operator.GREATER_OR_EQUAL);
-		r5.setVariable(variable3);
+        VariableRestriction r5 = new VariableRestriction();
+        r5.setPatternGuid( "2" );
+        r5.setFieldGuid( "1" );
+        r5.setOperator( Operator.GREATER_OR_EQUAL );
+        r5.setVariable( variable3 );
 
-		VariableRestriction r6 = new VariableRestriction();
-		r6.setPatternId(2);
-		r6.setFieldId(1);
-		r6.setOperator(Operator.EQUAL);
-		r6.setVariable(variable3);
+        VariableRestriction r6 = new VariableRestriction();
+        r6.setPatternGuid( "2" );
+        r6.setFieldGuid( "1" );
+        r6.setOperator( Operator.EQUAL );
+        r6.setVariable( variable3 );
 
-		data.add(r1);
-		data.add(r2);
-		data.add(r3);
-		data.add(r4);
-		data.add(r5);
-		data.add(r6);
+        data.add( r1 );
+        data.add( r2 );
+        data.add( r3 );
+        data.add( r4 );
+        data.add( r5 );
+        data.add( r6 );
 
-		StatelessSessionResult sessionResult = session.executeWithResults(data);
+        StatelessSessionResult sessionResult = session.executeWithResults( data );
 
-		Map<Cause, Set<Cause>> map = createOppositesMap(CauseType.RESTRICTION,
-				sessionResult.iterateObjects());
+        Map<Cause, Set<Cause>> map = createOppositesMap( CauseType.RESTRICTION,
+                                                         sessionResult.iterateObjects() );
 
-		assertTrue((TestBase.causeMapContains(map, r1, r2) ^ TestBase
-				.causeMapContains(map, r2, r1)));
-		assertTrue((TestBase.causeMapContains(map, r3, r4) ^ TestBase
-				.causeMapContains(map, r4, r3)));
+        assertTrue( (TestBase.causeMapContains( map,
+                                                r1,
+                                                r2 ) ^ TestBase.causeMapContains( map,
+                                                                                  r2,
+                                                                                  r1 )) );
+        assertTrue( (TestBase.causeMapContains( map,
+                                                r3,
+                                                r4 ) ^ TestBase.causeMapContains( map,
+                                                                                  r4,
+                                                                                  r3 )) );
 
-		if (!map.isEmpty()) {
-			fail("More opposites than was expected.");
-		}
-	}
+        if ( !map.isEmpty() ) {
+            fail( "More opposites than was expected." );
+        }
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/optimisation/PatternOrderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/optimisation/PatternOrderTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/optimisation/PatternOrderTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -7,51 +7,47 @@
 import org.drools.StatelessSession;
 import org.drools.base.RuleNameMatchesAgendaFilter;
 import org.drools.verifier.TestBase;
-import org.drools.verifier.components.VerifierComponent;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.components.RuleComponent;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 import org.drools.verifier.report.components.Severity;
 import org.drools.verifier.report.components.VerifierMessage;
 import org.drools.verifier.report.components.VerifierMessageBase;
 
 public class PatternOrderTest extends TestBase {
 
-	public void testEvalOrderInsideOperator() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("PatternOrder.drl"));
+    public void testEvalOrderInsideOperator() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "PatternOrder.drl" ) );
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Optimise evals inside pattern"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Optimise evals inside pattern" ) );
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
-		Collection<? extends Object> testData = getTestData(this.getClass()
-				.getResourceAsStream("OptimisationPatternOrderTest.drl"),
-				result.getVerifierData());
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
+        Collection< ? extends Object> testData = getTestData( this.getClass().getResourceAsStream( "OptimisationPatternOrderTest.drl" ),
+                                                              result.getVerifierData() );
 
-		session.setGlobal("result", result);
+        session.setGlobal( "result",
+                           result );
 
-		session.executeWithResults(testData);
+        session.executeWithResults( testData );
 
-		Iterator<VerifierMessageBase> iter = result.getBySeverity(
-				Severity.NOTE).iterator();
+        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();
+        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 RuleComponent[2] )[0].getRuleName();
 
-				ruleNames.add(name);
-			}
-		}
+                ruleNames.add( name );
+            }
+        }
 
-		assertTrue(ruleNames.remove("Wrong eval order 1"));
+        assertTrue( ruleNames.remove( "Wrong eval order 1" ) );
 
-		if (!ruleNames.isEmpty()) {
-			for (String string : ruleNames) {
-				fail("Rule " + string + " caused an error.");
-			}
-		}
-	}
+        if ( !ruleNames.isEmpty() ) {
+            for ( String string : ruleNames ) {
+                fail( "Rule " + string + " caused an error." );
+            }
+        }
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/optimisation/RestrictionOrderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/optimisation/RestrictionOrderTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/optimisation/RestrictionOrderTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -14,9 +14,9 @@
 import org.drools.verifier.components.OperatorDescr;
 import org.drools.verifier.components.Pattern;
 import org.drools.verifier.components.Restriction;
-import org.drools.verifier.components.VerifierComponent;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.components.RuleComponent;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 import org.drools.verifier.report.components.Cause;
 import org.drools.verifier.report.components.Severity;
 import org.drools.verifier.report.components.VerifierMessage;
@@ -24,181 +24,169 @@
 
 public class RestrictionOrderTest extends TestBase {
 
-	public void testRestrictionOrderInsideOperator() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("RestrictionOrder.drl"));
+    public void testRestrictionOrderInsideOperator() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "RestrictionOrder.drl" ) );
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Optimise restrictions inside operator"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Optimise restrictions inside operator" ) );
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
-		Collection<? extends Object> testData = getTestData(this.getClass()
-				.getResourceAsStream("OptimisationRestrictionOrderTest.drl"),
-				result.getVerifierData());
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
+        Collection< ? extends Object> testData = getTestData( this.getClass().getResourceAsStream( "OptimisationRestrictionOrderTest.drl" ),
+                                                              result.getVerifierData() );
 
-		session.setGlobal("result", result);
+        session.setGlobal( "result",
+                           result );
 
-		session.executeWithResults(testData);
+        session.executeWithResults( testData );
 
-		Iterator<VerifierMessageBase> iter = result.getBySeverity(
-				Severity.NOTE).iterator();
+        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 Restriction[2])[0].getRuleName();
+        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 Restriction[2] )[0].getRuleName();
 
-				ruleNames.add(name);
-			}
-		}
+                ruleNames.add( name );
+            }
+        }
 
-		assertTrue(ruleNames.remove("Wrong descr order 1"));
+        assertTrue( ruleNames.remove( "Wrong descr order 1" ) );
 
-		if (!ruleNames.isEmpty()) {
-			for (String string : ruleNames) {
-				fail("Rule " + string + " caused an error.");
-			}
-		}
-	}
+        if ( !ruleNames.isEmpty() ) {
+            for ( String string : ruleNames ) {
+                fail( "Rule " + string + " caused an error." );
+            }
+        }
+    }
 
-	public void testRestrictionOrderInsideConstraint() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("RestrictionOrder.drl"));
+    public void testRestrictionOrderInsideConstraint() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "RestrictionOrder.drl" ) );
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Optimise restrictions inside constraint"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Optimise restrictions inside constraint" ) );
 
-		Collection<Object> testData = new ArrayList<Object>();
+        Collection<Object> testData = new ArrayList<Object>();
 
-		/*
-		 * Case 1
-		 */
-		Pattern pattern1 = new Pattern();
-		testData.add(pattern1);
+        /*
+         * Case 1
+         */
+        Pattern pattern1 = new Pattern();
+        testData.add( pattern1 );
 
-		OperatorDescr parent1 = new OperatorDescr(OperatorDescr.Type.AND);
+        OperatorDescr parent1 = new OperatorDescr( OperatorDescr.Type.AND );
 
-		LiteralRestriction r1 = new LiteralRestriction();
-		r1.setPatternId(pattern1.getId());
-		r1.setParent(parent1);
-		r1.setOperator(Operator.GREATER);
-		r1.setOrderNumber(1);
-		testData.add(r1);
+        LiteralRestriction r1 = new LiteralRestriction();
+        r1.setPatternGuid( pattern1.getGuid() );
+        r1.setParentGuid( parent1.getGuid() );
+        r1.setOperator( Operator.GREATER );
+        r1.setOrderNumber( 1 );
+        testData.add( r1 );
 
-		LiteralRestriction r2 = new LiteralRestriction();
-		r2.setPatternId(pattern1.getId());
-		r2.setParent(parent1);
-		r2.setOperator(Operator.EQUAL);
-		r2.setOrderNumber(2);
-		testData.add(r2);
+        LiteralRestriction r2 = new LiteralRestriction();
+        r2.setPatternGuid( pattern1.getGuid() );
+        r2.setParentGuid( parent1.getGuid() );
+        r2.setOperator( Operator.EQUAL );
+        r2.setOrderNumber( 2 );
+        testData.add( r2 );
 
-		LiteralRestriction r3 = new LiteralRestriction();
-		r3.setPatternId(pattern1.getId());
-		r3.setParent(parent1);
-		r3.setOperator(Operator.LESS);
-		r3.setOrderNumber(3);
-		testData.add(r3);
+        LiteralRestriction r3 = new LiteralRestriction();
+        r3.setPatternGuid( pattern1.getGuid() );
+        r3.setParentGuid( parent1.getGuid() );
+        r3.setOperator( Operator.LESS );
+        r3.setOrderNumber( 3 );
+        testData.add( r3 );
 
-		/*
-		 * Case 2
-		 */
-		Pattern pattern2 = new Pattern();
-		testData.add(pattern2);
+        /*
+         * Case 2
+         */
+        Pattern pattern2 = new Pattern();
+        testData.add( pattern2 );
 
-		OperatorDescr parent2 = new OperatorDescr(OperatorDescr.Type.OR);
+        OperatorDescr parent2 = new OperatorDescr( OperatorDescr.Type.OR );
 
-		LiteralRestriction r4 = new LiteralRestriction();
-		r4.setPatternId(pattern2.getId());
-		r4.setParent(parent2);
-		r4.setOperator(Operator.NOT_EQUAL);
-		r4.setOrderNumber(1);
-		testData.add(r4);
+        LiteralRestriction r4 = new LiteralRestriction();
+        r4.setPatternGuid( pattern2.getGuid() );
+        r4.setParentGuid( parent2.getGuid() );
+        r4.setOperator( Operator.NOT_EQUAL );
+        r4.setOrderNumber( 1 );
+        testData.add( r4 );
 
-		LiteralRestriction r5 = new LiteralRestriction();
-		r5.setPatternId(pattern2.getId());
-		r5.setParent(parent2);
-		r5.setOperator(Operator.LESS_OR_EQUAL);
-		r5.setOrderNumber(2);
-		testData.add(r5);
+        LiteralRestriction r5 = new LiteralRestriction();
+        r5.setPatternGuid( pattern2.getGuid() );
+        r5.setParentGuid( parent2.getGuid() );
+        r5.setOperator( Operator.LESS_OR_EQUAL );
+        r5.setOrderNumber( 2 );
+        testData.add( r5 );
 
-		LiteralRestriction r6 = new LiteralRestriction();
-		r6.setPatternId(pattern2.getId());
-		r6.setParent(parent2);
-		r6.setOperator(Operator.NOT_EQUAL);
-		r6.setOrderNumber(3);
-		testData.add(r6);
+        LiteralRestriction r6 = new LiteralRestriction();
+        r6.setPatternGuid( pattern2.getGuid() );
+        r6.setParentGuid( parent2.getGuid() );
+        r6.setOperator( Operator.NOT_EQUAL );
+        r6.setOrderNumber( 3 );
+        testData.add( r6 );
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
-		session.setGlobal("result", result);
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
+        session.setGlobal( "result",
+                           result );
 
-		session.executeWithResults(testData);
+        session.executeWithResults( testData );
 
-		Iterator<VerifierMessageBase> iter = result.getBySeverity(
-				Severity.NOTE).iterator();
+        Iterator<VerifierMessageBase> iter = result.getBySeverity( Severity.NOTE ).iterator();
 
-		Map<Cause, Cause> pairs = new HashMap<Cause, Cause>();
-		while (iter.hasNext()) {
-			Object o = (Object) iter.next();
-			if (o instanceof VerifierMessage) {
-				Cause left = ((VerifierMessage) o).getCauses().toArray(
-						new Cause[2])[0];
-				Cause right = ((VerifierMessage) o).getCauses().toArray(
-						new Cause[2])[1];
+        Map<Cause, Cause> pairs = new HashMap<Cause, Cause>();
+        while ( iter.hasNext() ) {
+            Object o = (Object) iter.next();
+            if ( o instanceof VerifierMessage ) {
+                Cause left = ((VerifierMessage) o).getCauses().toArray( new Cause[2] )[0];
+                Cause right = ((VerifierMessage) o).getCauses().toArray( new Cause[2] )[1];
 
-				pairs.put(left, right);
-			}
-		}
+                pairs.put( left,
+                           right );
+            }
+        }
 
-		// Check that case 1 is here.
-		assertTrue((pairs.containsKey(r1) && pairs.get(r1).equals(r2))
-				|| pairs.containsKey(r2) && pairs.get(r2).equals(r1));
+        // Check that case 1 is here.
+        assertTrue( (pairs.containsKey( r1 ) && pairs.get( r1 ).equals( r2 )) || pairs.containsKey( r2 ) && pairs.get( r2 ).equals( r1 ) );
 
-		// Check that case 2 is here.
-		assertTrue((pairs.containsKey(r4) && pairs.get(r4).equals(r5))
-				|| pairs.containsKey(r5) && pairs.get(r5).equals(r4));
+        // Check that case 2 is here.
+        assertTrue( (pairs.containsKey( r4 ) && pairs.get( r4 ).equals( r5 )) || pairs.containsKey( r5 ) && pairs.get( r5 ).equals( r4 ) );
 
-		// Check that there is only one pair.
-		assertEquals(2, pairs.size());
-	}
+        // Check that there is only one pair.
+        assertEquals( 2,
+                      pairs.size() );
+    }
 
-	public void testPredicateOrderInsideOperator() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("RestrictionOrder.drl"));
+    public void testPredicateOrderInsideOperator() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "RestrictionOrder.drl" ) );
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Optimise predicates inside operator"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Optimise predicates inside operator" ) );
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
-		Collection<? extends Object> testData = getTestData(this.getClass()
-				.getResourceAsStream("OptimisationRestrictionOrderTest.drl"),
-				result.getVerifierData());
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
+        Collection< ? extends Object> testData = getTestData( this.getClass().getResourceAsStream( "OptimisationRestrictionOrderTest.drl" ),
+                                                              result.getVerifierData() );
 
-		session.setGlobal("result", result);
+        session.setGlobal( "result",
+                           result );
 
-		session.executeWithResults(testData);
+        session.executeWithResults( testData );
 
-		Iterator<VerifierMessageBase> iter = result.getBySeverity(
-				Severity.NOTE).iterator();
+        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();
+        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 RuleComponent[2] )[0].getRuleName();
 
-				ruleNames.add(name);
-			}
-		}
+                ruleNames.add( name );
+            }
+        }
 
-		assertTrue(ruleNames.remove("Wrong eval order 1"));
+        assertTrue( ruleNames.remove( "Wrong eval order 1" ) );
 
-		if (!ruleNames.isEmpty()) {
-			for (String string : ruleNames) {
-				fail("Rule " + string + " caused an error.");
-			}
-		}
-	}
+        if ( !ruleNames.isEmpty() ) {
+            for ( String string : ruleNames ) {
+                fail( "Rule " + string + " caused an error." );
+            }
+        }
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/overlaps/OverlappingRestrictionsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/overlaps/OverlappingRestrictionsTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/overlaps/OverlappingRestrictionsTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -10,9 +10,9 @@
 import org.drools.verifier.TestBase;
 import org.drools.verifier.components.Field;
 import org.drools.verifier.components.LiteralRestriction;
-import org.drools.verifier.components.VerifierComponent;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.components.RuleComponent;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 import org.drools.verifier.report.components.Severity;
 import org.drools.verifier.report.components.Subsumption;
 import org.drools.verifier.report.components.VerifierMessage;
@@ -20,98 +20,97 @@
 
 public class OverlappingRestrictionsTest extends TestBase {
 
-	public void testOverlap() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Restrictions.drl"));
+    public void testOverlap() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Restrictions.drl" ) );
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Find overlapping restrictions"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Find overlapping restrictions" ) );
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
 
-		Collection<Object> data = new ArrayList<Object>();
+        Collection<Object> data = new ArrayList<Object>();
 
-		/*
-		 * There restrictions overlap
-		 */
-		String ruleName1 = "Rule 1";
+        /*
+         * There restrictions overlap
+         */
+        String ruleName1 = "Rule 1";
 
-		Field field1 = new Field();
+        Field field1 = new Field();
 
-		LiteralRestriction lr1 = new LiteralRestriction();
-		lr1.setRuleName(ruleName1);
-		lr1.setFieldId(field1.getId());
-		lr1.setValue("1.0");
-		lr1.setOperator(Operator.GREATER);
+        LiteralRestriction lr1 = new LiteralRestriction();
+        lr1.setRuleName( ruleName1 );
+        lr1.setFieldGuid( field1.getGuid() );
+        lr1.setValue( "1.0" );
+        lr1.setOperator( Operator.GREATER );
 
-		LiteralRestriction lr2 = new LiteralRestriction();
-		lr2.setRuleName(ruleName1);
-		lr2.setFieldId(field1.getId());
-		lr2.setValue("2.0");
-		lr2.setOperator(Operator.GREATER);
+        LiteralRestriction lr2 = new LiteralRestriction();
+        lr2.setRuleName( ruleName1 );
+        lr2.setFieldGuid( field1.getGuid() );
+        lr2.setValue( "2.0" );
+        lr2.setOperator( Operator.GREATER );
 
-		Subsumption s1 = new Subsumption(lr1, lr2);
+        Subsumption s1 = new Subsumption( lr1,
+                                          lr2 );
 
-		/*
-		 * There restrictions do not overlap
-		 */
-		String ruleName2 = "Rule 2";
+        /*
+         * There restrictions do not overlap
+         */
+        String ruleName2 = "Rule 2";
 
-		Field field2 = new Field();
+        Field field2 = new Field();
 
-		LiteralRestriction lr3 = new LiteralRestriction();
-		lr3.setRuleName(ruleName2);
-		lr3.setFieldId(field2.getId());
-		lr3.setValue("1.0");
-		lr3.setOperator(Operator.GREATER);
+        LiteralRestriction lr3 = new LiteralRestriction();
+        lr3.setRuleName( ruleName2 );
+        lr3.setFieldGuid( field2.getGuid() );
+        lr3.setValue( "1.0" );
+        lr3.setOperator( Operator.GREATER );
 
-		LiteralRestriction lr4 = new LiteralRestriction();
-		lr4.setRuleName(ruleName2);
-		lr4.setFieldId(field2.getId());
-		lr4.setValue("2.0");
-		lr4.setOperator(Operator.GREATER);
+        LiteralRestriction lr4 = new LiteralRestriction();
+        lr4.setRuleName( ruleName2 );
+        lr4.setFieldGuid( field2.getGuid() );
+        lr4.setValue( "2.0" );
+        lr4.setOperator( Operator.GREATER );
 
-		LiteralRestriction lr5 = new LiteralRestriction();
-		lr5.setRuleName(ruleName2);
-		lr5.setFieldId(field2.getId());
-		lr5.setValue("1.5");
-		lr5.setOperator(Operator.LESS);
+        LiteralRestriction lr5 = new LiteralRestriction();
+        lr5.setRuleName( ruleName2 );
+        lr5.setFieldGuid( field2.getGuid() );
+        lr5.setValue( "1.5" );
+        lr5.setOperator( Operator.LESS );
 
-		Subsumption s2 = new Subsumption(lr3, lr4);
+        Subsumption s2 = new Subsumption( lr3,
+                                          lr4 );
 
-		data.add(lr1);
-		data.add(lr2);
-		data.add(lr3);
-		data.add(lr4);
-		data.add(lr5);
-		data.add(s1);
-		data.add(s2);
+        data.add( lr1 );
+        data.add( lr2 );
+        data.add( lr3 );
+        data.add( lr4 );
+        data.add( lr5 );
+        data.add( s1 );
+        data.add( s2 );
 
-		session.setGlobal("result", result);
+        session.setGlobal( "result",
+                           result );
 
-		session.executeWithResults(data);
+        session.executeWithResults( data );
 
-		Iterator<VerifierMessageBase> iter = result.getBySeverity(
-				Severity.NOTE).iterator();
+        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();
+        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 RuleComponent[2] )[0].getRuleName();
 
-				ruleNames.add(name);
-			}
-		}
+                ruleNames.add( name );
+            }
+        }
 
-		assertTrue(ruleNames.remove(ruleName1));
-		assertFalse(ruleNames.remove(ruleName2));
+        assertTrue( ruleNames.remove( ruleName1 ) );
+        assertFalse( ruleNames.remove( ruleName2 ) );
 
-		if (!ruleNames.isEmpty()) {
-			for (String string : ruleNames) {
-				fail("Rule " + string + " caused an error.");
-			}
-		}
-	}
+        if ( !ruleNames.isEmpty() ) {
+            for ( String string : ruleNames ) {
+                fail( "Rule " + string + " caused an error." );
+            }
+        }
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/NotesTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/NotesTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/NotesTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -7,10 +7,10 @@
 import org.drools.base.RuleNameMatchesAgendaFilter;
 import org.drools.verifier.TestBase;
 import org.drools.verifier.components.LiteralRestriction;
-import org.drools.verifier.components.PatternPossibility;
-import org.drools.verifier.components.RulePossibility;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.components.SubPattern;
+import org.drools.verifier.components.SubRule;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 import org.drools.verifier.report.components.Redundancy;
 import org.drools.verifier.report.components.RedundancyType;
 import org.drools.verifier.report.components.Severity;
@@ -34,7 +34,7 @@
 		Redundancy redundancy = new Redundancy(
 				RedundancyType.STRONG, left, right);
 
-		PatternPossibility possibility = new PatternPossibility();
+		SubPattern possibility = new SubPattern();
 		possibility.add(left);
 		possibility.add(right);
 
@@ -43,7 +43,7 @@
 		objects.add(redundancy);
 		objects.add(possibility);
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		session.setGlobal("result", result);
 
 		session.executeWithResults(objects);
@@ -68,14 +68,14 @@
 						"Find redundant pattern possibilities from rule possibilities"));
 
 		Collection<Object> objects = new ArrayList<Object>();
-		PatternPossibility left = new PatternPossibility();
+		SubPattern left = new SubPattern();
 
-		PatternPossibility right = new PatternPossibility();
+		SubPattern right = new SubPattern();
 
 		Redundancy redundancy = new Redundancy(
 				RedundancyType.STRONG, left, right);
 
-		RulePossibility possibility = new RulePossibility();
+		SubRule possibility = new SubRule();
 		possibility.add(left);
 		possibility.add(right);
 
@@ -84,7 +84,7 @@
 		objects.add(redundancy);
 		objects.add(possibility);
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		session.setGlobal("result", result);
 
 		session.executeWithResults(objects);

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/RedundancyTestBase.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/RedundancyTestBase.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/RedundancyTestBase.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -7,7 +7,7 @@
 import java.util.Set;
 
 import org.drools.verifier.TestBase;
-import org.drools.verifier.components.VerifierComponent;
+import org.drools.verifier.components.RuleComponent;
 import org.drools.verifier.report.components.Cause;
 import org.drools.verifier.report.components.CauseType;
 import org.drools.verifier.report.components.Redundancy;
@@ -19,97 +19,100 @@
  */
 public class RedundancyTestBase extends TestBase {
 
-	/**
-	 * Creates redundancy map from Redundancy objects, one rule may have several
-	 * redundancy dependencies.
-	 *
-	 * @param iter
-	 * @return
-	 */
-	protected Map<String, Set<String>> createRedundancyMap(Iterator<Object> iter) {
+    /**
+     * Creates redundancy map from Redundancy objects, one rule may have several
+     * redundancy dependencies.
+     *
+     * @param iter
+     * @return
+     */
+    protected Map<String, Set<String>> createRedundancyMap(Iterator<Object> iter) {
 
-		Map<String, Set<String>> map = new HashMap<String, Set<String>>();
-		while (iter.hasNext()) {
-			Object o = (Object) iter.next();
-			if (o instanceof Redundancy) {
-				Redundancy r = (Redundancy) o;
-				VerifierComponent left = (VerifierComponent) r.getLeft();
-				VerifierComponent right = (VerifierComponent) r.getRight();
+        Map<String, Set<String>> map = new HashMap<String, Set<String>>();
+        while ( iter.hasNext() ) {
+            Object o = (Object) iter.next();
+            if ( o instanceof Redundancy ) {
+                Redundancy r = (Redundancy) o;
+                RuleComponent left = (RuleComponent) r.getLeft();
+                RuleComponent right = (RuleComponent) r.getRight();
 
-				if (map.containsKey(left.getRuleName())) {
-					Set<String> set = map.get(left.getRuleName());
-					set.add(right.getRuleName());
-				} else {
-					Set<String> set = new HashSet<String>();
-					set.add(right.getRuleName());
-					map.put(left.getRuleName(), set);
-				}
-			}
-		}
+                if ( map.containsKey( left.getRuleName() ) ) {
+                    Set<String> set = map.get( left.getRuleName() );
+                    set.add( right.getRuleName() );
+                } else {
+                    Set<String> set = new HashSet<String>();
+                    set.add( right.getRuleName() );
+                    map.put( left.getRuleName(),
+                             set );
+                }
+            }
+        }
 
-		return map;
-	}
+        return map;
+    }
 
-	/**
-	 * Creates redundancy map from Redundancy objects, one rule may have several
-	 * redundancy dependencies.
-	 *
-	 * @param iter
-	 * @return
-	 */
-	protected Map<Cause, Set<Cause>> createRedundancyCauseMap(
-			CauseType type, Iterator<Object> iter) {
+    /**
+     * Creates redundancy map from Redundancy objects, one rule may have several
+     * redundancy dependencies.
+     *
+     * @param iter
+     * @return
+     */
+    protected Map<Cause, Set<Cause>> createRedundancyCauseMap(CauseType type,
+                                                              Iterator<Object> iter) {
 
-		Map<Cause, Set<Cause>> map = new HashMap<Cause, Set<Cause>>();
-		while (iter.hasNext()) {
-			Object o = (Object) iter.next();
-			if (o instanceof Redundancy) {
-				Redundancy r = (Redundancy) o;
+        Map<Cause, Set<Cause>> map = new HashMap<Cause, Set<Cause>>();
+        while ( iter.hasNext() ) {
+            Object o = (Object) iter.next();
+            if ( o instanceof Redundancy ) {
+                Redundancy r = (Redundancy) o;
 
-				if (r.getLeft().getCauseType() == type) {
-					Cause left = r.getLeft();
-					Cause right = r.getRight();
+                if ( r.getLeft().getCauseType() == type ) {
+                    Cause left = r.getLeft();
+                    Cause right = r.getRight();
 
-					if (map.containsKey(left)) {
-						Set<Cause> set = map.get(left);
-						set.add(right);
-					} else {
-						Set<Cause> set = new HashSet<Cause>();
-						set.add(right);
-						map.put(left, set);
-					}
-				}
-			}
-		}
+                    if ( map.containsKey( left ) ) {
+                        Set<Cause> set = map.get( left );
+                        set.add( right );
+                    } else {
+                        Set<Cause> set = new HashSet<Cause>();
+                        set.add( right );
+                        map.put( left,
+                                 set );
+                    }
+                }
+            }
+        }
 
-		return map;
-	}
+        return map;
+    }
 
-	public void testDummy() {
-		// this is needed as eclipse will try to run this and produce a failure
-		// if its not here.
-	}
+    public void testDummy() {
+        // this is needed as eclipse will try to run this and produce a failure
+        // if its not here.
+    }
 
-	/**
-	 * Returns true if map contains redundancy where key is redundant to value.
-	 *
-	 * @param map
-	 * @param key
-	 * @param value
-	 * @return True if redundancy exists.
-	 */
-	protected static boolean mapContains(Map<String, Set<Redundancy>> map,
-			String key, Object value) {
-		if (map.containsKey(key)) {
-			Set<Redundancy> set = map.get(key);
-			boolean exists = set.remove(value);
+    /**
+     * Returns true if map contains redundancy where key is redundant to value.
+     *
+     * @param map
+     * @param key
+     * @param value
+     * @return True if redundancy exists.
+     */
+    protected static boolean mapContains(Map<String, Set<Redundancy>> map,
+                                         String key,
+                                         Object value) {
+        if ( map.containsKey( key ) ) {
+            Set<Redundancy> set = map.get( key );
+            boolean exists = set.remove( value );
 
-			// If set is empty remove key from map.
-			if (set.isEmpty()) {
-				map.remove(key);
-			}
-			return exists;
-		}
-		return false;
-	}
+            // If set is empty remove key from map.
+            if ( set.isEmpty() ) {
+                map.remove( key );
+            }
+            return exists;
+        }
+        return false;
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/RedundantConsequencesTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/RedundantConsequencesTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/RedundantConsequencesTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -8,8 +8,8 @@
 import org.drools.StatelessSessionResult;
 import org.drools.base.RuleNameMatchesAgendaFilter;
 import org.drools.verifier.TestBase;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 
 public class RedundantConsequencesTest extends RedundancyTestBase {
 
@@ -20,7 +20,7 @@
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Find redundant TextConsequences"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> data = getTestData(this.getClass()
 				.getResourceAsStream("ConsequenceRedundancyTest.drl"), result
 				.getVerifierData());

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/RedundantPossibilitiesTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/RedundantPossibilitiesTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/RedundantPossibilitiesTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -11,11 +11,11 @@
 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.RulePossibility;
+import org.drools.verifier.components.SubPattern;
+import org.drools.verifier.components.SubRule;
 import org.drools.verifier.components.VerifierRule;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 import org.drools.verifier.report.components.Cause;
 import org.drools.verifier.report.components.CauseType;
 import org.drools.verifier.report.components.Redundancy;
@@ -23,175 +23,185 @@
 
 public class RedundantPossibilitiesTest extends RedundancyTestBase {
 
-	public void testPatternPossibilityRedundancy() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Possibilities.drl"));
+    public void testSubPatternRedundancy() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Possibilities.drl" ) );
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Find pattern possibility redundancy"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Find pattern possibility redundancy" ) );
 
-		Collection<Object> data = new ArrayList<Object>();
+        Collection<Object> data = new ArrayList<Object>();
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
-		session.setGlobal("result", result);
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
+        session.setGlobal( "result",
+                           result );
 
-		String ruleName1 = "Rule 1";
-		String ruleName2 = "Rule 2";
+        String ruleName1 = "Rule 1";
+        String ruleName2 = "Rule 2";
 
-		Pattern p1 = new Pattern();
-		p1.setRuleName(ruleName1);
-		Pattern p2 = new Pattern();
-		p2.setRuleName(ruleName2);
+        Pattern p1 = new Pattern();
+        p1.setRuleName( ruleName1 );
+        Pattern p2 = new Pattern();
+        p2.setRuleName( ruleName2 );
 
-		LiteralRestriction lr1 = new LiteralRestriction();
-		lr1.setRuleName(ruleName1);
-		LiteralRestriction lr2 = new LiteralRestriction();
-		lr2.setRuleName(ruleName2);
+        LiteralRestriction lr1 = new LiteralRestriction();
+        lr1.setRuleName( ruleName1 );
+        LiteralRestriction lr2 = new LiteralRestriction();
+        lr2.setRuleName( ruleName2 );
 
-		PatternPossibility pp1 = new PatternPossibility();
-		pp1.setPatternId(p1.getId());
-		pp1.setRuleName(ruleName1);
-		pp1.add(lr1);
+        SubPattern pp1 = new SubPattern();
+        pp1.setPatternGuid( p1.getGuid() );
+        pp1.setRuleName( ruleName1 );
+        pp1.add( lr1 );
 
-		PatternPossibility pp2 = new PatternPossibility();
-		pp2.setPatternId(p2.getId());
-		pp2.setRuleName(ruleName2);
-		pp2.add(lr2);
+        SubPattern pp2 = new SubPattern();
+        pp2.setPatternGuid( p2.getGuid() );
+        pp2.setRuleName( ruleName2 );
+        pp2.add( lr2 );
 
-		Redundancy r1 = new Redundancy(lr1, lr2);
-		Redundancy r2 = new Redundancy(p1, p2);
+        Redundancy r1 = new Redundancy( lr1,
+                                        lr2 );
+        Redundancy r2 = new Redundancy( p1,
+                                        p2 );
 
-		data.add(p1);
-		data.add(p2);
-		data.add(lr1);
-		data.add(lr2);
-		data.add(pp1);
-		data.add(pp2);
-		data.add(r1);
-		data.add(r2);
+        data.add( p1 );
+        data.add( p2 );
+        data.add( lr1 );
+        data.add( lr2 );
+        data.add( pp1 );
+        data.add( pp2 );
+        data.add( r1 );
+        data.add( r2 );
 
-		StatelessSessionResult sessionResult = session.executeWithResults(data);
+        StatelessSessionResult sessionResult = session.executeWithResults( data );
 
-		Map<String, Set<String>> map = createRedundancyMap(sessionResult
-				.iterateObjects());
+        Map<String, Set<String>> map = createRedundancyMap( sessionResult.iterateObjects() );
 
-		assertTrue(TestBase.mapContains(map, ruleName1, ruleName2));
-		assertTrue(TestBase.mapContains(map, ruleName2, ruleName1));
+        assertTrue( TestBase.mapContains( map,
+                                          ruleName1,
+                                          ruleName2 ) );
+        assertTrue( TestBase.mapContains( map,
+                                          ruleName2,
+                                          ruleName1 ) );
 
-		if (!map.isEmpty()) {
-			fail("More redundancies than was expected.");
-		}
-	}
+        if ( !map.isEmpty() ) {
+            fail( "More redundancies than was expected." );
+        }
+    }
 
-	public void testRulePossibilityRedundancy() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Possibilities.drl"));
+    public void testSubRuleRedundancy() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Possibilities.drl" ) );
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Find rule possibility redundancy"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Find rule possibility redundancy" ) );
 
-		Collection<Object> data = new ArrayList<Object>();
+        Collection<Object> data = new ArrayList<Object>();
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
-		session.setGlobal("result", result);
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
+        session.setGlobal( "result",
+                           result );
 
-		/*
-		 * First rules. These are redundant,
-		 */
-		String ruleName1 = "Rule 1";
-		String ruleName2 = "Rule 2";
+        /*
+         * First rules. These are redundant,
+         */
+        String ruleName1 = "Rule 1";
+        String ruleName2 = "Rule 2";
 
-		VerifierRule r1 = new VerifierRule();
-		r1.setRuleName(ruleName1);
-		VerifierRule r2 = new VerifierRule();
-		r2.setRuleName(ruleName2);
+        VerifierRule r1 = new VerifierRule();
+        r1.setRuleName( ruleName1 );
+        VerifierRule r2 = new VerifierRule();
+        r2.setRuleName( ruleName2 );
 
-		PatternPossibility pp1 = new PatternPossibility();
-		pp1.setRuleName(ruleName1);
-		PatternPossibility pp2 = new PatternPossibility();
-		pp2.setRuleName(ruleName2);
+        SubPattern pp1 = new SubPattern();
+        pp1.setRuleName( ruleName1 );
+        SubPattern pp2 = new SubPattern();
+        pp2.setRuleName( ruleName2 );
 
-		RulePossibility rp1 = new RulePossibility();
-		rp1.setRuleId(r1.getId());
-		rp1.setRuleName(ruleName1);
-		rp1.add(pp1);
+        SubRule rp1 = new SubRule();
+        rp1.setRuleGuid( r1.getGuid() );
+        rp1.setRuleName( ruleName1 );
+        rp1.add( pp1 );
 
-		RulePossibility rp2 = new RulePossibility();
-		rp2.setRuleId(r2.getId());
-		rp2.setRuleName(ruleName2);
-		rp2.add(pp2);
+        SubRule rp2 = new SubRule();
+        rp2.setRuleGuid( r2.getGuid() );
+        rp2.setRuleName( ruleName2 );
+        rp2.add( pp2 );
 
-		Redundancy possibilityredundancy = new Redundancy(
-				RedundancyType.STRONG, pp1, pp2);
-		Redundancy ruleRedundancy = new Redundancy(r1, r2);
+        Redundancy possibilityredundancy = new Redundancy( RedundancyType.STRONG,
+                                                           pp1,
+                                                           pp2 );
+        Redundancy ruleRedundancy = new Redundancy( r1,
+                                                    r2 );
 
-		data.add(r1);
-		data.add(r2);
-		data.add(pp1);
-		data.add(pp2);
-		data.add(possibilityredundancy);
-		data.add(ruleRedundancy);
-		data.add(rp1);
-		data.add(rp2);
+        data.add( r1 );
+        data.add( r2 );
+        data.add( pp1 );
+        data.add( pp2 );
+        data.add( possibilityredundancy );
+        data.add( ruleRedundancy );
+        data.add( rp1 );
+        data.add( rp2 );
 
-		/*
-		 * These two rules are not redundant
-		 */
-		String ruleName3 = "Rule 3";
-		String ruleName4 = "Rule 4";
+        /*
+         * These two rules are not redundant
+         */
+        String ruleName3 = "Rule 3";
+        String ruleName4 = "Rule 4";
 
-		VerifierRule r3 = new VerifierRule();
-		r3.setRuleName(ruleName3);
-		VerifierRule r4 = new VerifierRule();
-		r4.setRuleName(ruleName4);
+        VerifierRule r3 = new VerifierRule();
+        r3.setRuleName( ruleName3 );
+        VerifierRule r4 = new VerifierRule();
+        r4.setRuleName( ruleName4 );
 
-		PatternPossibility pp3 = new PatternPossibility();
-		pp3.setRuleId(r3.getId());
-		pp3.setRuleName(ruleName3);
-		PatternPossibility pp4 = new PatternPossibility();
-		pp4.setRuleId(r4.getId());
-		pp4.setRuleName(ruleName4);
-		// This possibility makes them different
-		PatternPossibility pp5 = new PatternPossibility();
-		pp5.setRuleId(r4.getId());
-		pp5.setRuleName(ruleName4);
+        SubPattern pp3 = new SubPattern();
+        pp3.setRuleGuid( r3.getGuid() );
+        pp3.setRuleName( ruleName3 );
+        SubPattern pp4 = new SubPattern();
+        pp4.setRuleGuid( r4.getGuid() );
+        pp4.setRuleName( ruleName4 );
+        // This possibility makes them different
+        SubPattern pp5 = new SubPattern();
+        pp5.setRuleGuid( r4.getGuid() );
+        pp5.setRuleName( ruleName4 );
 
-		RulePossibility rp3 = new RulePossibility();
-		rp3.setRuleId(r3.getId());
-		rp3.setRuleName(ruleName3);
-		rp3.add(pp3);
+        SubRule rp3 = new SubRule();
+        rp3.setRuleGuid( r3.getGuid() );
+        rp3.setRuleName( ruleName3 );
+        rp3.add( pp3 );
 
-		RulePossibility rp4 = new RulePossibility();
-		rp4.setRuleId(r4.getId());
-		rp4.setRuleName(ruleName4);
-		rp4.add(pp4);
-		rp4.add(pp5);
+        SubRule rp4 = new SubRule();
+        rp4.setRuleGuid( r4.getGuid() );
+        rp4.setRuleName( ruleName4 );
+        rp4.add( pp4 );
+        rp4.add( pp5 );
 
-		Redundancy possibilityredundancy2 = new Redundancy(
-				RedundancyType.STRONG, pp3, pp4);
-		Redundancy ruleRedundancy2 = new Redundancy(r3, r4);
+        Redundancy possibilityredundancy2 = new Redundancy( RedundancyType.STRONG,
+                                                            pp3,
+                                                            pp4 );
+        Redundancy ruleRedundancy2 = new Redundancy( r3,
+                                                     r4 );
 
-		data.add(r3);
-		data.add(r4);
-		data.add(pp3);
-		data.add(pp4);
-		data.add(pp5);
-		data.add(possibilityredundancy2);
-		data.add(ruleRedundancy2);
-		data.add(rp3);
-		data.add(rp4);
+        data.add( r3 );
+        data.add( r4 );
+        data.add( pp3 );
+        data.add( pp4 );
+        data.add( pp5 );
+        data.add( possibilityredundancy2 );
+        data.add( ruleRedundancy2 );
+        data.add( rp3 );
+        data.add( rp4 );
 
-		StatelessSessionResult sessionResult = session.executeWithResults(data);
+        StatelessSessionResult sessionResult = session.executeWithResults( data );
 
-		Map<Cause, Set<Cause>> map = createRedundancyCauseMap(
-				CauseType.RULE_POSSIBILITY, sessionResult
-						.iterateObjects());
+        Map<Cause, Set<Cause>> map = createRedundancyCauseMap( CauseType.RULE_POSSIBILITY,
+                                                               sessionResult.iterateObjects() );
 
-		assertTrue(TestBase.causeMapContains(map, rp1, rp2));
-		assertFalse(TestBase.causeMapContains(map, rp3, rp4));
+        assertTrue( TestBase.causeMapContains( map,
+                                               rp1,
+                                               rp2 ) );
+        assertFalse( TestBase.causeMapContains( map,
+                                                rp3,
+                                                rp4 ) );
 
-		if (!map.isEmpty()) {
-			fail("More redundancies than was expected.");
-		}
-	}
+        if ( !map.isEmpty() ) {
+            fail( "More redundancies than was expected." );
+        }
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/RedundantRestrictionsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/RedundantRestrictionsTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/RedundantRestrictionsTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -8,8 +8,8 @@
 import org.drools.StatelessSessionResult;
 import org.drools.base.RuleNameMatchesAgendaFilter;
 import org.drools.verifier.TestBase;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 
 public class RedundantRestrictionsTest extends RedundancyTestBase {
 
@@ -20,7 +20,7 @@
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Find redundant LiteralRestriction"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> data = getTestData(this.getClass()
 				.getResourceAsStream("RedundancyLiteralRestrictionTest.drl"),
 				result.getVerifierData());
@@ -57,7 +57,7 @@
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Find redundant VariableRestriction"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> data = getTestData(this.getClass()
 				.getResourceAsStream("SubsumptionVariableRestrictionTest.drl"),
 				result.getVerifierData());

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/RedundantRulesAndPatternsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/RedundantRulesAndPatternsTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/RedundantRulesAndPatternsTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -11,8 +11,8 @@
 import org.drools.verifier.TestBase;
 import org.drools.verifier.components.TextConsequence;
 import org.drools.verifier.components.VerifierRule;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 import org.drools.verifier.report.components.Redundancy;
 
 public class RedundantRulesAndPatternsTest extends RedundancyTestBase {
@@ -49,7 +49,7 @@
 		data.add(r1);
 		data.add(r2);
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		session.setGlobal("result", result);
 
 		StatelessSessionResult sessionResult = session.executeWithResults(data);
@@ -72,7 +72,7 @@
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Find redundant Patterns with restrictions"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> data = getTestData(this.getClass()
 				.getResourceAsStream("PatternRedundancyTest.drl"), result
 				.getVerifierData());
@@ -121,7 +121,7 @@
 		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
 				"Find redundant Patterns without restrictions"));
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
+		VerifierReport result = VerifierReportFactory.newVerifierReport();
 		Collection<? extends Object> data = getTestData(this.getClass()
 				.getResourceAsStream("PatternRedundancyTest.drl"), result
 				.getVerifierData());

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/WarningsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/WarningsTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/redundancy/WarningsTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -6,10 +6,10 @@
 import org.drools.StatelessSession;
 import org.drools.base.RuleNameMatchesAgendaFilter;
 import org.drools.verifier.TestBase;
-import org.drools.verifier.components.RulePossibility;
+import org.drools.verifier.components.SubRule;
 import org.drools.verifier.components.VerifierRule;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 import org.drools.verifier.report.components.Redundancy;
 import org.drools.verifier.report.components.RedundancyType;
 import org.drools.verifier.report.components.Severity;
@@ -17,99 +17,102 @@
 
 public class WarningsTest extends TestBase {
 
-	public void testRedundantRules() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Warnings.drl"));
+    public void testRedundantRules() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Warnings.drl" ) );
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Find redundant rule possibilities from different rules"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Find redundant rule possibilities from different rules" ) );
 
-		Collection<Object> objects = new ArrayList<Object>();
+        Collection<Object> objects = new ArrayList<Object>();
 
-		VerifierRule rule1 = new VerifierRule();
-		VerifierRule rule2 = new VerifierRule();
+        VerifierRule rule1 = new VerifierRule();
+        VerifierRule rule2 = new VerifierRule();
 
-		Redundancy ruleRedundancy = new Redundancy(
-				RedundancyType.STRONG, rule1, rule2);
+        Redundancy ruleRedundancy = new Redundancy( RedundancyType.STRONG,
+                                                    rule1,
+                                                    rule2 );
 
-		RulePossibility rp1 = new RulePossibility();
-		rp1.setRuleId(rule1.getId());
+        SubRule rp1 = new SubRule();
+        rp1.setRuleGuid( rule1.getGuid() );
 
-		RulePossibility rp2 = new RulePossibility();
-		rp2.setRuleId(rule2.getId());
+        SubRule rp2 = new SubRule();
+        rp2.setRuleGuid( rule2.getGuid() );
 
-		Redundancy rulePossibilityRedundancy1 = new Redundancy(
-				RedundancyType.STRONG, rp1, rp2);
+        Redundancy rulePossibilityRedundancy1 = new Redundancy( RedundancyType.STRONG,
+                                                                rp1,
+                                                                rp2 );
 
-		Redundancy rulePossibilityRedundancy2 = new Redundancy(
-				RedundancyType.STRONG, rp2, rp1);
+        Redundancy rulePossibilityRedundancy2 = new Redundancy( RedundancyType.STRONG,
+                                                                rp2,
+                                                                rp1 );
 
-		objects.add(rule1);
-		objects.add(rule2);
-		objects.add(ruleRedundancy);
-		objects.add(rp1);
-		objects.add(rp2);
-		objects.add(rulePossibilityRedundancy1);
-		objects.add(rulePossibilityRedundancy2);
+        objects.add( rule1 );
+        objects.add( rule2 );
+        objects.add( ruleRedundancy );
+        objects.add( rp1 );
+        objects.add( rp2 );
+        objects.add( rulePossibilityRedundancy1 );
+        objects.add( rulePossibilityRedundancy2 );
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
-		session.setGlobal("result", result);
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
+        session.setGlobal( "result",
+                           result );
 
-		session.executeWithResults(objects);
+        session.executeWithResults( objects );
 
-		Collection<VerifierMessageBase> notes = result
-				.getBySeverity(Severity.WARNING);
+        Collection<VerifierMessageBase> notes = result.getBySeverity( Severity.WARNING );
 
-		// Has at least one item.
-		assertEquals(1, notes.size());
+        // Has at least one item.
+        assertEquals( 1,
+                      notes.size() );
 
-		VerifierMessageBase warning = notes.iterator().next();
-		assertTrue(warning.getFaulty().equals(rulePossibilityRedundancy1));
-	}
+        VerifierMessageBase warning = notes.iterator().next();
+        assertTrue( warning.getFaulty().equals( rulePossibilityRedundancy1 ) );
+    }
 
-	public void testSubsumptantRules() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Warnings.drl"));
+    public void testSubsumptantRules() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Warnings.drl" ) );
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Find subsumptant rule possibilities from different rules"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Find subsumptant rule possibilities from different rules" ) );
 
-		Collection<Object> objects = new ArrayList<Object>();
+        Collection<Object> objects = new ArrayList<Object>();
 
-		VerifierRule rule1 = new VerifierRule();
-		VerifierRule rule2 = new VerifierRule();
+        VerifierRule rule1 = new VerifierRule();
+        VerifierRule rule2 = new VerifierRule();
 
-		Redundancy ruleRedundancy = new Redundancy(
-				RedundancyType.STRONG, rule1, rule2);
+        Redundancy ruleRedundancy = new Redundancy( RedundancyType.STRONG,
+                                                    rule1,
+                                                    rule2 );
 
-		RulePossibility rp1 = new RulePossibility();
-		rp1.setRuleId(rule1.getId());
+        SubRule rp1 = new SubRule();
+        rp1.setRuleGuid( rule1.getGuid() );
 
-		RulePossibility rp2 = new RulePossibility();
-		rp2.setRuleId(rule2.getId());
+        SubRule rp2 = new SubRule();
+        rp2.setRuleGuid( rule2.getGuid() );
 
-		Redundancy rulePossibilityRedundancy1 = new Redundancy(
-				RedundancyType.STRONG, rp1, rp2);
+        Redundancy rulePossibilityRedundancy1 = new Redundancy( RedundancyType.STRONG,
+                                                                rp1,
+                                                                rp2 );
 
-		objects.add(rule1);
-		objects.add(rule2);
-		objects.add(ruleRedundancy);
-		objects.add(rp1);
-		objects.add(rp2);
-		objects.add(rulePossibilityRedundancy1);
+        objects.add( rule1 );
+        objects.add( rule2 );
+        objects.add( ruleRedundancy );
+        objects.add( rp1 );
+        objects.add( rp2 );
+        objects.add( rulePossibilityRedundancy1 );
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
-		session.setGlobal("result", result);
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
+        session.setGlobal( "result",
+                           result );
 
-		session.executeWithResults(objects);
+        session.executeWithResults( objects );
 
-		Collection<VerifierMessageBase> notes = result
-				.getBySeverity(Severity.WARNING);
+        Collection<VerifierMessageBase> notes = result.getBySeverity( Severity.WARNING );
 
-		// Has at least one item.
-		assertEquals(1, notes.size());
+        // Has at least one item.
+        assertEquals( 1,
+                      notes.size() );
 
-		VerifierMessageBase warning = notes.iterator().next();
-		assertTrue(warning.getFaulty().equals(rulePossibilityRedundancy1));
-	}
+        VerifierMessageBase warning = notes.iterator().next();
+        assertTrue( warning.getFaulty().equals( rulePossibilityRedundancy1 ) );
+    }
 }

Added: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/report/VerifierReportBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/report/VerifierReportBuilderTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/report/VerifierReportBuilderTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,88 @@
+package org.drools.verifier.report;
+
+import java.util.Collection;
+
+import org.drools.verifier.data.VerifierData;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.report.components.Gap;
+import org.drools.verifier.report.components.MissingNumberPattern;
+import org.drools.verifier.report.components.RangeCheckCause;
+import org.drools.verifier.report.components.Severity;
+import org.drools.verifier.report.components.VerifierMessageBase;
+
+import junit.framework.TestCase;
+
+public class VerifierReportBuilderTest extends TestCase {
+
+    public void testHtmlReportTest() {
+
+        // Create report
+        VerifierReport vReport = new VerifierReportMock();
+
+        // Write to disk
+        // Check the files on disk
+        // done
+        assertTrue(true);
+    }
+
+}
+class VerifierReportMock
+    implements
+    VerifierReport {
+
+    public void add(Gap gap) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void add(MissingNumberPattern missingNumberPattern) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void add(VerifierMessageBase note) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public Collection<VerifierMessageBase> getBySeverity(Severity severity) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Collection<Gap> getGapsByFieldId(int fieldId) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Collection<RangeCheckCause> getRangeCheckCauses() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Collection<RangeCheckCause> getRangeCheckCausesByFieldId(int id) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public VerifierData getVerifierData(VerifierData data) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public VerifierData getVerifierData() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void remove(Gap gap) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public Collection<RangeCheckCause> getRangeCheckCausesByFieldId(String guid) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/solver/PatternSolverTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/solver/PatternSolverTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/solver/PatternSolverTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,399 @@
+package org.drools.verifier.solver;
+
+import java.util.List;
+import java.util.Set;
+
+import junit.framework.TestCase;
+
+import org.drools.verifier.components.LiteralRestriction;
+import org.drools.verifier.components.OperatorDescr;
+import org.drools.verifier.components.Pattern;
+import org.drools.verifier.data.VerifierComponent;
+
+/**
+ * 
+ * @author Toni Rikkola
+ * 
+ */
+public class PatternSolverTest extends TestCase {
+
+    /**
+     * <pre>
+     *      and
+     *     /   \
+     *  descr  descr2
+     * </pre>
+     * 
+     * result:<br>
+     * descr && descr2
+     */
+    public void testAddBasicAnd() {
+        Pattern pattern = new Pattern();
+
+        LiteralRestriction literalRestriction = new LiteralRestriction();
+        LiteralRestriction literalRestriction2 = new LiteralRestriction();
+
+        PatternSolver solver = new PatternSolver( pattern );
+
+        solver.addOperator( OperatorDescr.Type.AND );
+        solver.add( literalRestriction );
+        solver.add( literalRestriction2 );
+        solver.end();
+
+        List<Set<VerifierComponent>> list = solver.getPossibilityLists();
+        assertEquals( 1,
+                      list.size() );
+        assertEquals( 2,
+                      list.get( 0 ).size() );
+    }
+
+    /**
+     * <pre>
+     *       or
+     *      /  \
+     *  descr descr2
+     * </pre>
+     * 
+     * result:<br>
+     * descr<br>
+     * or<br>
+     * descr2
+     */
+    public void testAddBasicOr() {
+        Pattern pattern = new Pattern();
+
+        LiteralRestriction literalRestriction = new LiteralRestriction();
+        LiteralRestriction literalRestriction2 = new LiteralRestriction();
+
+        PatternSolver solver = new PatternSolver( pattern );
+
+        solver.addOperator( OperatorDescr.Type.OR );
+        solver.add( literalRestriction );
+        solver.add( literalRestriction2 );
+        solver.end();
+
+        List<Set<VerifierComponent>> list = solver.getPossibilityLists();
+        assertEquals( 2,
+                      list.size() );
+        assertEquals( 1,
+                      list.get( 0 ).size() );
+        assertEquals( 1,
+                      list.get( 1 ).size() );
+    }
+
+    /**
+     * <pre>
+     *       or
+     *      /  \
+     *  descr  and
+     *         / \
+     *    descr2 descr3
+     * </pre>
+     * 
+     * result:<br>
+     * descr <br>
+     * or<br>
+     * descr2 && descr3
+     */
+    public void testAddOrAnd() {
+        Pattern pattern = new Pattern();
+
+        LiteralRestriction literalRestriction = new LiteralRestriction();
+        LiteralRestriction literalRestriction2 = new LiteralRestriction();
+        LiteralRestriction literalRestriction3 = new LiteralRestriction();
+
+        PatternSolver solver = new PatternSolver( pattern );
+
+        solver.addOperator( OperatorDescr.Type.OR );
+        solver.add( literalRestriction );
+        solver.addOperator( OperatorDescr.Type.AND );
+        solver.add( literalRestriction2 );
+        solver.add( literalRestriction3 );
+        solver.end();
+        solver.end();
+
+        List<Set<VerifierComponent>> list = solver.getPossibilityLists();
+        assertEquals( 2,
+                      list.size() );
+
+        assertEquals( 1,
+                      list.get( 0 ).size() );
+        assertTrue( list.get( 0 ).contains( literalRestriction ) );
+
+        assertEquals( 2,
+                      list.get( 1 ).size() );
+        assertTrue( list.get( 1 ).contains( literalRestriction2 ) );
+        assertTrue( list.get( 1 ).contains( literalRestriction3 ) );
+    }
+
+    /**
+     * <pre>
+     *       and
+     *      /  \
+     *  descr   or
+     *         / \
+     *    descr2 descr3
+     * </pre>
+     * 
+     * result:<br>
+     * descr && descr2 <br>
+     * or<br>
+     * descr && descr3
+     */
+    public void testAddAndOr() {
+        Pattern pattern = new Pattern();
+
+        LiteralRestriction literalRestriction = new LiteralRestriction();
+        LiteralRestriction literalRestriction2 = new LiteralRestriction();
+        LiteralRestriction literalRestriction3 = new LiteralRestriction();
+
+        PatternSolver solver = new PatternSolver( pattern );
+
+        solver.addOperator( OperatorDescr.Type.AND );
+        solver.add( literalRestriction );
+        solver.addOperator( OperatorDescr.Type.OR );
+        solver.add( literalRestriction2 );
+        solver.add( literalRestriction3 );
+        solver.end();
+        solver.end();
+
+        List<Set<VerifierComponent>> list = solver.getPossibilityLists();
+        assertEquals( 2,
+                      list.size() );
+
+        assertEquals( 2,
+                      list.get( 0 ).size() );
+        assertTrue( list.get( 0 ).contains( literalRestriction ) );
+        assertTrue( list.get( 0 ).contains( literalRestriction2 ) );
+
+        assertEquals( 2,
+                      list.get( 1 ).size() );
+        assertTrue( list.get( 1 ).contains( literalRestriction ) );
+        assertTrue( list.get( 1 ).contains( literalRestriction3 ) );
+    }
+
+    /**
+     * <pre>
+     *            and
+     *         /        \
+     *       or          or
+     *      /  \         / \
+     * descr descr2 descr3 descr4
+     * </pre>
+     * 
+     * result:<br>
+     * descr && descr3<br>
+     * or<br>
+     * descr && descr4<br>
+     * or<br>
+     * descr2 && descr3<br>
+     * or<br>
+     * descr2 && descr4
+     */
+    public void testAddAndOrOr() {
+        Pattern pattern = new Pattern();
+
+        LiteralRestriction literalRestriction = new LiteralRestriction();
+        LiteralRestriction literalRestriction2 = new LiteralRestriction();
+        LiteralRestriction literalRestriction3 = new LiteralRestriction();
+        LiteralRestriction literalRestriction4 = new LiteralRestriction();
+
+        PatternSolver solver = new PatternSolver( pattern );
+
+        solver.addOperator( OperatorDescr.Type.AND );
+        solver.addOperator( OperatorDescr.Type.OR );
+        solver.add( literalRestriction );
+        solver.add( literalRestriction2 );
+        solver.end();
+        solver.addOperator( OperatorDescr.Type.OR );
+        solver.add( literalRestriction3 );
+        solver.add( literalRestriction4 );
+        solver.end();
+        solver.end();
+
+        List<Set<VerifierComponent>> list = solver.getPossibilityLists();
+        assertEquals( 4,
+                      list.size() );
+
+        assertEquals( 2,
+                      list.get( 0 ).size() );
+        assertTrue( list.get( 0 ).contains( literalRestriction ) );
+        assertTrue( list.get( 0 ).contains( literalRestriction3 ) );
+
+        assertEquals( 2,
+                      list.get( 1 ).size() );
+        assertTrue( list.get( 1 ).contains( literalRestriction ) );
+        assertTrue( list.get( 1 ).contains( literalRestriction4 ) );
+
+        assertEquals( 2,
+                      list.get( 2 ).size() );
+        assertTrue( list.get( 2 ).contains( literalRestriction2 ) );
+        assertTrue( list.get( 2 ).contains( literalRestriction3 ) );
+
+        assertEquals( 2,
+                      list.get( 3 ).size() );
+        assertTrue( list.get( 3 ).contains( literalRestriction2 ) );
+        assertTrue( list.get( 3 ).contains( literalRestriction4 ) );
+    }
+
+    /**
+     * <pre>
+     *             or
+     *         /        \
+     *       and         and
+     *      /  \         / \
+     * descr descr2 descr3 descr4
+     * </pre>
+     * 
+     * result:<br>
+     * descr && descr2<br>
+     * or<br>
+     * descr3 && descr4
+     */
+    public void testAddOrAndAnd() {
+        Pattern pattern = new Pattern();
+
+        LiteralRestriction literalRestriction = new LiteralRestriction();
+        LiteralRestriction literalRestriction2 = new LiteralRestriction();
+        LiteralRestriction literalRestriction3 = new LiteralRestriction();
+        LiteralRestriction literalRestriction4 = new LiteralRestriction();
+
+        PatternSolver solver = new PatternSolver( pattern );
+
+        solver.addOperator( OperatorDescr.Type.OR );
+        solver.addOperator( OperatorDescr.Type.AND );
+        solver.add( literalRestriction );
+        solver.add( literalRestriction2 );
+        solver.end();
+        solver.addOperator( OperatorDescr.Type.AND );
+        solver.add( literalRestriction3 );
+        solver.add( literalRestriction4 );
+        solver.end();
+        solver.end();
+
+        List<Set<VerifierComponent>> list = solver.getPossibilityLists();
+        assertEquals( 2,
+                      list.size() );
+
+        assertEquals( 2,
+                      list.get( 0 ).size() );
+        assertTrue( list.get( 0 ).contains( literalRestriction ) );
+        assertTrue( list.get( 0 ).contains( literalRestriction2 ) );
+
+        assertEquals( 2,
+                      list.get( 1 ).size() );
+        assertTrue( list.get( 1 ).contains( literalRestriction3 ) );
+        assertTrue( list.get( 1 ).contains( literalRestriction4 ) );
+    }
+
+    /**
+     * <pre>
+     *             or
+     *         /        \
+     *       and         or
+     *      /  \         / \
+     * descr descr2 descr3 descr4
+     * </pre>
+     * 
+     * result:<br>
+     * descr && descr2<br>
+     * or<br>
+     * descr3<br>
+     * or<br>
+     * descr4
+     */
+    public void testAddOrAndOr() {
+        Pattern pattern = new Pattern();
+
+        LiteralRestriction literalRestriction = new LiteralRestriction();
+        LiteralRestriction literalRestriction2 = new LiteralRestriction();
+        LiteralRestriction literalRestriction3 = new LiteralRestriction();
+        LiteralRestriction literalRestriction4 = new LiteralRestriction();
+
+        PatternSolver solver = new PatternSolver( pattern );
+
+        solver.addOperator( OperatorDescr.Type.OR );
+        solver.addOperator( OperatorDescr.Type.AND );
+        solver.add( literalRestriction );
+        solver.add( literalRestriction2 );
+        solver.end();
+        solver.addOperator( OperatorDescr.Type.OR );
+        solver.add( literalRestriction3 );
+        solver.add( literalRestriction4 );
+        solver.end();
+        solver.end();
+
+        List<Set<VerifierComponent>> list = solver.getPossibilityLists();
+        assertEquals( 3,
+                      list.size() );
+
+        assertEquals( 2,
+                      list.get( 0 ).size() );
+        assertTrue( list.get( 0 ).contains( literalRestriction ) );
+        assertTrue( list.get( 0 ).contains( literalRestriction2 ) );
+
+        assertEquals( 1,
+                      list.get( 1 ).size() );
+        assertTrue( list.get( 1 ).contains( literalRestriction3 ) );
+
+        assertEquals( 1,
+                      list.get( 2 ).size() );
+        assertTrue( list.get( 2 ).contains( literalRestriction4 ) );
+    }
+
+    /**
+     * <pre>
+     *                   and
+     *          /         |      \
+     *       and         or       descr5
+     *      /  \         / \
+     * descr descr2 descr3 descr4
+     * </pre>
+     * 
+     * result:<br>
+     * descr && descr2 && descr3 && descr5<br>
+     * or<br>
+     * descr && descr2 && descr4 && descr5<br>
+     */
+    public void testAddOrAndOrDescr() {
+        Pattern pattern = new Pattern();
+
+        LiteralRestriction literalRestriction = new LiteralRestriction();
+        LiteralRestriction literalRestriction2 = new LiteralRestriction();
+        LiteralRestriction literalRestriction3 = new LiteralRestriction();
+        LiteralRestriction literalRestriction4 = new LiteralRestriction();
+        LiteralRestriction literalRestriction5 = new LiteralRestriction();
+
+        PatternSolver solver = new PatternSolver( pattern );
+
+        solver.addOperator( OperatorDescr.Type.AND );
+        solver.addOperator( OperatorDescr.Type.AND );
+        solver.add( literalRestriction );
+        solver.add( literalRestriction2 );
+        solver.end();
+        solver.addOperator( OperatorDescr.Type.OR );
+        solver.add( literalRestriction3 );
+        solver.add( literalRestriction4 );
+        solver.end();
+        solver.add( literalRestriction5 );
+        solver.end();
+
+        List<Set<VerifierComponent>> list = solver.getPossibilityLists();
+        assertEquals( 2,
+                      list.size() );
+
+        assertEquals( 4,
+                      list.get( 0 ).size() );
+        assertTrue( list.get( 0 ).contains( literalRestriction ) );
+        assertTrue( list.get( 0 ).contains( literalRestriction2 ) );
+        assertTrue( list.get( 0 ).contains( literalRestriction3 ) );
+        assertTrue( list.get( 0 ).contains( literalRestriction5 ) );
+
+        assertEquals( 4,
+                      list.get( 1 ).size() );
+        assertTrue( list.get( 1 ).contains( literalRestriction ) );
+        assertTrue( list.get( 1 ).contains( literalRestriction2 ) );
+        assertTrue( list.get( 1 ).contains( literalRestriction4 ) );
+        assertTrue( list.get( 1 ).contains( literalRestriction4 ) );
+    }
+}

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/subsumption/SubsumptantPossibilitiesTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/subsumption/SubsumptantPossibilitiesTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/subsumption/SubsumptantPossibilitiesTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -11,11 +11,11 @@
 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.RulePossibility;
+import org.drools.verifier.components.SubPattern;
+import org.drools.verifier.components.SubRule;
 import org.drools.verifier.components.VerifierRule;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 import org.drools.verifier.report.components.Cause;
 import org.drools.verifier.report.components.Redundancy;
 import org.drools.verifier.report.components.RedundancyType;
@@ -23,285 +23,296 @@
 
 public class SubsumptantPossibilitiesTest extends SubsumptionTestBase {
 
-	public void testPatternPossibilityRedundancy1() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Possibilities.drl"));
+    public void testSubPatternRedundancy1() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Possibilities.drl" ) );
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Find subsumptant pattern possibilities"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Find subsumptant pattern possibilities" ) );
 
-		Collection<Object> data = new ArrayList<Object>();
+        Collection<Object> data = new ArrayList<Object>();
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
-		session.setGlobal("result", result);
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
+        session.setGlobal( "result",
+                           result );
 
-		/*
-		 * Redundant patterns
-		 */
-		String ruleName1 = "Rule 1";
-		String ruleName2 = "Rule 2";
+        /*
+         * Redundant patterns
+         */
+        String ruleName1 = "Rule 1";
+        String ruleName2 = "Rule 2";
 
-		Pattern p1 = new Pattern();
-		p1.setRuleName(ruleName1);
-		Pattern p2 = new Pattern();
-		p2.setRuleName(ruleName2);
+        Pattern p1 = new Pattern();
+        p1.setRuleName( ruleName1 );
+        Pattern p2 = new Pattern();
+        p2.setRuleName( ruleName2 );
 
-		LiteralRestriction lr1 = new LiteralRestriction();
-		lr1.setRuleName(ruleName1);
-		lr1.setOrderNumber(0);
-		LiteralRestriction lr2 = new LiteralRestriction();
-		lr2.setRuleName(ruleName2);
-		lr2.setOrderNumber(0);
-		LiteralRestriction lr3 = new LiteralRestriction();
-		lr3.setRuleName(ruleName2);
-		lr3.setOrderNumber(1);
+        LiteralRestriction lr1 = new LiteralRestriction();
+        lr1.setRuleName( ruleName1 );
+        lr1.setOrderNumber( 0 );
+        LiteralRestriction lr2 = new LiteralRestriction();
+        lr2.setRuleName( ruleName2 );
+        lr2.setOrderNumber( 0 );
+        LiteralRestriction lr3 = new LiteralRestriction();
+        lr3.setRuleName( ruleName2 );
+        lr3.setOrderNumber( 1 );
 
-		PatternPossibility pp1 = new PatternPossibility();
-		pp1.setPatternId(p1.getId());
-		pp1.setRuleName(ruleName1);
-		pp1.add(lr1);
+        SubPattern pp1 = new SubPattern();
+        pp1.setPatternGuid( p1.getGuid() );
+        pp1.setRuleName( ruleName1 );
+        pp1.add( lr1 );
 
-		PatternPossibility pp2 = new PatternPossibility();
-		pp2.setPatternId(p2.getId());
-		pp2.setRuleName(ruleName2);
-		pp2.add(lr2);
-		pp2.add(lr3);
+        SubPattern pp2 = new SubPattern();
+        pp2.setPatternGuid( p2.getGuid() );
+        pp2.setRuleName( ruleName2 );
+        pp2.add( lr2 );
+        pp2.add( lr3 );
 
-		Redundancy r1 = new Redundancy(lr1, lr2);
-		Redundancy r2 = new Redundancy(p1, p2);
+        Redundancy r1 = new Redundancy( lr1,
+                                        lr2 );
+        Redundancy r2 = new Redundancy( p1,
+                                        p2 );
 
-		data.add(p1);
-		data.add(p2);
-		data.add(lr1);
-		data.add(lr2);
-		data.add(lr3);
-		data.add(pp1);
-		data.add(pp2);
-		data.add(r1);
-		data.add(r2);
+        data.add( p1 );
+        data.add( p2 );
+        data.add( lr1 );
+        data.add( lr2 );
+        data.add( lr3 );
+        data.add( pp1 );
+        data.add( pp2 );
+        data.add( r1 );
+        data.add( r2 );
 
-		StatelessSessionResult sessionResult = session.executeWithResults(data);
+        StatelessSessionResult sessionResult = session.executeWithResults( data );
 
-		Map<Cause, Set<Cause>> map = createSubsumptionMap(sessionResult
-				.iterateObjects());
+        Map<Cause, Set<Cause>> map = createSubsumptionMap( sessionResult.iterateObjects() );
 
-		assertTrue(TestBase.causeMapContains(map, pp1, pp2));
+        assertTrue( TestBase.causeMapContains( map,
+                                               pp1,
+                                               pp2 ) );
 
-		if (!map.isEmpty()) {
-			fail("More redundancies than was expected.");
-		}
-	}
+        if ( !map.isEmpty() ) {
+            fail( "More redundancies than was expected." );
+        }
+    }
 
-	public void testPatternPossibilityRedundancy2() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Possibilities.drl"));
+    public void testSubPatternRedundancy2() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Possibilities.drl" ) );
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Find subsumptant pattern possibilities"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Find subsumptant pattern possibilities" ) );
 
-		Collection<Object> data = new ArrayList<Object>();
+        Collection<Object> data = new ArrayList<Object>();
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
-		session.setGlobal("result", result);
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
+        session.setGlobal( "result",
+                           result );
 
-		/*
-		 * Not redundant patterns
-		 * 
-		 * For example: Pattern ( a==1, b==1, c==1) and Pattern ( a==1, c==1)
-		 */
-		String ruleName1 = "Rule 1";
-		String ruleName2 = "Rule 2";
+        /*
+         * Not redundant patterns
+         * 
+         * For example: Pattern ( a==1, b==1, c==1) and Pattern ( a==1, c==1)
+         */
+        String ruleName1 = "Rule 1";
+        String ruleName2 = "Rule 2";
 
-		Pattern p1 = new Pattern();
-		p1.setRuleName(ruleName1);
-		Pattern p2 = new Pattern();
-		p2.setRuleName(ruleName2);
+        Pattern p1 = new Pattern();
+        p1.setRuleName( ruleName1 );
+        Pattern p2 = new Pattern();
+        p2.setRuleName( ruleName2 );
 
-		LiteralRestriction lr1 = new LiteralRestriction();
-		lr1.setRuleName(ruleName1);
-		lr1.setOrderNumber(0);
-		LiteralRestriction lr2 = new LiteralRestriction();
-		lr2.setRuleName(ruleName2);
-		lr2.setOrderNumber(0);
-		LiteralRestriction lr3 = new LiteralRestriction();
-		lr3.setRuleName(ruleName2);
-		lr3.setOrderNumber(1);
+        LiteralRestriction lr1 = new LiteralRestriction();
+        lr1.setRuleName( ruleName1 );
+        lr1.setOrderNumber( 0 );
+        LiteralRestriction lr2 = new LiteralRestriction();
+        lr2.setRuleName( ruleName2 );
+        lr2.setOrderNumber( 0 );
+        LiteralRestriction lr3 = new LiteralRestriction();
+        lr3.setRuleName( ruleName2 );
+        lr3.setOrderNumber( 1 );
 
-		PatternPossibility pp1 = new PatternPossibility();
-		pp1.setPatternId(p1.getId());
-		pp1.setRuleName(ruleName1);
-		pp1.add(lr1);
+        SubPattern pp1 = new SubPattern();
+        pp1.setPatternGuid( p1.getGuid() );
+        pp1.setRuleName( ruleName1 );
+        pp1.add( lr1 );
 
-		PatternPossibility pp2 = new PatternPossibility();
-		pp2.setPatternId(p2.getId());
-		pp2.setRuleName(ruleName2);
-		pp2.add(lr2);
-		pp2.add(lr3);
+        SubPattern pp2 = new SubPattern();
+        pp2.setPatternGuid( p2.getGuid() );
+        pp2.setRuleName( ruleName2 );
+        pp2.add( lr2 );
+        pp2.add( lr3 );
 
-		Redundancy r1 = new Redundancy(lr1, lr3);
-		Redundancy r2 = new Redundancy(p1, p2);
+        Redundancy r1 = new Redundancy( lr1,
+                                        lr3 );
+        Redundancy r2 = new Redundancy( p1,
+                                        p2 );
 
-		data.add(p1);
-		data.add(p2);
-		data.add(lr1);
-		data.add(lr2);
-		data.add(lr3);
-		data.add(pp1);
-		data.add(pp2);
-		data.add(r1);
-		data.add(r2);
+        data.add( p1 );
+        data.add( p2 );
+        data.add( lr1 );
+        data.add( lr2 );
+        data.add( lr3 );
+        data.add( pp1 );
+        data.add( pp2 );
+        data.add( r1 );
+        data.add( r2 );
 
-		StatelessSessionResult sessionResult = session.executeWithResults(data);
+        StatelessSessionResult sessionResult = session.executeWithResults( data );
 
-		Map<Cause, Set<Cause>> map = createSubsumptionMap(sessionResult
-				.iterateObjects());
+        Map<Cause, Set<Cause>> map = createSubsumptionMap( sessionResult.iterateObjects() );
 
-		assertFalse(TestBase.causeMapContains(map, pp1, pp2));
+        assertFalse( TestBase.causeMapContains( map,
+                                                pp1,
+                                                pp2 ) );
 
-		if (!map.isEmpty()) {
-			fail("More redundancies than was expected.");
-		}
-	}
+        if ( !map.isEmpty() ) {
+            fail( "More redundancies than was expected." );
+        }
+    }
 
-	public void testRulePossibilityRedundancy1() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Possibilities.drl"));
+    public void testSubRuleRedundancy1() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Possibilities.drl" ) );
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Find subsumptant rule possibilities"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Find subsumptant rule possibilities" ) );
 
-		Collection<Object> data = new ArrayList<Object>();
+        Collection<Object> data = new ArrayList<Object>();
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
-		session.setGlobal("result", result);
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
+        session.setGlobal( "result",
+                           result );
 
-		/*
-		 * First rules. These are subsumptant,
-		 */
-		String ruleName1 = "Rule 1";
-		String ruleName2 = "Rule 2";
+        /*
+         * First rules. These are subsumptant,
+         */
+        String ruleName1 = "Rule 1";
+        String ruleName2 = "Rule 2";
 
-		VerifierRule r1 = new VerifierRule();
-		r1.setRuleName(ruleName1);
-		VerifierRule r2 = new VerifierRule();
-		r2.setRuleName(ruleName2);
+        VerifierRule r1 = new VerifierRule();
+        r1.setRuleName( ruleName1 );
+        VerifierRule r2 = new VerifierRule();
+        r2.setRuleName( ruleName2 );
 
-		PatternPossibility pp1 = new PatternPossibility();
-		pp1.setRuleName(ruleName1);
-		PatternPossibility pp2 = new PatternPossibility();
-		pp2.setRuleName(ruleName2);
-		PatternPossibility pp3 = new PatternPossibility();
-		pp3.setRuleName(ruleName2);
+        SubPattern pp1 = new SubPattern();
+        pp1.setRuleName( ruleName1 );
+        SubPattern pp2 = new SubPattern();
+        pp2.setRuleName( ruleName2 );
+        SubPattern pp3 = new SubPattern();
+        pp3.setRuleName( ruleName2 );
 
-		RulePossibility rp1 = new RulePossibility();
-		rp1.setRuleId(r1.getId());
-		rp1.setRuleName(ruleName1);
-		rp1.add(pp1);
+        SubRule rp1 = new SubRule();
+        rp1.setRuleGuid( r1.getGuid() );
+        rp1.setRuleName( ruleName1 );
+        rp1.add( pp1 );
 
-		RulePossibility rp2 = new RulePossibility();
-		rp2.setRuleId(r2.getId());
-		rp2.setRuleName(ruleName2);
-		rp2.add(pp2);
-		rp2.add(pp3);
+        SubRule rp2 = new SubRule();
+        rp2.setRuleGuid( r2.getGuid() );
+        rp2.setRuleName( ruleName2 );
+        rp2.add( pp2 );
+        rp2.add( pp3 );
 
-		Redundancy possibilityredundancy = new Redundancy(
-				RedundancyType.STRONG, pp1, pp2);
-		Redundancy ruleRedundancy = new Redundancy(r1, r2);
+        Redundancy possibilityredundancy = new Redundancy( RedundancyType.STRONG,
+                                                           pp1,
+                                                           pp2 );
+        Redundancy ruleRedundancy = new Redundancy( r1,
+                                                    r2 );
 
-		data.add(r1);
-		data.add(r2);
-		data.add(pp1);
-		data.add(pp2);
-		data.add(pp3);
-		data.add(possibilityredundancy);
-		data.add(ruleRedundancy);
-		data.add(rp1);
-		data.add(rp2);
+        data.add( r1 );
+        data.add( r2 );
+        data.add( pp1 );
+        data.add( pp2 );
+        data.add( pp3 );
+        data.add( possibilityredundancy );
+        data.add( ruleRedundancy );
+        data.add( rp1 );
+        data.add( rp2 );
 
-		StatelessSessionResult sessionResult = session.executeWithResults(data);
+        StatelessSessionResult sessionResult = session.executeWithResults( data );
 
-		Map<Cause, Set<Cause>> map = createSubsumptionMap(sessionResult
-				.iterateObjects());
+        Map<Cause, Set<Cause>> map = createSubsumptionMap( sessionResult.iterateObjects() );
 
-		assertTrue(TestBase.causeMapContains(map, rp1, rp2));
+        assertTrue( TestBase.causeMapContains( map,
+                                               rp1,
+                                               rp2 ) );
 
-		if (!map.isEmpty()) {
-			fail("More redundancies than was expected.");
-		}
-	}
+        if ( !map.isEmpty() ) {
+            fail( "More redundancies than was expected." );
+        }
+    }
 
-	public void testRulePossibilityRedundancy2() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Possibilities.drl"));
+    public void testSubRuleRedundancy2() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Possibilities.drl" ) );
 
-		 session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-		 "Find subsumptant rule possibilities"));
-//		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-//				"XXX: test rule"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Find subsumptant rule possibilities" ) );
+        //		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
+        //				"XXX: test rule"));
 
-		Collection<Object> data = new ArrayList<Object>();
+        Collection<Object> data = new ArrayList<Object>();
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
-		session.setGlobal("result", result);
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
+        session.setGlobal( "result",
+                           result );
 
-		/*
-		 * First rules. These are subsumptant,
-		 */
-		String ruleName1 = "Rule 1";
-		String ruleName2 = "Rule 2";
+        /*
+         * First rules. These are subsumptant,
+         */
+        String ruleName1 = "Rule 1";
+        String ruleName2 = "Rule 2";
 
-		VerifierRule r1 = new VerifierRule();
-		r1.setRuleName(ruleName1);
-		VerifierRule r2 = new VerifierRule();
-		r2.setRuleName(ruleName2);
+        VerifierRule r1 = new VerifierRule();
+        r1.setRuleName( ruleName1 );
+        VerifierRule r2 = new VerifierRule();
+        r2.setRuleName( ruleName2 );
 
-		PatternPossibility pp1 = new PatternPossibility();
-		pp1.setRuleName(ruleName1);
-		PatternPossibility pp2 = new PatternPossibility();
-		pp2.setRuleName(ruleName1);
-		PatternPossibility pp3 = new PatternPossibility();
-		pp3.setRuleName(ruleName2);
-		PatternPossibility pp4 = new PatternPossibility();
-		pp4.setRuleName(ruleName2);
+        SubPattern pp1 = new SubPattern();
+        pp1.setRuleName( ruleName1 );
+        SubPattern pp2 = new SubPattern();
+        pp2.setRuleName( ruleName1 );
+        SubPattern pp3 = new SubPattern();
+        pp3.setRuleName( ruleName2 );
+        SubPattern pp4 = new SubPattern();
+        pp4.setRuleName( ruleName2 );
 
-		RulePossibility rp1 = new RulePossibility();
-		rp1.setRuleId(r1.getId());
-		rp1.setRuleName(ruleName1);
-		rp1.add(pp1);
-		rp1.add(pp2);
+        SubRule rp1 = new SubRule();
+        rp1.setRuleGuid( r1.getGuid() );
+        rp1.setRuleName( ruleName1 );
+        rp1.add( pp1 );
+        rp1.add( pp2 );
 
-		RulePossibility rp2 = new RulePossibility();
-		rp2.setRuleId(r2.getId());
-		rp2.setRuleName(ruleName2);
-		rp2.add(pp3);
-		rp2.add(pp4);
+        SubRule rp2 = new SubRule();
+        rp2.setRuleGuid( r2.getGuid() );
+        rp2.setRuleName( ruleName2 );
+        rp2.add( pp3 );
+        rp2.add( pp4 );
 
-		Redundancy possibilityredundancy = new Redundancy(
-				RedundancyType.STRONG, pp1, pp3);
-		Subsumption possibilitysubsupmtion = new Subsumption(pp2, pp4);
-		Redundancy ruleRedundancy = new Redundancy(r1, r2);
+        Redundancy possibilityredundancy = new Redundancy( RedundancyType.STRONG,
+                                                           pp1,
+                                                           pp3 );
+        Subsumption possibilitysubsupmtion = new Subsumption( pp2,
+                                                              pp4 );
+        Redundancy ruleRedundancy = new Redundancy( r1,
+                                                    r2 );
 
-		data.add(r1);
-		data.add(r2);
-		data.add(pp1);
-		data.add(pp2);
-		data.add(pp3);
-		data.add(possibilityredundancy);
-		data.add(possibilitysubsupmtion);
-		data.add(ruleRedundancy);
-		data.add(rp1);
-		data.add(rp2);
+        data.add( r1 );
+        data.add( r2 );
+        data.add( pp1 );
+        data.add( pp2 );
+        data.add( pp3 );
+        data.add( possibilityredundancy );
+        data.add( possibilitysubsupmtion );
+        data.add( ruleRedundancy );
+        data.add( rp1 );
+        data.add( rp2 );
 
-		StatelessSessionResult sessionResult = session.executeWithResults(data);
+        StatelessSessionResult sessionResult = session.executeWithResults( data );
 
-		Map<Cause, Set<Cause>> map = createSubsumptionMap(sessionResult
-				.iterateObjects());
+        Map<Cause, Set<Cause>> map = createSubsumptionMap( sessionResult.iterateObjects() );
 
-		assertTrue(TestBase.causeMapContains(map, rp1, rp2));
-		assertTrue(TestBase.causeMapContains(map, pp2, pp4));
+        assertTrue( TestBase.causeMapContains( map,
+                                               rp1,
+                                               rp2 ) );
+        assertTrue( TestBase.causeMapContains( map,
+                                               pp2,
+                                               pp4 ) );
 
-		if (!map.isEmpty()) {
-			fail("More redundancies than was expected.");
-		}
-	}
+        if ( !map.isEmpty() ) {
+            fail( "More redundancies than was expected." );
+        }
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/subsumption/SubsumptantRestrictionsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/subsumption/SubsumptantRestrictionsTest.java	2009-10-24 16:58:25 UTC (rev 29798)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/subsumption/SubsumptantRestrictionsTest.java	2009-10-24 18:25:51 UTC (rev 29799)
@@ -12,171 +12,179 @@
 import org.drools.verifier.TestBase;
 import org.drools.verifier.components.Field;
 import org.drools.verifier.components.LiteralRestriction;
-import org.drools.verifier.dao.VerifierResult;
-import org.drools.verifier.dao.VerifierResultFactory;
+import org.drools.verifier.data.VerifierReport;
+import org.drools.verifier.data.VerifierReportFactory;
 import org.drools.verifier.report.components.Cause;
 
 public class SubsumptantRestrictionsTest extends SubsumptionTestBase {
 
-	public void testRestrictionRedundancyGreater() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Restrictions.drl"));
+    public void testRestrictionRedundancyGreater() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Restrictions.drl" ) );
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Find subsumptant restrictions, greater than"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Find subsumptant restrictions, greater than" ) );
 
-		Collection<Object> data = new ArrayList<Object>();
+        Collection<Object> data = new ArrayList<Object>();
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
-		session.setGlobal("result", result);
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
+        session.setGlobal( "result",
+                           result );
 
-		/*
-		 * Redundant restrictions
-		 */
-		// Doubles
-		Field field1 = new Field();
+        /*
+         * Redundant restrictions
+         */
+        // Doubles
+        Field field1 = new Field();
 
-		LiteralRestriction lr1 = new LiteralRestriction();
-		lr1.setOrderNumber(0);
-		lr1.setFieldId(field1.getId());
-		lr1.setValue("1.0");
-		lr1.setOperator(Operator.GREATER);
+        LiteralRestriction lr1 = new LiteralRestriction();
+        lr1.setOrderNumber( 0 );
+        lr1.setFieldGuid( field1.getGuid() );
+        lr1.setValue( "1.0" );
+        lr1.setOperator( Operator.GREATER );
 
-		LiteralRestriction lr2 = new LiteralRestriction();
-		lr2.setOrderNumber(1);
-		lr2.setFieldId(field1.getId());
-		lr2.setValue("2.0");
-		lr2.setOperator(Operator.GREATER);
+        LiteralRestriction lr2 = new LiteralRestriction();
+        lr2.setOrderNumber( 1 );
+        lr2.setFieldGuid( field1.getGuid() );
+        lr2.setValue( "2.0" );
+        lr2.setOperator( Operator.GREATER );
 
-		// Integers
-		Field field2 = new Field();
+        // Integers
+        Field field2 = new Field();
 
-		LiteralRestriction lr3 = new LiteralRestriction();
-		lr3.setOrderNumber(0);
-		lr3.setFieldId(field2.getId());
-		lr3.setValue("1");
-		lr3.setOperator(Operator.GREATER);
+        LiteralRestriction lr3 = new LiteralRestriction();
+        lr3.setOrderNumber( 0 );
+        lr3.setFieldGuid( field2.getGuid() );
+        lr3.setValue( "1" );
+        lr3.setOperator( Operator.GREATER );
 
-		LiteralRestriction lr4 = new LiteralRestriction();
-		lr4.setOrderNumber(1);
-		lr4.setFieldId(field2.getId());
-		lr4.setValue("2");
-		lr4.setOperator(Operator.GREATER_OR_EQUAL);
+        LiteralRestriction lr4 = new LiteralRestriction();
+        lr4.setOrderNumber( 1 );
+        lr4.setFieldGuid( field2.getGuid() );
+        lr4.setValue( "2" );
+        lr4.setOperator( Operator.GREATER_OR_EQUAL );
 
-		// Dates
-		Field field3 = new Field();
+        // Dates
+        Field field3 = new Field();
 
-		LiteralRestriction lr5 = new LiteralRestriction();
-		lr5.setOrderNumber(0);
-		lr5.setFieldId(field3.getId());
-		lr5.setValue("10-dec-2005");
-		lr5.setOperator(Operator.GREATER);
+        LiteralRestriction lr5 = new LiteralRestriction();
+        lr5.setOrderNumber( 0 );
+        lr5.setFieldGuid( field3.getGuid() );
+        lr5.setValue( "10-dec-2005" );
+        lr5.setOperator( Operator.GREATER );
 
-		LiteralRestriction lr6 = new LiteralRestriction();
-		lr6.setOrderNumber(1);
-		lr6.setFieldId(field3.getId());
-		lr6.setValue("10-dec-2008");
-		lr6.setOperator(Operator.EQUAL);
+        LiteralRestriction lr6 = new LiteralRestriction();
+        lr6.setOrderNumber( 1 );
+        lr6.setFieldGuid( field3.getGuid() );
+        lr6.setValue( "10-dec-2008" );
+        lr6.setOperator( Operator.EQUAL );
 
-		data.add(lr1);
-		data.add(lr2);
-		data.add(lr3);
-		data.add(lr4);
-		data.add(lr5);
-		data.add(lr6);
+        data.add( lr1 );
+        data.add( lr2 );
+        data.add( lr3 );
+        data.add( lr4 );
+        data.add( lr5 );
+        data.add( lr6 );
 
-		StatelessSessionResult sessionResult = session.executeWithResults(data);
+        StatelessSessionResult sessionResult = session.executeWithResults( data );
 
-		Map<Cause, Set<Cause>> map = createSubsumptionMap(sessionResult
-				.iterateObjects());
+        Map<Cause, Set<Cause>> map = createSubsumptionMap( sessionResult.iterateObjects() );
 
-		assertTrue(TestBase.causeMapContains(map, lr1, lr2));
-		assertTrue(TestBase.causeMapContains(map, lr3, lr4));
-		assertTrue(TestBase.causeMapContains(map, lr5, lr6));
+        assertTrue( TestBase.causeMapContains( map,
+                                               lr1,
+                                               lr2 ) );
+        assertTrue( TestBase.causeMapContains( map,
+                                               lr3,
+                                               lr4 ) );
+        assertTrue( TestBase.causeMapContains( map,
+                                               lr5,
+                                               lr6 ) );
 
-		if (!map.isEmpty()) {
-			fail("More redundancies than was expected.");
-		}
-	}
+        if ( !map.isEmpty() ) {
+            fail( "More redundancies than was expected." );
+        }
+    }
 
-	public void testRestrictionRedundancyLess() throws Exception {
-		StatelessSession session = getStatelessSession(this.getClass()
-				.getResourceAsStream("Restrictions.drl"));
+    public void testRestrictionRedundancyLess() throws Exception {
+        StatelessSession session = getStatelessSession( this.getClass().getResourceAsStream( "Restrictions.drl" ) );
 
-		session.setAgendaFilter(new RuleNameMatchesAgendaFilter(
-				"Find subsumptant restrictions, less than"));
+        session.setAgendaFilter( new RuleNameMatchesAgendaFilter( "Find subsumptant restrictions, less than" ) );
 
-		Collection<Object> data = new ArrayList<Object>();
+        Collection<Object> data = new ArrayList<Object>();
 
-		VerifierResult result = VerifierResultFactory.createVerifierResult();
-		session.setGlobal("result", result);
+        VerifierReport result = VerifierReportFactory.newVerifierReport();
+        session.setGlobal( "result",
+                           result );
 
-		/*
-		 * Redundant restrictions
-		 */
-		// Doubles
-		Field field1 = new Field();
+        /*
+         * Redundant restrictions
+         */
+        // Doubles
+        Field field1 = new Field();
 
-		LiteralRestriction lr1 = new LiteralRestriction();
-		lr1.setOrderNumber(0);
-		lr1.setFieldId(field1.getId());
-		lr1.setValue("2.0");
-		lr1.setOperator(Operator.LESS);
+        LiteralRestriction lr1 = new LiteralRestriction();
+        lr1.setOrderNumber( 0 );
+        lr1.setFieldGuid( field1.getGuid() );
+        lr1.setValue( "2.0" );
+        lr1.setOperator( Operator.LESS );
 
-		LiteralRestriction lr2 = new LiteralRestriction();
-		lr2.setOrderNumber(1);
-		lr2.setFieldId(field1.getId());
-		lr2.setValue("1.0");
-		lr2.setOperator(Operator.LESS);
+        LiteralRestriction lr2 = new LiteralRestriction();
+        lr2.setOrderNumber( 1 );
+        lr2.setFieldGuid( field1.getGuid() );
+        lr2.setValue( "1.0" );
+        lr2.setOperator( Operator.LESS );
 
-		// Integers
-		Field field2 = new Field();
+        // Integers
+        Field field2 = new Field();
 
-		LiteralRestriction lr3 = new LiteralRestriction();
-		lr3.setOrderNumber(0);
-		lr3.setFieldId(field2.getId());
-		lr3.setValue("2");
-		lr3.setOperator(Operator.LESS);
+        LiteralRestriction lr3 = new LiteralRestriction();
+        lr3.setOrderNumber( 0 );
+        lr3.setFieldGuid( field2.getGuid() );
+        lr3.setValue( "2" );
+        lr3.setOperator( Operator.LESS );
 
-		LiteralRestriction lr4 = new LiteralRestriction();
-		lr4.setOrderNumber(1);
-		lr4.setFieldId(field2.getId());
-		lr4.setValue("1");
-		lr4.setOperator(Operator.LESS_OR_EQUAL);
+        LiteralRestriction lr4 = new LiteralRestriction();
+        lr4.setOrderNumber( 1 );
+        lr4.setFieldGuid( field2.getGuid() );
+        lr4.setValue( "1" );
+        lr4.setOperator( Operator.LESS_OR_EQUAL );
 
-		// Dates
-		Field field3 = new Field();
+        // Dates
+        Field field3 = new Field();
 
-		LiteralRestriction lr5 = new LiteralRestriction();
-		lr5.setOrderNumber(0);
-		lr5.setFieldId(field3.getId());
-		lr5.setValue("10-dec-2008");
-		lr5.setOperator(Operator.LESS);
+        LiteralRestriction lr5 = new LiteralRestriction();
+        lr5.setOrderNumber( 0 );
+        lr5.setFieldGuid( field3.getGuid() );
+        lr5.setValue( "10-dec-2008" );
+        lr5.setOperator( Operator.LESS );
 
-		LiteralRestriction lr6 = new LiteralRestriction();
-		lr6.setOrderNumber(1);
-		lr6.setFieldId(field3.getId());
-		lr6.setValue("10-dec-2005");
-		lr6.setOperator(Operator.EQUAL);
+        LiteralRestriction lr6 = new LiteralRestriction();
+        lr6.setOrderNumber( 1 );
+        lr6.setFieldGuid( field3.getGuid() );
+        lr6.setValue( "10-dec-2005" );
+        lr6.setOperator( Operator.EQUAL );
 
-		data.add(lr1);
-		data.add(lr2);
-		data.add(lr3);
-		data.add(lr4);
-		data.add(lr5);
-		data.add(lr6);
+        data.add( lr1 );
+        data.add( lr2 );
+        data.add( lr3 );
+        data.add( lr4 );
+        data.add( lr5 );
+        data.add( lr6 );
 
-		StatelessSessionResult sessionResult = session.executeWithResults(data);
+        StatelessSessionResult sessionResult = session.executeWithResults( data );
 
-		Map<Cause, Set<Cause>> map = createSubsumptionMap(sessionResult
-				.iterateObjects());
+        Map<Cause, Set<Cause>> map = createSubsumptionMap( sessionResult.iterateObjects() );
 
-		assertTrue(TestBase.causeMapContains(map, lr1, lr2));
-		assertTrue(TestBase.causeMapContains(map, lr3, lr4));
-		assertTrue(TestBase.causeMapContains(map, lr5, lr6));
+        assertTrue( TestBase.causeMapContains( map,
+                                               lr1,
+                                               lr2 ) );
+        assertTrue( TestBase.causeMapContains( map,
+                                               lr3,
+                                               lr4 ) );
+        assertTrue( TestBase.causeMapContains( map,
+                                               lr5,
+                                               lr6 ) );
 
-		if (!map.isEmpty()) {
-			fail("More redundancies than was expected.");
-		}
-	}
+        if ( !map.isEmpty() ) {
+            fail( "More redundancies than was expected." );
+        }
+    }
 }

Added: labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/FindPatterns.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/FindPatterns.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/FindPatterns.drl	2009-10-24 18:25:51 UTC (rev 29799)
@@ -0,0 +1,25 @@
+package org.test.findPatterns
+
+import org.drools.verifier.components.Pattern;
+
+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.data.VerifierReport;
+
+global VerifierReport result;
+
+
+
+rule "Find patterns"
+	when
+		$p :Pattern( )
+	then
+		result.add( new VerifierMessage(
+							Severity.NOTE,
+							MessageType.NOT_SPECIFIED,
+							$p,
+							"This pattern was found." ) );
+
+end



More information about the jboss-svn-commits mailing list