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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jan 14 11:57:52 EST 2010


Author: Rikkola
Date: 2010-01-14 11:57:51 -0500 (Thu, 14 Jan 2010)
New Revision: 31092

Added:
   labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/imports.drl
   labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/model.jar
Modified:
   labs/jbossrules/trunk/drools-verifier/.classpath
   labs/jbossrules/trunk/drools-verifier/.project
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Verifier.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/Field.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/LiteralRestriction.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ObjectType.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/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/misc/FindMissingNumber.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/PackageDescrVisitor.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/MissingNumberPattern.java
   labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportVisitor.java
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Restrictions.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/overlaps/Restrictions.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Clean.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Dates.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Doubles.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Integers.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/NumberPatterns.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Variables.drl
   labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Restrictions.drl
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/TestBase.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/components/LiteralRestrictionTest.java
   labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/misc/PackageDescrVisitorTest.java
Log:
JBRULES-2405 : Fact model can be passed to verifier as a jar for additional information.

Modified: labs/jbossrules/trunk/drools-verifier/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-verifier/.classpath	2010-01-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/.classpath	2010-01-14 16:57:51 UTC (rev 31092)
@@ -12,9 +12,9 @@
   <classpathentry kind="var" path="M2_REPO/org/apache/jasper/springsource/com.springsource.org.apache.jasper.org.eclipse.jdt.springsource/6.0.20.S2-r5956/com.springsource.org.apache.jasper.org.eclipse.jdt.springsource-6.0.20.S2-r5956.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/codehaus/janino/com.springsource.org.codehaus.janino/2.5.15/com.springsource.org.codehaus.janino-2.5.15.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/xmlpull/com.springsource.org.xmlpull/1.1.4.c/com.springsource.org.xmlpull-1.1.4.c.jar"/>
-  <classpathentry kind="src" path="/drools-api"/>
-  <classpathentry kind="src" path="/drools-compiler"/>
-  <classpathentry kind="src" path="/drools-core"/>
+  <classpathentry kind="var" path="M2_REPO/org/drools/drools-api/5.1.0.SNAPSHOT/drools-api-5.1.0.SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/drools/drools-compiler/5.1.0.SNAPSHOT/drools-compiler-5.1.0.SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/drools/drools-core/5.1.0.SNAPSHOT/drools-core-5.1.0.SNAPSHOT.jar"/>
   <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/antlr/gunit/3.1.3/gunit-3.1.3.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>

Modified: labs/jbossrules/trunk/drools-verifier/.project
===================================================================
--- labs/jbossrules/trunk/drools-verifier/.project	2010-01-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/.project	2010-01-14 16:57:51 UTC (rev 31092)
@@ -1,11 +1,7 @@
 <projectDescription>
   <name>drools-verifier</name>
   <comment>A rule production system</comment>
-  <projects>
-    <project>drools-api</project>
-    <project>drools-compiler</project>
-    <project>drools-core</project>
-  </projects>
+  <projects/>
   <buildSpec>
     <buildCommand>
       <name>org.eclipse.jdt.core.javabuilder</name>

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Verifier.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Verifier.java	2010-01-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/Verifier.java	2010-01-14 16:57:51 UTC (rev 31092)
@@ -1,6 +1,7 @@
 package org.drools.verifier;
 
 import java.util.List;
+import java.util.jar.JarInputStream;
 
 import org.drools.builder.ResourceType;
 import org.drools.io.Resource;
@@ -17,9 +18,9 @@
                                      ResourceType type);
 
     /**
-     * TODO: Something like this, takes a look at the objects and finds out
+     * Give model info optionally as a jar. This way verifier doesn't have to figure out the field types.
      */
-    // public void addObjectModel();
+     public void addObjectModel(JarInputStream jar);
 
     /**
      * 

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-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/builder/VerifierImpl.java	2010-01-14 16:57:51 UTC (rev 31092)
@@ -4,6 +4,7 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.jar.JarInputStream;
 
 import org.drools.KnowledgeBase;
 import org.drools.KnowledgeBaseFactory;
@@ -47,6 +48,8 @@
 
     private VerifierReport              result = VerifierReportFactory.newVerifierReport();
 
+    private List<JarInputStream>        jars   = new ArrayList<JarInputStream>();
+
     public VerifierImpl(VerifierConfiguration conf) {
         this.conf = conf;
     }
@@ -71,6 +74,7 @@
             PackageDescrVisitor ruleFlattener = new PackageDescrVisitor();
 
             ruleFlattener.addPackageDescrToData( descr,
+                                                 jars,
                                                  result.getVerifierData() );
 
         } catch ( Throwable t ) {
@@ -78,6 +82,10 @@
         }
     }
 
+    public void addObjectModel(JarInputStream jar) {
+        this.jars.add( jar );
+    }
+
     /*
      * (non-Javadoc)
      * 
@@ -175,6 +183,7 @@
     public void addResourcesToVerify(Resource resource,
                                      ResourceType type) {
 
+        // TODO: Other than DRL
         if ( type.matchesExtension( ".drl" ) ) {
             DrlParser p = new DrlParser();
 
@@ -197,7 +206,6 @@
 
                 addPackageDescr( pkg );
 
-                // TODO: Move this into a method
                 addDrlData( drl.toString() );
 
                 reader.close();

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Field.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Field.java	2010-01-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/Field.java	2010-01-14 16:57:51 UTC (rev 31092)
@@ -11,34 +11,21 @@
     implements
     Cause {
 
-    public static class FieldType {
-        public static final FieldType BOOLEAN  = new FieldType( "boolean" );
-        public static final FieldType STRING   = new FieldType( "String" );
-        public static final FieldType INT      = new FieldType( "int" );
-        public static final FieldType DOUBLE   = new FieldType( "double" );
-        public static final FieldType DATE     = new FieldType( "Date" );
-        public static final FieldType VARIABLE = new FieldType( "Variable" );
-        public static final FieldType OBJECT   = new FieldType( "Object" );
-        public static final FieldType ENUM     = new FieldType( "Enum" );
-        public static final FieldType UNKNOWN  = new FieldType( "Unknown" );
+    public static final String BOOLEAN  = "boolean";
+    public static final String STRING   = "java.lang.String";
+    public static final String INT      = "int";
+    public static final String DOUBLE   = "double";
+    public static final String DATE     = "java.util.Date";
+    public static final String VARIABLE = "Variable";
+    public static final String OBJECT   = "Object";
+    public static final String ENUM     = "Enum";
+    public static final String UNKNOWN  = "Unknown";
 
-        private final String          string;
+    private String             objectTypeGuid;
+    protected String           objectTypeName;
+    protected String           name;
+    private String             fieldType;
 
-        private FieldType(String string) {
-            this.string = string;
-        }
-
-        @Override
-        public String toString() {
-            return string;
-        }
-    }
-
-    private String    objectTypeGuid;
-    protected String  objectTypeName;
-    protected String  name;
-    private FieldType fieldType;
-
     public VerifierComponentType getVerifierComponentType() {
         return VerifierComponentType.FIELD;
     }
@@ -55,13 +42,13 @@
         this.name = name;
     }
 
-    public FieldType getFieldType() {
+    public String getFieldType() {
         return fieldType;
     }
 
-    public void setFieldType(FieldType fieldType) {
+    public void setFieldType(String fieldType) {
         // Only set fieldType to variable if there is no other fieldType found.
-        if ( fieldType == FieldType.VARIABLE && this.fieldType == null ) {
+        if ( fieldType == VARIABLE && this.fieldType == null ) {
             this.fieldType = fieldType;
         } else {
             this.fieldType = fieldType;

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/LiteralRestriction.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/LiteralRestriction.java	2010-01-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/LiteralRestriction.java	2010-01-14 16:57:51 UTC (rev 31092)
@@ -15,17 +15,17 @@
     implements
     Cause {
 
-    private Field.FieldType valueType;
+    private String  valueType;
 
-    private boolean         booleanValue;
+    private boolean booleanValue;
 
-    private int             intValue;
+    private int     intValue;
 
-    private double          doubleValue;
+    private double  doubleValue;
 
-    private String          stringValue;
+    private String  stringValue;
 
-    private Date            dateValue;
+    private Date    dateValue;
 
     public RestrictionType getRestrictionType() {
         return Restriction.RestrictionType.LITERAL;
@@ -42,13 +42,13 @@
      *             If data was not supported.
      */
     public int compareValues(LiteralRestriction restriction) throws DataFormatException {
-        if ( restriction.getValueType() != valueType ) {
+        if ( !restriction.getValueType().equals( valueType ) ) {
             throw new DataFormatException( "Value types did not match. Value type " + restriction.getValueType() + " was compared to " + valueType );
         }
 
-        if ( valueType == Field.FieldType.DATE ) {
+        if ( valueType == Field.DATE ) {
             return dateValue.compareTo( restriction.getDateValue() );
-        } else if ( valueType == Field.FieldType.DOUBLE ) {
+        } else if ( valueType == Field.DOUBLE ) {
             if ( doubleValue > restriction.getDoubleValue() ) {
                 return 1;
             } else if ( doubleValue < restriction.getDoubleValue() ) {
@@ -56,7 +56,7 @@
             } else {
                 return 0;
             }
-        } else if ( valueType == Field.FieldType.INT ) {
+        } else if ( valueType == Field.INT ) {
             if ( intValue > restriction.getIntValue() ) {
                 return 1;
             } else if ( intValue < restriction.getIntValue() ) {
@@ -64,9 +64,9 @@
             } else {
                 return 0;
             }
-        } else if ( valueType == Field.FieldType.STRING ) {
+        } else if ( valueType == Field.STRING ) {
             return stringValue.compareTo( restriction.getValueAsString() );
-        } else if ( valueType == Field.FieldType.UNKNOWN ) {
+        } else if ( valueType == Field.UNKNOWN ) {
             return 0;
         }
 
@@ -74,13 +74,13 @@
     }
 
     public Object getValueAsObject() {
-        if ( valueType == Field.FieldType.BOOLEAN ) {
+        if ( valueType == Field.BOOLEAN ) {
             return Boolean.valueOf( booleanValue );
-        } else if ( valueType == Field.FieldType.DATE ) {
+        } else if ( valueType == Field.DATE ) {
             return dateValue;
-        } else if ( valueType == Field.FieldType.DOUBLE ) {
+        } else if ( valueType == Field.DOUBLE ) {
             return Double.valueOf( doubleValue );
-        } else if ( valueType == Field.FieldType.INT ) {
+        } else if ( valueType == Field.INT ) {
             return Integer.valueOf( intValue );
         }
         return stringValue;
@@ -98,7 +98,7 @@
         return intValue;
     }
 
-    public Field.FieldType getValueType() {
+    public String getValueType() {
         return valueType;
     }
 
@@ -110,22 +110,22 @@
 
         if ( value == null ) {
             stringValue = null;
-            valueType = Field.FieldType.UNKNOWN;
+            valueType = Field.UNKNOWN;
             return;
         }
 
         stringValue = value;
-        valueType = Field.FieldType.STRING;
+        valueType = Field.STRING;
 
         if ( "true".equals( value ) || "false".equals( value ) ) {
             booleanValue = value.equals( "true" );
-            valueType = Field.FieldType.BOOLEAN;
+            valueType = Field.BOOLEAN;
             stringValue = value;
         }
 
         try {
             intValue = Integer.parseInt( value );
-            valueType = Field.FieldType.INT;
+            valueType = Field.INT;
             stringValue = value;
             return;
         } catch ( NumberFormatException e ) {
@@ -134,7 +134,7 @@
 
         try {
             doubleValue = Double.parseDouble( value );
-            valueType = Field.FieldType.DOUBLE;
+            valueType = Field.DOUBLE;
             stringValue = value;
             return;
         } catch ( NumberFormatException e ) {
@@ -150,7 +150,7 @@
 
             dateValue = new SimpleDateFormat( fmt,
                                               Locale.ENGLISH ).parse( value );
-            valueType = Field.FieldType.DATE;
+            valueType = Field.DATE;
             stringValue = value;
             return;
         } catch ( Exception e ) {

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ObjectType.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ObjectType.java	2010-01-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/components/ObjectType.java	2010-01-14 16:57:51 UTC (rev 31092)
@@ -15,17 +15,19 @@
     Serializable {
     private static final long serialVersionUID = -783733402566313623L;
 
-    private int               offset = 0;
-    
+    private int               offset           = 0;
+
+    private String            fullName;
+
     private String            name;
 
     private Set<Field>        fields           = new HashSet<Field>();
-    
+
     public int getOffset() {
         offset++;
         return offset % 2;
     }
-    
+
     public String getName() {
         return name;
     }
@@ -42,8 +44,20 @@
         this.fields = fields;
     }
 
-
     public VerifierComponentType getVerifierComponentType() {
         return VerifierComponentType.OBJECT_TYPE;
     }
+
+    public String getFullName() {
+        return fullName;
+    }
+
+    public void setFullName(String fullName) {
+        this.fullName = fullName;
+    }
+
+    public String toString() {
+        return "ObjectType: " + fullName;
+    }
+
 }

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-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierData.java	2010-01-14 16:57:51 UTC (rev 31092)
@@ -29,7 +29,7 @@
     public Variable getVariableByRuleAndVariableName(String ruleName,
                                                      String base);
 
-    public ObjectType getObjectTypeByName(String name);
+    public ObjectType getObjectTypeByFullName(String name);
 
     public Field getFieldByObjectTypeAndFieldName(String base,
                                                   String fieldName);

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-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierDataKnowledgeSession.java	2010-01-14 16:57:51 UTC (rev 31092)
@@ -53,7 +53,7 @@
         return new ArrayList( list );
     }
 
-    public ObjectType getObjectTypeByName(String name) {
+    public ObjectType getObjectTypeByFullName(String name) {
         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-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/data/VerifierDataMaps.java	2010-01-14 16:57:51 UTC (rev 31092)
@@ -2,6 +2,7 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -33,7 +34,7 @@
     private Map<VerifierComponentType, Map<String, VerifierComponent>> all                            = new TreeMap<VerifierComponentType, Map<String, VerifierComponent>>();
 
     private Map<String, RulePackage>                                   packagesByName                 = new TreeMap<String, RulePackage>();
-    private Map<String, ObjectType>                                    objectTypesByName              = new TreeMap<String, ObjectType>();
+    private Map<String, ObjectType>                                    objectTypesByFullName          = new TreeMap<String, ObjectType>();
     private Map<String, Field>                                         fieldsByObjectTypeAndFieldName = new TreeMap<String, Field>();
     private Multimap<String, Field>                                    fieldsByObjectTypeId           = new TreeMultimap<String, Field>();
     private Map<String, FieldObjectTypeLink>                           fieldObjectTypeLinkByPath      = new TreeMap<String, FieldObjectTypeLink>();
@@ -57,8 +58,8 @@
         return set;
     }
 
-    public ObjectType getObjectTypeByName(String name) {
-        return objectTypesByName.get( name );
+    public ObjectType getObjectTypeByFullName(String name) {
+        return objectTypesByFullName.get( name );
     }
 
     public Field getFieldByObjectTypeAndFieldName(String objectTypeName,
@@ -128,7 +129,7 @@
             Field field = (Field) object;
             ObjectType objectType = (ObjectType) getVerifierObject( VerifierComponentType.OBJECT_TYPE,
                                                                     field.getObjectTypeGuid() );
-            fieldsByObjectTypeAndFieldName.put( objectType.getName() + "." + field.getName(),
+            fieldsByObjectTypeAndFieldName.put( objectType.getFullName() + "." + field.getName(),
                                                 field );
 
             fieldsByObjectTypeId.put( field.getObjectTypeGuid(),
@@ -168,8 +169,8 @@
                                 rulePackage );
         } else if ( VerifierComponentType.OBJECT_TYPE.equals( object.getVerifierComponentType() ) ) {
             ObjectType objectType = (ObjectType) object;
-            objectTypesByName.put( objectType.getName(),
-                                   objectType );
+            objectTypesByFullName.put( objectType.getFullName(),
+                                       objectType );
         } else if ( VerifierComponentType.ENTRY_POINT_DESCR.equals( object.getVerifierComponentType() ) ) {
             VerifierEntryPointDescr entryPoint = (VerifierEntryPointDescr) object;
             entryPointsByEntryId.put( entryPoint.getEntryId(),
@@ -195,7 +196,13 @@
 
     //    public <T extends VerifierComponent> Collection<T> getAll(VerifierComponentType type) {
     public Collection< ? extends VerifierComponent> getAll(VerifierComponentType type) {
-        return all.get( type ).values();
+        Map<String, VerifierComponent> result = all.get( type );
+
+        if ( result == null ) {
+            return Collections.emptyList();
+        } else {
+            return result.values();
+        }
     }
 
     //    public <T extends VerifierComponent> T getVerifierObject(VerifierComponentType type,

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

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-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/misc/PackageDescrVisitor.java	2010-01-14 16:57:51 UTC (rev 31092)
@@ -1,8 +1,15 @@
 package org.drools.verifier.misc;
 
 import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.jar.JarInputStream;
 
 import org.drools.base.evaluators.Operator;
+import org.drools.guvnor.client.modeldriven.SuggestionCompletionEngine;
+import org.drools.guvnor.server.rules.SuggestionCompletionLoader;
 import org.drools.lang.descr.AccessorDescr;
 import org.drools.lang.descr.AccumulateDescr;
 import org.drools.lang.descr.AndDescr;
@@ -20,6 +27,7 @@
 import org.drools.lang.descr.ForallDescr;
 import org.drools.lang.descr.FromDescr;
 import org.drools.lang.descr.FunctionCallDescr;
+import org.drools.lang.descr.ImportDescr;
 import org.drools.lang.descr.LiteralRestrictionDescr;
 import org.drools.lang.descr.MethodAccessDescr;
 import org.drools.lang.descr.NotDescr;
@@ -74,19 +82,22 @@
  */
 public class PackageDescrVisitor {
 
-    private Solvers       solvers           = new Solvers();
+    private Solvers              solvers           = new Solvers();
 
-    private VerifierData  data;
+    private VerifierData         data;
+    private List<JarInputStream> jars              = null;
 
-    private RulePackage   currentPackage    = null;
-    private VerifierRule  currentRule       = null;
-    private Pattern       currentPattern    = null;
-    private Constraint    currentConstraint = null;
-    private ObjectType    currentObjectType = null;
-    private Field         currentField      = null;
+    Map<String, String>          imports           = new HashMap<String, String>();
 
-    private WorkingMemory workingMemory     = null;
+    private RulePackage          currentPackage    = null;
+    private VerifierRule         currentRule       = null;
+    private Pattern              currentPattern    = null;
+    private Constraint           currentConstraint = null;
+    private ObjectType           currentObjectType = null;
+    private Field                currentField      = null;
 
+    private WorkingMemory        workingMemory     = null;
+
     /**
      * Adds packageDescr to given VerifierData object
      * 
@@ -97,9 +108,11 @@
      * @throws UnknownDescriptionException
      */
     public void addPackageDescrToData(PackageDescr packageDescr,
+                                      List<JarInputStream> jars,
                                       VerifierData data) throws UnknownDescriptionException {
 
         this.data = data;
+        this.jars = jars;
 
         visit( packageDescr );
 
@@ -503,6 +516,48 @@
     private void visit(PackageDescr descr) throws UnknownDescriptionException {
         RulePackage rulePackage = data.getPackageByName( descr.getName() );
 
+        // Imports
+        StringBuilder header = new StringBuilder();
+        for ( ImportDescr i : descr.getImports() ) {
+            String fullPath = i.getTarget();
+            String name = fullPath.substring( fullPath.lastIndexOf( "." ) + 1 );
+
+            header.append( "import " );
+            header.append( fullPath );
+            header.append( "\n" );
+
+            imports.put( name,
+                         fullPath );
+
+            ObjectType objectType = this.data.getObjectTypeByFullName( fullPath );
+            if ( objectType == null ) objectType = new ObjectType();
+            objectType.setName( name );
+            objectType.setFullName( fullPath );
+            data.add( objectType );
+        }
+
+        SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
+        SuggestionCompletionEngine engine = loader.getSuggestionEngine( header.toString(),
+                                                                        jars,
+                                                                        Collections.EMPTY_LIST );
+        for ( String factTypeName : engine.getFactTypes() ) {
+            for ( String fieldName : engine.getFieldCompletions( factTypeName ) ) {
+                ObjectType ot = this.data.getObjectTypeByFullName( imports.get( factTypeName ) );
+
+                Field field = data.getFieldByObjectTypeAndFieldName( ot.getFullName(),
+                                                                     fieldName );
+                if ( field == null ) {
+                    field = createField( fieldName,
+                                         ot );
+                    field.setFieldType( engine.getFieldType( ot.getName(),
+                                                             fieldName ) );
+                    data.add( field );
+                }
+            }
+        }
+
+        // TODO: Declaretions
+
         if ( rulePackage == null ) {
             rulePackage = new RulePackage();
 
@@ -531,7 +586,7 @@
 
         Consequence consequence = visitConsequence( rule,
                                                     descr.getConsequence() );
-        
+
         rule.getMetadata().putAll( descr.getMetaAttributes() );
         rule.setConsequenceGuid( consequence.getGuid() );
         rule.setConsequenceType( consequence.getConsequenceType() );
@@ -699,13 +754,11 @@
                        VerifierComponent parent,
                        int orderNumber) throws UnknownDescriptionException {
 
-        Field field = data.getFieldByObjectTypeAndFieldName( currentObjectType.getName(),
+        Field field = data.getFieldByObjectTypeAndFieldName( currentObjectType.getFullName(),
                                                              descr.getFieldName() );
         if ( field == null ) {
             field = createField( descr.getFieldName(),
-                                 currentObjectType.getGuid(),
-                                 currentObjectType.getName(),
-                                 parent );
+                                 currentObjectType );
             data.add( field );
         }
         currentField = field;
@@ -806,7 +859,7 @@
         restriction.setParentType( parent.getVerifierComponentType() );
 
         // Set field value, if it is unset.
-        currentField.setFieldType( Field.FieldType.VARIABLE );
+        currentField.setFieldType( Field.VARIABLE );
 
         data.add( restriction );
         solvers.addRestriction( restriction );
@@ -912,7 +965,7 @@
             restriction.setParentType( parent.getVerifierComponentType() );
 
             // Set field value, if it is not set.
-            currentField.setFieldType( Field.FieldType.VARIABLE );
+            currentField.setFieldType( Field.VARIABLE );
 
             variable.setObjectTypeType( VerifierComponentType.FIELD.getType() );
 
@@ -953,7 +1006,7 @@
             restriction.setParentType( parent.getVerifierComponentType() );
 
             // Set field value, if it is not set.
-            currentField.setFieldType( Field.FieldType.ENUM );
+            currentField.setFieldType( Field.ENUM );
 
             data.add( restriction );
             solvers.addRestriction( restriction );
@@ -961,27 +1014,28 @@
     }
 
     private ObjectType findOrCreateNewObjectType(String name) {
-        ObjectType objectType = data.getObjectTypeByName( name );
+        ObjectType objectType = data.getObjectTypeByFullName( name );
         if ( objectType == null ) {
             objectType = new ObjectType();
             objectType.setName( name );
+            String fullName = imports.get( name );
+            if ( fullName == null ) fullName = name;
+            objectType.setFullName( fullName );
             data.add( objectType );
         }
         return objectType;
     }
 
     private Field createField(String fieldName,
-                              String classGuid,
-                              String className,
-                              VerifierComponent parent) {
+                              ObjectType ot) {
         Field field = new Field();
-        field.setObjectTypeGuid( classGuid );
-        field.setObjectTypeName( className );
+        field.setObjectTypeGuid( ot.getGuid() );
+        field.setObjectTypeName( ot.getFullName() );
         field.setName( fieldName );
-        field.setParentGuid( parent.getGuid() );
-        field.setParentType( parent.getVerifierComponentType() );
+        field.setParentGuid( ot.getGuid() );
+        field.setParentType( ot.getVerifierComponentType() );
 
-        currentObjectType.getFields().add( field );
+        ot.getFields().add( field );
         return field;
     }
 

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/MissingNumberPattern.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/MissingNumberPattern.java	2010-01-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/components/MissingNumberPattern.java	2010-01-14 16:57:51 UTC (rev 31092)
@@ -11,69 +11,75 @@
  * 
  * @author Toni Rikkola
  */
-public class MissingNumberPattern extends MissingRange implements
-		RangeCheckCause, Comparable<MissingRange> {
+public class MissingNumberPattern extends MissingRange
+    implements
+    RangeCheckCause,
+    Comparable<MissingRange> {
 
-	private final Field.FieldType valueType;
+    private final String valueType;
 
-	private final String value;
+    private final String value;
 
-	public int compareTo(MissingRange another) {
-		return super.compareTo(another);
-	}
+    public int compareTo(MissingRange another) {
+        return super.compareTo( another );
+    }
 
-	public CauseType getCauseType() {
-		return CauseType.RANGE_CHECK_CAUSE;
-	}
+    public CauseType getCauseType() {
+        return CauseType.RANGE_CHECK_CAUSE;
+    }
 
-	public MissingNumberPattern(Field field, Operator operator,
-			Field.FieldType valueType, String value) {
-		super(field, operator);
+    public MissingNumberPattern(Field field,
+                                Operator operator,
+                                String valueType,
+                                String value) {
+        super( field,
+               operator );
 
-		this.valueType = valueType;
-		this.value = value;
-	}
+        this.valueType = valueType;
+        this.value = value;
+    }
 
-	/**
-	 * Returns alway null, because there is no rule that this is related to.
-	 */
-	public String getRuleName() {
-		return null;
-	}
+    /**
+     * Returns alway null, because there is no rule that this is related to.
+     */
+    public String getRuleName() {
+        return null;
+    }
 
-	public String getValueAsString() {
-		return value;
-	}
+    public String getValueAsString() {
+        return value;
+    }
 
-	public Object getValueAsObject() {
-		if (valueType == Field.FieldType.BOOLEAN) {
-			return Boolean.valueOf(value);
-		} else if (valueType == Field.FieldType.DATE) {
-			try {
-				String fmt = System.getProperty("drools.dateformat");
-				if (fmt == null) {
-					fmt = "dd-MMM-yyyy";
-				}
+    public Object getValueAsObject() {
+        if ( valueType == Field.BOOLEAN ) {
+            return Boolean.valueOf( value );
+        } else if ( valueType == Field.DATE ) {
+            try {
+                String fmt = System.getProperty( "drools.dateformat" );
+                if ( fmt == null ) {
+                    fmt = "dd-MMM-yyyy";
+                }
 
-				return new SimpleDateFormat(fmt, Locale.ENGLISH).parse(value);
-			} catch (ParseException e) {
-				e.printStackTrace();
-			}
-		} else if (valueType == Field.FieldType.DOUBLE) {
-			return Double.valueOf(value);
-		} else if (valueType == Field.FieldType.INT) {
-			return Integer.valueOf(value);
-		}
+                return new SimpleDateFormat( fmt,
+                                             Locale.ENGLISH ).parse( value );
+            } catch ( ParseException e ) {
+                e.printStackTrace();
+            }
+        } else if ( valueType == Field.DOUBLE ) {
+            return Double.valueOf( value );
+        } else if ( valueType == Field.INT ) {
+            return Integer.valueOf( value );
+        }
 
-		return value;
-	}
+        return value;
+    }
 
-	public Field.FieldType getValueType() {
-		return valueType;
-	}
+    public String getValueType() {
+        return valueType;
+    }
 
-	@Override
-	public String toString() {
-		return "Missing restriction " + operator + " " + value;
-	}
+    @Override
+    public String toString() {
+        return "Missing restriction " + operator + " " + value;
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportVisitor.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportVisitor.java	2010-01-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/main/java/org/drools/verifier/report/html/ComponentsReportVisitor.java	2010-01-14 16:57:51 UTC (rev 31092)
@@ -129,7 +129,7 @@
         map.put( "rules",
                  rules );
 
-        if ( field.getFieldType() == Field.FieldType.DOUBLE || field.getFieldType() == Field.FieldType.DATE || field.getFieldType() == Field.FieldType.INT ) {
+        if ( field.getFieldType() == Field.DOUBLE || field.getFieldType() == Field.DATE || field.getFieldType() == Field.INT ) {
             Collection<RangeCheckCause> causes = result.getRangeCheckCausesByFieldId( field.getGuid() );
             Collection<Restriction> restrictions = data.getRestrictionsByFieldGuid( field.getGuid() );
             map.put( "ranges",

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Restrictions.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Restrictions.drl	2010-01-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/opposites/Restrictions.drl	2010-01-14 16:57:51 UTC (rev 31092)
@@ -4,7 +4,7 @@
 #list any import classes here.
 import org.drools.verifier.components.LiteralRestriction;
 import org.drools.verifier.components.VariableRestriction;
-import org.drools.verifier.components.Field.FieldType;
+import org.drools.verifier.components.Field;
 
 import org.drools.verifier.report.components.Cause;
 import org.drools.verifier.report.components.MissingRange;
@@ -139,7 +139,7 @@
 	when
 		$left :LiteralRestriction(
 			operator == Operator.LESS,
-			( valueType == Field.FieldType.INT || == Field.FieldType.DATE )
+			( valueType == Field.INT || == Field.DATE )
 		)
 
 		$right :LiteralRestriction(
@@ -175,7 +175,7 @@
 	when
 		$left :LiteralRestriction(
 			operator == Operator.GREATER_OR_EQUAL,
-			( valueType == Field.FieldType.INT || == Field.FieldType.DATE )
+			( valueType == Field.INT || == Field.DATE )
 		)
 
 		$right :LiteralRestriction(
@@ -232,3 +232,4 @@
 	then
 		insert( new Opposites( $r1, $r2 ) );
 end
+

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/overlaps/Restrictions.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/overlaps/Restrictions.drl	2010-01-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/overlaps/Restrictions.drl	2010-01-14 16:57:51 UTC (rev 31092)
@@ -8,7 +8,6 @@
 import org.drools.verifier.data.VerifierReport;
 
 import org.drools.verifier.components.LiteralRestriction;
-import org.drools.verifier.components.Field.FieldType;
 
 import org.drools.verifier.report.components.Subsumption;
 import org.drools.verifier.report.components.VerifierMessage;

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-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Clean.drl	2010-01-14 16:57:51 UTC (rev 31092)
@@ -86,7 +86,7 @@
 	when
 		# Covered x > 10
 		$lower :LiteralRestriction( 
-			valueType == Field.FieldType.INT,
+			valueType == Field.INT,
 			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL)
 		)
 
@@ -139,7 +139,7 @@
 	when
 		# Covered x > 10
 		$lower :LiteralRestriction( 
-			valueType == Field.FieldType.INT,
+			valueType == Field.INT,
 			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL)
 		)
 
@@ -192,7 +192,7 @@
 	when
 		# Covered x > 10.0
 		$lower :LiteralRestriction( 
-			valueType == Field.FieldType.DOUBLE,
+			valueType == Field.DOUBLE,
 			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL)
 		)
 
@@ -245,7 +245,7 @@
 	when
 		# Covered x > 10.0
 		$lower :LiteralRestriction( 
-			valueType == Field.FieldType.DOUBLE,
+			valueType == Field.DOUBLE,
 			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL)
 		)
 
@@ -298,7 +298,7 @@
 	when
 		# Covered x > "01-Oct-2007"
 		$lower :LiteralRestriction( 
-			valueType == Field.FieldType.DATE,
+			valueType == Field.DATE,
 			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL)
 		)
 
@@ -351,7 +351,7 @@
 	when
 		# Covered x > "01-Oct-2007"
 		$lower :LiteralRestriction( 
-			valueType == Field.FieldType.DATE,
+			valueType == Field.DATE,
 			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL)
 		)
 

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-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Dates.drl	2010-01-14 16:57:51 UTC (rev 31092)
@@ -37,7 +37,7 @@
 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 )
+		$f :Field( fieldType == Field.DATE )
 		
 		# Foo( bar > "27-Oct-2007" )
 		$r :LiteralRestriction( 
@@ -69,7 +69,7 @@
 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 )
+		$f :Field( fieldType == Field.DATE )
 		
 		# Foo( bar > "27-Oct-2007" )
 		$r :LiteralRestriction( 
@@ -102,7 +102,7 @@
 rule "Range check for dates, equal and greater than"
 	@verifying_scopes(knowledge-package, decision-table)
 	when
-		$f :Field( fieldType == Field.FieldType.DATE )
+		$f :Field( fieldType == Field.DATE )
 
 		# Foo( bar == "27-Oct-2007" ) 
 		$r :LiteralRestriction( 
@@ -143,7 +143,7 @@
 rule "Range check for dates, equal and smaller than"
 	@verifying_scopes(knowledge-package, decision-table)
 	when
-		$f :Field( fieldType == Field.FieldType.DATE )
+		$f :Field( fieldType == Field.DATE )
 
 		# Foo( bar == "27-Oct-2007" ) 
 		$r :LiteralRestriction( 

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-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Doubles.drl	2010-01-14 16:57:51 UTC (rev 31092)
@@ -23,7 +23,7 @@
 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 )
+		$f :Field( fieldType == Field.DOUBLE )
 		
 		# Foo( bar > 42 )
 		$r :LiteralRestriction( 
@@ -55,7 +55,7 @@
 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 )
+		$f :Field( fieldType == Field.DOUBLE )
 		
 		# Foo( bar > 42 )
 		$r :LiteralRestriction( 
@@ -88,7 +88,7 @@
 rule "Range check for doubles, equal and greater than"
 	@verifying_scopes(knowledge-package, decision-table)
 	when
-		$f :Field( fieldType == Field.FieldType.DOUBLE )
+		$f :Field( fieldType == Field.DOUBLE )
 
 		# Foo( bar == 42 ) 
 		$r :LiteralRestriction( 
@@ -121,7 +121,7 @@
 rule "Range check for doubles, equal and smaller than"
 	@verifying_scopes(knowledge-package, decision-table)
 	when
-		$f :Field( fieldType == Field.FieldType.DOUBLE )
+		$f :Field( fieldType == Field.DOUBLE )
 
 		# Foo( bar == 42 ) 
 		$r :LiteralRestriction( 

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-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Integers.drl	2010-01-14 16:57:51 UTC (rev 31092)
@@ -21,7 +21,7 @@
 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 )
+		$f :Field( fieldType == Field.INT )
 		
 		# Foo( bar > 42 )
 		$r :LiteralRestriction( 
@@ -53,7 +53,7 @@
 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 )
+		$f :Field( fieldType == Field.INT )
 		
 		# Foo( bar > 42 )
 		$r :LiteralRestriction( 
@@ -86,7 +86,7 @@
 rule "Range check for integers, equal and greater than"
 	@verifying_scopes(knowledge-package, decision-table)
 	when
-		$f :Field( fieldType == Field.FieldType.INT )
+		$f :Field( fieldType == Field.INT )
 
 		# Foo( bar == 42 ) 
 		$r :LiteralRestriction( 
@@ -127,7 +127,7 @@
 rule "Range check for integers, equal and smaller than"
 	@verifying_scopes(knowledge-package, decision-table)
 	when
-		$f :Field( fieldType == Field.FieldType.INT )
+		$f :Field( fieldType == Field.INT )
 
 		# Foo( bar == 42 ) 
 		$r :LiteralRestriction( 

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-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/NumberPatterns.drl	2010-01-14 16:57:51 UTC (rev 31092)
@@ -28,7 +28,7 @@
 	@verifying_scopes(knowledge-package, decision-table)
 	when
 		$f :Field(
-			( fieldType == Field.FieldType.INT || == Field.FieldType.DOUBLE )
+			( fieldType == Field.INT || == Field.DOUBLE )
 		)
 		(
 			# Where pattern is false.
@@ -70,7 +70,7 @@
 	@verifying_scopes(knowledge-package, decision-table)
 	when
 		$f :Field( 
-			( fieldType == Field.FieldType.INT || == Field.FieldType.DOUBLE ) 
+			( fieldType == Field.INT || == Field.DOUBLE ) 
 		)
 		(
 			# Where pattern is false.

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Variables.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Variables.drl	2010-01-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/rangeChecks/Variables.drl	2010-01-14 16:57:51 UTC (rev 31092)
@@ -23,7 +23,7 @@
 rule "Range check for variables when restriction is VariableRestriction"
 	when
 		# Find a field that is of type variable.
-		$f :Field( fieldType == Field.FieldType.VARIABLE )
+		$f :Field( fieldType == Field.VARIABLE )
 		# Find constraint that matches this field
 		# Find variable that is on the right side of this constraint i.e. bar > $foo
 		# Find another variable that points to the same field. 

Modified: labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Restrictions.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Restrictions.drl	2010-01-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/main/resources/org/drools/verifier/subsumption/Restrictions.drl	2010-01-14 16:57:51 UTC (rev 31092)
@@ -2,9 +2,9 @@
 package org.drools.verifier.subsumption.patterns
 
 import org.drools.base.evaluators.Operator;
+import org.drools.verifier.components.Field;
 
 import org.drools.verifier.components.LiteralRestriction;
-import org.drools.verifier.components.Field.FieldType;
 import org.drools.verifier.report.components.Subsumption;
 
 
@@ -21,7 +21,7 @@
 	when
 		# Covered x > 10
 		$lower:LiteralRestriction(
-			( valueType == Field.FieldType.INT || == Field.FieldType.DOUBLE || == Field.FieldType.DATE ),
+			( valueType == Field.INT || == Field.DOUBLE || == Field.DATE ),
 			( operator == Operator.GREATER || == Operator.GREATER_OR_EQUAL )
 		)
 
@@ -65,7 +65,7 @@
 	when
 		# Covered x < 10
 		$higher :LiteralRestriction(
-			( valueType == Field.FieldType.INT || == Field.FieldType.DOUBLE || == Field.FieldType.DATE ),
+			( valueType == Field.INT || == Field.DOUBLE || == Field.DATE ),
 			( operator == Operator.LESS || == Operator.LESS_OR_EQUAL )
 		)
 

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/TestBase.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/TestBase.java	2010-01-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/TestBase.java	2010-01-14 16:57:51 UTC (rev 31092)
@@ -4,6 +4,7 @@
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
 
@@ -112,6 +113,7 @@
         PackageDescrVisitor ruleFlattener = new PackageDescrVisitor();
 
         ruleFlattener.addPackageDescrToData( descr,
+                                             Collections.EMPTY_LIST,
                                              data );
 
         // Rules with relations

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-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/VerifierTest.java	2010-01-14 16:57:51 UTC (rev 31092)
@@ -1,11 +1,18 @@
 package org.drools.verifier;
 
+import java.io.IOException;
+import java.util.Collection;
+import java.util.jar.JarInputStream;
+
 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.components.Field;
+import org.drools.verifier.components.ObjectType;
+import org.drools.verifier.components.VerifierComponentType;
 import org.drools.verifier.data.VerifierReport;
 import org.drools.verifier.report.components.Severity;
 import org.drools.verifier.report.components.VerifierMessageBase;
@@ -45,6 +52,58 @@
 
     }
 
+    public void testFactTypesFromJar() {
+        VerifierBuilder vBuilder = VerifierBuilderFactory.newVerifierBuilder();
+
+        // Check that the builder works.
+        assertFalse( vBuilder.hasErrors() );
+        assertEquals( 0,
+                      vBuilder.getErrors().size() );
+
+        Verifier verifier = vBuilder.newVerifier();
+
+        try {
+
+            JarInputStream jar = new JarInputStream( this.getClass().getResourceAsStream( "model.jar" ) );
+
+            verifier.addObjectModel( jar );
+
+        } catch ( IOException e ) {
+            fail( e.getMessage() );
+        }
+
+        verifier.addResourcesToVerify( new ClassPathResource( "imports.drl",
+                                                              Verifier.class ),
+                                       ResourceType.DRL );
+
+        assertFalse( verifier.hasErrors() );
+        assertEquals( 0,
+                      verifier.getErrors().size() );
+
+        boolean works = verifier.fireAnalysis();
+
+        assertTrue( works );
+
+        VerifierReport result = verifier.getResult();
+
+        Collection<ObjectType> objectTypes = result.getVerifierData().getAll( VerifierComponentType.OBJECT_TYPE );
+
+        assertNotNull( objectTypes );
+        assertEquals( 3,
+                      objectTypes.size() );
+
+        Collection<Field> fields = result.getVerifierData().getAll( VerifierComponentType.FIELD );
+
+        for ( Field field : fields ) {
+            System.out.println( field );
+        }
+        assertNotNull( fields );
+        assertEquals( 10,
+                      fields.size() );
+
+        System.out.println( "Done" );
+    }
+
     public void testCustomRule() {
 
         VerifierBuilder vBuilder = VerifierBuilderFactory.newVerifierBuilder();

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/components/LiteralRestrictionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/components/LiteralRestrictionTest.java	2010-01-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/components/LiteralRestrictionTest.java	2010-01-14 16:57:51 UTC (rev 31092)
@@ -4,41 +4,53 @@
 
 public class LiteralRestrictionTest extends TestCase {
 
-	public void testSetValue() {
-		LiteralRestriction booleanRestriction = new LiteralRestriction();
-		booleanRestriction.setValue("true");
+    public void testSetValue() {
+        LiteralRestriction booleanRestriction = new LiteralRestriction();
+        booleanRestriction.setValue( "true" );
 
-		assertEquals(Field.FieldType.BOOLEAN, booleanRestriction.getValueType());
-		assertEquals(true, booleanRestriction.getBooleanValue());
+        assertEquals( Field.BOOLEAN,
+                      booleanRestriction.getValueType() );
+        assertEquals( true,
+                      booleanRestriction.getBooleanValue() );
 
-		LiteralRestriction intRestriction = new LiteralRestriction();
-		intRestriction.setValue("1");
+        LiteralRestriction intRestriction = new LiteralRestriction();
+        intRestriction.setValue( "1" );
 
-		assertEquals(Field.FieldType.INT, intRestriction.getValueType());
-		assertEquals(1, intRestriction.getIntValue());
+        assertEquals( Field.INT,
+                      intRestriction.getValueType() );
+        assertEquals( 1,
+                      intRestriction.getIntValue() );
 
-		LiteralRestriction doubleRestriction = new LiteralRestriction();
-		doubleRestriction.setValue("1.0");
+        LiteralRestriction doubleRestriction = new LiteralRestriction();
+        doubleRestriction.setValue( "1.0" );
 
-		assertEquals(Field.FieldType.DOUBLE, doubleRestriction.getValueType());
-		assertEquals(1.0, doubleRestriction.getDoubleValue());
+        assertEquals( Field.DOUBLE,
+                      doubleRestriction.getValueType() );
+        assertEquals( 1.0,
+                      doubleRestriction.getDoubleValue() );
 
-		LiteralRestriction dateRestriction = new LiteralRestriction();
-		dateRestriction.setValue("11-jan-2008");
+        LiteralRestriction dateRestriction = new LiteralRestriction();
+        dateRestriction.setValue( "11-jan-2008" );
 
-		assertEquals(Field.FieldType.DATE, dateRestriction.getValueType());
+        assertEquals( Field.DATE,
+                      dateRestriction.getValueType() );
 
-		LiteralRestriction stringRestriction = new LiteralRestriction();
-		stringRestriction.setValue("test test");
+        LiteralRestriction stringRestriction = new LiteralRestriction();
+        stringRestriction.setValue( "test test" );
 
-		assertEquals(Field.FieldType.STRING, stringRestriction.getValueType());
-		assertEquals("test test", stringRestriction.getValueAsString());
+        assertEquals( Field.STRING,
+                      stringRestriction.getValueType() );
+        assertEquals( "test test",
+                      stringRestriction.getValueAsString() );
 
-		LiteralRestriction nullRestriction = new LiteralRestriction();
-		nullRestriction.setValue(null);
+        LiteralRestriction nullRestriction = new LiteralRestriction();
+        nullRestriction.setValue( null );
 
-		assertEquals(Field.FieldType.UNKNOWN, nullRestriction.getValueType());
-		assertEquals(null, nullRestriction.getValueAsString());
-		assertEquals(null, nullRestriction.getValueAsObject());
-	}
+        assertEquals( Field.UNKNOWN,
+                      nullRestriction.getValueType() );
+        assertEquals( null,
+                      nullRestriction.getValueAsString() );
+        assertEquals( null,
+                      nullRestriction.getValueAsObject() );
+    }
 }

Modified: labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/misc/PackageDescrVisitorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/misc/PackageDescrVisitorTest.java	2010-01-14 13:54:44 UTC (rev 31091)
+++ labs/jbossrules/trunk/drools-verifier/src/test/java/org/drools/verifier/misc/PackageDescrVisitorTest.java	2010-01-14 16:57:51 UTC (rev 31092)
@@ -3,6 +3,7 @@
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.util.Collection;
+import java.util.Collections;
 
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsParserException;
@@ -32,12 +33,13 @@
         assertNotNull( packageDescr );
 
         visitor.addPackageDescrToData( packageDescr,
+                                       Collections.EMPTY_LIST,
                                        data );
 
         Collection<VerifierComponent> all = data.getAll();
 
         assertNotNull( all );
-        assertEquals( 50,
+        assertEquals( 51,
                       all.size() );
 
         //        for ( VerifierComponent verifierComponent : all ) {
@@ -58,6 +60,7 @@
         assertNotNull( packageDescr );
 
         visitor.addPackageDescrToData( packageDescr,
+                                       Collections.EMPTY_LIST,
                                        data );
 
         Collection<VerifierComponent> all = data.getAll();

Added: labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/imports.drl
===================================================================
--- labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/imports.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/imports.drl	2010-01-14 16:57:51 UTC (rev 31092)
@@ -0,0 +1,5 @@
+package com.misc.someData
+
+import org.test.Person;
+import org.test.Pet;
+import org.test.Rambo;
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/model.jar
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/trunk/drools-verifier/src/test/resources/org/drools/verifier/model.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream



More information about the jboss-svn-commits mailing list