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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jan 13 02:52:56 EST 2010


Author: Rikkola
Date: 2010-01-13 02:52:55 -0500 (Wed, 13 Jan 2010)
New Revision: 31046

Added:
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/MetaDataAgendaFilter.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/DrlPackageParser.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/DrlRuleParser.java
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/scope-knowledge-package.xml
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifyingScopeTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/misc/DrlPackageDataTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/misc/DrlRuleDataTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/VerifyingScope.drl
   labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/misc/DrlPackageTestData.drl
Removed:
   labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DrlPackageData.java
   labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DrlRuleData.java
   labs/jbossrules/trunk/drools-doc/src/test/java/org/drools/doc/DrlPackageDataTest.java
   labs/jbossrules/trunk/drools-doc/src/test/java/org/drools/doc/DrlRuleDataTest.java
   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/misc/RuleLoader.java
Modified:
   labs/jbossrules/trunk/drools-doc/.classpath
   labs/jbossrules/trunk/drools-doc/.project
   labs/jbossrules/trunk/drools-doc/pom.xml
   labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DroolsDocsBuilder.java
   labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DroolsDocsComponentFactory.java
   labs/jbossrules/trunk/drools-verifier/.classpath
   labs/jbossrules/trunk/drools-verifier/pom.xml
   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/builder/VerifierImpl.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/VerifierRule.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/VerifierDataKnowledgeSession.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/VerifierReportImpl.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/report/components/Redundancy.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/MissingRangesReportVisitor.java
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/equivalence/Warnings.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/rangeChecks/Clean.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Dates.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Doubles.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Integers.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/NumberPatterns.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Warnings.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/reports/RangeCheckReports.drl
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/subsumption/SubsumptantSubRulesTest.java
Log:
JBRULES-2311 : Group test rules for analysing just one rule, decision table, rule package and so on

Modified: labs/jbossrules/trunk/drools-doc/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-doc/.classpath	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-doc/.classpath	2010-01-13 07:52:55 UTC (rev 31046)
@@ -1,18 +1,30 @@
-<classpath>
-  <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
-  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" including="**" excluding="**/*.java"/>
-  <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/bouncycastle/bcmail-jdk14/138/bcmail-jdk14-138.jar"/>
-  <classpathentry kind="var" path="M2_REPO/bouncycastle/bcprov-jdk14/138/bcprov-jdk14-138.jar"/>
-  <classpathentry kind="var" path="M2_REPO/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/com/lowagie/itext/2.1.2/itext-2.1.2.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/4.6/junit-4.6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
+<classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" including="**" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.1.1/antlr-runtime-3.1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/bouncycastle/bcmail-jdk14/138/bcmail-jdk14-138.jar"/>
+  <classpathentry kind="var" path="M2_REPO/bouncycastle/bcprov-jdk14/138/bcprov-jdk14-138.jar"/>
+  <classpathentry kind="var" path="M2_REPO/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
+  <classpathentry kind="src" path="/drools-api"/>
+  <classpathentry kind="src" path="/drools-compiler"/>
+  <classpathentry kind="src" path="/drools-core"/>
+  <classpathentry kind="src" path="/drools-verifier"/>
+  <classpathentry kind="var" path="M2_REPO/com/google/collections/google-collections/0.8/google-collections-0.8.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/lowagie/itext/2.1.2/itext-2.1.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.6/joda-time-1.6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/4.6/junit-4.6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.12/mvel2-2.0.12.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.3.1/xstream-1.3.1.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-doc/.project
===================================================================
--- labs/jbossrules/trunk/drools-doc/.project	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-doc/.project	2010-01-13 07:52:55 UTC (rev 31046)
@@ -1,13 +1,18 @@
-<projectDescription>
-  <name>drools-doc</name>
-  <comment>A rule production system</comment>
-  <projects/>
-  <buildSpec>
-    <buildCommand>
-      <name>org.eclipse.jdt.core.javabuilder</name>
-    </buildCommand>
-  </buildSpec>
-  <natures>
-    <nature>org.eclipse.jdt.core.javanature</nature>
-  </natures>
+<projectDescription>
+  <name>drools-doc</name>
+  <comment>A rule production system</comment>
+  <projects>
+    <project>drools-api</project>
+    <project>drools-compiler</project>
+    <project>drools-core</project>
+    <project>drools-verifier</project>
+  </projects>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
 </projectDescription>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-doc/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-doc/pom.xml	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-doc/pom.xml	2010-01-13 07:52:55 UTC (rev 31046)
@@ -31,12 +31,17 @@
   </build>
 
   <dependencies>
+
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-verifier</artifactId>
+    </dependency>
   
     <dependency>
 	    <groupId>com.lowagie</groupId>
 	    <artifactId>itext</artifactId>
 	    <version>2.1.2</version>
 	</dependency> 
-
+   
   </dependencies>
 </project>

Deleted: labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DrlPackageData.java
===================================================================
--- labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DrlPackageData.java	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DrlPackageData.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -1,104 +0,0 @@
-package org.drools.doc;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class DrlPackageData {
-    private static final String            packageExpr  = "(^\\s*#.*?\\n)?(^\\s*package.*?$)(.*?)";
-    private static final Pattern           finder       = Pattern.compile( packageExpr,
-                                                                           Pattern.DOTALL | Pattern.MULTILINE );
-
-    private static final Pattern           globalFinder = Pattern.compile( "(^\\s*global.*?$)",
-                                                                           Pattern.DOTALL | Pattern.MULTILINE );
-
-    final String                           packageName;
-    final List<DrlRuleData>                rules;
-    final String                           description;
-
-    public final List<String>              metadata;
-
-    public final Map<String, List<String>> otherInformation;
-    public final List<String>              globals;
-
-    public DrlPackageData(String packageName,
-                          String description,
-                          List<DrlRuleData> rules,
-                          List<String> globals,
-                          List<String> metadata,
-                          Map<String, List<String>> otherInformation) {
-        this.packageName = packageName;
-        this.description = description;
-        this.rules = rules;
-        this.globals = globals;
-        this.metadata = metadata;
-        this.otherInformation = otherInformation;
-    }
-
-    public static DrlPackageData findPackageDataFromDrl(String drl) {
-
-        final Matcher m = finder.matcher( drl );
-        m.find();
-
-        String packageNameRow = m.group( 2 );
-
-        int indexOfPackage = packageNameRow.indexOf( "package" );
-        String packageName = packageNameRow.substring( indexOfPackage + "package".length() ).trim();
-
-        Comment comment = DrlRuleData.processComment( m.group( 1 ) );
-
-        return new DrlPackageData( packageName,
-                                   comment.description,
-                                   DrlRuleData.findRulesDataFromDrl( drl ),
-                                   findGlobals( drl ),
-                                   comment.metadata,
-                                   new HashMap<String, List<String>>() );
-    }
-
-    public static List<String> findGlobals(String drl) {
-        List<String> globals = new ArrayList<String>();
-        Matcher gm = globalFinder.matcher( drl );
-
-        while ( gm.find() ) {
-            String row = gm.group();
-            globals.add( row.substring( row.indexOf( "global" ) + "global".length() ).trim() );
-        }
-
-        return globals;
-    }
-
-    static Comment processComment(String text) {
-        Comment comment = new Comment();
-
-        if ( text == null ) {
-            comment.description = "";
-            comment.metadata = new ArrayList<String>();
-
-            return comment;
-        }
-
-        comment.description = text.replaceAll( "#",
-                                               "" ).trim();
-        comment.metadata = findMetaData( text );
-
-        return comment;
-    }
-
-    private static List<String> findMetaData(String text) {
-        List<String> list = new ArrayList<String>();
-
-        while ( text.contains( "@" ) ) {
-            int start = text.indexOf( '@' );
-            text = text.substring( start + 1 );
-            int end = text.indexOf( "\n" );
-            list.add( text.substring( 0,
-                                      end ) );
-            text = text.substring( end );
-        }
-
-        return list;
-    }
-}

Deleted: labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DrlRuleData.java
===================================================================
--- labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DrlRuleData.java	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DrlRuleData.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -1,167 +0,0 @@
-package org.drools.doc;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class DrlRuleData {
-    private static final String            rulesExpr = "(^\\s*#.*?\\n)?(^\\s*rule.*?$)(.*?)(when)(.*?)(then)(.*?)(^\\s*end)";
-
-    private static final Pattern           finder    = Pattern.compile( rulesExpr,
-                                                                        Pattern.DOTALL | Pattern.MULTILINE );
-
-    public final Collection<String>        header;
-    public final Collection<String>        lhs;
-    public final Collection<String>        rhs;
-
-    public final String                    ruleName;
-
-    public final String                    description;
-
-    public final Collection<String>        metadata;
-
-    public final Map<String, List<String>> otherInformation;
-
-    private DrlRuleData(String ruleName,
-                        String header,
-                        String lhs,
-                        String rhs,
-                        String description,
-                        List<String> metadata,
-                        Map<String, List<String>> otherInformation) {
-        this.ruleName = ruleName;
-        this.header = asList( header.split( "\n" ) );
-        this.lhs = asList( lhs.split( "\n" ) );
-        this.rhs = asList( rhs.split( "\n" ) );
-        this.description = description;
-        this.metadata = metadata;
-        this.otherInformation = otherInformation;
-    }
-
-    private Collection<String> asList(String[] array) {
-        Collection<String> list = new ArrayList<String>();
-
-        for ( int i = 0; i < array.length; i++ ) {
-            String string = array[i];
-            if ( !string.trim().equals( "" ) ) {
-                list.add( string );
-            }
-        }
-
-        return list;
-    }
-
-    public static List<DrlRuleData> findRulesDataFromDrl(String drl) {
-        final Matcher m = finder.matcher( drl );
-        final List<DrlRuleData> list = new ArrayList<DrlRuleData>();
-
-        while ( m.find() ) {
-
-            // System.out.println( "1 " + m.group( 1 ) );
-            // System.out.println( "2 " + m.group( 2 ) );
-            // System.out.println( "3 " + m.group( 3 ) );
-            // System.out.println( "4 " + m.group( 4 ) );
-            // System.out.println( "5 " + m.group( 5 ) );
-            // System.out.println( "6 " + m.group( 6 ) );
-            // System.out.println( "7 " + m.group( 7 ) );
-
-            Comment comment = processComment( m.group( 1 ) );
-
-            String ruleName = m.group( 2 );
-
-            ruleName = trimRuleName( ruleName );
-
-            list.add( new DrlRuleData( ruleName,
-                                       m.group( 3 ),
-                                       m.group( 5 ),
-                                       m.group( 7 ),
-                                       comment.description,
-                                       comment.metadata,
-                                       new HashMap<String, List<String>>() ) );
-        }
-
-        return list;
-    }
-
-    private static String trimRuleName(String ruleName) {
-        ruleName = ruleName.substring( ruleName.indexOf( "rule" ) + "rule".length() ).trim();
-
-        if ( ruleName.indexOf( "\"" ) == 0 ) {
-            ruleName = ruleName.substring( 1 );
-        }
-
-        if ( ruleName.lastIndexOf( "\"" ) == (ruleName.length() - 1) ) {
-            ruleName = ruleName.substring( 0,
-                                           ruleName.length() - 1 );
-        }
-
-        return ruleName;
-    }
-
-    static Comment processComment(String text) {
-        Comment comment = new Comment();
-
-        if ( text == null ) {
-            comment.description = "";
-            comment.metadata = new ArrayList<String>();
-
-            return comment;
-        }
-
-        // Sometimes the first rule in a file gets the package imports and
-        // comments included.
-        // Checking for that and fixing the description if this did happen.
-
-        StringBuilder description = new StringBuilder();
-        String[] commentLines = text.split( "\n" );
-        for ( int i = 0; i < commentLines.length; i++ ) {
-            String line = commentLines[i].trim();
-
-            if ( line.startsWith( "#" ) ) {
-                while ( line.startsWith( "#" ) ) {
-                    line = line.substring( 1 );
-                }
-
-                line = line.trim();
-
-                if ( !line.startsWith( "@" ) ) {
-                    description.append( line );
-                    description.append( "\n" );
-                }
-            } else {
-                description.delete( 0,
-                                    description.length() );
-            }
-
-        }
-        comment.description = description.toString();
-
-        comment.metadata = findMetaData( text );
-
-        return comment;
-    }
-
-    private static List<String> findMetaData(String text) {
-        List<String> list = new ArrayList<String>();
-
-        while ( text.contains( "@" ) ) {
-            int start = text.indexOf( '@' );
-            text = text.substring( start + 1 );
-            int end = text.indexOf( "\n" );
-            list.add( text.substring( 0,
-                                      end ) );
-            text = text.substring( end );
-        }
-
-        return list;
-    }
-}
-
-class Comment {
-    String       description;
-    List<String> metadata;
-}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DroolsDocsBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DroolsDocsBuilder.java	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DroolsDocsBuilder.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -5,6 +5,10 @@
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
+import org.drools.verifier.misc.DrlPackageParser;
+import org.drools.verifier.misc.DrlRuleParser;
+
+
 import com.lowagie.text.Document;
 import com.lowagie.text.DocumentException;
 import com.lowagie.text.Font;
@@ -25,13 +29,13 @@
         return new SimpleDateFormat( getDateFormatMask() );
     }
 
-    private final DrlPackageData packageData;
+    private final DrlPackageParser packageData;
 
     protected DroolsDocsBuilder(String packageDrl) {
-        this.packageData = DrlPackageData.findPackageDataFromDrl( packageDrl );
+        this.packageData = DrlPackageParser.findPackageDataFromDrl( packageDrl );
     }
 
-    protected DroolsDocsBuilder(DrlPackageData packageData) {
+    protected DroolsDocsBuilder(DrlPackageParser packageData) {
         this.packageData = packageData;
     }
 
@@ -39,7 +43,7 @@
         return new DroolsDocsBuilder( packageDrl );
     }
 
-    public static DroolsDocsBuilder getInstance(DrlPackageData packageData) {
+    public static DroolsDocsBuilder getInstance(DrlPackageParser packageData) {
         return new DroolsDocsBuilder( packageData );
     }
 
@@ -53,11 +57,11 @@
             PdfWriter.getInstance( document,
                                    out );
 
-            HeaderFooter footer = DroolsDocsComponentFactory.createFooter( packageData.packageName );
+            HeaderFooter footer = DroolsDocsComponentFactory.createFooter( packageData.getName() );
 
             document.setFooter( footer );
 
-            document.addTitle( packageData.packageName.toUpperCase() );
+            document.addTitle( packageData.getName().toUpperCase() );
             document.open();
 
             // First page, documentation info.            
@@ -69,13 +73,13 @@
 
             // List index of the rules            
             document.add( new Phrase( "Table of Contents" ) );
-            document.add( DroolsDocsComponentFactory.createContents( packageData.rules ) );
+            document.add( DroolsDocsComponentFactory.createContents( packageData.getRules() ) );
 
             document.newPage();
 
-            for ( DrlRuleData ruleData : packageData.rules ) {
+            for ( DrlRuleParser ruleData : packageData.getRules() ) {
                 DroolsDocsComponentFactory.newRulePage( document,
-                                                           packageData.packageName,
+                                                           packageData.getName(),
                                                            ruleData );
             }
 

Modified: labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DroolsDocsComponentFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DroolsDocsComponentFactory.java	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DroolsDocsComponentFactory.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -4,6 +4,10 @@
 import java.util.Collection;
 import java.util.Map;
 
+import org.drools.verifier.misc.DrlPackageParser;
+import org.drools.verifier.misc.DrlRuleParser;
+
+
 import com.lowagie.text.BadElementException;
 import com.lowagie.text.Cell;
 import com.lowagie.text.Chunk;
@@ -87,7 +91,7 @@
         }
     }
 
-    public static Table newRuleTable(DrlRuleData drl) throws BadElementException,
+    public static Table newRuleTable(DrlRuleParser drl) throws BadElementException,
                                                      DocumentException {
         Table table = newTable();
 
@@ -95,19 +99,19 @@
                                          CATEGORIES_TEXT );
         table.addCell( headerCell );
 
-        for ( String s : drl.header ) {
+        for ( String s : drl.getHeader() ) {
             table.addCell( newCell( INDENT + s.trim() ) );
         }
 
         table.addCell( newHeaderCell( INDENT + "WHEN",
                                       BODY_TEXT ) );
-        for ( String s : drl.lhs ) {
+        for ( String s : drl.getLhs() ) {
             table.addCell( newCell( INDENT + INDENT + s.trim() ) );
         }
 
         table.addCell( newHeaderCell( INDENT + "THEN",
                                       BODY_TEXT ) );
-        for ( String s : drl.rhs ) {
+        for ( String s : drl.getRhs() ) {
             table.addCell( newCell( INDENT + INDENT + s.trim() ) );
         }
         // table.addCell( newEmptyWhenThenCell( "END" ) );
@@ -135,11 +139,11 @@
         return table;
     }
 
-    public static List createContents(java.util.List<DrlRuleData> rules) {
+    public static List createContents(java.util.List<DrlRuleParser> rules) {
         List index = new List( true );
 
-        for ( DrlRuleData drlRuleData : rules ) {
-            Chunk chunk = new Chunk( drlRuleData.ruleName );
+        for ( DrlRuleParser drlRuleData : rules ) {
+            Chunk chunk = new Chunk( drlRuleData.getName() );
             // chunk.setLocalGoto( item.getName() );
             ListItem listItem = new ListItem( chunk );
             index.add( listItem );
@@ -181,46 +185,46 @@
 
     public static void newRulePage(Document document,
                                    String packageName,
-                                   DrlRuleData drlData) throws DocumentException {
+                                   DrlRuleParser drlData) throws DocumentException {
 
         document.add( new Paragraph( packageName,
                                      PACKAGE_NAME ) );
-        document.add( new Paragraph( "Rule " + drlData.ruleName,
+        document.add( new Paragraph( "Rule " + drlData.getName(),
                                      CHAPTER_TITLE ) );
 
         // Extends
-        int index = drlData.ruleName.lastIndexOf( "extends" );
+        int index = drlData.getName().lastIndexOf( "extends" );
         if ( index > 0 ) {
             document.add( new Paragraph( "Extends:",
                                          BODY_TEXT ) );
 
-            Paragraph ext = new Paragraph( drlData.ruleName.substring( "extends".length() + index ),
+            Paragraph ext = new Paragraph( drlData.getName().substring( "extends".length() + index ),
                                            BODY_TEXT );
             ext.setIndentationLeft( INTENTATION_LEFT );
             document.add( ext );
         }
 
         // Description
-        document.add( newDescription( drlData.description ) );
+        document.add( newDescription( drlData.getDescription() ) );
 
         // DRL
         document.add( newRuleTable( drlData ) );
 
         // Meta data
         document.add( newTable( "Meta Data",
-                                drlData.metadata ) );
+                                drlData.getMetadata() ) );
 
         // Other
         createOtherItems( document,
-                          drlData.otherInformation );
+                          drlData.getOtherInformation() );
 
         document.newPage();
     }
 
     public static void createFirstPage(Document document,
                                        String currentDate,
-                                       DrlPackageData packageData) throws DocumentException {
-        Paragraph title = new Paragraph( "\n\n\n\n\n" + packageData.packageName.toUpperCase(),
+                                       DrlPackageParser packageData) throws DocumentException {
+        Paragraph title = new Paragraph( "\n\n\n\n\n" + packageData.getName().toUpperCase(),
                                          RULE_PACKAGE_TITLE );
         title.setAlignment( Element.ALIGN_CENTER );
         document.add( title );
@@ -230,14 +234,14 @@
         date.setAlignment( Element.ALIGN_CENTER );
         document.add( date );
 
-        document.add( new Paragraph( "\n\n\n\n\n" + packageData.description,
+        document.add( new Paragraph( "\n\n\n\n\n" + packageData.getDescription(),
                                      BODY_TEXT ) );
         document.add( newTable( "Meta Data ",
-                                packageData.metadata ) );
+                                packageData.getMetadata() ) );
         document.add( newTable( "Globals ",
-                                packageData.globals ) );
+                                packageData.getGlobals() ) );
         createOtherItems( document,
-                          packageData.otherInformation );
+                          packageData.getOtherInformation() );
     }
 }
 

Deleted: labs/jbossrules/trunk/drools-doc/src/test/java/org/drools/doc/DrlPackageDataTest.java
===================================================================
--- labs/jbossrules/trunk/drools-doc/src/test/java/org/drools/doc/DrlPackageDataTest.java	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-doc/src/test/java/org/drools/doc/DrlPackageDataTest.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -1,80 +0,0 @@
-package org.drools.doc;
-
-import java.util.List;
-
-import junit.framework.TestCase;
-
-public class DrlPackageDataTest extends TestCase {
-	public void testHandleDrl() {
-
-		String rule1 = "";
-		rule1 += "package org.drools.test\n";
-		rule1 += "global java.util.List list\n";
-		rule1 += "rule rule1\n";
-		rule1 += "when\n";
-		rule1 += "then\n";
-		rule1 += "list.add( drools.getRule().getName() );\n";
-		rule1 += "end\n";
-		rule1 += "rule rule2\n";
-		rule1 += "when\n";
-		rule1 += "then\n";
-		rule1 += "list.add( drools.getRule().getName() );\n";
-		rule1 += "end\n";
-
-		DrlPackageData s = DrlPackageData.findPackageDataFromDrl(rule1);
-
-		assertEquals("org.drools.test", s.packageName);
-		assertEquals(2, s.rules.size());
-		assertEquals("", s.description);
-
-	}
-
-	public void testHandleDrlWithComments() {
-
-		String rule1 = "";
-		rule1 += "# important information\n";
-		rule1 += "# about this package\n";
-		rule1 += "# it contains some rules\n";
-		rule1 += "package org.drools.test\n";
-		rule1 += "global java.util.List list\n";
-		rule1 += "rule rule1\n";
-		rule1 += "	when\n";
-		rule1 += "	then\n";
-		rule1 += "		list.add( drools.getRule().getName() );\n";
-		rule1 += "end\n";
-		rule1 += "rule rule2\n";
-		rule1 += "	when\n";
-		rule1 += "	then\n";
-		rule1 += "		list.add( drools.getRule().getName() );\n";
-		rule1 += "end\n";
-
-		DrlPackageData data = DrlPackageData.findPackageDataFromDrl(rule1);
-
-		assertEquals("org.drools.test", data.packageName);
-		assertEquals(2, data.rules.size());
-		assertEquals(1, data.globals.size());
-		assertEquals("java.util.List list", data.globals.get(0));
-		assertEquals(
-				"important information\nabout this package\nit contains some rules\n",
-				data.description);
-
-		DrlRuleData rd1 = data.rules.get(0);
-		assertEquals("rule1", rd1.ruleName);
-		assertEquals("", rd1.description);
-
-		DrlRuleData rd2 = data.rules.get(1);
-		assertEquals("rule2", rd2.ruleName);
-		assertEquals("", rd2.description);
-	}
-
-	public void testfindGlobals() {
-
-		String header = "global LoanApplication gg";
-
-		List<String> globals = DrlPackageData.findGlobals(header);
-
-		assertEquals(1, globals.size());
-		assertEquals("LoanApplication gg", globals.get(0));
-	}
-
-}

Deleted: labs/jbossrules/trunk/drools-doc/src/test/java/org/drools/doc/DrlRuleDataTest.java
===================================================================
--- labs/jbossrules/trunk/drools-doc/src/test/java/org/drools/doc/DrlRuleDataTest.java	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-doc/src/test/java/org/drools/doc/DrlRuleDataTest.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -1,133 +0,0 @@
-package org.drools.doc;
-
-import java.util.List;
-
-import junit.framework.TestCase;
-
-public class DrlRuleDataTest extends TestCase {
-	public void testHandleDrl() {
-		String drl = "rule \"Something\" \n ";
-		drl += "dialect \"Java\" \n ";
-		drl += "	when \n ";
-		drl += "		Person() \n ";
-		drl += "		Cheesery() \n ";
-		drl += "	then \n ";
-		drl += "		insert( new Person()) \n ";
-		drl += "		insert( new Car()) \n ";
-		drl += "		insert( new Cheese()) \n ";
-		drl += "end ";
-
-		DrlRuleData s = DrlRuleData.findRulesDataFromDrl(drl).get(0);
-
-		assertEquals(1, s.header.size());
-		assertEquals(2, s.lhs.size());
-		assertEquals(3, s.rhs.size());
-		assertEquals("", s.description);
-
-	}
-
-	public void testHandleDrlNoLineBreaks() {
-		String drl = "rule \"CreditScoreApproval\" \n";
-		drl += "	dialect \"mvel\" \n";
-		drl += "	when    then";
-		drl += "		applicant.setApproved(true) \n";
-		drl += "		applicant.setName( \"Toni\" ) \n";
-		drl += "		applicant.setAge( 10 ) \n";
-		drl += "end";
-		DrlRuleData s = DrlRuleData.findRulesDataFromDrl(drl).get(0);
-
-		assertNotNull(s);
-
-		assertEquals(1, s.header.size());
-		assertEquals(0, s.lhs.size());
-		assertEquals(3, s.rhs.size());
-		assertEquals("", s.description);
-
-	}
-
-	public void testHandleDrlWithComment() {
-		String drl = "# Really important information about this rule \n";
-		drl += "# Another line because one was not enough \n";
-		drl += "#  \n";
-		drl += "# @author: trikkola \n";
-		drl += "rule \"First\" \n";
-		drl += "	dialect \"mvel\" \n";
-		drl += "	when \n ";
-		drl += "		Person() \n ";
-		drl += "		Cheesery() \n ";
-		drl += "	then \n ";
-		drl += "		applicant.setApproved(true) \n";
-		drl += "		applicant.setName( \"Toni\" ) \n";
-		drl += "		applicant.setAge( 10 ) \n";
-		drl += "end \n";
-		drl += "\n";
-		drl += "# Really important information about this rule \n";
-		drl += "# Another line because one was not enough \n";
-		drl += "#  \n";
-		drl += "# @author: trikkola \n";
-		drl += "# @created: 29.12.2001 \n";
-		drl += "# @edited: 5.5.2005 \n";
-		drl += "rule \"Second\" \n";
-		drl += "	dialect \"mvel\" \n";
-		drl += "	when \n ";
-		drl += "		Person() \n ";
-		drl += "		Cheesery() \n ";
-		drl += "	then \n ";
-		drl += "		applicant.setApproved(true) \n";
-		drl += "		applicant.setName( \"Toni\" ) \n";
-		drl += "		applicant.setAge( 10 ) \n";
-		drl += "end";
-		drl += "\n";
-		drl += "rule \"Third\" \n";
-		drl += "	dialect \"mvel\" \n";
-		drl += "	when \n ";
-		drl += "		Person() \n ";
-		drl += "		Cheesery() \n ";
-		drl += "	then \n ";
-		drl += "		applicant.setApproved(true) \n";
-		drl += "		applicant.setName( \"Toni\" ) \n";
-		drl += "		applicant.setAge( 10 ) \n";
-		drl += "end";
-
-		List<DrlRuleData> list = DrlRuleData.findRulesDataFromDrl(drl);
-
-		assertEquals(3, list.size());
-
-		DrlRuleData rd = list.get(0);
-
-		assertNotNull(rd);
-
-		assertEquals(1, rd.header.size());
-		assertEquals(2, rd.lhs.size());
-		assertEquals(3, rd.rhs.size());
-		assertEquals(1, rd.metadata.size());
-		assertNotNull(rd.description);
-		assertNotSame("", rd.description);
-
-		DrlRuleData rd2 = list.get(1);
-
-		assertNotNull(rd2);
-
-		assertEquals(1, rd2.header.size());
-		assertEquals(2, rd2.lhs.size());
-		assertEquals(3, rd2.rhs.size());
-		assertEquals(3, rd2.metadata.size());
-		assertNotNull(rd2.description);
-
-		String description = "Really important information about this rule\n";
-		description += "Another line because one was not enough\n\n";
-
-		assertEquals(description, rd2.description);
-		assertNotSame("", rd2.description);
-
-		DrlRuleData rd3 = list.get(2);
-
-		assertNotNull(rd3);
-
-		assertEquals(1, rd3.header.size());
-		assertEquals(2, rd3.lhs.size());
-		assertEquals(3, rd3.rhs.size());
-		assertNotNull(rd3.description);
-		assertEquals("", rd3.description);
-	}
-}

Modified: labs/jbossrules/trunk/drools-verifier/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-verifier/.classpath	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/.classpath	2010-01-13 07:52:55 UTC (rev 31046)
@@ -11,6 +11,7 @@
   <classpathentry kind="src" path="/drools-api"/>
   <classpathentry kind="src" path="/drools-compiler"/>
   <classpathentry kind="src" path="/drools-core"/>
+  <classpathentry kind="var" path="M2_REPO/com/google/collections/google-collections/0.8/google-collections-0.8.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>

Modified: labs/jbossrules/trunk/drools-verifier/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-verifier/pom.xml	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/pom.xml	2010-01-13 07:52:55 UTC (rev 31046)
@@ -42,6 +42,12 @@
       <groupId>org.drools</groupId>
       <artifactId>drools-compiler</artifactId>          
     </dependency>    
+    
+    <dependency>
+	    <groupId>com.google.collections</groupId>
+		<artifactId>google-collections</artifactId>
+		<version>0.8</version>
+    </dependency>
 
     <dependency>
      <groupId>com.thoughtworks.xstream</groupId>

Modified: 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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/DefaultVerifierConfiguration.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -1,11 +1,18 @@
 package org.drools.verifier;
 
-import org.drools.verifier.misc.RuleLoader;
+import org.drools.builder.ResourceType;
+import org.drools.io.ResourceFactory;
 
 public class DefaultVerifierConfiguration extends VerifierConfigurationImpl {
 
     public DefaultVerifierConfiguration() {
-        verifyingResources.putAll( RuleLoader.basicRulesForFullKnowledgeBase() );
+        verifyingResources.put( ResourceFactory.newClassPathResource( "scope-knowledge-package.xml",
+                                                                      getClass() ),
+                                ResourceType.CHANGE_SET );
+        //        verifyingResources.putAll( RuleLoader.basicRulesForFullKnowledgeBase( getClass() ) );
+        verifyingScopes.add( VERIFYING_SCOPE_SINGLE_RULE );
+        verifyingScopes.add( VERIFYING_SCOPE_DECISION_TABLE );
+        verifyingScopes.add( VERIFYING_SCOPE_KNOWLEDGE_PACKAGE );
     }
 
 }

Modified: 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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/VerifierConfiguration.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -1,5 +1,6 @@
 package org.drools.verifier;
 
+import java.util.List;
 import java.util.Map;
 
 import org.drools.PropertiesConfiguration;
@@ -10,6 +11,10 @@
     extends
     PropertiesConfiguration {
 
+    public final static String VERIFYING_SCOPE_SINGLE_RULE       = "single-rule";
+    public final static String VERIFYING_SCOPE_DECISION_TABLE    = "decision-table";
+    public final static String VERIFYING_SCOPE_KNOWLEDGE_PACKAGE = "knowledge-package";
+
     /**
      * Add external analyzing rules to verifier.
      * 
@@ -19,4 +24,20 @@
      *            the resource type
      */
     Map<Resource, ResourceType> getVerifyingResources();
+
+    /**
+     * Set verifying scope.<br>
+     * <br>
+     * single-rule - Verifies an single rule <br>
+     * decision-table - Verifies a decision table <br>
+     * knowledge-package - Verifies everything
+     * 
+     */
+    public void addVerifyingScopes(String scope);
+
+    public List<String> getVerifyingScopes();
+
+    public void setAcceptRulesWithoutVerifiyingScope(boolean accept);
+
+    public boolean acceptRulesWithoutVerifiyingScope();
 }

Modified: 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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/VerifierConfigurationImpl.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -2,6 +2,8 @@
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.List;
+import java.util.ArrayList;
 
 import org.drools.builder.ResourceType;
 import org.drools.io.Resource;
@@ -10,9 +12,12 @@
     implements
     VerifierConfiguration {
 
-    protected Map<Resource, ResourceType> verifyingResources = new HashMap<Resource, ResourceType>();
-    private Map<String, String>           properties         = new HashMap<String, String>();
+    protected Map<Resource, ResourceType> verifyingResources              = new HashMap<Resource, ResourceType>();
+    private Map<String, String>           properties                      = new HashMap<String, String>();
+    protected final List<String>          verifyingScopes                 = new ArrayList<String>();
 
+    private boolean                       acceptRuleWithoutVerifyingScope = true;
+
     public String getProperty(String name) {
         return properties.get( name );
     }
@@ -27,4 +32,20 @@
         return verifyingResources;
     }
 
+    public List<String> getVerifyingScopes() {
+        return verifyingScopes;
+    }
+
+    public void addVerifyingScopes(String scope) {
+        this.verifyingScopes.add( scope );
+    }
+
+    public boolean acceptRulesWithoutVerifiyingScope() {
+        return this.acceptRuleWithoutVerifyingScope;
+    }
+
+    public void setAcceptRulesWithoutVerifiyingScope(boolean accept) {
+        acceptRuleWithoutVerifyingScope = accept;
+    }
+
 }

Added: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/MetaDataAgendaFilter.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/MetaDataAgendaFilter.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/MetaDataAgendaFilter.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -0,0 +1,54 @@
+package org.drools.verifier.builder;
+
+import java.util.Collection;
+
+import org.drools.runtime.rule.Activation;
+import org.drools.runtime.rule.AgendaFilter;
+
+/**
+ * 
+ * @author rikkola
+ *
+ */
+public class MetaDataAgendaFilter
+    implements
+    AgendaFilter {
+
+    private final boolean            acceptEmpty;
+    private final String             metadata;
+
+    private final Collection<String> validValues;
+
+    /**
+     * 
+     * @param acceptEmpty true accepts rules that do not have metadata set.
+     * @param metadata Name of the meta data.
+     * @param validValues Valid values that the meta data can have.
+     */
+    public MetaDataAgendaFilter(boolean acceptEmpty,
+                                String metadata,
+                                Collection<String> validValues) {
+        this.acceptEmpty = acceptEmpty;
+        this.metadata = metadata;
+        this.validValues = validValues;
+    }
+
+    public boolean accept(Activation activation) {
+        if ( acceptEmpty && activation.getRule().listMetaAttributes().isEmpty() ) {
+            return true;
+        }
+
+        if ( activation.getRule().listMetaAttributes().contains( metadata ) ) {
+            String[] values = activation.getRule().getMetaAttribute( metadata ).split( "," );
+
+            for ( String value : values ) {
+                if ( validValues.contains( value.trim() ) ) {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
+}

Modified: 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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierImpl.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -1,11 +1,15 @@
 package org.drools.verifier.builder;
 
+import java.io.BufferedReader;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
 import org.drools.KnowledgeBase;
 import org.drools.KnowledgeBaseFactory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
+import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.ResourceType;
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsParserException;
@@ -16,10 +20,13 @@
 import org.drools.verifier.Verifier;
 import org.drools.verifier.VerifierConfiguration;
 import org.drools.verifier.VerifierError;
+import org.drools.verifier.components.RulePackage;
+import org.drools.verifier.components.VerifierRule;
 import org.drools.verifier.data.VerifierReport;
 import org.drools.verifier.data.VerifierReportFactory;
+import org.drools.verifier.misc.DrlPackageParser;
+import org.drools.verifier.misc.DrlRuleParser;
 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
@@ -102,7 +109,9 @@
             // Object that returns the results.
             ksession.setGlobal( "result",
                                 result );
-            ksession.fireAllRules();
+            ksession.fireAllRules( new MetaDataAgendaFilter( conf.acceptRulesWithoutVerifiyingScope(),
+                                                             "verifying_scopes",
+                                                             conf.getVerifyingScopes() ) );
 
         } catch ( Throwable t ) {
             t.printStackTrace();
@@ -134,7 +143,20 @@
 
         verifierKnowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();
 
-        verifierKnowledgeBase.addKnowledgePackages( RuleLoader.loadPackages( conf.getVerifyingResources() ) );
+        KnowledgeBuilderConfiguration kbuilderConfiguration = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
+        kbuilderConfiguration.setProperty( "drools.dialect.java.compiler",
+                                           "JANINO" );
+
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder( kbuilderConfiguration );
+
+        if ( conf.getVerifyingResources() != null ) {
+            for ( Resource resource : conf.getVerifyingResources().keySet() ) {
+                kbuilder.add( resource,
+                              conf.getVerifyingResources().get( resource ) );
+            }
+        }
+
+        verifierKnowledgeBase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
     }
 
     /*
@@ -158,9 +180,28 @@
 
             try {
 
+                BufferedReader reader = new BufferedReader( resource.getReader() );
+
+                StringBuffer drl = new StringBuffer( "" );
+                String line = null;
+                do {
+                    line = reader.readLine();
+                    if ( line != null ) {
+                        drl.append( line );
+                        drl.append( "\n" );
+
+                    }
+                } while ( line != null );
+
                 PackageDescr pkg = p.parse( resource.getInputStream() );
+
                 addPackageDescr( pkg );
 
+                // TODO: Move this into a method
+                addDrlData( drl.toString() );
+
+                reader.close();
+
             } catch ( DroolsParserException e ) {
                 errors.add( new VerifierError( e.getMessage() ) );
             } catch ( IOException e ) {
@@ -169,6 +210,36 @@
         }
     }
 
+    /**
+     * 
+     * Adds meta data from DRL to package and rule.
+     * 
+     * @param drl Package DRL
+     */
+    private void addDrlData(String drl) {
+
+        DrlPackageParser pData = DrlPackageParser.findPackageDataFromDrl( drl );
+
+        RulePackage rPackage = this.result.getVerifierData().getPackageByName( pData.getName() );
+
+        rPackage.getGlobals().addAll( pData.getGlobals() );
+        rPackage.setDescription( pData.getDescription() );
+        rPackage.getMetadata().addAll( pData.getMetadata() );
+        rPackage.getOtherInfo().putAll( pData.getOtherInformation() );
+
+        for ( DrlRuleParser rData : pData.getRules() ) {
+            VerifierRule rule = this.result.getVerifierData().getRuleByName( rData.getName() );
+
+            rule.getHeader().addAll( rData.getHeader() );
+            rule.getLhsRows().addAll( rData.getLhs() );
+            rule.getRhsRows().addAll( rData.getRhs() );
+            rule.setDescription( rData.getDescription() );
+            rule.getCommentMetadata().addAll( rData.getMetadata() );
+            rule.getOtherInfo().putAll( rData.getOtherInformation() );
+
+        }
+    }
+
     public List<VerifierError> getErrors() {
         return errors;
     }

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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/RulePackage.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -1,6 +1,10 @@
 package org.drools.verifier.components;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -9,9 +13,13 @@
  */
 public class RulePackage extends PackageComponent {
 
-    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>();
+    private List<String>              globals   = new ArrayList<String>();
+    private String                    description;
+    private List<String>              metadata  = new ArrayList<String>();
+    private Map<String, List<String>> otherInfo = new HashMap<String, List<String>>();
 
     public int getOffset() {
         offset++;
@@ -37,4 +45,24 @@
     public VerifierComponentType getVerifierComponentType() {
         return VerifierComponentType.RULE_PACKAGE;
     }
+
+    public List<String> getGlobals() {
+        return globals;
+    }
+
+    public List<String> getMetadata() {
+        return metadata;
+    }
+
+    public Map<String, List<String>> getOtherInfo() {
+        return otherInfo;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
 }

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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/VerifierRule.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -1,6 +1,9 @@
 package org.drools.verifier.components;
 
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.drools.verifier.components.Consequence.ConsequenceType;
@@ -15,14 +18,28 @@
     implements
     Cause {
 
-    private Map<String, String> attributes = new HashMap<String, String>();
+    private Map<String, String>       attributes      = new HashMap<String, String>();
 
-    private String              consequenceGuid;
-    private ConsequenceType     consequenceType;
-    private int                 lineNumber;
+    private String                    consequenceGuid;
+    private ConsequenceType           consequenceType;
+    private int                       lineNumber;
 
-    private int                 packageId;
+    private int                       packageId;
 
+    private Collection<String>        header          = new ArrayList<String>();
+
+    private Collection<String>        lhsRows         = new ArrayList<String>();
+
+    private Collection<String>        rhsRows         = new ArrayList<String>();
+
+    private String                    description;
+
+    private Map<String, String>       metadata        = new HashMap<String, String>();
+
+    private Collection<String>        commentMetadata = new ArrayList<String>();
+
+    private Map<String, List<String>> otherInfo       = new HashMap<String, List<String>>();
+
     public CauseType getCauseType() {
         return CauseType.RULE;
     }
@@ -75,4 +92,36 @@
     public VerifierComponentType getVerifierComponentType() {
         return VerifierComponentType.RULE;
     }
+
+    public Collection<String> getHeader() {
+        return header;
+    }
+
+    public Collection<String> getLhsRows() {
+        return lhsRows;
+    }
+
+    public Collection<String> getRhsRows() {
+        return rhsRows;
+    }
+
+    public Map<String, String> getMetadata() {
+        return metadata;
+    }
+
+    public Collection<String> getCommentMetadata() {
+        return commentMetadata;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public Map<String, List<String>> getOtherInfo() {
+        return otherInfo;
+    }
 }

Deleted: 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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/DataTree.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -1,64 +0,0 @@
-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();
-	}
-}

Modified: 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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierData.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -36,6 +36,8 @@
 
     public RulePackage getPackageByName(String name);
 
+    public VerifierRule getRuleByName(String name);
+
     public Collection<VerifierRule> getRulesByFieldId(String guid);
 
     public Collection<VerifierRule> getRulesByObjectTypeId(String guid);
@@ -46,4 +48,5 @@
 
     public VerifierEntryPointDescr getEntryPointByEntryId(String entryId);
 
+    public Collection<VerifierRule> getRulesByCategoryName(String categoryName);
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierDataKnowledgeSession.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierDataKnowledgeSession.java	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierDataKnowledgeSession.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -2,27 +2,17 @@
 
 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 javax.net.ssl.KeyStoreBuilderParameters;
-
 import org.drools.ClassObjectFilter;
 import org.drools.KnowledgeBase;
 import org.drools.KnowledgeBaseFactory;
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderFactory;
-import org.drools.builder.ResourceType;
 import org.drools.definition.KnowledgePackage;
-import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatefulKnowledgeSession;
 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;
@@ -129,4 +119,14 @@
         return null;
     }
 
+    public VerifierRule getRuleByName(String name) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Collection<VerifierRule> getRulesByCategoryName(String categoryName) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
 }

Modified: 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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierDataMaps.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -19,6 +19,9 @@
 import org.drools.verifier.components.VerifierEntryPointDescr;
 import org.drools.verifier.components.VerifierRule;
 
+import com.google.common.collect.Multimap;
+import com.google.common.collect.TreeMultimap;
+
 /**
  * 
  * @author Toni Rikkola
@@ -32,18 +35,20 @@
     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 Multimap<String, Field>                                    fieldsByObjectTypeId           = new TreeMultimap<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 Multimap<String, Pattern>                                  patternsByObjectTypeId         = new TreeMultimap<String, Pattern>();
+    private Multimap<String, Pattern>                                  patternsByRuleName             = new TreeMultimap<String, Pattern>();
+    private Multimap<String, Restriction>                              restrictionsByFieldId          = new TreeMultimap<String, Restriction>();
     private Map<String, Variable>                                      variablesByRuleAndVariableName = new TreeMap<String, Variable>();
     private Map<String, VerifierEntryPointDescr>                       entryPointsByEntryId           = new TreeMap<String, VerifierEntryPointDescr>();
+    private Map<String, VerifierRule>                                  rulesByName                    = new TreeMap<String, VerifierRule>();
+    private Multimap<String, VerifierRule>                             rulesByCategory                = new TreeMultimap<String, VerifierRule>();
 
     public Collection<ObjectType> getObjectTypesByRuleName(String ruleName) {
         Set<ObjectType> set = new HashSet<ObjectType>();
 
-        for ( Pattern pattern : patternsByRuleName.getBranch( ruleName ) ) {
+        for ( Pattern pattern : patternsByRuleName.get( ruleName ) ) {
             ObjectType objectType = (ObjectType) getVerifierObject( VerifierComponentType.OBJECT_TYPE,
                                                                     pattern.getObjectTypeGuid() );
             set.add( objectType );
@@ -82,13 +87,13 @@
     }
 
     public Collection<Field> getFieldsByObjectTypeId(String id) {
-        return fieldsByObjectTypeId.getBranch( id );
+        return fieldsByObjectTypeId.get( id );
     }
 
     public Collection<VerifierRule> getRulesByObjectTypeId(String id) {
         Set<VerifierRule> rules = new HashSet<VerifierRule>();
 
-        for ( Pattern pattern : patternsByObjectTypeId.getBranch( id ) ) {
+        for ( Pattern pattern : patternsByObjectTypeId.get( id ) ) {
 
             rules.add( (VerifierRule) getVerifierObject( VerifierComponentType.RULE,
                                                          pattern.getRuleGuid() ) );
@@ -101,7 +106,7 @@
 
         Set<VerifierRule> rules = new HashSet<VerifierRule>();
 
-        for ( Restriction restriction : restrictionsByFieldId.getBranch( id ) ) {
+        for ( Restriction restriction : restrictionsByFieldId.get( id ) ) {
 
             rules.add( (VerifierRule) getVerifierObject( VerifierComponentType.RULE,
                                                          restriction.getRuleGuid() ) );
@@ -115,7 +120,7 @@
     }
 
     public Collection<Restriction> getRestrictionsByFieldGuid(String id) {
-        return restrictionsByFieldId.getBranch( id );
+        return restrictionsByFieldId.get( id );
     }
 
     public void add(VerifierComponent object) {
@@ -128,6 +133,14 @@
 
             fieldsByObjectTypeId.put( field.getObjectTypeGuid(),
                                       field );
+        } else if ( VerifierComponentType.RULE.equals( object.getVerifierComponentType() ) ) {
+            VerifierRule rule = (VerifierRule) object;
+            rulesByName.put( rule.getRuleName(),
+                             rule );
+            if ( rule.getMetadata().containsKey( "category" ) ) {
+                rulesByCategory.put( rule.getMetadata().get( "category" ),
+                                     rule );
+            }
         } else if ( VerifierComponentType.VARIABLE.equals( object.getVerifierComponentType() ) ) {
             Variable variable = (Variable) object;
             variablesByRuleAndVariableName.put( variable.getRuleName() + "." + variable.getName(),
@@ -176,6 +189,10 @@
 
     }
 
+    public Collection<VerifierRule> getRulesByCategoryName(String categoryName) {
+        return rulesByCategory.get( categoryName );
+    }
+
     //    public <T extends VerifierComponent> Collection<T> getAll(VerifierComponentType type) {
     public Collection< ? extends VerifierComponent> getAll(VerifierComponentType type) {
         return all.get( type ).values();
@@ -192,4 +209,8 @@
         return entryPointsByEntryId.get( entryId );
     }
 
+    public VerifierRule getRuleByName(String name) {
+        return rulesByName.get( name );
+    }
+
 }

Modified: 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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierReportImpl.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -13,6 +13,9 @@
 import org.drools.verifier.report.components.Severity;
 import org.drools.verifier.report.components.VerifierMessageBase;
 
+import com.google.common.collect.Multimap;
+import com.google.common.collect.TreeMultimap;
+
 /**
  * 
  * @author Toni Rikkola
@@ -23,12 +26,12 @@
     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 Multimap<String, Gap>                   gapsByFieldId                  = new TreeMultimap<String, Gap>();
     private Map<String, MissingNumberPattern>       missingNumberPatternsById      = new TreeMap<String, MissingNumberPattern>();
-    private DataTree<String, MissingNumberPattern>  missingNumberPatternsByFieldId = new DataTree<String, MissingNumberPattern>();
+    private Multimap<String, MissingNumberPattern>  missingNumberPatternsByFieldId = new TreeMultimap<String, MissingNumberPattern>();
 
     private List<VerifierMessageBase>               messages                       = new ArrayList<VerifierMessageBase>();
-    private DataTree<Severity, VerifierMessageBase> messagesBySeverity             = new DataTree<Severity, VerifierMessageBase>();
+    private Multimap<Severity, VerifierMessageBase> messagesBySeverity             = new TreeMultimap<Severity, VerifierMessageBase>();
 
     private VerifierData                            data;
 
@@ -43,7 +46,7 @@
     }
 
     public Collection<VerifierMessageBase> getBySeverity(Severity severity) {
-        Collection<VerifierMessageBase> result = messagesBySeverity.getBranch( severity );
+        Collection<VerifierMessageBase> result = messagesBySeverity.get( severity );
 
         if ( result == null ) {
             return Collections.emptyList();
@@ -69,7 +72,7 @@
     }
 
     public Collection<Gap> getGapsByFieldId(String fieldId) {
-        return gapsByFieldId.getBranch( fieldId );
+        return gapsByFieldId.get( fieldId );
     }
 
     public Collection<RangeCheckCause> getRangeCheckCauses() {
@@ -93,9 +96,9 @@
     public Collection<RangeCheckCause> getRangeCheckCausesByFieldId(String id) {
         Collection<RangeCheckCause> result = new ArrayList<RangeCheckCause>();
 
-        result.addAll( gapsByFieldId.getBranch( id ) );
+        result.addAll( gapsByFieldId.get( id ) );
 
-        result.addAll( missingNumberPatternsByFieldId.getBranch( id ) );
+        result.addAll( missingNumberPatternsByFieldId.get( id ) );
 
         return result;
     }

Copied: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/DrlPackageParser.java (from rev 30433, labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DrlPackageData.java)
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/DrlPackageParser.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/DrlPackageParser.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -0,0 +1,141 @@
+package org.drools.verifier.misc;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class DrlPackageParser {
+    private static final String             packageExpr  = "(^\\s*#.*?\\n)?(^\\s*package.*?$)(.*?)";
+    private static final Pattern            finder       = Pattern.compile( packageExpr,
+                                                                            Pattern.DOTALL | Pattern.MULTILINE );
+
+    private static final Pattern            globalFinder = Pattern.compile( "(^\\s*global.*?$)",
+                                                                            Pattern.DOTALL | Pattern.MULTILINE );
+
+    private final String                    name;
+    private final List<DrlRuleParser>       rules;
+    private final String                    description;
+
+    private final List<String>              metadata;
+
+    private final Map<String, List<String>> otherInformation;
+    private final List<String>              globals;
+
+    public DrlPackageParser(String packageName,
+                            String description,
+                            List<DrlRuleParser> rules,
+                            List<String> globals,
+                            List<String> metadata,
+                            Map<String, List<String>> otherInformation) {
+        this.name = packageName;
+        this.description = description;
+        this.rules = rules;
+        this.globals = globals;
+        this.metadata = metadata;
+        this.otherInformation = otherInformation;
+    }
+
+    public static DrlPackageParser findPackageDataFromDrl(String drl) {
+
+        // Remove block comments
+        int start = drl.indexOf( "/*" );
+        while ( start > 0 ) {
+            if ( start >= 0 ) {
+                drl = drl.replace( drl.substring( start,
+                                                  drl.indexOf( "*/",
+                                                               start ) ),
+                                   "" );
+
+                start = drl.indexOf( "/*" );
+            }
+        }
+
+        final Matcher m = finder.matcher( drl );
+        m.find();
+
+        String packageNameRow = m.group( 2 );
+
+        int indexOfPackage = packageNameRow.indexOf( "package" );
+        String packageName = packageNameRow.substring( indexOfPackage + "package".length() ).trim();
+
+        Comment comment = DrlRuleParser.processComment( m.group( 1 ) );
+
+        return new DrlPackageParser( packageName,
+                                     comment.description,
+                                     DrlRuleParser.findRulesDataFromDrl( drl ),
+                                     findGlobals( drl ),
+                                     comment.metadata,
+                                     new HashMap<String, List<String>>() );
+    }
+
+    public static List<String> findGlobals(String drl) {
+        List<String> globals = new ArrayList<String>();
+        Matcher gm = globalFinder.matcher( drl );
+
+        while ( gm.find() ) {
+            String row = gm.group();
+            globals.add( row.substring( row.indexOf( "global" ) + "global".length() ).trim() );
+        }
+
+        return globals;
+    }
+
+    static Comment processComment(String text) {
+        Comment comment = new Comment();
+
+        if ( text == null ) {
+            comment.description = "";
+            comment.metadata = new ArrayList<String>();
+
+            return comment;
+        }
+
+        comment.description = text.replaceAll( "#",
+                                               "" ).trim();
+        comment.metadata = findMetaData( text );
+
+        return comment;
+    }
+
+    private static List<String> findMetaData(String text) {
+        List<String> list = new ArrayList<String>();
+
+        while ( text.contains( "@" ) ) {
+            int start = text.indexOf( '@' );
+            text = text.substring( start + 1 );
+            int end = text.indexOf( "\n" );
+            list.add( text.substring( 0,
+                                      end ) );
+            text = text.substring( end );
+        }
+
+        return list;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public List<DrlRuleParser> getRules() {
+        return rules;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public List<String> getMetadata() {
+        return metadata;
+    }
+
+    public Map<String, List<String>> getOtherInformation() {
+        return otherInformation;
+    }
+
+    public List<String> getGlobals() {
+        return globals;
+    }
+}

Copied: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/DrlRuleParser.java (from rev 30433, labs/jbossrules/trunk/drools-doc/src/main/java/org/drools/doc/DrlRuleData.java)
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/DrlRuleParser.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/DrlRuleParser.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -0,0 +1,195 @@
+package org.drools.verifier.misc;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class DrlRuleParser {
+    private static final String             rulesExpr = "(^\\s*#.*?\\n)?(^\\s*rule.*?$)(.*?)(when)(.*?)(then)(.*?)(^\\s*end)";
+
+    private static final Pattern            finder    = Pattern.compile( rulesExpr,
+                                                                         Pattern.DOTALL | Pattern.MULTILINE );
+
+    private final Collection<String>        header;
+    private final Collection<String>        lhs;
+    private final Collection<String>        rhs;
+
+    private final String                    name;
+
+    private final String                    description;
+
+    private final Collection<String>        metadata;
+
+    private final Map<String, List<String>> otherInformation;
+
+    private DrlRuleParser(String ruleName,
+                        String header,
+                        String lhs,
+                        String rhs,
+                        String description,
+                        List<String> metadata,
+                        Map<String, List<String>> otherInformation) {
+        this.name = ruleName;
+        this.header = asList( header.split( "\n" ) );
+        this.lhs = asList( lhs.split( "\n" ) );
+        this.rhs = asList( rhs.split( "\n" ) );
+        this.description = description;
+        this.metadata = metadata;
+        this.otherInformation = otherInformation;
+    }
+
+    private Collection<String> asList(String[] array) {
+        Collection<String> list = new ArrayList<String>();
+
+        for ( int i = 0; i < array.length; i++ ) {
+            String string = array[i];
+            if ( !string.trim().equals( "" ) ) {
+                list.add( string );
+            }
+        }
+
+        return list;
+    }
+
+    public static List<DrlRuleParser> findRulesDataFromDrl(String drl) {
+        final Matcher m = finder.matcher( drl );
+        final List<DrlRuleParser> list = new ArrayList<DrlRuleParser>();
+
+        while ( m.find() ) {
+
+            // System.out.println( "1 " + m.group( 1 ) );
+            // System.out.println( "2 " + m.group( 2 ) );
+            // System.out.println( "3 " + m.group( 3 ) );
+            // System.out.println( "4 " + m.group( 4 ) );
+            // System.out.println( "5 " + m.group( 5 ) );
+            // System.out.println( "6 " + m.group( 6 ) );
+            // System.out.println( "7 " + m.group( 7 ) );
+
+            Comment comment = processComment( m.group( 1 ) );
+
+            String ruleName = m.group( 2 );
+
+            ruleName = trimRuleName( ruleName );
+
+            list.add( new DrlRuleParser( ruleName,
+                                       m.group( 3 ),
+                                       m.group( 5 ),
+                                       m.group( 7 ),
+                                       comment.description,
+                                       comment.metadata,
+                                       new HashMap<String, List<String>>() ) );
+        }
+
+        return list;
+    }
+
+    private static String trimRuleName(String ruleName) {
+        ruleName = ruleName.substring( ruleName.indexOf( "rule" ) + "rule".length() ).trim();
+
+        if ( ruleName.indexOf( "\"" ) == 0 ) {
+            ruleName = ruleName.substring( 1 );
+        }
+
+        if ( ruleName.lastIndexOf( "\"" ) == (ruleName.length() - 1) ) {
+            ruleName = ruleName.substring( 0,
+                                           ruleName.length() - 1 );
+        }
+
+        return ruleName;
+    }
+
+    static Comment processComment(String text) {
+        Comment comment = new Comment();
+
+        if ( text == null ) {
+            comment.description = "";
+            comment.metadata = new ArrayList<String>();
+
+            return comment;
+        }
+
+        // Sometimes the first rule in a file gets the package imports and
+        // comments included.
+        // Checking for that and fixing the description if this did happen.
+
+        StringBuilder description = new StringBuilder();
+        String[] commentLines = text.split( "\n" );
+        for ( int i = 0; i < commentLines.length; i++ ) {
+            String line = commentLines[i].trim();
+
+            if ( line.startsWith( "#" ) ) {
+                while ( line.startsWith( "#" ) ) {
+                    line = line.substring( 1 );
+                }
+
+                line = line.trim();
+
+                if ( !line.startsWith( "@" ) ) {
+                    description.append( line );
+                    description.append( "\n" );
+                }
+            } else {
+                description.delete( 0,
+                                    description.length() );
+            }
+
+        }
+        comment.description = description.toString();
+
+        comment.metadata = findMetaData( text );
+
+        return comment;
+    }
+
+    private static List<String> findMetaData(String text) {
+        List<String> list = new ArrayList<String>();
+
+        while ( text.contains( "@" ) ) {
+            int start = text.indexOf( '@' );
+            text = text.substring( start + 1 );
+            int end = text.indexOf( "\n" );
+            list.add( text.substring( 0,
+                                      end ) );
+            text = text.substring( end );
+        }
+
+        return list;
+    }
+
+    public Collection<String> getHeader() {
+        return header;
+    }
+
+    public Collection<String> getLhs() {
+        return lhs;
+    }
+
+    public Collection<String> getRhs() {
+        return rhs;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public Collection<String> getMetadata() {
+        return metadata;
+    }
+
+    public Map<String, List<String>> getOtherInformation() {
+        return otherInformation;
+    }
+}
+
+class Comment {
+    String       description;
+    List<String> metadata;
+}
\ No newline at end of file

Modified: 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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/PackageDescrVisitor.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -531,6 +531,8 @@
 
         Consequence consequence = visitConsequence( rule,
                                                     descr.getConsequence() );
+        
+        rule.getMetadata().putAll( descr.getMetaAttributes() );
         rule.setConsequenceGuid( consequence.getGuid() );
         rule.setConsequenceType( consequence.getConsequenceType() );
         rule.setLineNumber( descr.getLine() );

Deleted: 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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/RuleLoader.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -1,176 +0,0 @@
-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();
-    }
-
-    private static String[] defaultList = new String[]{
-                                        //Missing consequence              
-            "Consequence.drl",
-            // Always false
-            "alwaysFalse/Patterns.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",
-            // Overlaps
-            "overlaps/Restrictions.drl",
-            // Range checks
-            "rangeChecks/Clean.drl", "rangeChecks/Dates.drl", "rangeChecks/Doubles.drl", "rangeChecks/Integers.drl",
-            //         Redundancy
-            "redundancy/Redundancy.drl", "redundancy/Notes.drl", "redundancy/Warnings.drl",
-            // Subsumption
-            "subsumption/Consequences.drl", "subsumption/Restrictions.drl", "subsumption/SubPatterns.drl", "subsumption/SubRules.drl"};
-
-    public static Map<Resource, ResourceType> basicRulesForFullKnowledgeBase() {
-        Map<Resource, ResourceType> resources = new HashMap<Resource, ResourceType>();
-
-        for ( int i = 0; i < defaultList.length; i++ ) {
-            resources.put( ResourceFactory.newClassPathResource( defaultList[i],
-                                                                 Verifier.class ),
-                           ResourceType.DRL );
-        }
-
-        //        // 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 );
-        //        // 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 );
-        //        //        resources.put( ResourceFactory.newClassPathResource( "rangeChecks/NumberPatterns.drl",
-        //        //                                                             Verifier.class ),
-        //        //                       ResourceType.DRL );
-        //        //        resources.put( ResourceFactory.newClassPathResource( "rangeChecks/Variables.drl",
-        //        //                                                             Verifier.class ),
-        //        //                       ResourceType.DRL );
-        //        //         Redundancy
-        //        resources.put( ResourceFactory.newClassPathResource( "redundancy/Redundancy.drl",
-        //                                                             Verifier.class ),
-        //                       ResourceType.DRL );
-        //        resources.put( ResourceFactory.newClassPathResource( "redundancy/Notes.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/Consequences.drl",
-        //                                                             Verifier.class ),
-        //                       ResourceType.DRL );
-        //        resources.put( ResourceFactory.newClassPathResource( "subsumption/Restrictions.drl",
-        //                                                             Verifier.class ),
-        //                       ResourceType.DRL );
-        //        resources.put( ResourceFactory.newClassPathResource( "subsumption/SubPatterns.drl",
-        //                                                             Verifier.class ),
-        //                       ResourceType.DRL );
-        //        resources.put( ResourceFactory.newClassPathResource( "subsumption/SubRules.drl",
-        //                                                             Verifier.class ),
-        //                       ResourceType.DRL );
-
-        return resources;
-    }
-}

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/Redundancy.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/Redundancy.java	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/Redundancy.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -1,7 +1,6 @@
 package org.drools.verifier.report.components;
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
 
 /**

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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/MissingRangesReportVisitor.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -11,18 +11,20 @@
 import org.drools.verifier.components.LiteralRestriction;
 import org.drools.verifier.components.Restriction;
 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;
 
+import com.google.common.collect.Multimap;
+import com.google.common.collect.TreeMultimap;
+
 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>();
+        Multimap<Object, DataRow> dt = new TreeMultimap<Object, DataRow>();
         Collection<String> stringRows = new ArrayList<String>();
 
         for ( RangeCheckCause cause : causes ) {

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/equivalence/Warnings.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/equivalence/Warnings.drl	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/equivalence/Warnings.drl	2010-01-13 07:52:55 UTC (rev 31046)
@@ -25,6 +25,7 @@
 # Dependencies: None
 #
 rule "Find equivalent Rules"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		# Check that VerifierRule $left and $right have redundant fields.
 		$left :VerifierRule()

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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/missingEquality/MissingEquality.drl	2010-01-13 07:52:55 UTC (rev 31046)
@@ -27,6 +27,7 @@
 # Example: val != 10 when val == 10 is missing.
 #
 rule "Missing restriction in LiteralRestrictions"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		#
 		# == and !=
@@ -101,6 +102,7 @@
 # Example: val != $var when val == $var is missing.
 #
 rule "Missing restriction in VariableRestrictions"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		#
 		# == and !=

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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Clean.drl	2010-01-13 07:52:55 UTC (rev 31046)
@@ -40,6 +40,7 @@
 # Example: missing ( x >= 10 ) and ( x <= 10 ). This is the same as ( x == 10 )
 #
 rule "Merge gaps"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		$g1 :Gap(
 			operator == Operator.GREATER_OR_EQUAL
@@ -81,6 +82,7 @@
 # 			reports that ( x < 50 ), ( x > 50 ) and ( x <= 70 ) is missing.
 #
 rule "Remove useless integer gaps lesser or lesser and equal"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		# Covered x > 10
 		$lower :LiteralRestriction( 
@@ -133,6 +135,7 @@
 #			reports that ( x < 50 ), ( x > 50 ) and ( x >= 70 ) is missing.
 #
 rule "Remove useless integer gaps greater or greater and equal"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		# Covered x > 10
 		$lower :LiteralRestriction( 
@@ -185,6 +188,7 @@
 # 			reports that ( x < 50.0 ), ( x > 50.0 ) and ( x <= 70.0 ) is missing.
 #
 rule "Remove useless double gaps lesser or lesser and equal"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		# Covered x > 10.0
 		$lower :LiteralRestriction( 
@@ -237,6 +241,7 @@
 # reports that ( x < 50.0 ), ( x > 50.0 ) and ( x >= 70.0 ) is missing.
 #
 rule "Remove useless double gaps greater or greater and equal"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		# Covered x > 10.0
 		$lower :LiteralRestriction( 
@@ -289,6 +294,7 @@
 # reports that ( x < "10-Oct-2007" ), ( x > "10-Oct-2007" ) and ( x <= "15-Oct-2007" ) is missing.
 #
 rule "Remove useless date gaps lesser or lesser and equal"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		# Covered x > "01-Oct-2007"
 		$lower :LiteralRestriction( 
@@ -341,6 +347,7 @@
 # reports that ( x < "10-Oct-2007" ), ( x > "10-Oct-2007" ) and ( x >= "15-Oct-2007" ) is missing.
 #
 rule "Remove useless date gaps greater or greater and equal"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		# Covered x > "01-Oct-2007"
 		$lower :LiteralRestriction( 

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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Dates.drl	2010-01-13 07:52:55 UTC (rev 31046)
@@ -35,6 +35,7 @@
 #						and in Foo( <= "27-Oct-2007" || == "27-Oct-2007" ) is missing.
 #
 rule "Range check for dates, if smaller than or equal is missing"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		$f :Field( fieldType == Field.FieldType.DATE )
 		
@@ -66,6 +67,7 @@
 #						and in Foo( >= "27-Oct-2007" || == "27-Oct-2007" ) is missing.
 #
 rule "Range check for dates, if greater than or equal is missing"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		$f :Field( fieldType == Field.FieldType.DATE )
 		
@@ -98,6 +100,7 @@
 #						then Foo( bar > "27-Oct-2007" ) is missing.
 #
 rule "Range check for dates, equal and greater than"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		$f :Field( fieldType == Field.FieldType.DATE )
 
@@ -138,6 +141,7 @@
 #						then Foo( bar < "27-Oct-2007" ) is missing.
 #
 rule "Range check for dates, equal and smaller than"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		$f :Field( fieldType == Field.FieldType.DATE )
 

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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Doubles.drl	2010-01-13 07:52:55 UTC (rev 31046)
@@ -21,6 +21,7 @@
 #						and in Foo( <= 42 || == 42 ) is missing.
 #
 rule "Range check for doubles, if smaller than or equal is missing"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		$f :Field( fieldType == Field.FieldType.DOUBLE )
 		
@@ -52,6 +53,7 @@
 #						and in Foo( >= 42 || == 42 ) is missing.
 #
 rule "Range check for doubles, if greater than or equal is missing"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		$f :Field( fieldType == Field.FieldType.DOUBLE )
 		
@@ -84,6 +86,7 @@
 #						then Foo( bar > 42 ) is missing.
 #
 rule "Range check for doubles, equal and greater than"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		$f :Field( fieldType == Field.FieldType.DOUBLE )
 
@@ -116,6 +119,7 @@
 #						then Foo( bar < 42 ) is missing.
 #
 rule "Range check for doubles, equal and smaller than"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		$f :Field( fieldType == Field.FieldType.DOUBLE )
 

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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Integers.drl	2010-01-13 07:52:55 UTC (rev 31046)
@@ -19,6 +19,7 @@
 #						and Foo( <= 42 || == 42 ) is missing.
 #
 rule "Range check for integers, if smaller than or equal is missing"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		$f :Field( fieldType == Field.FieldType.INT )
 		
@@ -50,6 +51,7 @@
 #						and in Foo( >= 42 || == 42 ) is missing.
 #
 rule "Range check for integers, if greater than or equal is missing"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		$f :Field( fieldType == Field.FieldType.INT )
 		
@@ -82,6 +84,7 @@
 #						then Foo( bar > 42 ) is missing.
 #
 rule "Range check for integers, equal and greater than"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		$f :Field( fieldType == Field.FieldType.INT )
 
@@ -122,6 +125,7 @@
 #						then Foo( bar < 42 ) is missing.
 #
 rule "Range check for integers, equal and smaller than"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		$f :Field( fieldType == Field.FieldType.INT )
 

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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/NumberPatterns.drl	2010-01-13 07:52:55 UTC (rev 31046)
@@ -25,6 +25,7 @@
 # Example: in "Rule 1" Foo( bar == 10 ) and in "Rule 2" Foo( bar == 20 ) and in "Rule 3" Foo( bar == 40 )
 # 					then Foo( bar == 30 ) is missing.
 rule "Range check for number patterns"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		$f :Field(
 			( fieldType == Field.FieldType.INT || == Field.FieldType.DOUBLE )
@@ -66,6 +67,7 @@
 # Example: in "Rule 1" Foo( bar == 10 ) and in "Rule 2" Foo( bar == 20 ) and in "Rule 3" Foo( bar == 40 )
 # 					then Foo( bar == 30 ) is missing.
 rule "Range check for number patterns, !="
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		$f :Field( 
 			( fieldType == Field.FieldType.INT || == Field.FieldType.DOUBLE ) 

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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/redundancy/Warnings.drl	2010-01-13 07:52:55 UTC (rev 31046)
@@ -26,6 +26,7 @@
 
 
 rule "Find redundant LHS"
+	@verifying_scopes(knowledge-package, decision-table)
 	when
 		# Check that VerifierRule $left and $right have redundant fields.
 		$left :VerifierRule()
@@ -152,6 +153,7 @@
 #			rule "Find rule possibility redundancy"
 #
 rule "Find subsumptant rule possibilities from different rules"
+	@verifying_scopes(knowledge-package, decision-table)
 	salience -100
 	when
 		$subsumption:Subsumption(

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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/reports/RangeCheckReports.drl	2010-01-13 07:52:55 UTC (rev 31046)
@@ -50,6 +50,7 @@
 #			rule "Remove useless date gaps greater or greater and equal"
 #
 rule "Collect gaps"
+	@verifying_scopes(knowledge-package, decision-table)
 	salience -100
 	when
 		$f :Field()

Added: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/scope-knowledge-package.xml
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/scope-knowledge-package.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/scope-knowledge-package.xml	2010-01-13 07:52:55 UTC (rev 31046)
@@ -0,0 +1,67 @@
+<change-set xmlns='http://drools.org/drools-5.0/change-set'
+	xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'
+	xs:schemaLocation='http://drools.org/drools-5.0/composition drools-composition-4.0.xsd'>
+	<add>
+		<resource source='classpath:org/drools/verifier/Consequence.drl'
+			type='DRL' />
+		<!-- Always false -->
+		<resource source='classpath:org/drools/verifier/alwaysFalse/Patterns.drl'
+			type='DRL' />
+		<!-- Incoherence -->
+		<resource source='classpath:org/drools/verifier/incoherence/Patterns.drl'
+			type='DRL' />
+		<resource source='classpath:org/drools/verifier/incoherence/Restrictions.drl'
+			type='DRL' />
+		<!-- Incompatibility -->
+		<resource source='classpath:org/drools/verifier/incompatibility/Patterns.drl'
+			type='DRL' />
+		<resource
+			source='classpath:org/drools/verifier/incompatibility/Restrictions.drl'
+			type='DRL' />
+		<!-- Missing equality -->
+		<resource
+			source='classpath:org/drools/verifier/missingEquality/MissingEquality.drl'
+			type='DRL' />
+		<!-- Opposites -->
+		<resource source='classpath:org/drools/verifier/opposites/Patterns.drl'
+			type='DRL' />
+		<resource source='classpath:org/drools/verifier/opposites/Restrictions.drl'
+			type='DRL' />
+		<resource source='classpath:org/drools/verifier/opposites/Rules.drl'
+			type='DRL' />
+		<!-- Opposites -->
+		<resource
+			source='classpath:org/drools/verifier/optimisation/PatternOrder.drl'
+			type='DRL' />
+		<!-- Overlaps -->
+		<resource source='classpath:org/drools/verifier/overlaps/Restrictions.drl'
+			type='DRL' />
+		<!-- Range checks -->
+		<resource source='classpath:org/drools/verifier/rangeChecks/Clean.drl'
+			type='DRL' />
+		<resource source='classpath:org/drools/verifier/rangeChecks/Dates.drl'
+			type='DRL' />
+		<resource source='classpath:org/drools/verifier/rangeChecks/Doubles.drl'
+			type='DRL' />
+		<resource source='classpath:org/drools/verifier/rangeChecks/Integers.drl'
+			type='DRL' />
+		<!-- Redundancy -->
+		<resource source='classpath:org/drools/verifier/redundancy/Redundancy.drl'
+			type='DRL' />
+		<resource source='classpath:org/drools/verifier/redundancy/Notes.drl'
+			type='DRL' />
+		<resource source='classpath:org/drools/verifier/redundancy/Warnings.drl'
+			type='DRL' />
+		<!-- Subsumption -->
+		<resource source='classpath:org/drools/verifier/subsumption/Consequences.drl'
+			type='DRL' />
+		<resource source='classpath:org/drools/verifier/subsumption/Restrictions.drl'
+			type='DRL' />
+		<resource source='classpath:org/drools/verifier/subsumption/SubPatterns.drl'
+			type='DRL' />
+		<resource source='classpath:org/drools/verifier/subsumption/SubRules.drl'
+			type='DRL' />
+	</add>
+
+
+</change-set>
\ No newline at end of file

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	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTest.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -88,5 +88,4 @@
                           m.getMessage() );
         }
     }
-
 }

Added: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifyingScopeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifyingScopeTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifyingScopeTest.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -0,0 +1,138 @@
+package org.drools.verifier;
+
+import junit.framework.TestCase;
+
+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;
+
+public class VerifyingScopeTest extends TestCase {
+
+    public void testSingleRule() {
+
+        VerifierBuilder vBuilder = VerifierBuilderFactory.newVerifierBuilder();
+
+        VerifierConfiguration vConfiguration = vBuilder.newVerifierConfiguration();
+
+        // Check that the builder works.
+        assertFalse( vBuilder.hasErrors() );
+        assertEquals( 0,
+                      vBuilder.getErrors().size() );
+
+        vConfiguration.getVerifyingResources().put( new ClassPathResource( "VerifyingScope.drl",
+                                                                           Verifier.class ),
+                                                    ResourceType.DRL );
+
+        vConfiguration.addVerifyingScopes( VerifierConfiguration.VERIFYING_SCOPE_SINGLE_RULE );
+
+        Verifier verifier = vBuilder.newVerifier( vConfiguration );
+
+        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() );
+
+    }
+
+    public void testNothing() {
+
+        VerifierBuilder vBuilder = VerifierBuilderFactory.newVerifierBuilder();
+
+        VerifierConfiguration vConfiguration = vBuilder.newVerifierConfiguration();
+
+        // Check that the builder works.
+        assertFalse( vBuilder.hasErrors() );
+        assertEquals( 0,
+                      vBuilder.getErrors().size() );
+
+        vConfiguration.getVerifyingResources().put( new ClassPathResource( "VerifyingScope.drl",
+                                                                           Verifier.class ),
+                                                    ResourceType.DRL );
+
+        Verifier verifier = vBuilder.newVerifier( vConfiguration );
+
+        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( 2,
+                      result.getBySeverity( Severity.NOTE ).size() );
+
+    }
+
+    public void testDecisionTable() {
+
+        VerifierBuilder vBuilder = VerifierBuilderFactory.newVerifierBuilder();
+
+        VerifierConfiguration vConfiguration = vBuilder.newVerifierConfiguration();
+
+        // Check that the builder works.
+        assertFalse( vBuilder.hasErrors() );
+        assertEquals( 0,
+                      vBuilder.getErrors().size() );
+
+        vConfiguration.getVerifyingResources().put( new ClassPathResource( "VerifyingScope.drl",
+                                                                           Verifier.class ),
+                                                    ResourceType.DRL );
+
+        vConfiguration.addVerifyingScopes( VerifierConfiguration.VERIFYING_SCOPE_DECISION_TABLE );
+        vConfiguration.setAcceptRulesWithoutVerifiyingScope( false );
+
+        Verifier verifier = vBuilder.newVerifier( vConfiguration );
+
+        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( 2,
+                      result.getBySeverity( Severity.NOTE ).size() );
+
+    }
+}

Added: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/misc/DrlPackageDataTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/misc/DrlPackageDataTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/misc/DrlPackageDataTest.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -0,0 +1,118 @@
+package org.drools.verifier.misc;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+public class DrlPackageDataTest extends TestCase {
+    public void testHandleDrl() {
+
+        String rule1 = "";
+        rule1 += "package org.drools.test\n";
+        rule1 += "global java.util.List list\n";
+        rule1 += "rule rule1\n";
+        rule1 += "when\n";
+        rule1 += "then\n";
+        rule1 += "list.add( drools.getRule().getName() );\n";
+        rule1 += "end\n";
+        rule1 += "rule rule2\n";
+        rule1 += "when\n";
+        rule1 += "then\n";
+        rule1 += "list.add( drools.getRule().getName() );\n";
+        rule1 += "end\n";
+
+        DrlPackageParser s = DrlPackageParser.findPackageDataFromDrl( rule1 );
+
+        assertEquals( "org.drools.test",
+                      s.getName() );
+        assertEquals( 2,
+                      s.getRules().size() );
+        assertEquals( "",
+                      s.getDescription() );
+
+    }
+
+    public void testHandleDrl2() throws IOException {
+        BufferedReader in = new BufferedReader( new InputStreamReader( getClass().getResourceAsStream( "DrlPackageTestData.drl" ) ) );
+        String rule = "";
+        String str;
+        while ( (str = in.readLine()) != null ) {
+            rule += str;
+            rule += "\n";
+        }
+        in.close();
+
+        DrlPackageParser s = DrlPackageParser.findPackageDataFromDrl( rule );
+
+        assertNotNull( s );
+
+        assertEquals( "org.drools.test",
+                      s.getName() );
+        assertEquals( 5,
+                      s.getRules().size() );
+        assertEquals( "",
+                      s.getDescription() );
+
+    }
+
+    public void testHandleDrlWithComments() {
+
+        String rule1 = "";
+        rule1 += "# important information\n";
+        rule1 += "# about this package\n";
+        rule1 += "# it contains some rules\n";
+        rule1 += "package org.drools.test\n";
+        rule1 += "global java.util.List list\n";
+        rule1 += "rule rule1\n";
+        rule1 += "	when\n";
+        rule1 += "	then\n";
+        rule1 += "		list.add( drools.getRule().getName() );\n";
+        rule1 += "end\n";
+        rule1 += "rule rule2\n";
+        rule1 += "	when\n";
+        rule1 += "	then\n";
+        rule1 += "		list.add( drools.getRule().getName() );\n";
+        rule1 += "end\n";
+
+        DrlPackageParser data = DrlPackageParser.findPackageDataFromDrl( rule1 );
+
+        assertEquals( "org.drools.test",
+                      data.getName() );
+        assertEquals( 2,
+                      data.getRules().size() );
+        assertEquals( 1,
+                      data.getGlobals().size() );
+        assertEquals( "java.util.List list",
+                      data.getGlobals().get( 0 ) );
+        assertEquals( "important information\nabout this package\nit contains some rules\n",
+                      data.getDescription() );
+
+        DrlRuleParser rd1 = data.getRules().get( 0 );
+        assertEquals( "rule1",
+                      rd1.getName() );
+        assertEquals( "",
+                      rd1.getDescription() );
+
+        DrlRuleParser rd2 = data.getRules().get( 1 );
+        assertEquals( "rule2",
+                      rd2.getName() );
+        assertEquals( "",
+                      rd2.getDescription() );
+    }
+
+    public void testfindGlobals() {
+
+        String header = "global LoanApplication gg";
+
+        List<String> globals = DrlPackageParser.findGlobals( header );
+
+        assertEquals( 1,
+                      globals.size() );
+        assertEquals( "LoanApplication gg",
+                      globals.get( 0 ) );
+    }
+
+}

Added: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/misc/DrlRuleDataTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/misc/DrlRuleDataTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/misc/DrlRuleDataTest.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -0,0 +1,135 @@
+package org.drools.verifier.misc;
+
+import java.util.List;
+
+import org.drools.verifier.misc.DrlRuleParser;
+
+import junit.framework.TestCase;
+
+public class DrlRuleDataTest extends TestCase {
+	public void testHandleDrl() {
+		String drl = "rule \"Something\" \n ";
+		drl += "dialect \"Java\" \n ";
+		drl += "	when \n ";
+		drl += "		Person() \n ";
+		drl += "		Cheesery() \n ";
+		drl += "	then \n ";
+		drl += "		insert( new Person()) \n ";
+		drl += "		insert( new Car()) \n ";
+		drl += "		insert( new Cheese()) \n ";
+		drl += "end ";
+
+		DrlRuleParser s = DrlRuleParser.findRulesDataFromDrl(drl).get(0);
+
+		assertEquals(1, s.getHeader().size());
+		assertEquals(2, s.getLhs().size());
+		assertEquals(3, s.getRhs().size());
+		assertEquals("", s.getDescription());
+
+	}
+
+	public void testHandleDrlNoLineBreaks() {
+		String drl = "rule \"CreditScoreApproval\" \n";
+		drl += "	dialect \"mvel\" \n";
+		drl += "	when    then";
+		drl += "		applicant.setApproved(true) \n";
+		drl += "		applicant.setName( \"Toni\" ) \n";
+		drl += "		applicant.setAge( 10 ) \n";
+		drl += "end";
+		DrlRuleParser s = DrlRuleParser.findRulesDataFromDrl(drl).get(0);
+
+		assertNotNull(s);
+
+		assertEquals(1, s.getHeader().size());
+		assertEquals(0, s.getLhs().size());
+		assertEquals(3, s.getRhs().size());
+		assertEquals("", s.getDescription());
+
+	}
+
+	public void testHandleDrlWithComment() {
+		String drl = "# Really important information about this rule \n";
+		drl += "# Another line because one was not enough \n";
+		drl += "#  \n";
+		drl += "# @author: trikkola \n";
+		drl += "rule \"First\" \n";
+		drl += "	dialect \"mvel\" \n";
+		drl += "	when \n ";
+		drl += "		Person() \n ";
+		drl += "		Cheesery() \n ";
+		drl += "	then \n ";
+		drl += "		applicant.setApproved(true) \n";
+		drl += "		applicant.setName( \"Toni\" ) \n";
+		drl += "		applicant.setAge( 10 ) \n";
+		drl += "end \n";
+		drl += "\n";
+		drl += "# Really important information about this rule \n";
+		drl += "# Another line because one was not enough \n";
+		drl += "#  \n";
+		drl += "# @author: trikkola \n";
+		drl += "# @created: 29.12.2001 \n";
+		drl += "# @edited: 5.5.2005 \n";
+		drl += "rule \"Second\" \n";
+		drl += "	dialect \"mvel\" \n";
+		drl += "	when \n ";
+		drl += "		Person() \n ";
+		drl += "		Cheesery() \n ";
+		drl += "	then \n ";
+		drl += "		applicant.setApproved(true) \n";
+		drl += "		applicant.setName( \"Toni\" ) \n";
+		drl += "		applicant.setAge( 10 ) \n";
+		drl += "end";
+		drl += "\n";
+		drl += "rule \"Third\" \n";
+		drl += "	dialect \"mvel\" \n";
+		drl += "	when \n ";
+		drl += "		Person() \n ";
+		drl += "		Cheesery() \n ";
+		drl += "	then \n ";
+		drl += "		applicant.setApproved(true) \n";
+		drl += "		applicant.setName( \"Toni\" ) \n";
+		drl += "		applicant.setAge( 10 ) \n";
+		drl += "end";
+
+		List<DrlRuleParser> list = DrlRuleParser.findRulesDataFromDrl(drl);
+
+		assertEquals(3, list.size());
+
+		DrlRuleParser rd = list.get(0);
+
+		assertNotNull(rd);
+
+		assertEquals(1, rd.getHeader().size());
+		assertEquals(2, rd.getLhs().size());
+		assertEquals(3, rd.getRhs().size());
+		assertEquals(1, rd.getMetadata().size());
+		assertNotNull(rd.getDescription());
+		assertNotSame("", rd.getDescription());
+
+		DrlRuleParser rd2 = list.get(1);
+
+		assertNotNull(rd2);
+
+		assertEquals(1, rd2.getHeader().size());
+		assertEquals(2, rd2.getLhs().size());
+		assertEquals(3, rd2.getRhs().size());
+		assertEquals(3, rd2.getMetadata().size());
+		assertNotNull(rd2.getDescription());
+
+		String description = "Really important information about this rule\n";
+		description += "Another line because one was not enough\n\n";
+
+		assertEquals(description, rd2.getDescription());
+		assertNotSame("", rd2.getDescription());
+
+		DrlRuleParser rd3 = list.get(2);
+
+		assertNotNull(rd3);
+
+		assertEquals(1, rd3.getHeader().size());
+		assertEquals(2, rd3.getLhs().size());
+		assertEquals(3, rd3.getRhs().size());
+		assertNotNull(rd3.getDescription());
+		assertEquals("", rd3.getDescription());
+	}
+}

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/subsumption/SubsumptantSubRulesTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/subsumption/SubsumptantSubRulesTest.java	2010-01-12 22:31:13 UTC (rev 31045)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/subsumption/SubsumptantSubRulesTest.java	2010-01-13 07:52:55 UTC (rev 31046)
@@ -40,7 +40,7 @@
 
         int count = 0;
         for ( Object object : subsumptionList ) {
-            //            System.out.println( " * " + ((Subsumption) object) );
+            //                        System.out.println( " * " + ((Subsumption) object) );
             if ( ((Subsumption) object).getLeft().getCauseType().equals( CauseType.SUB_RULE ) ) {
                 //                System.out.println( " ** " + ((SubRule) ((Subsumption) object).getLeft()).getItems() + " - " + ((SubRule) ((Subsumption) object).getRight()).getItems() );
                 count++;

Added: labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/VerifyingScope.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/VerifyingScope.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/VerifyingScope.drl	2010-01-13 07:52:55 UTC (rev 31046)
@@ -0,0 +1,43 @@
+#created on: 18.12.2009
+package org.drools.verifier
+
+global VerifierReport result;
+
+import java.util.ArrayList;
+
+import org.drools.verifier.data.VerifierReport;
+
+import org.drools.verifier.components.VerifierRule;
+
+import org.drools.verifier.report.components.Severity;
+import org.drools.verifier.report.components.VerifierMessage;
+import org.drools.verifier.report.components.MessageType;
+
+rule "Single"
+	@verifying_scopes(single-rule)
+	when
+		$a :VerifierRule()
+	then 
+		result.add(new VerifierMessage(
+						Severity.NOTE, MessageType.EQUIVALANCE,
+						$a, "", new ArrayList() ) );
+end
+
+rule "single or dtable"
+	@verifying_scopes(single-rule, decision-table)
+	when
+		$a :VerifierRule()
+	then 
+		result.add(new VerifierMessage(
+						Severity.NOTE, MessageType.EQUIVALANCE,
+						$a, "", new ArrayList() ) );
+end
+
+rule "no verifying scope set"
+	when
+		$a :VerifierRule()
+	then 
+		result.add(new VerifierMessage(
+						Severity.NOTE, MessageType.EQUIVALANCE,
+						$a, "", new ArrayList() ) );
+end

Added: labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/misc/DrlPackageTestData.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/misc/DrlPackageTestData.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/misc/DrlPackageTestData.drl	2010-01-13 07:52:55 UTC (rev 31046)
@@ -0,0 +1,57 @@
+package org.drools.test 
+
+import com.sample.DroolsTest.Message;
+
+
+#
+# Something
+#
+rule "Test 1"
+	when
+		    Foo( 
+		    	a > 10 
+		    )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Test 2"
+	when
+		    Foo( 
+		    	a > 10, 
+		    	b == 2
+		    )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Test 1 GG"
+	ruleflow-group "GG"
+	when
+		    Foo( 
+		    	a > 10 
+		    )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Test 2 GG"
+	ruleflow-group "GG"
+	when
+		    Foo( 
+		    	a > 10, 
+		    	b == 2
+		    )
+	then
+		System.out.println( "Test" );
+end
+
+rule "Test 3"
+	when
+		    Bar( 
+		    	a > 10, 
+		    	b == 2
+		    )
+	then
+		System.out.println( "Test" );
+end
\ No newline at end of file



More information about the jboss-svn-commits mailing list