[jboss-svn-commits] JBL Code SVN: r5422 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools main/java/org/drools/base main/java/org/drools/base/evaluators main/java/org/drools/facttemplates main/java/org/drools/reteoo main/java/org/drools/reteoo/beta main/java/org/drools/rule main/java/org/drools/spi test/java/org/drools/base test/java/org/drools/examples/manners test/java/org/drools/examples/waltz test/java/org/drools/leaps test/java/org/drools/reteoo test/java/org/drools/reteoo/beta test/java/org/drools/rule test/java/org/drools/spi

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Aug 2 20:15:22 EDT 2006


Author: mark.proctor at jboss.com
Date: 2006-08-02 20:14:40 -0400 (Wed, 02 Aug 2006)
New Revision: 5422

Added:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ValueType.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/EvaluatorFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/FactTemplateFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/Operator.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/Fact.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplate.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateObjectType.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplatorFieldExtractor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FieldTemplate.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FieldTemplateImpl.java
Removed:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/EvaluatorFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Semaphore.java
Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseClassFieldExtractor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseEvaluator.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassObjectType.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ArrayFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BooleanFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ByteFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/CharacterFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DateFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DoubleFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/FloatFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/IntegerFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/LongFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ObjectFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ShortFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/StringFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AlphaNodeSwitch.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/HashedObjectSinkList.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaMemoryFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedRightMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Declaration.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ColumnExtractor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Evaluator.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Extractor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ObjectType.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/BaseMannersTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/waltz/BaseWaltzTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/ColumnConstraintsTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/LeapsRuleBaseTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/QueryResultsTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/QueryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeSwitchTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/HashedObjectSinkListTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BooleanConstrainedRightMemoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectEqualConstrLeftMemoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectEqualConstrRightMemoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectNotEqualConstrLeftMemoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectNotEqualConstrRightMemoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/DeclarationTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/OrTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/spi/MockObjectType.java
Log:
JBRULES-220 Refactor ObjectType to work with Templates
-This also involved  refactor Evaluator to use Enums for ValueType and Operator

JBRULES-329 implement core handling of Templates for ObjectType
-Initial commmit for FactTemplate work, still not integrated into parsers and builds, it also needs unit tests.

JBRULES-216 Allow & and | connectives for field constraints
-XmlReader is now fixed
-Xml and Drl Dumpers  have been fixed

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseClassFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseClassFieldExtractor.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseClassFieldExtractor.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -28,19 +28,19 @@
 abstract public class BaseClassFieldExtractor
     implements
     FieldExtractor {
-    private final ClassObjectType objectType;
-
     private final int             index;
 
     private final Class           fieldType;
+    
+    private final ValueType       valueType;    
 
     public BaseClassFieldExtractor(final Class clazz,
                                    final String fieldName) {
         try {
             final ClassFieldInspector inspector = new ClassFieldInspector( clazz );
-            this.index = ((Integer) inspector.getFieldNames().get( fieldName )).intValue();
-            this.fieldType = (Class) inspector.getFieldTypes().get( fieldName );
-            this.objectType = ClassFieldExtractorFactory.getClassObjectType( this.fieldType );
+            this.index = ((Integer) inspector.getFieldNames().get( fieldName ) ).intValue();
+            this.fieldType = wrapPrimitive(  (Class) inspector.getFieldTypes().get( fieldName ) );
+            this.valueType = ValueType.determineValueType( this.fieldType );
         } catch ( final Exception e ) {
             throw new RuntimeDroolsException( e );
         }
@@ -50,29 +50,62 @@
         return this.index;
     }
 
-    protected Class getFieldType() {
+    public Class getExtractToClass() {
         return this.fieldType;
     }
+    
+    public ValueType  getValueType() {
+        return this.valueType;
+    }
 
     /** This will be implemented by the dynamic classes */
     abstract public Object getValue(Object object);
+    
+    protected static Class wrapPrimitive(final Class fieldType) {
+        Class returnClass = null;
+        // autobox primitives
+        if ( fieldType.isPrimitive() ) {
+            if ( fieldType == char.class ) {
+                returnClass = Character.class;
+            } else if ( fieldType == byte.class ) {
+                returnClass = Byte.class;
+            } else if ( fieldType == short.class ) {
+                returnClass = Short.class;
+            } else if ( fieldType == int.class ) {
+                returnClass = Integer.class;
+            } else if ( fieldType == long.class ) {
+                returnClass = Long.class;
+            } else if ( fieldType == float.class ) {
+                returnClass = Float.class;
+            } else if ( fieldType == double.class ) {
+                returnClass = Double.class;
+            } else if ( fieldType == boolean.class ) {
+                returnClass = Boolean.class;
+            }
+        } else {
+            returnClass = fieldType;
+        }
 
-    public ObjectType getObjectType() {
-        return this.objectType;
+        return returnClass;
     }
 
-    public boolean equals(final Object other) {
-        if ( this == other ) {
+    public int hashCode() {
+        final int PRIME = 31;
+        int result = 1;
+        result = PRIME * result + this.fieldType.hashCode();
+        result = PRIME * result + this.index;
+        result = PRIME * result + this.valueType.hashCode();
+        return result;
+    }
+
+    public boolean equals(final Object object) {
+        if ( this == object ) {
             return true;
         }
-        if ( !(other instanceof BaseClassFieldExtractor) ) {
+        if ( !(object instanceof BaseClassFieldExtractor) ) {
             return false;
         }
-        final BaseClassFieldExtractor extr = (BaseClassFieldExtractor) other;
-        return this.objectType.equals( extr.objectType ) && this.index == extr.index;
-    }
-
-    public int hashCode() {
-        return this.objectType.hashCode() * 17 + this.index;
-    }
+        final BaseClassFieldExtractor other = (BaseClassFieldExtractor) object;
+        return this.fieldType == other.fieldType && this.index == other.index;
+    }       
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseEvaluator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseEvaluator.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseEvaluator.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+import org.drools.base.evaluators.Operator;
 import org.drools.spi.Evaluator;
 
 /**
@@ -28,39 +29,41 @@
     implements
     Evaluator {
 
-    private final int operator;
+    private final Operator operator;
 
-    private final int type;
+    private final ValueType type;
 
-    public BaseEvaluator(final int type,
-                         final int operator) {
+    public BaseEvaluator(final ValueType type,
+                         final Operator operator) {
         this.type = type;
         this.operator = operator;
     }
 
-    public int getOperator() {
+    public Operator getOperator() {
         return this.operator;
     }
 
-    public int getType() {
+    public ValueType getValueType() {
         return this.type;
     }
 
     public abstract boolean evaluate(Object object1,
                                      Object object2);
 
-    public boolean equals(final Object other) {
-        if ( this == other ) {
+    public boolean equals(final Object object) {
+        if ( this == object ) {
             return true;
         }
-        if ( !this.getClass().equals( other.getClass() ) ) {
+        if ( object == null || getClass() != object.getClass() ) {
             return false;
         }
-        return (this.getOperator() == ((Evaluator) other).getOperator()) && (this.getType() == ((Evaluator) other).getType());
+        
+        Evaluator other = ( Evaluator ) object;        
+        return this.getOperator() == other.getOperator() && this.getValueType() == other.getValueType();
     }
 
     public int hashCode() {
-        return (this.getType() * 17) ^ (this.getOperator() * 11) ^ (this.getClass().hashCode());
+        return (this.getValueType().hashCode()) ^ (this.getOperator().hashCode()) ^ (this.getClass().hashCode());
     }
 
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractor.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -38,7 +38,7 @@
     /**
      * 
      */
-    private static final long        serialVersionUID = 1865123571023540643L;
+    private static final long        serialVersionUID = 320;
     private String                   fieldName;
     private Class                    clazz;
     private transient FieldExtractor extractor;
@@ -79,16 +79,20 @@
         return this.extractor.getValue( object );
     }
 
-    public ObjectType getObjectType() {
-        return this.extractor.getObjectType();
+    public ValueType getValueType() {
+        return this.extractor.getValueType();
     }
+    
+    public Class getExtractToClass() {
+        return this.extractor.getExtractToClass();
+    }
 
     public String toString() {
         return "[ClassFieldExtractor class=" + this.clazz + " field=" + this.fieldName + "]";
     }
 
     public int hashCode() {
-        return this.getObjectType().hashCode() * 17 + this.getIndex();
+        return getValueType().hashCode() * 17 + getIndex();
     }
 
     public boolean equals(final Object object) {
@@ -102,6 +106,6 @@
 
         final ClassFieldExtractor other = (ClassFieldExtractor) object;
 
-        return this.extractor.getObjectType().equals( other.getObjectType() ) && this.extractor.getIndex() == other.getIndex();
+        return this.extractor.getValueType() == other.getValueType() && this.extractor.getIndex() == other.getIndex();
     }
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldExtractorFactory.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -254,37 +254,6 @@
         return cw.toByteArray();
     }
 
-    /**
-     * Return the classObjectType, allowing for the fact that it will be autoboxed if it is a primitive.
-     */
-    protected static ClassObjectType getClassObjectType(final Class fieldType) throws IntrospectionException {
-        Class returnClass = null;
-        // autobox primitives
-        if ( fieldType.isPrimitive() ) {
-            if ( fieldType == char.class ) {
-                returnClass = Character.class;
-            } else if ( fieldType == byte.class ) {
-                returnClass = Byte.class;
-            } else if ( fieldType == short.class ) {
-                returnClass = Short.class;
-            } else if ( fieldType == int.class ) {
-                returnClass = Integer.class;
-            } else if ( fieldType == long.class ) {
-                returnClass = Long.class;
-            } else if ( fieldType == float.class ) {
-                returnClass = Float.class;
-            } else if ( fieldType == double.class ) {
-                returnClass = Double.class;
-            } else if ( fieldType == boolean.class ) {
-                returnClass = Boolean.class;
-            }
-        } else {
-            returnClass = fieldType;
-        }
-
-        return new ClassObjectType( returnClass );
-    }
-
     private static String getTypeName(final Class fieldType) {
         String ret = null;
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassObjectType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassObjectType.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassObjectType.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+import org.drools.RuntimeDroolsException;
 import org.drools.spi.Evaluator;
 import org.drools.spi.ObjectType;
 
@@ -41,7 +42,7 @@
     /** Java object class. */
     protected Class           objectTypeClass;
 
-    protected int             valueType;
+    protected ValueType       valueType;
 
     // ------------------------------------------------------------
     // Constructors
@@ -55,7 +56,7 @@
      */
     public ClassObjectType(final Class objectTypeClass) {
         this.objectTypeClass = objectTypeClass;
-        setValueType( objectTypeClass );
+        this.valueType = ValueType.determineValueType( objectTypeClass );
     }
 
     // ------------------------------------------------------------
@@ -89,46 +90,10 @@
         return getClassType().isInstance( object );
     }
 
-    public int getValueType() {
+    public ValueType getValueType() {
         return this.valueType;
     }
 
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-    // java.lang.Object
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-    protected void setValueType(final Class clazz) {
-        if ( clazz == null ) {
-            this.valueType = Evaluator.NULL_TYPE;
-        } else if ( clazz == Character.class ) {
-            this.valueType = Evaluator.CHAR_TYPE;
-        } else if ( clazz == Byte.class ) {
-            this.valueType = Evaluator.BYTE_TYPE;
-        } else if ( clazz == Short.class ) {
-            this.valueType = Evaluator.SHORT_TYPE;
-        } else if ( clazz == Integer.class ) {
-            this.valueType = Evaluator.INTEGER_TYPE;
-        } else if ( clazz == Long.class ) {
-            this.valueType = Evaluator.LONG_TYPE;
-        } else if ( clazz == Float.class ) {
-            this.valueType = Evaluator.FLOAT_TYPE;
-        } else if ( clazz == Double.class ) {
-            this.valueType = Evaluator.DOUBLE_TYPE;
-        } else if ( clazz == Boolean.class ) {
-            this.valueType = Evaluator.BOOLEAN_TYPE;
-        } else if ( clazz == java.sql.Date.class ) {
-            this.valueType = Evaluator.DATE_TYPE;
-        } else if ( clazz == java.util.Date.class ) {
-            this.valueType = Evaluator.DATE_TYPE;
-        } else if ( clazz.isAssignableFrom( Object[].class ) ) {
-            this.valueType = Evaluator.ARRAY_TYPE;
-        } else if ( clazz == String.class ) {
-            this.valueType = Evaluator.STRING_TYPE;
-        } else if ( clazz instanceof Object ) {
-            this.valueType = Evaluator.OBJECT_TYPE;
-        }
-    }
-
     public String toString() {
         return "[ClassObjectType class=" + getClassType().getName() + "]";
     }

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/EvaluatorFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/EvaluatorFactory.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/EvaluatorFactory.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -1,124 +0,0 @@
-package org.drools.base;
-
-/*
- * Copyright 2005 JBoss Inc
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import org.drools.base.evaluators.ArrayFactory;
-import org.drools.base.evaluators.BooleanFactory;
-import org.drools.base.evaluators.ByteFactory;
-import org.drools.base.evaluators.CharacterFactory;
-import org.drools.base.evaluators.DateFactory;
-import org.drools.base.evaluators.DoubleFactory;
-import org.drools.base.evaluators.FloatFactory;
-import org.drools.base.evaluators.IntegerFactory;
-import org.drools.base.evaluators.LongFactory;
-import org.drools.base.evaluators.ObjectFactory;
-import org.drools.base.evaluators.ShortFactory;
-import org.drools.base.evaluators.StringFactory;
-import org.drools.spi.Evaluator;
-
-/**
- * This is a factory to generate evaluators for all types and operations that can be used 
- * in constraints. Uses the helper classes in the evaluators sub package.
- * 
- * eg Person(object<type> opr object)
- * Where valid type's are are defined as contants in Evaluator.
- * 
- * Adding support for other types or operators is quite easy, just remmeber to add it to the getEvaluator method(s)
- * below, and also to the unit tests.
- * TODO: Should this be made dynamic, such that users can add their own types, a-la hibernate?
- */
-public class EvaluatorFactory {
-    private static final EvaluatorFactory INSTANCE = new EvaluatorFactory();
-
-    public static EvaluatorFactory getInstance() {
-        return EvaluatorFactory.INSTANCE;
-    }
-
-    private EvaluatorFactory() {
-
-    }
-
-    public static Evaluator getEvaluator(final int type,
-                                         final String operator) {
-        Evaluator evaluator = null;
-        if ( operator.equals( "==" ) ) {
-            evaluator = getEvaluator( type,
-                                      Evaluator.EQUAL );
-        } else if ( operator.equals( "!=" ) ) {
-            evaluator = getEvaluator( type,
-                                      Evaluator.NOT_EQUAL );
-        } else if ( operator.equals( "<" ) ) {
-            evaluator = getEvaluator( type,
-                                      Evaluator.LESS );
-        } else if ( operator.equals( "<=" ) ) {
-            evaluator = getEvaluator( type,
-                                      Evaluator.LESS_OR_EQUAL );
-        } else if ( operator.equals( ">" ) ) {
-            evaluator = getEvaluator( type,
-                                      Evaluator.GREATER );
-        } else if ( operator.equals( ">=" ) ) {
-            evaluator = getEvaluator( type,
-                                      Evaluator.GREATER_OR_EQUAL );
-        } else if ( operator.equals( "contains" ) ) {
-            evaluator = getEvaluator( type,
-                                      Evaluator.CONTAINS );
-        } else if ( operator.equals( "matches" ) ) {
-            evaluator = getEvaluator( type,
-                                      Evaluator.MATCHES );
-        } else if ( operator.equals( "excludes" ) ) {
-            evaluator = getEvaluator( type,
-                                      Evaluator.EXCLUDES );
-        } else {
-            throw new IllegalArgumentException( "Unknown operator: '" + operator + "'" );
-        }
-
-        return evaluator;
-    }
-
-    public static Evaluator getEvaluator(final int type,
-                                         final int operator) {
-        switch ( type ) {
-            case Evaluator.STRING_TYPE :
-                return StringFactory.getStringEvaluator( operator );
-            case Evaluator.OBJECT_TYPE :
-                return ObjectFactory.getObjectEvaluator( operator );
-            case Evaluator.SHORT_TYPE :
-                return ShortFactory.getShortEvaluator( operator );
-            case Evaluator.INTEGER_TYPE :
-                return IntegerFactory.getIntegerEvaluator( operator );
-            case Evaluator.BOOLEAN_TYPE :
-                return BooleanFactory.getBooleanEvaluator( operator );
-            case Evaluator.DOUBLE_TYPE :
-                return DoubleFactory.getDoubleEvaluator( operator );
-            case Evaluator.CHAR_TYPE :
-                return CharacterFactory.getCharacterEvaluator( operator );
-            case Evaluator.BYTE_TYPE :
-                return ByteFactory.getByteEvaluator( operator );
-            case Evaluator.FLOAT_TYPE :
-                return FloatFactory.getFloatEvaluator( operator );
-            case Evaluator.LONG_TYPE :
-                return LongFactory.getLongEvaluator( operator );
-            case Evaluator.DATE_TYPE :
-                return DateFactory.getDateEvaluator( operator );
-            case Evaluator.ARRAY_TYPE :
-                return ArrayFactory.getArrayEvaluator( operator );
-            default :
-                throw new RuntimeException( "Type '" + type + "' does not exist for BaseEvaluatorFactory" );
-        }
-    }
-
-}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldFactory.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldFactory.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -31,55 +31,42 @@
     }
 
     public static FieldValue getFieldValue(final String value,
-                                           int valueType) {
+                                           ValueType valueType) {
         FieldValue field = null;
         if ( value == null ) {
-            valueType = Evaluator.NULL_TYPE;
+            valueType = ValueType.NULL_TYPE;
         }
 
-        switch ( valueType ) {
-            case Evaluator.NULL_TYPE :
-                field = new FieldImpl( null );
-                break;
-            case Evaluator.CHAR_TYPE :
-                field = new FieldImpl( new Character( value.charAt( 0 ) ) );
-                break;
-            case Evaluator.BYTE_TYPE :
-                field = new FieldImpl( new Byte( value ) );
-                break;
-            case Evaluator.SHORT_TYPE :
-                field = new FieldImpl( new Short( value ) );
-                break;
-            case Evaluator.INTEGER_TYPE :
-                field = new FieldImpl( new Integer( value ) );
-                break;
-            case Evaluator.LONG_TYPE :
-                field = new FieldImpl( new Long( value ) );
-                break;
-            case Evaluator.FLOAT_TYPE :
-                field = new FieldImpl( new Float( value ) );
-                break;
-            case Evaluator.DOUBLE_TYPE :
-                field = new FieldImpl( new Double( value ) );
-                break;
-            case Evaluator.BOOLEAN_TYPE :
-                field = new FieldImpl( new Boolean( value ) );
-                break;
-            case Evaluator.STRING_TYPE :
-                field = new FieldImpl( value.intern() );
-                break;
-            case Evaluator.DATE_TYPE :
-                //MN: I think its fine like this, seems to work !
-                field = new FieldImpl( value );
-                break;
-            case Evaluator.ARRAY_TYPE :
-                //MN: I think its fine like this.
-                field = new FieldImpl( value );
-                break;
-            case Evaluator.OBJECT_TYPE :
-                field = new FieldImpl( value );
-                break;
+        if ( valueType == ValueType.NULL_TYPE ) {
+            field = new FieldImpl( null );
+        } else if ( valueType == ValueType.CHAR_TYPE ) {
+            field = new FieldImpl( new Character( value.charAt( 0 ) ) );
+        } else if ( valueType == ValueType.BYTE_TYPE ) {
+            field = new FieldImpl( new Byte( value ) );
+        } else if ( valueType == ValueType.SHORT_TYPE ) {
+            field = new FieldImpl( new Short( value ) );
+        } else if ( valueType == ValueType.INTEGER_TYPE ) {
+            field = new FieldImpl( new Integer( value ) );
+        } else if ( valueType == ValueType.LONG_TYPE ) {
+            field = new FieldImpl( new Long( value ) );
+        } else if ( valueType == ValueType.FLOAT_TYPE ) {
+            field = new FieldImpl( new Float( value ) );
+        } else if ( valueType == ValueType.DOUBLE_TYPE ) {
+            field = new FieldImpl( new Double( value ) );
+        } else if ( valueType == ValueType.BOOLEAN_TYPE ) {
+            field = new FieldImpl( new Boolean( value ) );
+        } else if ( valueType == ValueType.STRING_TYPE ) {
+            field = new FieldImpl( value.intern() );
+        } else if ( valueType == ValueType.DATE_TYPE ) {
+            //MN: I think its fine like this, seems to work !
+            field = new FieldImpl( value );
+        } else if ( valueType == ValueType.ARRAY_TYPE ) {
+            //MN: I think its fine like this.
+            field = new FieldImpl( value );
+        } else if ( valueType == ValueType.OBJECT_TYPE ) {
+            field = new FieldImpl( value );
         }
+
         return field;
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldImpl.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldImpl.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -24,7 +24,7 @@
     /**
      * 
      */
-    private static final long serialVersionUID = -5865571326405806524L;
+    private static final long serialVersionUID = 320;
     private Object            value;
 
     public FieldImpl(final Object value) {

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ValueType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ValueType.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ValueType.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -0,0 +1,121 @@
+package org.drools.base;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.base.evaluators.ArrayFactory;
+import org.drools.base.evaluators.BooleanFactory;
+import org.drools.base.evaluators.ByteFactory;
+import org.drools.base.evaluators.CharacterFactory;
+import org.drools.base.evaluators.DateFactory;
+import org.drools.base.evaluators.DoubleFactory;
+import org.drools.base.evaluators.FloatFactory;
+import org.drools.base.evaluators.IntegerFactory;
+import org.drools.base.evaluators.LongFactory;
+import org.drools.base.evaluators.ObjectFactory;
+import org.drools.base.evaluators.Operator;
+import org.drools.base.evaluators.ShortFactory;
+import org.drools.base.evaluators.StringFactory;
+import org.drools.spi.Evaluator;
+import org.drools.base.evaluators.EvaluatorFactory;
+import org.drools.facttemplates.FactTemplate;
+
+public class ValueType implements Serializable {
+    
+    private static final long        serialVersionUID = 320;
+    
+    public static final ValueType NULL_TYPE = new  ValueType( "null", null, null );
+    public static final ValueType CHAR_TYPE = new  ValueType( "Character", Character.class, CharacterFactory.getInstance() );   
+    public static final ValueType BYTE_TYPE = new  ValueType( "Byte", Byte.class, ByteFactory.getInstance() );
+    public static final ValueType SHORT_TYPE = new  ValueType( "Short", Short.class, ShortFactory.getInstance() );
+    public static final ValueType INTEGER_TYPE = new  ValueType( "Integer", Integer.class, IntegerFactory.getInstance() );
+    public static final ValueType LONG_TYPE = new  ValueType( "Long", Long.class, LongFactory.getInstance() );
+    public static final ValueType FLOAT_TYPE = new  ValueType( "Float", Float.class, FloatFactory.getInstance() );
+    public static final ValueType DOUBLE_TYPE = new  ValueType( "Double", Double.class, DoubleFactory.getInstance() );
+    public static final ValueType BOOLEAN_TYPE = new  ValueType( "Boolean", Boolean.class, BooleanFactory.getInstance() );    
+    public static final ValueType DATE_TYPE = new  ValueType( "Date", Date.class, DateFactory.getInstance() );    
+    public static final ValueType ARRAY_TYPE = new  ValueType( "Array", Object[].class, ArrayFactory.getInstance() );
+    public static final ValueType STRING_TYPE = new  ValueType( "String", String.class, StringFactory.getInstance() );    
+    public static final ValueType OBJECT_TYPE = new  ValueType( "Object", Object.class, ObjectFactory.getInstance() );
+    public static final ValueType FACTTEMPLATE_TYPE = new  ValueType( "FactTemplate", FactTemplate.class, ObjectFactory.getInstance() );    
+    
+    private final String name;
+    private final Class classType;
+    private final EvaluatorFactory evaluatorFactory;
+    
+    private ValueType(String name, Class classType, EvaluatorFactory evaluatorFactory) {
+        this.name  = name;
+        this.classType  = classType;
+        this.evaluatorFactory = evaluatorFactory;
+    }
+    
+    private Object readResolve () throws java.io.ObjectStreamException
+    {
+        return determineValueType( this.classType );
+    }
+    
+    public String getName() {
+        return this.name;
+    }
+    
+    public Class getClassType() {
+        return this.classType;
+    }
+    
+    public Evaluator getEvaluator(Operator operator)  {
+        return this.evaluatorFactory.getEvaluator( operator );
+    }
+    
+    public static ValueType determineValueType(Class clazz) {
+        if ( clazz == null ) {
+            return  ValueType .NULL_TYPE;
+        } if ( clazz == FactTemplate.class ) {
+          return ValueType.FACTTEMPLATE_TYPE;  
+        } else if ( clazz == Character.class ) {
+            return  ValueType.CHAR_TYPE;
+        } else if ( clazz == Byte.class ) {
+            return  ValueType .BYTE_TYPE;
+        } else if ( clazz == Short.class ) {
+            return  ValueType .SHORT_TYPE;
+        } else if ( clazz == Integer.class ) {
+            return  ValueType .INTEGER_TYPE;
+        } else if ( clazz == Long.class ) {
+            return  ValueType .LONG_TYPE;
+        } else if ( clazz == Float.class ) {
+            return  ValueType .FLOAT_TYPE;
+        } else if ( clazz == Double.class ) {
+            return  ValueType .DOUBLE_TYPE;
+        } else if ( clazz == Boolean.class ) {
+            return  ValueType .BOOLEAN_TYPE;
+        } else if ( clazz == java.sql.Date.class ) {
+            return  ValueType .DATE_TYPE;
+        } else if ( clazz == java.util.Date.class ) {
+            return  ValueType .DATE_TYPE;
+        } else if ( clazz.isAssignableFrom( Object[].class ) ) {
+            return  ValueType .ARRAY_TYPE;
+        } else if ( clazz == String.class ) {
+            return  ValueType .STRING_TYPE;
+        } else if ( clazz instanceof Object ) {
+            return  ValueType .OBJECT_TYPE;
+        }
+        throw new RuntimeDroolsException( "unable to determine ValueType for Class [" + clazz + "]" );        
+    }
+    
+    public String toString() {
+        return "ValueType = '" + this.name + "'";
+    }    
+    
+    public int hashCode() {
+        return this.name.hashCode();
+    }
+    
+    public boolean equals(Object object) {
+        if ( object == this ) {
+            return  true;
+        }
+        
+        return false;        
+    }
+    
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ArrayFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ArrayFactory.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ArrayFactory.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -19,37 +19,58 @@
 import java.util.Arrays;
 
 import org.drools.base.BaseEvaluator;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.ShortFactory.ShortEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortGreaterEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortGreaterOrEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortLessEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortLessOrEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortNotEqualEvaluator;
 import org.drools.spi.Evaluator;
 
 /**
  * For handling simple (non collection) array types.
  * @author Michael Neale
  */
-public class ArrayFactory {
-
-    public static Evaluator getArrayEvaluator(final int operator) {
-        switch ( operator ) {
-            case Evaluator.EQUAL :
-                return ArrayEqualEvaluator.INSTANCE;
-            case Evaluator.NOT_EQUAL :
-                return ArrayNotEqualEvaluator.INSTANCE;
-            case Evaluator.CONTAINS :
-                return ArrayContainsEvaluator.INSTANCE;
-            default :
-                throw new RuntimeException( "Operator '" + operator + "' does not exist for ArrayEvaluator" );
+public class ArrayFactory implements EvaluatorFactory {
+    private static EvaluatorFactory INSTANCE = new ArrayFactory();
+    
+    private ArrayFactory() {
+        
+    }
+    
+    public static EvaluatorFactory getInstance() {
+        if ( INSTANCE == null ) {
+            INSTANCE = new ArrayFactory();
         }
+        return INSTANCE;
     }
 
+    public Evaluator getEvaluator(final Operator operator) {
+        if ( operator == Operator.EQUAL ) {
+            return ArrayEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.NOT_EQUAL ) {
+            return ArrayNotEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.LESS ) {
+            return ArrayContainsEvaluator.INSTANCE;
+        } else if ( operator == Operator.CONTAINS) {
+            return ArrayContainsEvaluator.INSTANCE;
+        } else {
+            throw new RuntimeException( "Operator '" + operator + "' does not exist for ArrayEvaluator" );
+        }    
+    }
+    
+
     static class ArrayEqualEvaluator extends BaseEvaluator {
         /**
          * 
          */
-        private static final long     serialVersionUID = -3988506265461766585L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new ArrayEqualEvaluator();
 
         private ArrayEqualEvaluator() {
-            super( Evaluator.ARRAY_TYPE,
-                   Evaluator.EQUAL );
+            super( ValueType.ARRAY_TYPE,
+                   Operator.EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -66,12 +87,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = 4021357517502692236L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new ArrayNotEqualEvaluator();
 
         private ArrayNotEqualEvaluator() {
-            super( Evaluator.ARRAY_TYPE,
-                   Evaluator.NOT_EQUAL );
+            super( ValueType.ARRAY_TYPE,
+                   Operator.NOT_EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -89,12 +110,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = -4541491453186891644L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new ArrayContainsEvaluator();
 
         private ArrayContainsEvaluator() {
-            super( Evaluator.ARRAY_TYPE,
-                   Evaluator.CONTAINS );
+            super( ValueType.ARRAY_TYPE,
+                   Operator.CONTAINS );
         }
 
         public boolean evaluate(final Object object1,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BooleanFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BooleanFactory.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/BooleanFactory.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -17,31 +17,50 @@
  */
 
 import org.drools.base.BaseEvaluator;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.ShortFactory.ShortEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortGreaterEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortGreaterOrEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortLessEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortLessOrEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortNotEqualEvaluator;
 import org.drools.spi.Evaluator;
 
-public class BooleanFactory {
-
-    public static Evaluator getBooleanEvaluator(final int operator) {
-        switch ( operator ) {
-            case Evaluator.EQUAL :
-                return BooleanEqualEvaluator.INSTANCE;
-            case Evaluator.NOT_EQUAL :
-                return BooleanNotEqualEvaluator.INSTANCE;
-            default :
-                throw new RuntimeException( "Operator '" + operator + "' does not exist for BooleanEvaluator" );
+public class BooleanFactory implements EvaluatorFactory {
+    private static EvaluatorFactory INSTANCE = new BooleanFactory();
+    
+    private BooleanFactory() {
+        
+    }
+    
+    public static EvaluatorFactory getInstance() {
+        if ( INSTANCE == null ) {
+            INSTANCE = new BooleanFactory();
         }
+        return INSTANCE;
     }
+    
+    public Evaluator getEvaluator(final Operator operator) {
+        if ( operator == Operator.EQUAL ) {
+            return BooleanEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.NOT_EQUAL ) {
+            return BooleanNotEqualEvaluator.INSTANCE;
+        }  else {
+            throw new RuntimeException( "Operator '" + operator + "' does not exist for BooleanEvaluator" );
+        }    
+    }
+    
 
     static class BooleanEqualEvaluator extends BaseEvaluator {
         /**
          * 
          */
-        private static final long      serialVersionUID = 7891019213259874134L;
+        private static final long      serialVersionUID = 320;
         private final static Evaluator INSTANCE         = new BooleanEqualEvaluator();
 
         private BooleanEqualEvaluator() {
-            super( Evaluator.BOOLEAN_TYPE,
-                   Evaluator.EQUAL );
+            super( ValueType.BOOLEAN_TYPE,
+                   Operator.EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -61,12 +80,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = -451325761056297938L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new BooleanNotEqualEvaluator();
 
         private BooleanNotEqualEvaluator() {
-            super( Evaluator.BOOLEAN_TYPE,
-                   Evaluator.NOT_EQUAL );
+            super( ValueType.BOOLEAN_TYPE,
+                   Operator.NOT_EQUAL );
         }
 
         public boolean evaluate(final Object object1,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ByteFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ByteFactory.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ByteFactory.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -17,29 +17,48 @@
  */
 
 import org.drools.base.BaseEvaluator;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.ShortFactory.ShortEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortGreaterEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortGreaterOrEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortLessEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortLessOrEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortNotEqualEvaluator;
 import org.drools.spi.Evaluator;
 
-public class ByteFactory {
-
-    public static Evaluator getByteEvaluator(final int operator) {
-        switch ( operator ) {
-            case Evaluator.EQUAL :
-                return ByteEqualEvaluator.INSTANCE;
-            case Evaluator.NOT_EQUAL :
-                return ByteNotEqualEvaluator.INSTANCE;
-            case Evaluator.LESS :
-                return ByteLessEvaluator.INSTANCE;
-            case Evaluator.LESS_OR_EQUAL :
-                return ByteLessOrEqualEvaluator.INSTANCE;
-            case Evaluator.GREATER :
-                return ByteGreaterEvaluator.INSTANCE;
-            case Evaluator.GREATER_OR_EQUAL :
-                return ByteGreaterOrEqualEvaluator.INSTANCE;
-            default :
-                throw new RuntimeException( "Operator '" + operator + "' does not exist for ByteEvaluator" );
+public class ByteFactory implements EvaluatorFactory {
+    private static EvaluatorFactory INSTANCE = new ByteFactory();
+    
+    private ByteFactory() {
+        
+    }
+    
+    public static EvaluatorFactory getInstance() {
+        if ( INSTANCE == null ) {
+            INSTANCE = new ByteFactory();
         }
+        return INSTANCE;
     }
 
+    public Evaluator getEvaluator(final Operator operator) {
+        if ( operator == Operator.EQUAL ) {
+            return ByteEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.NOT_EQUAL ) {
+            return ByteNotEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.LESS ) {
+            return ByteLessEvaluator.INSTANCE;
+        } else if ( operator == Operator.LESS_OR_EQUAL ) {
+            return ByteLessOrEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.GREATER ) {
+            return ByteGreaterEvaluator.INSTANCE;
+        } else if ( operator == Operator.GREATER_OR_EQUAL ) {
+            return ByteGreaterOrEqualEvaluator.INSTANCE;
+        }  else {
+            throw new RuntimeException( "Operator '" + operator + "' does not exist for ByteEvaluator" );
+        }    
+    }
+
+
     static class ByteEqualEvaluator extends BaseEvaluator {
         /**
          * 
@@ -48,8 +67,8 @@
         public final static Evaluator INSTANCE         = new ByteEqualEvaluator();
 
         private ByteEqualEvaluator() {
-            super( Evaluator.BYTE_TYPE,
-                   Evaluator.EQUAL );
+            super( ValueType.BYTE_TYPE,
+                   Operator.EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -73,8 +92,8 @@
         public final static Evaluator INSTANCE         = new ByteNotEqualEvaluator();
 
         private ByteNotEqualEvaluator() {
-            super( Evaluator.BYTE_TYPE,
-                   Evaluator.NOT_EQUAL );
+            super( ValueType.BYTE_TYPE,
+                   Operator.NOT_EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -98,8 +117,8 @@
         public final static Evaluator INSTANCE         = new ByteLessEvaluator();
 
         private ByteLessEvaluator() {
-            super( Evaluator.BYTE_TYPE,
-                   Evaluator.LESS );
+            super( ValueType.BYTE_TYPE,
+                   Operator.LESS );
         }
 
         public boolean evaluate(final Object object1,
@@ -120,8 +139,8 @@
         public final static Evaluator INSTANCE         = new ByteLessOrEqualEvaluator();
 
         private ByteLessOrEqualEvaluator() {
-            super( Evaluator.BYTE_TYPE,
-                   Evaluator.LESS_OR_EQUAL );
+            super( ValueType.BYTE_TYPE,
+                   Operator.LESS_OR_EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -142,8 +161,8 @@
         public final static Evaluator INSTANCE         = new ByteGreaterEvaluator();
 
         private ByteGreaterEvaluator() {
-            super( Evaluator.BYTE_TYPE,
-                   Evaluator.GREATER );
+            super( ValueType.BYTE_TYPE,
+                   Operator.GREATER );
         }
 
         public boolean evaluate(final Object object1,
@@ -164,8 +183,8 @@
         private final static Evaluator INSTANCE         = new ByteGreaterOrEqualEvaluator();
 
         private ByteGreaterOrEqualEvaluator() {
-            super( Evaluator.BYTE_TYPE,
-                   Evaluator.GREATER_OR_EQUAL );
+            super( ValueType.BYTE_TYPE,
+                   Operator.GREATER_OR_EQUAL );
         }
 
         public boolean evaluate(final Object object1,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/CharacterFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/CharacterFactory.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/CharacterFactory.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -17,39 +17,58 @@
  */
 
 import org.drools.base.BaseEvaluator;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.ShortFactory.ShortEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortGreaterEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortGreaterOrEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortLessEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortLessOrEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortNotEqualEvaluator;
 import org.drools.spi.Evaluator;
 
-public class CharacterFactory {
-
-    public static Evaluator getCharacterEvaluator(final int operator) {
-        switch ( operator ) {
-            case Evaluator.EQUAL :
-                return CharacterEqualEvaluator.INSTANCE;
-            case Evaluator.NOT_EQUAL :
-                return CharacterNotEqualEvaluator.INSTANCE;
-            case Evaluator.LESS :
-                return CharacterLessEvaluator.INSTANCE;
-            case Evaluator.LESS_OR_EQUAL :
-                return CharacterLessOrEqualEvaluator.INSTANCE;
-            case Evaluator.GREATER :
-                return CharacterGreaterEvaluator.INSTANCE;
-            case Evaluator.GREATER_OR_EQUAL :
-                return CharacterGreaterOrEqualEvaluator.INSTANCE;
-            default :
-                throw new RuntimeException( "Operator '" + operator + "' does not exist for CharacterEvaluator" );
+public class CharacterFactory implements EvaluatorFactory {
+    private static EvaluatorFactory INSTANCE = new CharacterFactory();
+    
+    private CharacterFactory() {
+        
+    }
+    
+    public static EvaluatorFactory getInstance() {
+        if ( INSTANCE == null ) {
+            INSTANCE = new CharacterFactory();
         }
+        return INSTANCE;
     }
 
+    public Evaluator getEvaluator(final Operator operator) {
+        if ( operator == Operator.EQUAL ) {
+            return CharacterEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.NOT_EQUAL ) {
+            return CharacterNotEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.LESS ) {
+            return CharacterLessEvaluator.INSTANCE;
+        } else if ( operator == Operator.LESS_OR_EQUAL ) {
+            return CharacterLessOrEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.GREATER ) {
+            return CharacterGreaterEvaluator.INSTANCE;
+        } else if ( operator == Operator.GREATER_OR_EQUAL ) {
+            return CharacterGreaterOrEqualEvaluator.INSTANCE;
+        }  else {
+            throw new RuntimeException( "Operator '" + operator + "' does not exist for CharacterEvaluator" );
+        }    
+    }
+
+
     static class CharacterEqualEvaluator extends BaseEvaluator {
         /**
          * 
          */
-        private static final long     serialVersionUID = 8766645269581805269L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new CharacterEqualEvaluator();
 
         private CharacterEqualEvaluator() {
-            super( Evaluator.CHAR_TYPE,
-                   Evaluator.EQUAL );
+            super( ValueType.CHAR_TYPE,
+                   Operator.EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -69,12 +88,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = 8010152240062213440L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new CharacterNotEqualEvaluator();
 
         private CharacterNotEqualEvaluator() {
-            super( Evaluator.CHAR_TYPE,
-                   Evaluator.NOT_EQUAL );
+            super( ValueType.CHAR_TYPE,
+                   Operator.NOT_EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -94,12 +113,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = 5236106171143422684L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new CharacterLessEvaluator();
 
         private CharacterLessEvaluator() {
-            super( Evaluator.CHAR_TYPE,
-                   Evaluator.LESS );
+            super( ValueType.CHAR_TYPE,
+                   Operator.LESS );
         }
 
         public boolean evaluate(final Object object1,
@@ -116,12 +135,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = 8064001658173531244L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new CharacterLessOrEqualEvaluator();
 
         private CharacterLessOrEqualEvaluator() {
-            super( Evaluator.CHAR_TYPE,
-                   Evaluator.LESS_OR_EQUAL );
+            super( ValueType.CHAR_TYPE,
+                   Operator.LESS_OR_EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -138,12 +157,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = 7622623046585316842L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new CharacterGreaterEvaluator();
 
         private CharacterGreaterEvaluator() {
-            super( Evaluator.CHAR_TYPE,
-                   Evaluator.GREATER );
+            super( ValueType.CHAR_TYPE,
+                   Operator.GREATER );
         }
 
         public boolean evaluate(final Object object1,
@@ -160,12 +179,12 @@
         /**
          * 
          */
-        private static final long      serialVersionUID = 8587935558617586015L;
+        private static final long      serialVersionUID = 320;
         private final static Evaluator INSTANCE         = new CharacterGreaterOrEqualEvaluator();
 
         private CharacterGreaterOrEqualEvaluator() {
-            super( Evaluator.CHAR_TYPE,
-                   Evaluator.GREATER_OR_EQUAL );
+            super( ValueType.CHAR_TYPE,
+                   Operator.GREATER_OR_EQUAL );
         }
 
         public boolean evaluate(final Object object1,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DateFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DateFactory.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DateFactory.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -21,6 +21,13 @@
 import java.util.Date;
 
 import org.drools.base.BaseEvaluator;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.ShortFactory.ShortEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortGreaterEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortGreaterOrEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortLessEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortLessOrEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortNotEqualEvaluator;
 import org.drools.spi.Evaluator;
 
 /**
@@ -35,40 +42,54 @@
  * 
  * @author Michael Neale
  */
-public class DateFactory {
+public class DateFactory
+    implements
+    EvaluatorFactory {
 
-    private static final String DEFAULT_FORMAT_MASK = "dd-MMM-yyyy";
-    private static final String DATE_FORMAT_MASK    = getDateFormatMask();
+    private static final String     DEFAULT_FORMAT_MASK = "dd-MMM-yyyy";
+    private static final String     DATE_FORMAT_MASK    = getDateFormatMask();
 
-    public static Evaluator getDateEvaluator(final int operator) {
-        switch ( operator ) {
-            case Evaluator.EQUAL :
-                return DateEqualEvaluator.INSTANCE;
-            case Evaluator.NOT_EQUAL :
-                return DateNotEqualEvaluator.INSTANCE;
-            case Evaluator.LESS :
-                return DateLessEvaluator.INSTANCE;
-            case Evaluator.LESS_OR_EQUAL :
-                return DateLessOrEqualEvaluator.INSTANCE;
-            case Evaluator.GREATER :
-                return DateGreaterEvaluator.INSTANCE;
-            case Evaluator.GREATER_OR_EQUAL :
-                return DateGreaterOrEqualEvaluator.INSTANCE;
-            default :
-                throw new RuntimeException( "Operator '" + operator + "' does not exist for DateEvaluator" );
+    private static EvaluatorFactory INSTANCE            = new DateFactory();
+
+    private DateFactory() {
+
+    }
+
+    public static EvaluatorFactory getInstance() {
+        if ( INSTANCE == null ) {
+            INSTANCE = new DateFactory();
         }
+        return INSTANCE;
     }
 
+    public Evaluator getEvaluator(final Operator operator) {
+        if ( operator == Operator.EQUAL ) {
+            return DateEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.NOT_EQUAL ) {
+            return DateNotEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.LESS ) {
+            return DateLessEvaluator.INSTANCE;
+        } else if ( operator == Operator.LESS_OR_EQUAL ) {
+            return DateLessOrEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.GREATER ) {
+            return DateGreaterEvaluator.INSTANCE;
+        } else if ( operator == Operator.GREATER_OR_EQUAL ) {
+            return DateGreaterOrEqualEvaluator.INSTANCE;
+        } else {
+            throw new RuntimeException( "Operator '" + operator + "' does not exist for DateEvaluator" );
+        }
+    }
+
     static class DateEqualEvaluator extends BaseEvaluator {
         /**
          * 
          */
-        private static final long     serialVersionUID = -7248999526793624416L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new DateEqualEvaluator();
 
         private DateEqualEvaluator() {
-            super( Evaluator.DATE_TYPE,
-                   Evaluator.EQUAL );
+            super( ValueType.DATE_TYPE,
+                   Operator.EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -97,12 +118,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = -999744404766802074L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new DateNotEqualEvaluator();
 
         private DateNotEqualEvaluator() {
-            super( Evaluator.DATE_TYPE,
-                   Evaluator.NOT_EQUAL );
+            super( ValueType.DATE_TYPE,
+                   Operator.NOT_EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -130,12 +151,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = -4362504881470806670L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new DateLessEvaluator();
 
         private DateLessEvaluator() {
-            super( Evaluator.DATE_TYPE,
-                   Evaluator.LESS );
+            super( ValueType.DATE_TYPE,
+                   Operator.LESS );
         }
 
         public boolean evaluate(final Object object1,
@@ -157,12 +178,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = -1545183091770593710L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new DateLessOrEqualEvaluator();
 
         private DateLessOrEqualEvaluator() {
-            super( Evaluator.DATE_TYPE,
-                   Evaluator.LESS_OR_EQUAL );
+            super( ValueType.DATE_TYPE,
+                   Operator.LESS_OR_EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -184,12 +205,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = 1450531664603794369L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new DateGreaterEvaluator();
 
         private DateGreaterEvaluator() {
-            super( Evaluator.DATE_TYPE,
-                   Evaluator.GREATER );
+            super( ValueType.DATE_TYPE,
+                   Operator.GREATER );
         }
 
         public boolean evaluate(final Object object1,
@@ -211,12 +232,12 @@
         /**
          * 
          */
-        private static final long      serialVersionUID = -6149840707848164332L;
+        private static final long      serialVersionUID = 320;
         private final static Evaluator INSTANCE         = new DateGreaterOrEqualEvaluator();
 
         private DateGreaterOrEqualEvaluator() {
-            super( Evaluator.DATE_TYPE,
-                   Evaluator.GREATER_OR_EQUAL );
+            super( ValueType.DATE_TYPE,
+                   Operator.GREATER_OR_EQUAL );
         }
 
         public boolean evaluate(final Object object1,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DoubleFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DoubleFactory.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/DoubleFactory.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -17,26 +17,38 @@
  */
 
 import org.drools.base.BaseEvaluator;
+import org.drools.base.ValueType;
 import org.drools.spi.Evaluator;
 
-public class DoubleFactory {
+public class DoubleFactory implements EvaluatorFactory {
+    private static EvaluatorFactory INSTANCE = new DoubleFactory();
+    
+    private DoubleFactory() {
+        
+    }
+    
+    public static EvaluatorFactory getInstance() {
+        if ( INSTANCE == null ) {
+            INSTANCE = new DoubleFactory();
+        }
+        return INSTANCE;
+    }
 
-    public static Evaluator getDoubleEvaluator(final int operator) {
-        switch ( operator ) {
-            case Evaluator.EQUAL :
-                return DoubleEqualEvaluator.INSTANCE;
-            case Evaluator.NOT_EQUAL :
-                return DoubleNotEqualEvaluator.INSTANCE;
-            case Evaluator.LESS :
-                return DoubleLessEvaluator.INSTANCE;
-            case Evaluator.LESS_OR_EQUAL :
-                return DoubleLessOrEqualEvaluator.INSTANCE;
-            case Evaluator.GREATER :
-                return DoubleGreaterEvaluator.INSTANCE;
-            case Evaluator.GREATER_OR_EQUAL :
-                return DoubleGreaterOrEqualEvaluator.INSTANCE;
-            default :
-                throw new RuntimeException( "Operator '" + operator + "' does not exist for DoubleEvaluator" );
+    public Evaluator getEvaluator(final Operator operator) {
+        if ( operator == Operator.EQUAL ) {
+            return DoubleEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.NOT_EQUAL ) {
+            return DoubleNotEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.LESS ) {
+            return DoubleLessEvaluator.INSTANCE;
+        } else if ( operator == Operator.LESS_OR_EQUAL ) {
+            return DoubleLessOrEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.GREATER ) {
+            return DoubleGreaterEvaluator.INSTANCE;
+        } else if ( operator == Operator.GREATER_OR_EQUAL ) {
+            return DoubleGreaterOrEqualEvaluator.INSTANCE;
+        }  else {
+            throw new RuntimeException( "Operator '" + operator + "' does not exist for DoubleEvaluator" );
         }
     }
 
@@ -44,12 +56,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = 8638265291388692160L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new DoubleEqualEvaluator();
 
         private DoubleEqualEvaluator() {
-            super( Evaluator.DOUBLE_TYPE,
-                   Evaluator.EQUAL );
+            super( ValueType.DOUBLE_TYPE,
+                   Operator.EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -69,12 +81,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = -1605810860861480665L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new DoubleNotEqualEvaluator();
 
         private DoubleNotEqualEvaluator() {
-            super( Evaluator.DOUBLE_TYPE,
-                   Evaluator.NOT_EQUAL );
+            super( ValueType.DOUBLE_TYPE,
+                   Operator.NOT_EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -94,12 +106,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = -6256590818217451743L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new DoubleLessEvaluator();
 
         private DoubleLessEvaluator() {
-            super( Evaluator.DOUBLE_TYPE,
-                   Evaluator.LESS );
+            super( ValueType.DOUBLE_TYPE,
+                   Operator.LESS );
         }
 
         public boolean evaluate(final Object object1,
@@ -116,12 +128,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = -3663317930533546094L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new DoubleLessOrEqualEvaluator();
 
         private DoubleLessOrEqualEvaluator() {
-            super( Evaluator.DOUBLE_TYPE,
-                   Evaluator.LESS_OR_EQUAL );
+            super( ValueType.DOUBLE_TYPE,
+                   Operator.LESS_OR_EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -138,12 +150,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = 1420842292058943594L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new DoubleGreaterEvaluator();
 
         private DoubleGreaterEvaluator() {
-            super( Evaluator.DOUBLE_TYPE,
-                   Evaluator.GREATER );
+            super( ValueType.DOUBLE_TYPE,
+                   Operator.GREATER );
         }
 
         public boolean evaluate(final Object object1,
@@ -160,12 +172,12 @@
         /**
          * 
          */
-        private static final long      serialVersionUID = 468558955316190757L;
+        private static final long      serialVersionUID = 320;
         private final static Evaluator INSTANCE         = new DoubleGreaterOrEqualEvaluator();
 
         private DoubleGreaterOrEqualEvaluator() {
-            super( Evaluator.DOUBLE_TYPE,
-                   Evaluator.GREATER_OR_EQUAL );
+            super( ValueType.DOUBLE_TYPE,
+                   Operator.GREATER_OR_EQUAL );
         }
 
         public boolean evaluate(final Object object1,

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/EvaluatorFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/EvaluatorFactory.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/EvaluatorFactory.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -0,0 +1,9 @@
+package org.drools.base.evaluators;
+
+import java.io.Serializable;
+
+import org.drools.spi.Evaluator;
+
+public interface EvaluatorFactory extends Serializable{
+    public Evaluator getEvaluator(Operator operator);
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/FactTemplateFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/FactTemplateFactory.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/FactTemplateFactory.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -0,0 +1,110 @@
+package org.drools.base.evaluators;
+
+/*
+ * Copyright 2005 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.drools.base.BaseEvaluator;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.DoubleFactory.DoubleEqualEvaluator;
+import org.drools.base.evaluators.DoubleFactory.DoubleGreaterEvaluator;
+import org.drools.base.evaluators.DoubleFactory.DoubleGreaterOrEqualEvaluator;
+import org.drools.base.evaluators.DoubleFactory.DoubleLessEvaluator;
+import org.drools.base.evaluators.DoubleFactory.DoubleLessOrEqualEvaluator;
+import org.drools.base.evaluators.DoubleFactory.DoubleNotEqualEvaluator;
+import org.drools.spi.Evaluator;
+
+/**
+ * This is the misc "bucket" evaluator factory for objects.
+ * It is fairly limited in operations, 
+ * and what operations are available are dependent on the exact type.
+ * 
+ * @author Michael Neale
+ */
+public class FactTemplateFactory implements EvaluatorFactory {
+    private static EvaluatorFactory INSTANCE = new FactTemplateFactory();
+    
+    private FactTemplateFactory() {
+        
+    }
+    
+    public static EvaluatorFactory getInstance() {
+        if ( INSTANCE == null ) {
+            INSTANCE = new FactTemplateFactory();
+        }
+        return INSTANCE;
+    }
+
+    public Evaluator getEvaluator(final Operator operator) {
+        if ( operator == Operator.EQUAL ) {
+            return FactTemplateEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.NOT_EQUAL ) {
+            return FactTemplateNotEqualEvaluator.INSTANCE;
+        }  else {
+            throw new RuntimeException( "Operator '" + operator + "' does not exist for FactTemplateEvaluator" );
+        }    
+    }
+
+    static class FactTemplateEqualEvaluator extends BaseEvaluator {
+        /**
+         * 
+         */
+        private static final long     serialVersionUID = 320;
+        public final static Evaluator INSTANCE         = new FactTemplateEqualEvaluator();
+
+        private FactTemplateEqualEvaluator() {
+            super( ValueType.FACTTEMPLATE_TYPE,
+                   Operator.EQUAL );
+        }
+
+        public boolean evaluate(final Object object1,
+                                final Object object2) {
+            if ( object1 == null ) {
+                return object2 == null;
+            }
+            return object1.equals( object2 );
+        }
+
+        public String toString() {
+            return "FactTemplate ==";
+        }
+    }
+
+    static class FactTemplateNotEqualEvaluator extends BaseEvaluator {
+        /**
+         * 
+         */
+        private static final long     serialVersionUID = 320;
+        public final static Evaluator INSTANCE         = new FactTemplateNotEqualEvaluator();
+
+        private FactTemplateNotEqualEvaluator() {
+            super( ValueType.FACTTEMPLATE_TYPE,
+                   Operator.NOT_EQUAL );
+        }
+
+        public boolean evaluate(final Object object1,
+                                final Object object2) {
+            if ( object1 == null ) {
+                return !(object2 == null);
+            }
+
+            return !object1.equals( object2 );
+        }
+
+        public String toString() {
+            return "FactTemplate !=";
+        }
+    }
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/FloatFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/FloatFactory.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/FloatFactory.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -17,39 +17,58 @@
  */
 
 import org.drools.base.BaseEvaluator;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.ShortFactory.ShortEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortGreaterEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortGreaterOrEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortLessEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortLessOrEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortNotEqualEvaluator;
 import org.drools.spi.Evaluator;
 
-public class FloatFactory {
-
-    public static Evaluator getFloatEvaluator(final int operator) {
-        switch ( operator ) {
-            case Evaluator.EQUAL :
-                return FloatEqualEvaluator.INSTANCE;
-            case Evaluator.NOT_EQUAL :
-                return FloatNotEqualEvaluator.INSTANCE;
-            case Evaluator.LESS :
-                return FloatLessEvaluator.INSTANCE;
-            case Evaluator.LESS_OR_EQUAL :
-                return FloatLessOrEqualEvaluator.INSTANCE;
-            case Evaluator.GREATER :
-                return FloatGreaterEvaluator.INSTANCE;
-            case Evaluator.GREATER_OR_EQUAL :
-                return FloatGreaterOrEqualEvaluator.INSTANCE;
-            default :
-                throw new RuntimeException( "Operator '" + operator + "' does not exist for FloatEvaluator" );
+public class FloatFactory implements EvaluatorFactory {
+    private static EvaluatorFactory INSTANCE = new FloatFactory();
+    
+    private FloatFactory() {
+        
+    }
+    
+    public static EvaluatorFactory getInstance() {
+        if ( INSTANCE == null ) {
+            INSTANCE = new FloatFactory();
         }
+        return INSTANCE;
     }
 
+    public Evaluator getEvaluator(final Operator operator) {
+        if ( operator == Operator.EQUAL ) {
+            return FloatEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.NOT_EQUAL ) {
+            return FloatNotEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.LESS ) {
+            return FloatLessEvaluator.INSTANCE;
+        } else if ( operator == Operator.LESS_OR_EQUAL ) {
+            return FloatLessOrEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.GREATER ) {
+            return FloatGreaterEvaluator.INSTANCE;
+        } else if ( operator == Operator.GREATER_OR_EQUAL ) {
+            return FloatGreaterOrEqualEvaluator.INSTANCE;
+        }  else {
+            throw new RuntimeException( "Operator '" + operator + "' does not exist for FloatEvaluator" );
+        }    
+    }
+
+
     static class FloatEqualEvaluator extends BaseEvaluator {
         /**
          * 
          */
-        private static final long     serialVersionUID = -3295563005669423883L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new FloatEqualEvaluator();
 
         private FloatEqualEvaluator() {
-            super( Evaluator.FLOAT_TYPE,
-                   Evaluator.EQUAL );
+            super( ValueType.FLOAT_TYPE,
+                   Operator.EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -69,12 +88,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = -4852271063945330337L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new FloatNotEqualEvaluator();
 
         private FloatNotEqualEvaluator() {
-            super( Evaluator.FLOAT_TYPE,
-                   Evaluator.NOT_EQUAL );
+            super( ValueType.FLOAT_TYPE,
+                   Operator.NOT_EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -94,12 +113,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = -4971007931169565583L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new FloatLessEvaluator();
 
         private FloatLessEvaluator() {
-            super( Evaluator.FLOAT_TYPE,
-                   Evaluator.LESS );
+            super( ValueType.FLOAT_TYPE,
+                   Operator.LESS );
         }
 
         public boolean evaluate(final Object object1,
@@ -116,12 +135,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = 8475866839302691518L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new FloatLessOrEqualEvaluator();
 
         private FloatLessOrEqualEvaluator() {
-            super( Evaluator.FLOAT_TYPE,
-                   Evaluator.LESS_OR_EQUAL );
+            super( ValueType.FLOAT_TYPE,
+                   Operator.LESS_OR_EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -138,12 +157,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = 7121251641514162807L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new FloatGreaterEvaluator();
 
         private FloatGreaterEvaluator() {
-            super( Evaluator.FLOAT_TYPE,
-                   Evaluator.GREATER );
+            super( ValueType.FLOAT_TYPE,
+                   Operator.GREATER );
         }
 
         public boolean evaluate(final Object object1,
@@ -160,12 +179,12 @@
         /**
          * 
          */
-        private static final long      serialVersionUID = -6885383763349349798L;
+        private static final long      serialVersionUID = 320;
         private final static Evaluator INSTANCE         = new FloatGreaterOrEqualEvaluator();
 
         private FloatGreaterOrEqualEvaluator() {
-            super( Evaluator.FLOAT_TYPE,
-                   Evaluator.GREATER_OR_EQUAL );
+            super( ValueType.FLOAT_TYPE,
+                   Operator.GREATER_OR_EQUAL );
         }
 
         public boolean evaluate(final Object object1,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/IntegerFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/IntegerFactory.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/IntegerFactory.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -17,38 +17,57 @@
  */
 
 import org.drools.base.BaseEvaluator;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.ShortFactory.ShortEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortGreaterEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortGreaterOrEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortLessEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortLessOrEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortNotEqualEvaluator;
 import org.drools.spi.Evaluator;
 
-public class IntegerFactory {
-    public static Evaluator getIntegerEvaluator(final int operator) {
-        switch ( operator ) {
-            case Evaluator.EQUAL :
-                return IntegerEqualEvaluator.INSTANCE;
-            case Evaluator.NOT_EQUAL :
-                return IntegerNotEqualEvaluator.INSTANCE;
-            case Evaluator.LESS :
-                return IntegerLessEvaluator.INSTANCE;
-            case Evaluator.LESS_OR_EQUAL :
-                return IntegerLessOrEqualEvaluator.INSTANCE;
-            case Evaluator.GREATER :
-                return IntegerGreaterEvaluator.INSTANCE;
-            case Evaluator.GREATER_OR_EQUAL :
-                return IntegerGreaterOrEqualEvaluator.INSTANCE;
-            default :
-                throw new RuntimeException( "Operator '" + operator + "' does not exist for IntegerEvaluator" );
+public class IntegerFactory implements EvaluatorFactory {
+    private static EvaluatorFactory INSTANCE = new IntegerFactory();
+    
+    private IntegerFactory() {
+        
+    }
+    
+    public static EvaluatorFactory getInstance() {
+        if ( INSTANCE == null ) {
+            INSTANCE = new IntegerFactory();
         }
+        return INSTANCE;
     }
 
+    public Evaluator getEvaluator(final Operator operator) {
+        if ( operator == Operator.EQUAL ) {
+            return IntegerEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.NOT_EQUAL ) {
+            return IntegerNotEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.LESS ) {
+            return IntegerLessEvaluator.INSTANCE;
+        } else if ( operator == Operator.LESS_OR_EQUAL ) {
+            return IntegerLessOrEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.GREATER ) {
+            return IntegerGreaterEvaluator.INSTANCE;
+        } else if ( operator == Operator.GREATER_OR_EQUAL ) {
+            return IntegerGreaterOrEqualEvaluator.INSTANCE;
+        }  else {
+            throw new RuntimeException( "Operator '" + operator + "' does not exist for IntegerEvaluator" );
+        }    
+    }
+
     static class IntegerEqualEvaluator extends BaseEvaluator {
         /**
          * 
          */
-        private static final long     serialVersionUID = 7723739052946963265L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new IntegerEqualEvaluator();
 
         private IntegerEqualEvaluator() {
-            super( Evaluator.INTEGER_TYPE,
-                   Evaluator.EQUAL );
+            super( ValueType.INTEGER_TYPE,
+                   Operator.EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -68,12 +87,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = -9113145485945747879L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new IntegerNotEqualEvaluator();
 
         private IntegerNotEqualEvaluator() {
-            super( Evaluator.INTEGER_TYPE,
-                   Evaluator.NOT_EQUAL );
+            super( ValueType.INTEGER_TYPE,
+                   Operator.NOT_EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -93,12 +112,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = 4190533166100633474L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new IntegerLessEvaluator();
 
         private IntegerLessEvaluator() {
-            super( Evaluator.INTEGER_TYPE,
-                   Evaluator.LESS );
+            super( ValueType.INTEGER_TYPE,
+                   Operator.LESS );
         }
 
         public boolean evaluate(final Object object1,
@@ -115,12 +134,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = -4044888400673214480L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new IntegerLessOrEqualEvaluator();
 
         private IntegerLessOrEqualEvaluator() {
-            super( Evaluator.INTEGER_TYPE,
-                   Evaluator.LESS_OR_EQUAL );
+            super( ValueType.INTEGER_TYPE,
+                   Operator.LESS_OR_EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -137,12 +156,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = -5347620757145017588L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new IntegerGreaterEvaluator();
 
         private IntegerGreaterEvaluator() {
-            super( Evaluator.INTEGER_TYPE,
-                   Evaluator.GREATER );
+            super( ValueType.INTEGER_TYPE,
+                   Operator.GREATER );
         }
 
         public boolean evaluate(final Object object1,
@@ -159,12 +178,12 @@
         /**
          * 
          */
-        private static final long      serialVersionUID = 7520187005496650583L;
+        private static final long      serialVersionUID = 320;
         private final static Evaluator INSTANCE         = new IntegerGreaterOrEqualEvaluator();
 
         private IntegerGreaterOrEqualEvaluator() {
-            super( Evaluator.INTEGER_TYPE,
-                   Evaluator.GREATER_OR_EQUAL );
+            super( ValueType.INTEGER_TYPE,
+                   Operator.GREATER_OR_EQUAL );
         }
 
         public boolean evaluate(final Object object1,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/LongFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/LongFactory.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/LongFactory.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -17,38 +17,58 @@
  */
 
 import org.drools.base.BaseEvaluator;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.ShortFactory.ShortEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortGreaterEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortGreaterOrEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortLessEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortLessOrEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortNotEqualEvaluator;
 import org.drools.spi.Evaluator;
 
-public class LongFactory {
-    public static Evaluator getLongEvaluator(final int operator) {
-        switch ( operator ) {
-            case Evaluator.EQUAL :
-                return LongEqualEvaluator.INSTANCE;
-            case Evaluator.NOT_EQUAL :
-                return LongNotEqualEvaluator.INSTANCE;
-            case Evaluator.LESS :
-                return LongLessEvaluator.INSTANCE;
-            case Evaluator.LESS_OR_EQUAL :
-                return LongLessOrEqualEvaluator.INSTANCE;
-            case Evaluator.GREATER :
-                return LongGreaterEvaluator.INSTANCE;
-            case Evaluator.GREATER_OR_EQUAL :
-                return LongGreaterOrEqualEvaluator.INSTANCE;
-            default :
-                throw new RuntimeException( "Operator '" + operator + "' does not exist for LongEvaluator" );
+public class LongFactory implements EvaluatorFactory {
+    private static EvaluatorFactory INSTANCE = new LongFactory();
+    
+    private LongFactory() {
+        
+    }
+    
+    public static EvaluatorFactory getInstance() {
+        if ( INSTANCE == null ) {
+            INSTANCE = new LongFactory();
         }
+        return INSTANCE;
     }
 
+    public Evaluator getEvaluator(final Operator operator) {
+        if ( operator == Operator.EQUAL ) {
+            return LongEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.NOT_EQUAL ) {
+            return LongNotEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.LESS ) {
+            return LongLessEvaluator.INSTANCE;
+        } else if ( operator == Operator.LESS_OR_EQUAL ) {
+            return LongLessOrEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.GREATER ) {
+            return LongGreaterEvaluator.INSTANCE;
+        } else if ( operator == Operator.GREATER_OR_EQUAL ) {
+            return LongGreaterOrEqualEvaluator.INSTANCE;
+        }  else {
+            throw new RuntimeException( "Operator '" + operator + "' does not exist for LongEvaluator" );
+        }    
+    }
+
+
     static class LongEqualEvaluator extends BaseEvaluator {
         /**
          * 
          */
-        private static final long     serialVersionUID = 952936509469163071L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new LongEqualEvaluator();
 
         private LongEqualEvaluator() {
-            super( Evaluator.LONG_TYPE,
-                   Evaluator.EQUAL );
+            super( ValueType.LONG_TYPE,
+                   Operator.EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -68,12 +88,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = -6007396753250538232L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new LongNotEqualEvaluator();
 
         private LongNotEqualEvaluator() {
-            super( Evaluator.LONG_TYPE,
-                   Evaluator.NOT_EQUAL );
+            super( ValueType.LONG_TYPE,
+                   Operator.NOT_EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -93,12 +113,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = -4364068749553989563L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new LongLessEvaluator();
 
         private LongLessEvaluator() {
-            super( Evaluator.LONG_TYPE,
-                   Evaluator.LESS );
+            super( ValueType.LONG_TYPE,
+                   Operator.LESS );
         }
 
         public boolean evaluate(final Object object1,
@@ -115,12 +135,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = -6047195686511631405L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new LongLessOrEqualEvaluator();
 
         private LongLessOrEqualEvaluator() {
-            super( Evaluator.LONG_TYPE,
-                   Evaluator.LESS_OR_EQUAL );
+            super( ValueType.LONG_TYPE,
+                   Operator.LESS_OR_EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -137,12 +157,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = -6931144987779205475L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new LongGreaterEvaluator();
 
         private LongGreaterEvaluator() {
-            super( Evaluator.LONG_TYPE,
-                   Evaluator.GREATER );
+            super( ValueType.LONG_TYPE,
+                   Operator.GREATER );
         }
 
         public boolean evaluate(final Object object1,
@@ -159,12 +179,12 @@
         /**
          * 
          */
-        private static final long      serialVersionUID = 4533604086739451238L;
+        private static final long      serialVersionUID = 320;
         private final static Evaluator INSTANCE         = new LongGreaterOrEqualEvaluator();
 
         private LongGreaterOrEqualEvaluator() {
-            super( Evaluator.LONG_TYPE,
-                   Evaluator.GREATER_OR_EQUAL );
+            super( ValueType.LONG_TYPE,
+                   Operator.GREATER_OR_EQUAL );
         }
 
         public boolean evaluate(final Object object1,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ObjectFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ObjectFactory.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ObjectFactory.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -19,6 +19,19 @@
 import java.util.Collection;
 
 import org.drools.base.BaseEvaluator;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.IntegerFactory.IntegerEqualEvaluator;
+import org.drools.base.evaluators.IntegerFactory.IntegerGreaterEvaluator;
+import org.drools.base.evaluators.IntegerFactory.IntegerGreaterOrEqualEvaluator;
+import org.drools.base.evaluators.IntegerFactory.IntegerLessEvaluator;
+import org.drools.base.evaluators.IntegerFactory.IntegerLessOrEqualEvaluator;
+import org.drools.base.evaluators.IntegerFactory.IntegerNotEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortGreaterEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortGreaterOrEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortLessEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortLessOrEqualEvaluator;
+import org.drools.base.evaluators.ShortFactory.ShortNotEqualEvaluator;
 import org.drools.spi.Evaluator;
 
 /**
@@ -32,41 +45,53 @@
  * 
  * @author Michael Neale
  */
-public class ObjectFactory {
-
-    public static Evaluator getObjectEvaluator(final int operator) {
-        switch ( operator ) {
-            case Evaluator.EQUAL :
-                return ObjectEqualEvaluator.INSTANCE;
-            case Evaluator.NOT_EQUAL :
-                return ObjectNotEqualEvaluator.INSTANCE;
-            case Evaluator.CONTAINS :
-                return ObjectContainsEvaluator.INSTANCE;
-            case Evaluator.LESS :
-                return ObjectLessEvaluator.INSTANCE;
-            case Evaluator.LESS_OR_EQUAL :
-                return ObjectLessOrEqualEvaluator.INSTANCE;
-            case Evaluator.GREATER :
-                return ObjectGreaterEvaluator.INSTANCE;
-            case Evaluator.GREATER_OR_EQUAL :
-                return ObjectGreaterOrEqualEvaluator.INSTANCE;
-            case Evaluator.EXCLUDES :
-                return ObjectExcludesEvaluator.INSTANCE;
-            default :
-                throw new RuntimeException( "Operator '" + operator + "' does not exist for ObjectEvaluator" );
+public class ObjectFactory implements EvaluatorFactory {
+    private static EvaluatorFactory INSTANCE = new ObjectFactory();
+    
+    private ObjectFactory() {
+        
+    }
+    
+    public static EvaluatorFactory getInstance() {
+        if ( INSTANCE == null ) {
+            INSTANCE = new ObjectFactory();
         }
+        return INSTANCE;
     }
+    
+    public Evaluator getEvaluator(final Operator operator) {
+        if ( operator == Operator.EQUAL ) {
+            return ObjectEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.NOT_EQUAL ) {
+            return ObjectNotEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.LESS ) {
+            return ObjectLessEvaluator.INSTANCE;
+        } else if ( operator == Operator.LESS_OR_EQUAL ) {
+            return ObjectLessOrEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.GREATER ) {
+            return ObjectGreaterEvaluator.INSTANCE;
+        } else if ( operator == Operator.GREATER_OR_EQUAL ) {
+            return ObjectGreaterOrEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.CONTAINS ) {
+            return ObjectContainsEvaluator.INSTANCE;
+        } else if ( operator == Operator.EXCLUDES ) {
+            return ObjectExcludesEvaluator.INSTANCE;
+        }  else {
+            throw new RuntimeException( "Operator '" + operator + "' does not exist for ShortEvaluator" );
+        }    
+    }
+    
 
     static class ObjectEqualEvaluator extends BaseEvaluator {
         /**
          * 
          */
-        private static final long     serialVersionUID = 4532849170161094887L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new ObjectEqualEvaluator();
 
         private ObjectEqualEvaluator() {
-            super( Evaluator.OBJECT_TYPE,
-                   Evaluator.EQUAL );
+            super( ValueType.OBJECT_TYPE,
+                   Operator.EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -86,12 +111,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = -6995475512317781516L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new ObjectNotEqualEvaluator();
 
         private ObjectNotEqualEvaluator() {
-            super( Evaluator.OBJECT_TYPE,
-                   Evaluator.NOT_EQUAL );
+            super( ValueType.OBJECT_TYPE,
+                   Operator.NOT_EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -111,12 +136,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = 5327278696364237380L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new ObjectLessEvaluator();
 
         private ObjectLessEvaluator() {
-            super( Evaluator.OBJECT_TYPE,
-                   Evaluator.LESS );
+            super( ValueType.OBJECT_TYPE,
+                   Operator.LESS );
         }
 
         public boolean evaluate(final Object object1,
@@ -135,12 +160,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = 3463248146201714137L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new ObjectLessOrEqualEvaluator();
 
         private ObjectLessOrEqualEvaluator() {
-            super( Evaluator.OBJECT_TYPE,
-                   Evaluator.LESS_OR_EQUAL );
+            super( ValueType.OBJECT_TYPE,
+                   Operator.LESS_OR_EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -158,12 +183,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = 7808425299326128881L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new ObjectGreaterEvaluator();
 
         private ObjectGreaterEvaluator() {
-            super( Evaluator.OBJECT_TYPE,
-                   Evaluator.GREATER );
+            super( ValueType.OBJECT_TYPE,
+                   Operator.GREATER );
         }
 
         public boolean evaluate(final Object object1,
@@ -181,12 +206,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = -3337081388987517878L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new ObjectGreaterOrEqualEvaluator();
 
         private ObjectGreaterOrEqualEvaluator() {
-            super( Evaluator.OBJECT_TYPE,
-                   Evaluator.GREATER_OR_EQUAL );
+            super( ValueType.OBJECT_TYPE,
+                   Operator.GREATER_OR_EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -204,12 +229,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = 6607233589136455455L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new ObjectContainsEvaluator();
 
         private ObjectContainsEvaluator() {
-            super( Evaluator.OBJECT_TYPE,
-                   Evaluator.CONTAINS );
+            super( ValueType.OBJECT_TYPE,
+                   Operator.CONTAINS );
         }
 
         public boolean evaluate(final Object object1,
@@ -230,12 +255,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = 4353038775000051165L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new ObjectExcludesEvaluator();
 
         private ObjectExcludesEvaluator() {
-            super( Evaluator.OBJECT_TYPE,
-                   Evaluator.EXCLUDES );
+            super( ValueType.OBJECT_TYPE,
+                   Operator.EXCLUDES );
         }
 
         public boolean evaluate(final Object object1,

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/Operator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/Operator.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/Operator.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -0,0 +1,70 @@
+package org.drools.base.evaluators;
+
+import java.io.Serializable;
+
+import org.drools.RuntimeDroolsException;
+
+public class Operator implements Serializable {
+    
+    private static final long        serialVersionUID = 320;
+    
+    public static final Operator EQUAL = new Operator( "==" );
+    public static final Operator NOT_EQUAL = new Operator( "!=" );
+    public static final Operator LESS = new Operator( "<" );
+    public static final Operator LESS_OR_EQUAL = new Operator( "<=" );
+    public static final Operator GREATER = new Operator( ">" );
+    public static final Operator GREATER_OR_EQUAL = new Operator( ">=" );
+    public static final Operator CONTAINS = new Operator( "contains" );
+    public static final Operator MATCHES = new Operator( "matches" );
+    public static final Operator EXCLUDES = new Operator( "excludes" );    
+        
+    private String  operator;
+        
+    private Operator(String operator) {
+        this.operator = operator;
+    }
+    
+    private Object readResolve () throws java.io.ObjectStreamException
+    {
+        return determineOperator( this.operator );
+    }    
+    
+    public static Operator determineOperator(String string) {
+        if ( string.equals( "==" ) ) {
+            return  Operator.EQUAL;
+        } else if ( string.equals( "!=" ) ) {
+            return  Operator.NOT_EQUAL;
+        } else if ( string.equals( "<" ) ) {
+            return  Operator.LESS;
+        } else if ( string.equals( "<=" ) ) {
+            return  Operator.LESS_OR_EQUAL;
+        } else if ( string.equals( ">" ) ) {
+                return  Operator.GREATER;          
+        } else if ( string.equals( ">=" ) ) {
+            return  Operator.GREATER_OR_EQUAL;
+        } else if ( string.equals( "contains" ) ) {
+            return  Operator.CONTAINS;
+        } else if ( string.equals( "matches" ) ) {
+            return  Operator.MATCHES;
+        } else if ( string.equals( "excludes" ) ) {
+            return  Operator.EXCLUDES;
+        } 
+        throw new RuntimeDroolsException( "unable to determine operator for String [" + string + "]" );        
+    }    
+
+    public String toString() {
+        return "Operator = '" + this.operator + "'";
+    }
+    
+    public int hashCode() {
+        return this.operator.hashCode();
+    }
+    
+    public boolean equals(Object object) {
+        if ( object == this ) {
+            return true;
+        }
+        
+        return false;
+    }
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ShortFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ShortFactory.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ShortFactory.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -17,45 +17,57 @@
  */
 
 import org.drools.base.BaseEvaluator;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.DoubleFactory.DoubleEqualEvaluator;
+import org.drools.base.evaluators.DoubleFactory.DoubleGreaterEvaluator;
+import org.drools.base.evaluators.DoubleFactory.DoubleGreaterOrEqualEvaluator;
+import org.drools.base.evaluators.DoubleFactory.DoubleLessEvaluator;
+import org.drools.base.evaluators.DoubleFactory.DoubleLessOrEqualEvaluator;
+import org.drools.base.evaluators.DoubleFactory.DoubleNotEqualEvaluator;
 import org.drools.spi.Evaluator;
 
-public class ShortFactory {
-    public static Evaluator getShortEvaluator(final int operator) {
-        switch ( operator ) {
-            case Evaluator.EQUAL :
-                return ShortEqualEvaluator.getInstance();
-            case Evaluator.NOT_EQUAL :
-                return ShortNotEqualEvaluator.getInstance();
-            case Evaluator.LESS :
-                return ShortLessEvaluator.getInstance();
-            case Evaluator.LESS_OR_EQUAL :
-                return ShortLessOrEqualEvaluator.getInstance();
-            case Evaluator.GREATER :
-                return ShortGreaterEvaluator.getInstance();
-            case Evaluator.GREATER_OR_EQUAL :
-                return ShortGreaterOrEqualEvaluator.getInstance();
-            default :
-                throw new RuntimeException( "Operator '" + operator + "' does not exist for ShortEvaluator" );
-        }
+public class ShortFactory implements EvaluatorFactory {
+    private static EvaluatorFactory INSTANCE = new ShortFactory();
+    
+    private ShortFactory() {
+        
     }
+    
+    public static EvaluatorFactory getInstance() {
+        if ( INSTANCE == null ) {
+            INSTANCE = new ShortFactory();
+        }
+        return INSTANCE;
+    }        
 
+    public Evaluator getEvaluator(final Operator operator) {
+        if ( operator == Operator.EQUAL ) {
+            return ShortEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.NOT_EQUAL ) {
+            return ShortNotEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.LESS ) {
+            return ShortLessEvaluator.INSTANCE;
+        } else if ( operator == Operator.LESS_OR_EQUAL ) {
+            return ShortLessOrEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.GREATER ) {
+            return ShortGreaterEvaluator.INSTANCE;
+        } else if ( operator == Operator.GREATER_OR_EQUAL ) {
+            return ShortGreaterOrEqualEvaluator.INSTANCE;
+        }  else {
+            throw new RuntimeException( "Operator '" + operator + "' does not exist for ShortEvaluator" );
+        }    
+    }
+    
     static class ShortEqualEvaluator extends BaseEvaluator {
         /**
          * 
          */
-        private static final long serialVersionUID = 8933390138182317179L;
-        private static Evaluator  INSTANCE;
+        private static final long serialVersionUID = 320;
+        private static Evaluator  INSTANCE = new ShortEqualEvaluator();
 
-        public static Evaluator getInstance() {
-            if ( ShortEqualEvaluator.INSTANCE == null ) {
-                ShortEqualEvaluator.INSTANCE = new ShortEqualEvaluator();
-            }
-            return ShortEqualEvaluator.INSTANCE;
-        }
-
         private ShortEqualEvaluator() {
-            super( Evaluator.SHORT_TYPE,
-                   Evaluator.EQUAL );
+            super( ValueType.SHORT_TYPE,
+                   Operator.EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -75,19 +87,12 @@
         /**
          * 
          */
-        private static final long serialVersionUID = -273350270376804828L;
-        private static Evaluator  INSTANCE;
-
-        public static Evaluator getInstance() {
-            if ( ShortNotEqualEvaluator.INSTANCE == null ) {
-                ShortNotEqualEvaluator.INSTANCE = new ShortNotEqualEvaluator();
-            }
-            return ShortNotEqualEvaluator.INSTANCE;
-        }
-
+        private static final long serialVersionUID = 320;
+        private static Evaluator  INSTANCE = new ShortNotEqualEvaluator();
+        
         private ShortNotEqualEvaluator() {
-            super( Evaluator.SHORT_TYPE,
-                   Evaluator.NOT_EQUAL );
+            super( ValueType.SHORT_TYPE,
+                   Operator.NOT_EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -107,19 +112,12 @@
         /**
          * 
          */
-        private static final long serialVersionUID = -1562867187426899162L;
-        private static Evaluator  INSTANCE;
+        private static final long serialVersionUID = 320;
+        private static Evaluator  INSTANCE = new ShortLessEvaluator();
 
-        public static Evaluator getInstance() {
-            if ( ShortLessEvaluator.INSTANCE == null ) {
-                ShortLessEvaluator.INSTANCE = new ShortLessEvaluator();
-            }
-            return ShortLessEvaluator.INSTANCE;
-        }
-
         private ShortLessEvaluator() {
-            super( Evaluator.SHORT_TYPE,
-                   Evaluator.LESS );
+            super( ValueType.SHORT_TYPE,
+                   Operator.LESS );
         }
 
         public boolean evaluate(final Object object1,
@@ -136,19 +134,12 @@
         /**
          * 
          */
-        private static final long serialVersionUID = -1541816846266081605L;
-        private static Evaluator  INSTANCE;
+        private static final long serialVersionUID = 320;
+        private static Evaluator  INSTANCE = new ShortLessOrEqualEvaluator();
 
-        public static Evaluator getInstance() {
-            if ( ShortLessOrEqualEvaluator.INSTANCE == null ) {
-                ShortLessOrEqualEvaluator.INSTANCE = new ShortLessOrEqualEvaluator();
-            }
-            return ShortLessOrEqualEvaluator.INSTANCE;
-        }
-
         private ShortLessOrEqualEvaluator() {
-            super( Evaluator.SHORT_TYPE,
-                   Evaluator.LESS_OR_EQUAL );
+            super( ValueType.SHORT_TYPE,
+                   Operator.LESS_OR_EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -165,19 +156,12 @@
         /**
          * 
          */
-        private static final long serialVersionUID = -3260955087091852509L;
-        private static Evaluator  INSTANCE;
+        private static final long serialVersionUID = 320;
+        private static Evaluator  INSTANCE = new ShortGreaterEvaluator();
 
-        public static Evaluator getInstance() {
-            if ( ShortGreaterEvaluator.INSTANCE == null ) {
-                ShortGreaterEvaluator.INSTANCE = new ShortGreaterEvaluator();
-            }
-            return ShortGreaterEvaluator.INSTANCE;
-        }
-
         private ShortGreaterEvaluator() {
-            super( Evaluator.SHORT_TYPE,
-                   Evaluator.GREATER );
+            super( ValueType.SHORT_TYPE,
+                   Operator.GREATER );
         }
 
         public boolean evaluate(final Object object1,
@@ -194,19 +178,12 @@
         /**
          * 
          */
-        private static final long serialVersionUID = 1254418853497580320L;
-        private static Evaluator  INSTANCE;
+        private static final long serialVersionUID = 320;
+        private static Evaluator  INSTANCE = new ShortGreaterOrEqualEvaluator();
 
-        public static Evaluator getInstance() {
-            if ( ShortGreaterOrEqualEvaluator.INSTANCE == null ) {
-                ShortGreaterOrEqualEvaluator.INSTANCE = new ShortGreaterOrEqualEvaluator();
-            }
-            return ShortGreaterOrEqualEvaluator.INSTANCE;
-        }
-
         private ShortGreaterOrEqualEvaluator() {
-            super( Evaluator.SHORT_TYPE,
-                   Evaluator.GREATER_OR_EQUAL );
+            super( ValueType.SHORT_TYPE,
+                   Operator.GREATER_OR_EQUAL );
         }
 
         public boolean evaluate(final Object object1,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/StringFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/StringFactory.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/StringFactory.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -17,6 +17,13 @@
  */
 
 import org.drools.base.BaseEvaluator;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.DoubleFactory.DoubleEqualEvaluator;
+import org.drools.base.evaluators.DoubleFactory.DoubleGreaterEvaluator;
+import org.drools.base.evaluators.DoubleFactory.DoubleGreaterOrEqualEvaluator;
+import org.drools.base.evaluators.DoubleFactory.DoubleLessEvaluator;
+import org.drools.base.evaluators.DoubleFactory.DoubleLessOrEqualEvaluator;
+import org.drools.base.evaluators.DoubleFactory.DoubleNotEqualEvaluator;
 import org.drools.spi.Evaluator;
 
 /**
@@ -26,31 +33,42 @@
  * 
  * @author Michael Neale
  */
-public class StringFactory {
-
-    public static Evaluator getStringEvaluator(final int operator) {
-        switch ( operator ) {
-            case Evaluator.EQUAL :
-                return StringEqualEvaluator.INSTANCE;
-            case Evaluator.NOT_EQUAL :
-                return StringNotEqualEvaluator.INSTANCE;
-            case Evaluator.MATCHES :
-                return StringMatchesEvaluator.INSTANCE;
-            default :
-                throw new RuntimeException( "Operator '" + operator + "' does not exist for StringEvaluator" );
+public class StringFactory implements EvaluatorFactory {
+    private static EvaluatorFactory INSTANCE = new StringFactory();
+    
+    private StringFactory() {
+        
+    }
+    
+    public static EvaluatorFactory getInstance() {
+        if ( INSTANCE == null ) {
+            INSTANCE = new StringFactory();
         }
+        return INSTANCE;
     }
 
+    public Evaluator getEvaluator(final Operator operator) {
+        if ( operator == Operator.EQUAL ) {
+            return StringEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.NOT_EQUAL ) {
+            return StringNotEqualEvaluator.INSTANCE;
+        } else if ( operator == Operator.MATCHES ) {
+            return StringMatchesEvaluator.INSTANCE;
+        }  else {
+            throw new RuntimeException( "Operator '" + operator + "' does not exist for StringEvaluator" );
+        }    
+    }
+
     static class StringEqualEvaluator extends BaseEvaluator {
         /**
          * 
          */
-        private static final long     serialVersionUID = 5282693491345148054L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new StringEqualEvaluator();
 
         private StringEqualEvaluator() {
-            super( Evaluator.STRING_TYPE,
-                   Evaluator.EQUAL );
+            super( ValueType.STRING_TYPE,
+                   Operator.EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -70,12 +88,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = -3385245390840913608L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new StringNotEqualEvaluator();
 
         private StringNotEqualEvaluator() {
-            super( Evaluator.STRING_TYPE,
-                   Evaluator.NOT_EQUAL );
+            super( ValueType.STRING_TYPE,
+                   Operator.NOT_EQUAL );
         }
 
         public boolean evaluate(final Object object1,
@@ -96,12 +114,12 @@
         /**
          * 
          */
-        private static final long     serialVersionUID = 5934192092501066510L;
+        private static final long     serialVersionUID = 320;
         public final static Evaluator INSTANCE         = new StringMatchesEvaluator();
 
         private StringMatchesEvaluator() {
-            super( Evaluator.STRING_TYPE,
-                   Evaluator.MATCHES );
+            super( ValueType.STRING_TYPE,
+                   Operator.MATCHES );
         }
 
         public boolean evaluate(final Object object1,

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/Fact.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/Fact.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/Fact.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2002-2005 Peter Lin & RuleML.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://ruleml-dev.sourceforge.net/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ */
+package org.drools.facttemplates;
+
+
+/**
+ * @author Peter Lin
+ * 
+ * Base interface for Facts
+ */
+public interface Fact {
+
+    /**
+     * Return the value at the given field  index
+     * @param id
+     * @return
+     */
+    Object getFieldValue(int index);
+
+    /**
+     * Return the unique ID for the fact
+     * @return
+     */
+    long getFactId();
+
+    /**
+     * Return the Deftemplate for the fact
+     * @return
+     */
+    FactTemplate getFactTemplate();
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactImpl.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactImpl.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -0,0 +1,140 @@
+/*
+ * Copyright 2002-2006 Peter Lin & RuleML.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://ruleml-dev.sourceforge.net/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ */
+package org.drools.facttemplates;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+
+//import woolfel.engine.rule.Rule;
+
+/**
+ * @author Peter Lin
+ * 
+ * Deffact is a concrete implementation of Fact interface. It is
+ * equivalent to deffact in CLIPS.
+ */
+public class FactImpl implements Fact, Serializable {
+
+    private static int hashCode(Object[] array) {
+        final int PRIME = 31;
+        if ( array == null ) return 0;
+        int result = 1;
+        for ( int index = 0; index < array.length; index++ ) {
+            result = PRIME * result + (array[index] == null ? 0 : array[index].hashCode());
+        }
+        return result;
+    }
+
+    private FactTemplate factTemplate = null;
+    private Object[] values = null;
+    private int hashCode;
+    
+    /**
+     * the Fact id must be unique, since we use it for the indexes
+     */
+    private long id;
+    
+    /**
+     * this is the default constructor
+     * @param instance
+     * @param values
+     */
+    public FactImpl(FactTemplate template, Object[] values, long id){
+        this.factTemplate = template;
+        this.values= values;
+        this.id = id;
+    }
+
+    public FactImpl(FactTemplate template, long id){
+        this.factTemplate = template;
+        this.values= new Object[ template.getNumberOfFields() ];
+        this.id = id;
+    }    
+    
+    /**
+     * Method returns the value of the given slot at the
+     * id.
+     * @param id
+     * @return
+     */
+    public Object getFieldValue(int index){
+        return this.values[ index ];
+    }
+    
+     
+
+    /**
+     * Return the long factId
+     */
+    public long getFactId(){
+        return this.id;
+    }
+
+    /**
+     * this is used to reset the id, in the event an user tries to
+     * assert the same fact again, we reset the id to the existing one.
+     * @param fact
+     */
+    protected void resetId(Fact fact) {
+    	this.id = fact.getFactId();
+    }
+        
+    /**
+     * Return the deftemplate for the fact
+     */
+    public FactTemplate getFactTemplate(){
+        return this.factTemplate;
+    }       
+    
+    public int hashCode() {
+        if ( hashCode == 0 )  {
+            final int PRIME = 31;
+            int result = 1;
+            result = PRIME * result + this.factTemplate.hashCode();
+            result = PRIME * result + FactImpl.hashCode( this.values );
+            result = PRIME * result + (int) (this.id ^ (this.id >>> 32));
+            hashCode = result;
+            
+        }
+        return this.hashCode;
+    }
+
+    public boolean equals(Object object) {
+        if ( this == object ) {
+            return true;
+        }
+        
+        if ( object == null || FactImpl.class != object.getClass() ) {
+            return false;
+        }
+        
+        final FactImpl other = ( FactImpl ) object;
+
+        if ( !this.factTemplate.equals( other.factTemplate ) ) {
+            return false;
+        }
+        
+        if ( !Arrays.equals( this.values,
+                             other.values ) ) {
+            return false;
+        }
+        
+        return true;
+    }    
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplate.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplate.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplate.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2002-2005 Peter Lin & RuleML.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://ruleml-dev.sourceforge.net/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ */
+package org.drools.facttemplates;
+
+import java.io.Serializable;
+
+
+/**
+ * @author Peter Lin
+ *
+ * Template defines the methods to access an object, which is the
+ * equivalent of un-ordered facts. It defines all the necessary
+ * methods for Deftemplate.
+ */
+public interface FactTemplate
+    extends
+    Serializable {
+    /**
+     * The name of the template may be the fully qualified
+     * class name, or an alias.
+     * @return
+     */
+    String getName();
+
+    /**
+     * templates may have 1 or more slots. A slot is a named
+     * column with a specific type of value.
+     * @return
+     */
+    int getNumberOfFields();
+
+    /**
+     * Return an array of all the slots.
+     * @return
+     */
+    FieldTemplate[] getAllFieldTemplates();
+
+    /**
+     * Return the slot with the String name
+     * @return
+     */
+    FieldTemplate getFieldTemplate(String name);
+
+    /**
+     * Get the Slot at the given column id
+     * @param index
+     * @return
+     */
+    FieldTemplate getFieldTemplate(int index);
+
+    /**
+     * Get the column index with the given name
+     * @param name
+     * @return
+     */
+    int getFieldTemplateIndex(String name);
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateImpl.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateImpl.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -0,0 +1,141 @@
+/*
+ * Copyright 2002-2005 Peter Lin & RuleML.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://ruleml-dev.sourceforge.net/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ */
+package org.drools.facttemplates;
+
+import java.util.Iterator;
+import java.util.List;
+
+
+/**
+ * @author Peter Lin
+ * Deftemplate is equivalent to CLIPS deftemplate<br/>
+ * 
+ * Some general design notes about the current implementation. In the
+ * case where a class is declared to create the deftemplate, the order
+ * of the slots are based on java Introspection. In the case where an
+ * user declares the deftemplate from console or directly, the order
+ * is the same as the string equivalent.
+ * The current implementation does not address redeclaring a deftemplate
+ * for a couple of reasons. The primary one is how does it affect the
+ * existing RETE nodes. One possible approach is to always add new slots
+ * to the end of the deftemplate and ignore the explicit order. Another
+ * is to recompute the deftemplate, binds and all nodes. The second
+ * approach is very costly and would make redeclaring a deftemplate
+ * undesirable.
+ */
+public class FactTemplateImpl implements FactTemplate {
+    private FieldTemplate[] fields;
+    private String templateName = null;
+
+    public FactTemplateImpl(String name, FieldTemplate[] fields){
+        this.templateName = name;
+        this.fields = fields;
+    }
+           
+    /**
+     * the template name is an alias for an object
+     * @param name
+     */
+    public String getName(){
+        return this.templateName;
+    }
+
+    /**
+     * Return the number of slots in the deftemplate
+     * @return
+     */
+    public int getNumberOfFields(){
+        return this.fields.length;
+    }
+    
+    /**
+     * Return all the slots
+     * @return
+     */
+    public FieldTemplate[] getAllFieldTemplates(){
+        return this.fields;
+    }
+    
+    /**
+     * A convienance method for finding the slot matching
+     * the String name.
+     * @param name
+     * @return
+     */
+    public FieldTemplate getFieldTemplate(String name) {
+        for (int idx=0; idx < this.fields.length; idx++) {
+            if (this.fields[idx].getName().equals(name)) {
+                return this.fields[idx];
+            }
+        }
+        return null;
+    }
+    
+    /**
+     * get the Slot at the given column id
+     * @param id
+     * @return
+     */
+    public FieldTemplate getFieldTemplate(int index) {
+        return this.fields[index];
+    }
+    
+    /**
+     * Look up the column index of the slot
+     * @param name
+     * @return
+     */
+    public int getFieldTemplateIndex(String name) {
+        for (int index=0; index < this.fields.length; index++) {
+            if (this.fields[index].getName().equals(name)) {
+                return index;
+            }
+        }
+        return -1;
+    }
+    
+    /**
+     * Method takes a list of Slots and creates a deffact from it.
+     * @param data
+     * @param id
+     * @return
+     */
+    public Fact createFact(long id) {
+        return new FactImpl(this, id);
+    }
+    
+    /**
+     * Method will return a string format with the int type code
+     * for the slot type
+     */
+    public String toString(){
+        StringBuffer buf = new StringBuffer();
+        buf.append("(" + this.templateName + " ");
+//        for (int idx=0; idx < this.slots.length; idx++){
+//            buf.append("(" + this.slots[idx].getName() + 
+//                    " (type " + ConversionUtils.getTypeName(
+//                            this.slots[idx].getValueType()) +
+//                    ") ) ");
+//        }
+//        if (this.clazz != null){
+//            buf.append("[" + this.clazz.getClassObject().getName() + "] ");
+//        }
+        buf.append(")");
+        return buf.toString();
+    }
+    
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateObjectType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateObjectType.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateObjectType.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -0,0 +1,129 @@
+package org.drools.facttemplates;
+
+
+/*
+ * Copyright 2005 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.drools.RuntimeDroolsException;
+import org.drools.base.ValueType;
+import org.drools.facttemplates.FieldTemplate;
+import org.drools.spi.Evaluator;
+import org.drools.spi.ObjectType;
+
+/**
+ * Java class semantics <code>ObjectType</code>.
+ * 
+ * @author <a href="mailto:bob at werken.com">bob at werken.com </a>
+ * 
+ * @version $Id: ClassObjectType.java,v 1.5 2005/02/04 02:13:36 mproctor Exp $
+ */
+public class FactTemplateObjectType
+    implements
+    ObjectType {
+    // ------------------------------------------------------------
+    // Instance members
+    // ------------------------------------------------------------
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 320;
+
+    /** FieldTemplate. */
+    protected FactTemplate  factTemplate;
+
+    // ------------------------------------------------------------
+    // Constructors
+    // ------------------------------------------------------------
+
+    /**
+     * Construct.
+     * 
+     * @param objectTypeClass
+     *            Java object class.
+     */
+    public FactTemplateObjectType(final FactTemplate factTemplate) {
+        this.factTemplate = factTemplate;
+    }
+
+    // ------------------------------------------------------------
+    // Instance methods
+    // ------------------------------------------------------------
+
+    /**
+     * Return the Fact Template.
+     * 
+     * @return The Fact Template
+     */
+    public FactTemplate getFactTemplate() {
+        return this.factTemplate;        
+    }
+
+    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+    // org.drools.spi.ObjectType
+    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+    /**
+     * Determine if the passed <code>Object</code> belongs to the object type
+     * defined by this <code>objectType</code> instance.
+     * 
+     * @param object
+     *            The <code>Object</code> to test.
+     * 
+     * @return <code>true</code> if the <code>Object</code> matches this
+     *         object type, else <code>false</code>.
+     */
+    public boolean matches(final Object object) {
+        return this.factTemplate == object;
+    }
+
+
+    public ValueType getValueType() {
+        return ValueType.FACTTEMPLATE_TYPE;
+    }
+
+    public String toString() {
+        return "[ClassObjectType class=" + this.factTemplate.getName() + "]";
+    }
+
+    /**
+     * Determine if another object is equal to this.
+     * 
+     * @param object
+     *            The object to test.
+     * 
+     * @return <code>true</code> if <code>object</code> is equal to this,
+     *         otherwise <code>false</code>.
+     */
+    public boolean equals(final Object object) {
+        if ( this == object ) {
+            return true;
+        }
+
+        if ( object == null || object.getClass() != FactTemplateObjectType.class ) {
+            return false;
+        }
+
+        FactTemplateObjectType other = ( FactTemplateObjectType ) object;
+        
+        return this.factTemplate == other.factTemplate;
+    }
+
+    public int hashCode() {
+        return this.factTemplate.hashCode();
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplatorFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplatorFieldExtractor.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplatorFieldExtractor.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -0,0 +1,36 @@
+package org.drools.facttemplates;
+
+import org.drools.base.ValueType;
+import org.drools.spi.FieldExtractor;
+
+public class FactTemplatorFieldExtractor
+    implements
+    FieldExtractor {
+
+    private static final long        serialVersionUID = 320;
+    private FactTemplate             factTemplate;
+    private int                      fieldIndex;
+
+    public FactTemplatorFieldExtractor(final FactTemplate factTemplate,
+                                       final int fieldIndex) {
+        this.factTemplate = factTemplate;
+        this.fieldIndex = fieldIndex;
+    }
+    
+    
+    public ValueType getValueType() {
+        return this.factTemplate.getFieldTemplate( fieldIndex ).getValueType();
+    }
+
+    public Object getValue(Object object) {
+        return ((Fact) object).getFieldValue( this.fieldIndex );
+    }
+    
+    public int getIndex() {
+        return this.fieldIndex;
+    }
+    
+    public Class getExtractToClass() {
+        return this.factTemplate.getFieldTemplate( fieldIndex ).getValueType().getClass();
+    }
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FieldTemplate.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FieldTemplate.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FieldTemplate.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -0,0 +1,13 @@
+package org.drools.facttemplates;
+
+import org.drools.base.ValueType;
+
+public interface FieldTemplate {
+
+    public abstract int getIndex();
+
+    public abstract String getName();
+
+    public abstract ValueType getValueType();
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FieldTemplateImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FieldTemplateImpl.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FieldTemplateImpl.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -0,0 +1,48 @@
+package org.drools.facttemplates;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.base.ValueType;
+import org.drools.spi.Evaluator;
+
+public class FieldTemplateImpl
+    implements
+    FieldTemplate {
+    
+    private static final long        serialVersionUID = 320;
+    
+    private final String name;
+    private final int    index;
+    private final ValueType    valueType;
+
+    public FieldTemplateImpl(String name,
+                             int index,
+                             Class clazz) {
+        super();
+        this.name = name;
+        this.index = index;
+        this.valueType = ValueType.determineValueType( clazz );
+    }    
+
+
+    /* (non-Javadoc)
+     * @see org.drools.facttemplates.FieldTemplate#getIndex()
+     */
+    public int getIndex() {
+        return this.index;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.facttemplates.FieldTemplate#getName()
+     */
+    public String getName() {
+        return this.name;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.facttemplates.FieldTemplate#getValueType()
+     */
+    public ValueType getValueType() {
+        return this.valueType;
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AlphaNodeSwitch.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AlphaNodeSwitch.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AlphaNodeSwitch.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -73,6 +73,14 @@
         return this.alphaSwitch.values();
     }
 
+    public int hashCode() {
+        final int PRIME = 31;
+        int result = 1;
+        result = PRIME * result +  this.constraint.getEvaluator().getOperator().hashCode();
+        result = PRIME * result + this.constraint.getFieldExtractor().getIndex();
+        return result;
+    }
+
     public boolean equals(final Object otherConstraint) {
         if ( this == otherConstraint ) {
             return true;
@@ -87,9 +95,5 @@
         return false;
     }
 
-    public int hashCode() {
-        return this.constraint.getEvaluator().getOperator() * 17 + this.constraint.getFieldExtractor().getIndex();
 
-    }
-
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/HashedObjectSinkList.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/HashedObjectSinkList.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/HashedObjectSinkList.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -26,6 +26,7 @@
 import java.util.NoSuchElementException;
 
 import org.drools.WorkingMemory;
+import org.drools.base.evaluators.Operator;
 import org.drools.common.DefaultFactHandle;
 import org.drools.rule.LiteralConstraint;
 import org.drools.spi.Evaluator;
@@ -69,7 +70,7 @@
      * @inheritDoc
      */
     public boolean add(final ObjectSink objectSink) {
-        if ( (objectSink instanceof AlphaNode) && (((AlphaNode) objectSink).getConstraint() instanceof LiteralConstraint) && (((LiteralConstraint) ((AlphaNode) objectSink).getConstraint()).getEvaluator().getOperator() == Evaluator.EQUAL) ) {
+        if ( (objectSink instanceof AlphaNode) && (((AlphaNode) objectSink).getConstraint() instanceof LiteralConstraint) && (((LiteralConstraint) ((AlphaNode) objectSink).getConstraint()).getEvaluator().getOperator() == Operator.EQUAL) ) {
 
             final FieldConstraint constraint = ((AlphaNode) objectSink).getConstraint();
             final AlphaNodeSwitch wrapper = new AlphaNodeSwitch( (LiteralConstraint) constraint );
@@ -93,7 +94,7 @@
      * @inheritDoc
      */
     public boolean remove(final ObjectSink objectSink) {
-        if ( (objectSink instanceof AlphaNode) && (((AlphaNode) objectSink).getConstraint() instanceof LiteralConstraint) && (((LiteralConstraint) ((AlphaNode) objectSink).getConstraint()).getEvaluator().getOperator() == Evaluator.EQUAL) ) {
+        if ( (objectSink instanceof AlphaNode) && (((AlphaNode) objectSink).getConstraint() instanceof LiteralConstraint) && (((LiteralConstraint) ((AlphaNode) objectSink).getConstraint()).getEvaluator().getOperator() == Operator.EQUAL) ) {
 
             final FieldConstraint constraint = ((AlphaNode) objectSink).getConstraint();
             AlphaNodeSwitch wrapper = new AlphaNodeSwitch( (LiteralConstraint) constraint );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -29,8 +29,9 @@
 import org.drools.base.ClassFieldExtractor;
 import org.drools.base.ClassObjectType;
 import org.drools.base.DroolsQuery;
-import org.drools.base.EvaluatorFactory;
 import org.drools.base.FieldFactory;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
 import org.drools.common.BetaNodeBinder;
 import org.drools.common.InstanceEqualsConstraint;
 import org.drools.common.InstanceNotEqualsConstraint;
@@ -345,10 +346,10 @@
                                                                        "name" );
 
         final FieldValue field = FieldFactory.getFieldValue( queryName,
-                                                             Evaluator.STRING_TYPE );
+                                                             ValueType.STRING_TYPE );
 
-        final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.STRING_TYPE,
-                                                                   Evaluator.EQUAL );
+        final Evaluator evaluator = ValueType.STRING_TYPE.getEvaluator( Operator.EQUAL );
+
         final LiteralConstraint constraint = new LiteralConstraint( extractor,
                                                                     evaluator,
                                                                     field );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaMemoryFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaMemoryFactory.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BetaMemoryFactory.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -19,6 +19,8 @@
 import javax.naming.OperationNotSupportedException;
 
 import org.drools.RuleBaseConfiguration;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
 import org.drools.common.BetaNodeBinder;
 import org.drools.rule.VariableConstraint;
 import org.drools.spi.Evaluator;
@@ -56,29 +58,24 @@
                 if ( constraints[i] instanceof VariableConstraint ) {
                     final VariableConstraint bvc = (VariableConstraint) constraints[i];
                     BetaLeftMemory innerMemory = null;
-                    switch ( bvc.getEvaluator().getType() ) {
-                        case Evaluator.BOOLEAN_TYPE :
-                            innerMemory = new BooleanConstrainedLeftMemory( bvc.getFieldExtractor(),
-                                                                            bvc.getRequiredDeclarations()[0],
-                                                                            bvc.getEvaluator() );
-                            break;
-                        case Evaluator.OBJECT_TYPE :
-                        case Evaluator.SHORT_TYPE :
-                        case Evaluator.INTEGER_TYPE :
-                        case Evaluator.DOUBLE_TYPE :
-                        case Evaluator.FLOAT_TYPE :
-                        case Evaluator.BYTE_TYPE :
-                            if ( bvc.getEvaluator().getOperator() == Evaluator.EQUAL ) {
-                                innerMemory = new ObjectEqualConstrLeftMemory( bvc.getFieldExtractor(),
-                                                                               bvc.getRequiredDeclarations()[0],
-                                                                               bvc.getEvaluator() );
-                            } else if ( bvc.getEvaluator().getOperator() == Evaluator.NOT_EQUAL ) {
-                                innerMemory = new ObjectNotEqualConstrLeftMemory( bvc.getFieldExtractor(),
-                                                                                  bvc.getRequiredDeclarations()[0],
-                                                                                  bvc.getEvaluator() );
-                            }
-                            break;
+                    ValueType valueType = bvc.getEvaluator().getValueType();
+                    if ( valueType == ValueType.BOOLEAN_TYPE ) {
+                        innerMemory = new BooleanConstrainedLeftMemory( bvc.getFieldExtractor(),
+                                                                        bvc.getRequiredDeclarations()[0],
+                                                                        bvc.getEvaluator() );
+                    } else {
+                        //@todo : edson is this ok?
+                        if ( bvc.getEvaluator().getOperator() == Operator.EQUAL ) {
+                            innerMemory = new ObjectEqualConstrLeftMemory( bvc.getFieldExtractor(),
+                                                                           bvc.getRequiredDeclarations()[0],
+                                                                           bvc.getEvaluator() );
+                        } else if ( bvc.getEvaluator().getOperator() == Operator.NOT_EQUAL ) {
+                            innerMemory = new ObjectNotEqualConstrLeftMemory( bvc.getFieldExtractor(),
+                                                                              bvc.getRequiredDeclarations()[0],
+                                                                              bvc.getEvaluator() );
+                        }
                     }
+
                     if ( innerMemory != null ) {
                         if ( innerMostMemory != null ) {
                             try {
@@ -121,29 +118,26 @@
                 if ( constraints[i] instanceof VariableConstraint ) {
                     final VariableConstraint bvc = (VariableConstraint) constraints[i];
                     BetaRightMemory innerMemory = null;
-                    switch ( bvc.getEvaluator().getType() ) {
-                        case Evaluator.BOOLEAN_TYPE :
+                    ValueType valueType = bvc.getEvaluator().getValueType();
+                    if ( valueType == ValueType.BOOLEAN_TYPE ) {
+                        if ( valueType == ValueType.BOOLEAN_TYPE ) {
                             innerMemory = new BooleanConstrainedRightMemory( bvc.getFieldExtractor(),
                                                                              bvc.getRequiredDeclarations()[0],
                                                                              bvc.getEvaluator() );
-                            break;
-                        case Evaluator.OBJECT_TYPE :
-                        case Evaluator.SHORT_TYPE :
-                        case Evaluator.INTEGER_TYPE :
-                        case Evaluator.DOUBLE_TYPE :
-                        case Evaluator.FLOAT_TYPE :
-                        case Evaluator.BYTE_TYPE :
-                            if ( bvc.getEvaluator().getOperator() == Evaluator.EQUAL ) {
-                                innerMemory = new ObjectEqualConstrRightMemory( bvc.getFieldExtractor(),
-                                                                                bvc.getRequiredDeclarations()[0],
-                                                                                bvc.getEvaluator() );
-                            } else if ( bvc.getEvaluator().getOperator() == Evaluator.NOT_EQUAL ) {
-                                innerMemory = new ObjectNotEqualConstrRightMemory( bvc.getFieldExtractor(),
-                                                                                   bvc.getRequiredDeclarations()[0],
-                                                                                   bvc.getEvaluator() );
-                            }
-                            break;
+                        }
+                    } else {
+                        //@todo : edson is this ok?                        
+                        if ( bvc.getEvaluator().getOperator() == Operator.EQUAL ) {
+                            innerMemory = new ObjectEqualConstrRightMemory( bvc.getFieldExtractor(),
+                                                                            bvc.getRequiredDeclarations()[0],
+                                                                            bvc.getEvaluator() );
+                        } else if ( bvc.getEvaluator().getOperator() == Operator.NOT_EQUAL ) {
+                            innerMemory = new ObjectNotEqualConstrRightMemory( bvc.getFieldExtractor(),
+                                                                               bvc.getRequiredDeclarations()[0],
+                                                                               bvc.getEvaluator() );
+                        }
                     }
+
                     if ( innerMemory != null ) {
                         if ( innerMostMemory != null ) {
                             try {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemory.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemory.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -20,6 +20,7 @@
 import java.util.NoSuchElementException;
 
 import org.drools.WorkingMemory;
+import org.drools.base.evaluators.Operator;
 import org.drools.common.InternalFactHandle;
 import org.drools.reteoo.ReteTuple;
 import org.drools.rule.Declaration;
@@ -281,7 +282,7 @@
     public final void selectPossibleMatches(final WorkingMemory workingMemory,
                                             final InternalFactHandle handle) {
         boolean select = ((Boolean) this.extractor.getValue( handle.getObject() )).booleanValue();
-        select = (this.evaluator.getOperator()) == Evaluator.EQUAL ? select : !select;
+        select = (this.evaluator.getOperator()) == Operator.EQUAL ? select : !select;
         if ( select == true ) {
             this.selectedList = this.trueList;
         } else {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedRightMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedRightMemory.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/beta/BooleanConstrainedRightMemory.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -22,6 +22,7 @@
 import java.util.TreeSet;
 
 import org.drools.WorkingMemory;
+import org.drools.base.evaluators.Operator;
 import org.drools.common.DefaultFactHandle;
 import org.drools.reteoo.ObjectMatches;
 import org.drools.reteoo.ReteTuple;
@@ -215,7 +216,7 @@
     public final void selectPossibleMatches(final WorkingMemory workingMemory,
                                             final ReteTuple tuple) {
         boolean select = ((Boolean) this.declaration.getValue( tuple.get( this.column ).getObject() )).booleanValue();
-        select = (this.evaluator.getOperator()) == Evaluator.EQUAL ? select : !select;
+        select = (this.evaluator.getOperator()) == Operator.EQUAL ? select : !select;
         this.selectedList = (select == true) ? this.trueList : this.falseList;
 
         if ( this.innerMemory != null ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Declaration.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Declaration.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Declaration.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -42,6 +42,7 @@
 
 import java.io.Serializable;
 
+import org.drools.base.ValueType;
 import org.drools.spi.Extractor;
 import org.drools.spi.ObjectType;
 
@@ -122,12 +123,12 @@
     }
 
     /**
-     * Retrieve the <code>ObjectType</code>.
+     * Retrieve the <code>ValueType</code>.
      * 
-     * @return The object-type.
+     * @return The ValueType.
      */
-    public ObjectType getObjectType() {
-        return this.extractor.getObjectType();
+    public ValueType getValueType() {
+        return this.extractor.getValueType();
     }
 
     /**
@@ -159,7 +160,7 @@
     // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
     public String toString() {
-        return "[Declaration: type=" + this.extractor.getObjectType() + " identifier=" + this.identifier + "]";
+        return "[Declaration: type=" + this.extractor.getValueType() + " identifier=" + this.identifier + "]";
     }
 
     public int hashCode() {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ColumnExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ColumnExtractor.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ColumnExtractor.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -1,5 +1,9 @@
 package org.drools.spi;
 
+import org.drools.base.ClassObjectType;
+import org.drools.base.ValueType;
+import org.drools.facttemplates.FactTemplate;
+
 /*
  * Copyright 2005 JBoss Inc
  * 
@@ -38,4 +42,17 @@
         return this.objectType;
     }
 
+    public Class getExtractToClass() {
+        // @todo : this is a bit nasty, but does the trick
+        if ( objectType.getClass() == ClassObjectType.class ) {
+            return ( ( ClassObjectType ) objectType ).getClassType();
+        } else {
+            return FactTemplate.class;
+        } 
+    }
+
+    public ValueType getValueType() {
+        return objectType.getValueType();
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Evaluator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Evaluator.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Evaluator.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -18,39 +18,42 @@
 
 import java.io.Serializable;
 
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
+
 public interface Evaluator
     extends
     Serializable {
-    // Operators
-    public static final int EQUAL            = 1;
-    public static final int NOT_EQUAL        = 10;
-    public static final int LESS             = 20;
-    public static final int LESS_OR_EQUAL    = 30;
-    public static final int GREATER          = 40;
-    public static final int GREATER_OR_EQUAL = 50;
-    public static final int CONTAINS         = 60;
-    public static final int MATCHES          = 70;
-    public static final int EXCLUDES         = 80;
+//    // Operators
+//    public static final int EQUAL            = 1;
+//    public static final int NOT_EQUAL        = 10;
+//    public static final int LESS             = 20;
+//    public static final int LESS_OR_EQUAL    = 30;
+//    public static final int GREATER          = 40;
+//    public static final int GREATER_OR_EQUAL = 50;
+//    public static final int CONTAINS         = 60;
+//    public static final int MATCHES          = 70;
+//    public static final int EXCLUDES         = 80;
+//
+//    // Types
+//    public static final int CHAR_TYPE        = 100;
+//    public static final int BYTE_TYPE        = 110;
+//    public static final int SHORT_TYPE       = 120;
+//    public static final int INTEGER_TYPE     = 130;
+//    public static final int LONG_TYPE        = 140;
+//    public static final int FLOAT_TYPE       = 150;
+//    public static final int DOUBLE_TYPE      = 160;
+//    public static final int BOOLEAN_TYPE     = 170;
+//    public static final int STRING_TYPE      = 180;
+//    public static final int DATE_TYPE        = 190;
+//    public static final int ARRAY_TYPE       = 200;
+//    public static final int OBJECT_TYPE      = 210;
+//    public static final int NULL_TYPE        = 300;
 
-    // Types
-    public static final int CHAR_TYPE        = 100;
-    public static final int BYTE_TYPE        = 110;
-    public static final int SHORT_TYPE       = 120;
-    public static final int INTEGER_TYPE     = 130;
-    public static final int LONG_TYPE        = 140;
-    public static final int FLOAT_TYPE       = 150;
-    public static final int DOUBLE_TYPE      = 160;
-    public static final int BOOLEAN_TYPE     = 170;
-    public static final int STRING_TYPE      = 180;
-    public static final int DATE_TYPE        = 190;
-    public static final int ARRAY_TYPE       = 200;
-    public static final int OBJECT_TYPE      = 210;
-    public static final int NULL_TYPE        = 300;
+    public ValueType getValueType();
 
-    public int getType();
+    public Operator getOperator();
 
-    public int getOperator();
-
     /**
      * This method will apply the evaluator on the objects.
      * 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Extractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Extractor.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Extractor.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -18,10 +18,15 @@
 
 import java.io.Serializable;
 
+import org.drools.base.ValueType;
+
 public interface Extractor
     extends
     Serializable {
-    Object getValue(Object object);
+    
+    public Object getValue(Object object);
 
-    ObjectType getObjectType();
+    public ValueType getValueType();
+    
+    public Class getExtractToClass();
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ObjectType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ObjectType.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ObjectType.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -18,6 +18,8 @@
 
 import java.io.Serializable;
 
+import org.drools.base.ValueType;
+
 /**
  * Semantic object type differentiator.
  * 
@@ -40,5 +42,6 @@
      */
     boolean matches(Object object);
 
-    int getValueType();
+    ValueType getValueType();
+    
 }
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Semaphore.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Semaphore.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Semaphore.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -1,28 +0,0 @@
-package org.drools.spi;
-
-/*
- * Copyright 2005 JBoss Inc
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.io.Serializable;
-
-/**
- * @author mproctor
- */
-public interface Semaphore
-    extends
-    Serializable {
-    public String getIdentifier();
-}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -25,6 +25,7 @@
 
 import junit.framework.TestCase;
 
+import org.drools.base.evaluators.Operator;
 import org.drools.spi.Evaluator;
 
 /**
@@ -47,7 +48,7 @@
         };
 
         runEvaluatorTest( data,
-                          Evaluator.OBJECT_TYPE );
+                          ValueType.OBJECT_TYPE );
 
     }
 
@@ -59,7 +60,7 @@
                 {field, "==", null, Boolean.FALSE}};
 
         runEvaluatorTest( data,
-                          Evaluator.ARRAY_TYPE );
+                          ValueType.ARRAY_TYPE );
 
     }
 
@@ -72,7 +73,7 @@
         };
 
         runEvaluatorTest( data,
-                          Evaluator.STRING_TYPE );
+                          ValueType.STRING_TYPE );
 
     }
 
@@ -84,7 +85,7 @@
                 {null, "!=", new Integer( 42 ), Boolean.TRUE}};
 
         runEvaluatorTest( data,
-                          Evaluator.INTEGER_TYPE );
+                          ValueType.INTEGER_TYPE );
 
     }
 
@@ -95,7 +96,7 @@
                 {new Short( (short) 42 ), "!=", new Short( (short) 41 ), Boolean.TRUE}, {new Short( (short) 42 ), "!=", null, Boolean.TRUE}};
 
         runEvaluatorTest( data,
-                          Evaluator.SHORT_TYPE );
+                          ValueType.SHORT_TYPE );
     }
 
     public void testBoolean() {
@@ -107,7 +108,7 @@
         };
 
         runEvaluatorTest( data,
-                          Evaluator.BOOLEAN_TYPE );
+                          ValueType.BOOLEAN_TYPE );
     }
 
     public void testDouble() {
@@ -116,7 +117,7 @@
                 {new Double( 42 ), ">=", new Double( 100 ), Boolean.FALSE}, {new Double( 42 ), "<", new Double( 1 ), Boolean.FALSE}, {new Double( 42 ), "==", null, Boolean.FALSE}, {null, "!=", new Double( 1 ), Boolean.TRUE}};
 
         runEvaluatorTest( data,
-                          Evaluator.DOUBLE_TYPE );
+                          ValueType.DOUBLE_TYPE );
     }
 
     public void testFloat() {
@@ -125,7 +126,7 @@
                 {new Float( 42 ), ">=", new Float( 100 ), Boolean.FALSE}, {new Float( 42 ), "<", new Float( 1 ), Boolean.FALSE}, {new Float( 42 ), "==", null, Boolean.FALSE}, {null, "!=", new Float( 1 ), Boolean.TRUE}};
 
         runEvaluatorTest( data,
-                          Evaluator.FLOAT_TYPE );
+                          ValueType.FLOAT_TYPE );
     }
 
     public void testLong() {
@@ -134,7 +135,7 @@
                 {new Long( 42 ), "<", new Long( 1 ), Boolean.FALSE}, {new Long( 42 ), "==", null, Boolean.FALSE}, {null, "!=", new Long( 1 ), Boolean.TRUE}};
 
         runEvaluatorTest( data,
-                          Evaluator.LONG_TYPE );
+                          ValueType.LONG_TYPE );
     }
 
     public void testCharacter() {
@@ -143,7 +144,7 @@
                 {new Character( 'z' ), ">=", new Character( 'a' ), Boolean.TRUE}, {new Character( 'a' ), ">=", new Character( 'z' ), Boolean.FALSE}, {new Character( 'z' ), "<", new Character( 'a' ), Boolean.FALSE},
                 {new Character( 'z' ), "==", null, Boolean.FALSE}, {null, "!=", new Character( 'a' ), Boolean.TRUE}};
         runEvaluatorTest( data,
-                          Evaluator.CHAR_TYPE );
+                          ValueType.CHAR_TYPE );
     }
 
     public void testDate() throws Exception {
@@ -158,31 +159,30 @@
                 {df.parse( "10-Jul-1974" ), "!=", "11-Jul-1974", Boolean.TRUE}, {df.parse( "10-Jul-2000" ), ">", "10-Jul-1974", Boolean.TRUE}, {df.parse( "10-Jul-1974" ), ">=", "10-Jul-1974", Boolean.TRUE},
                 {df.parse( "11-Jul-1974" ), ">=", "10-Jul-1974", Boolean.TRUE}, {df.parse( "10-Jul-1974" ), ">=", "11-Jul-1974", Boolean.FALSE}, {df.parse( "10-Jul-1974" ), "==", null, Boolean.FALSE}, {null, "!=", "11-Jul-1974", Boolean.TRUE}};
         runEvaluatorTest( data,
-                          Evaluator.DATE_TYPE );
+                          ValueType.DATE_TYPE );
     }
 
     public void testByte() {
         final Object[][] data = {{new Byte( "1" ), "==", new Byte( "1" ), Boolean.TRUE}, {new Byte( "1" ), "==", new Byte( "2" ), Boolean.FALSE}, {new Byte( "1" ), "!=", new Byte( "2" ), Boolean.TRUE},
                 {new Byte( "1" ), "!=", new Byte( "1" ), Boolean.FALSE}, {new Byte( "1" ), "<=", new Byte( "1" ), Boolean.TRUE}, {new Byte( "1" ), "==", null, Boolean.FALSE}, {null, "!=", new Byte( "1" ), Boolean.TRUE}};
         runEvaluatorTest( data,
-                          Evaluator.BYTE_TYPE );
+                          ValueType.BYTE_TYPE );
 
     }
 
     /**
      * Test utility to play the data through the evaluators.
      * @param data The data to try out : Array of {arg1, operator, arg2}
-     * @param evalType The Evaluator.**_TYPE to test
+     * @param valueType The Evaluator.**_TYPE to test
      */
     private void runEvaluatorTest(final Object[][] data,
-                                  final int evalType) {
+                                  final ValueType valueType) {
         for ( int i = 0; i < data.length; i++ ) {
             final Object[] row = data[i];
-            final Evaluator evaluator = EvaluatorFactory.getEvaluator( evalType,
-                                                                       (String) row[1] );
+            final Evaluator evaluator = valueType.getEvaluator( Operator.determineOperator( (String) row[1] ) );
             final boolean result = evaluator.evaluate( row[0],
                                                        row[2] );
-            final String message = "The evaluator type: [" + evalType + "] incorrectly returned " + result + " for [" + row[0] + " " + row[1] + " " + row[2] + "]. It was asserted to return " + row[3];
+            final String message = "The evaluator type: [" + valueType + "] incorrectly returned " + result + " for [" + row[0] + " " + row[1] + " " + row[2] + "]. It was asserted to return " + row[3];
 
             if ( row[3] == Boolean.TRUE ) {
                 assertTrue( message,
@@ -192,8 +192,8 @@
                              result );
             }
 
-            assertEquals( evalType,
-                          evaluator.getType() );
+            assertEquals( valueType,
+                          evaluator.getValueType() );
 
         }
     }

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/BaseMannersTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/BaseMannersTest.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/manners/BaseMannersTest.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -35,7 +35,8 @@
 import org.drools.WorkingMemory;
 import org.drools.base.ClassFieldExtractor;
 import org.drools.base.ClassObjectType;
-import org.drools.base.EvaluatorFactory;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
 import org.drools.rule.VariableConstraint;
 import org.drools.rule.Column;
 import org.drools.rule.Declaration;
@@ -92,21 +93,13 @@
         this.pathType = new ClassObjectType( Path.class );
         this.chosenType = new ClassObjectType( Chosen.class );
 
-        this.integerEqualEvaluator = EvaluatorFactory.getInstance().getEvaluator( Evaluator.INTEGER_TYPE,
-                                                                                  Evaluator.EQUAL );
-        this.integerNotEqualEvaluator = EvaluatorFactory.getInstance().getEvaluator( Evaluator.INTEGER_TYPE,
-                                                                                     Evaluator.NOT_EQUAL );
+        this.integerEqualEvaluator = ValueType.INTEGER_TYPE.getEvaluator( Operator.EQUAL );
+        this.integerNotEqualEvaluator = ValueType.INTEGER_TYPE.getEvaluator( Operator.NOT_EQUAL );
+        this.objectEqualEvaluator = ValueType.OBJECT_TYPE.getEvaluator( Operator.EQUAL );
+        this.objectNotEqualEvaluator = ValueType.OBJECT_TYPE.getEvaluator( Operator.NOT_EQUAL );
+        this.booleanEqualEvaluator = ValueType.BOOLEAN_TYPE.getEvaluator( Operator.EQUAL );
+        this.booleanNotEqualEvaluator = ValueType.BOOLEAN_TYPE.getEvaluator( Operator.NOT_EQUAL );
 
-        this.objectEqualEvaluator = EvaluatorFactory.getInstance().getEvaluator( Evaluator.OBJECT_TYPE,
-                                                                                 Evaluator.EQUAL );
-        this.objectNotEqualEvaluator = EvaluatorFactory.getInstance().getEvaluator( Evaluator.OBJECT_TYPE,
-                                                                                    Evaluator.NOT_EQUAL );
-
-        this.booleanEqualEvaluator = EvaluatorFactory.getInstance().getEvaluator( Evaluator.BOOLEAN_TYPE,
-                                                                                  Evaluator.EQUAL );
-        this.booleanNotEqualEvaluator = EvaluatorFactory.getInstance().getEvaluator( Evaluator.BOOLEAN_TYPE,
-                                                                                     Evaluator.NOT_EQUAL );
-
         this.pkg = new Package( "Miss Manners" );
         this.pkg.addRule( getAssignFirstSeatRule() );
         this.pkg.addRule( getFindSeating() );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/waltz/BaseWaltzTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/waltz/BaseWaltzTest.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/examples/waltz/BaseWaltzTest.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -31,7 +31,8 @@
 import org.drools.WorkingMemory;
 import org.drools.base.ClassFieldExtractorFactory;
 import org.drools.base.ClassObjectType;
-import org.drools.base.EvaluatorFactory;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
 import org.drools.rule.VariableConstraint;
 import org.drools.rule.Column;
 import org.drools.rule.Declaration;
@@ -88,25 +89,16 @@
         this.edgeType = new ClassObjectType( Edge.class );
         this.junctionType = new ClassObjectType( Junction.class );
         // evaluators
-        this.integerEqualEvaluator = EvaluatorFactory.getEvaluator( Evaluator.INTEGER_TYPE,
-                                                                    Evaluator.EQUAL );
-        this.integerNotEqualEvaluator = EvaluatorFactory.getEvaluator( Evaluator.INTEGER_TYPE,
-                                                                       Evaluator.NOT_EQUAL );
-        this.integerGreaterEvaluator = EvaluatorFactory.getEvaluator( Evaluator.INTEGER_TYPE,
-                                                                      Evaluator.GREATER );
-        this.integerLessEvaluator = EvaluatorFactory.getEvaluator( Evaluator.INTEGER_TYPE,
-                                                                   Evaluator.LESS );
+        
+        this.integerEqualEvaluator = ValueType.INTEGER_TYPE.getEvaluator( Operator.EQUAL );
+        this.integerNotEqualEvaluator = ValueType.INTEGER_TYPE.getEvaluator( Operator.NOT_EQUAL );
+        this.integerGreaterEvaluator = ValueType.INTEGER_TYPE.getEvaluator( Operator.GREATER );
+        this.integerLessEvaluator = ValueType.INTEGER_TYPE.getEvaluator( Operator.LESS );        
+        this.objectEqualEvaluator = ValueType.OBJECT_TYPE.getEvaluator( Operator.EQUAL );
+        this.objectNotEqualEvaluator = ValueType.OBJECT_TYPE.getEvaluator( Operator.NOT_EQUAL );
+        this.booleanEqualEvaluator = ValueType.BOOLEAN_TYPE.getEvaluator( Operator.EQUAL );
+        this.booleanNotEqualEvaluator = ValueType.BOOLEAN_TYPE.getEvaluator( Operator.NOT_EQUAL );        
 
-        this.objectEqualEvaluator = EvaluatorFactory.getEvaluator( Evaluator.OBJECT_TYPE,
-                                                                   Evaluator.EQUAL );
-        this.objectNotEqualEvaluator = EvaluatorFactory.getEvaluator( Evaluator.OBJECT_TYPE,
-                                                                      Evaluator.NOT_EQUAL );
-
-        this.booleanEqualEvaluator = EvaluatorFactory.getEvaluator( Evaluator.BOOLEAN_TYPE,
-                                                                    Evaluator.EQUAL );
-        this.booleanNotEqualEvaluator = EvaluatorFactory.getEvaluator( Evaluator.BOOLEAN_TYPE,
-                                                                       Evaluator.NOT_EQUAL );
-
         // rules
         this.pkg = new Package( "Waltz" );
         this.pkg.addRule( getBeginRule() );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/ColumnConstraintsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/ColumnConstraintsTest.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/ColumnConstraintsTest.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -26,7 +26,8 @@
 import org.drools.RuleBaseFactory;
 import org.drools.base.ClassFieldExtractor;
 import org.drools.base.ClassObjectType;
-import org.drools.base.EvaluatorFactory;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
 import org.drools.examples.manners.Context;
 import org.drools.rule.Column;
 import org.drools.rule.LiteralConstraint;
@@ -49,10 +50,8 @@
 
     protected void setUp() throws Exception {
         super.setUp();
-        this.integerEqualEvaluator = EvaluatorFactory.getEvaluator( Evaluator.INTEGER_TYPE,
-                                                                    Evaluator.EQUAL );
-        this.integerNotEqualEvaluator = EvaluatorFactory.getEvaluator( Evaluator.INTEGER_TYPE,
-                                                                       Evaluator.NOT_EQUAL );
+        this.integerEqualEvaluator = ValueType.INTEGER_TYPE.getEvaluator( Operator.EQUAL );
+        this.integerNotEqualEvaluator = ValueType.INTEGER_TYPE.getEvaluator( Operator.NOT_EQUAL );
     }
 
     /*

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/LeapsRuleBaseTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/LeapsRuleBaseTest.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/LeapsRuleBaseTest.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -24,7 +24,8 @@
 import org.drools.WorkingMemory;
 import org.drools.base.ClassFieldExtractor;
 import org.drools.base.ClassObjectType;
-import org.drools.base.EvaluatorFactory;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
 import org.drools.examples.manners.Context;
 import org.drools.rule.Column;
 import org.drools.rule.Declaration;
@@ -91,8 +92,7 @@
         this.workingMemory = this.ruleBaseAddRule.newWorkingMemory();
         // rules
         final ClassObjectType contextType = new ClassObjectType( Context.class );
-        final Evaluator integerEqualEvaluator = EvaluatorFactory.getEvaluator( Evaluator.INTEGER_TYPE,
-                                                                               Evaluator.EQUAL );
+        final Evaluator integerEqualEvaluator = ValueType.INTEGER_TYPE.getEvaluator( Operator.EQUAL );
         // rule 1
         // fires on context.state == integer(1)
         this.rule1 = new Rule( "rule1" );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/QueryResultsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/QueryResultsTest.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/QueryResultsTest.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -27,7 +27,8 @@
 import org.drools.WorkingMemory;
 import org.drools.base.ClassFieldExtractor;
 import org.drools.base.ClassObjectType;
-import org.drools.base.EvaluatorFactory;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
 import org.drools.rule.Column;
 import org.drools.rule.LiteralConstraint;
 import org.drools.rule.Query;
@@ -47,8 +48,7 @@
         final LeapsRuleBase ruleBase = (LeapsRuleBase) RuleBaseFactory.newRuleBase( RuleBase.LEAPS );
 
         final ClassObjectType cheeseObjectType = new ClassObjectType( Cheese.class );
-        final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.STRING_TYPE,
-                                                                   Evaluator.EQUAL );
+        final Evaluator evaluator = ValueType.STRING_TYPE.getEvaluator( Operator.EQUAL );
         // fires on context.state == integer(1)
         final Query query = new Query( "query-1" );
 

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/QueryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/QueryTest.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/leaps/QueryTest.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -24,7 +24,8 @@
 import org.drools.WorkingMemory;
 import org.drools.base.ClassFieldExtractor;
 import org.drools.base.ClassObjectType;
-import org.drools.base.EvaluatorFactory;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
 import org.drools.examples.manners.Context;
 import org.drools.rule.Column;
 import org.drools.rule.Declaration;
@@ -83,8 +84,7 @@
         this.workingMemory = this.ruleBaseAddRule.newWorkingMemory();
         // rules
         final ClassObjectType contextType = new ClassObjectType( Context.class );
-        final Evaluator integerEqualEvaluator = EvaluatorFactory.getEvaluator( Evaluator.INTEGER_TYPE,
-                                                                               Evaluator.EQUAL );
+        final Evaluator integerEqualEvaluator = ValueType.INTEGER_TYPE.getEvaluator( Operator.EQUAL );
         // rule 1
         // fires on context.state == integer(1)
         this.rule1 = new Query( "query-to-execute" );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeSwitchTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeSwitchTest.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeSwitchTest.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -22,7 +22,8 @@
 import org.drools.Cheese;
 import org.drools.RuleBaseFactory;
 import org.drools.base.ClassFieldExtractor;
-import org.drools.base.EvaluatorFactory;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
 import org.drools.common.DefaultFactHandle;
 import org.drools.rule.LiteralConstraint;
 import org.drools.spi.Evaluator;
@@ -54,8 +55,7 @@
         final FieldValue field1 = new MockField( "cheddar" );
         final FieldValue field2 = new MockField( "mussarela" );
 
-        final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.OBJECT_TYPE,
-                                                                   Evaluator.EQUAL );
+        final Evaluator evaluator = ValueType.OBJECT_TYPE.getEvaluator( Operator.EQUAL );
         this.constraint1 = new LiteralConstraint( extractor,
                                                   evaluator,
                                                   field1 );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeTest.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AlphaNodeTest.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -25,7 +25,8 @@
 import org.drools.FactException;
 import org.drools.RuleBaseFactory;
 import org.drools.base.ClassFieldExtractor;
-import org.drools.base.EvaluatorFactory;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
 import org.drools.common.DefaultFactHandle;
 import org.drools.common.PropagationContextImpl;
 import org.drools.rule.LiteralConstraint;
@@ -84,8 +85,7 @@
 
         final FieldValue field = new MockField( "cheddar" );
 
-        final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.OBJECT_TYPE,
-                                                                   Evaluator.EQUAL );
+        final Evaluator evaluator = ValueType.OBJECT_TYPE.getEvaluator( Operator.EQUAL );
         final LiteralConstraint constraint = new LiteralConstraint( extractor,
                                                                     evaluator,
                                                                     field );
@@ -169,8 +169,7 @@
 
         final FieldValue field = new MockField( "cheddar" );
 
-        final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.OBJECT_TYPE,
-                                                                   Evaluator.EQUAL );
+        final Evaluator evaluator = ValueType.OBJECT_TYPE.getEvaluator( Operator.EQUAL );
         final LiteralConstraint constraint = new LiteralConstraint( extractor,
                                                                     evaluator,
                                                                     field );
@@ -231,8 +230,7 @@
 
         final FieldValue field = new MockField( "cheddar" );
 
-        final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.OBJECT_TYPE,
-                                                                   Evaluator.EQUAL );
+        final Evaluator evaluator = ValueType.OBJECT_TYPE.getEvaluator( Operator.EQUAL );
         final LiteralConstraint constraint = new LiteralConstraint( extractor,
                                                                     evaluator,
                                                                     field );
@@ -313,8 +311,7 @@
 
         final FieldValue field = new MockField( "cheddar" );
 
-        final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.OBJECT_TYPE,
-                                                                   Evaluator.EQUAL );
+        final Evaluator evaluator = ValueType.OBJECT_TYPE.getEvaluator( Operator.EQUAL );
         final LiteralConstraint constraint = new LiteralConstraint( extractor,
                                                                     evaluator,
                                                                     field );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/HashedObjectSinkListTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/HashedObjectSinkListTest.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/HashedObjectSinkListTest.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -25,7 +25,8 @@
 import org.drools.Cheese;
 import org.drools.RuleBaseFactory;
 import org.drools.base.ClassFieldExtractor;
-import org.drools.base.EvaluatorFactory;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
 import org.drools.common.DefaultFactHandle;
 import org.drools.rule.LiteralConstraint;
 import org.drools.spi.Evaluator;
@@ -165,8 +166,7 @@
         final FieldValue field1 = new MockField( "cheddar" );
         final FieldValue field2 = new MockField( "mussarela" );
 
-        final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.OBJECT_TYPE,
-                                                                   Evaluator.EQUAL );
+        final Evaluator evaluator = ValueType.OBJECT_TYPE.getEvaluator( Operator.EQUAL );
         final LiteralConstraint constraint1 = new LiteralConstraint( extractor,
                                                                      evaluator,
                                                                      field1 );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/QueryTerminalNodeTest.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -28,7 +28,8 @@
 import org.drools.base.ClassFieldExtractor;
 import org.drools.base.ClassObjectType;
 import org.drools.base.DroolsQuery;
-import org.drools.base.EvaluatorFactory;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
 import org.drools.rule.LiteralConstraint;
 import org.drools.rule.Query;
 import org.drools.spi.Evaluator;
@@ -51,8 +52,7 @@
 
         FieldValue field = new MockField( "query-1" );
 
-        final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.STRING_TYPE,
-                                                                   Evaluator.EQUAL );
+        final Evaluator evaluator = ValueType.STRING_TYPE.getEvaluator( Operator.EQUAL );
         LiteralConstraint constraint = new LiteralConstraint( extractor,
                                                               evaluator,
                                                               field );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemoryTest.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BooleanConstrainedLeftMemoryTest.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -22,7 +22,8 @@
 import junit.framework.Assert;
 
 import org.drools.base.ClassFieldExtractor;
-import org.drools.base.EvaluatorFactory;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
 import org.drools.common.DefaultFactHandle;
 import org.drools.reteoo.ReteTuple;
 import org.drools.rule.Declaration;
@@ -47,8 +48,7 @@
         final Declaration declaration = new Declaration( "myBoolean",
                                                          extractor,
                                                          0 );
-        final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.BOOLEAN_TYPE,
-                                                                   Evaluator.EQUAL );
+        final Evaluator evaluator = ValueType.BOOLEAN_TYPE.getEvaluator( Operator.EQUAL );
 
         this.memory = new BooleanConstrainedLeftMemory( extractor,
                                                         declaration,

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BooleanConstrainedRightMemoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BooleanConstrainedRightMemoryTest.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/BooleanConstrainedRightMemoryTest.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -22,7 +22,8 @@
 import junit.framework.Assert;
 
 import org.drools.base.ClassFieldExtractor;
-import org.drools.base.EvaluatorFactory;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
 import org.drools.common.DefaultFactHandle;
 import org.drools.reteoo.ObjectMatches;
 import org.drools.reteoo.ReteTuple;
@@ -48,8 +49,7 @@
         final Declaration declaration = new Declaration( "myBoolean",
                                                          extractor,
                                                          0 );
-        final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.BOOLEAN_TYPE,
-                                                                   Evaluator.EQUAL );
+        final Evaluator evaluator = ValueType.BOOLEAN_TYPE.getEvaluator( Operator.EQUAL );
 
         this.memory = new BooleanConstrainedRightMemory( extractor,
                                                          declaration,

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectEqualConstrLeftMemoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectEqualConstrLeftMemoryTest.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectEqualConstrLeftMemoryTest.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -22,7 +22,8 @@
 import junit.framework.Assert;
 
 import org.drools.base.ClassFieldExtractor;
-import org.drools.base.EvaluatorFactory;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
 import org.drools.common.DefaultFactHandle;
 import org.drools.reteoo.ReteTuple;
 import org.drools.rule.Declaration;
@@ -46,8 +47,7 @@
         final Declaration declaration = new Declaration( "myObject",
                                                          extractor,
                                                          0 );
-        final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.OBJECT_TYPE,
-                                                                   Evaluator.EQUAL );
+        final Evaluator evaluator = ValueType.OBJECT_TYPE.getEvaluator( Operator.EQUAL );
 
         this.memory = new ObjectEqualConstrLeftMemory( extractor,
                                                        declaration,

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectEqualConstrRightMemoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectEqualConstrRightMemoryTest.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectEqualConstrRightMemoryTest.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -22,7 +22,8 @@
 import junit.framework.Assert;
 
 import org.drools.base.ClassFieldExtractor;
-import org.drools.base.EvaluatorFactory;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
 import org.drools.common.DefaultFactHandle;
 import org.drools.reteoo.ObjectMatches;
 import org.drools.reteoo.ReteTuple;
@@ -48,8 +49,7 @@
         final Declaration declaration = new Declaration( "myObject",
                                                          extractor,
                                                          0 );
-        final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.OBJECT_TYPE,
-                                                                   Evaluator.EQUAL );
+        final Evaluator evaluator = ValueType.OBJECT_TYPE.getEvaluator( Operator.EQUAL );
 
         this.memory = new ObjectEqualConstrRightMemory( extractor,
                                                         declaration,

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectNotEqualConstrLeftMemoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectNotEqualConstrLeftMemoryTest.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectNotEqualConstrLeftMemoryTest.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -22,7 +22,8 @@
 import junit.framework.Assert;
 
 import org.drools.base.ClassFieldExtractor;
-import org.drools.base.EvaluatorFactory;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
 import org.drools.common.DefaultFactHandle;
 import org.drools.reteoo.ReteTuple;
 import org.drools.rule.Declaration;
@@ -47,8 +48,7 @@
         final Declaration declaration = new Declaration( "myObject",
                                                          extractor,
                                                          0 );
-        final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.OBJECT_TYPE,
-                                                                   Evaluator.NOT_EQUAL );
+        final Evaluator evaluator = ValueType.OBJECT_TYPE.getEvaluator( Operator.NOT_EQUAL );
 
         this.memory = new ObjectNotEqualConstrLeftMemory( extractor,
                                                           declaration,

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectNotEqualConstrRightMemoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectNotEqualConstrRightMemoryTest.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/beta/ObjectNotEqualConstrRightMemoryTest.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -22,7 +22,8 @@
 import junit.framework.Assert;
 
 import org.drools.base.ClassFieldExtractor;
-import org.drools.base.EvaluatorFactory;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
 import org.drools.common.DefaultFactHandle;
 import org.drools.reteoo.ObjectMatches;
 import org.drools.reteoo.ReteTuple;
@@ -48,8 +49,7 @@
         final Declaration declaration = new Declaration( "myObject",
                                                          extractor,
                                                          0 );
-        final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.OBJECT_TYPE,
-                                                                   Evaluator.NOT_EQUAL );
+        final Evaluator evaluator = ValueType.OBJECT_TYPE.getEvaluator( Operator.NOT_EQUAL );
 
         this.memory = new ObjectNotEqualConstrRightMemory( extractor,
                                                            declaration,

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/DeclarationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/DeclarationTest.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/DeclarationTest.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -43,7 +43,7 @@
                       declaration.getIdentifier() );
 
         assertSame( String.class,
-                    ((ClassObjectType) declaration.getObjectType()).getClassType() );
+                    declaration.getExtractor().getExtractToClass() );
 
         assertSame( extractor,
                     declaration.getExtractor() );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -25,7 +25,8 @@
 import org.drools.RuleBaseFactory;
 import org.drools.WorkingMemory;
 import org.drools.base.ClassFieldExtractor;
-import org.drools.base.EvaluatorFactory;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
 import org.drools.common.InternalFactHandle;
 import org.drools.reteoo.InstrumentedReteTuple;
 import org.drools.reteoo.ReteooRuleBase;
@@ -65,8 +66,8 @@
 
         final FieldValue field = new MockField( "cheddar" );
 
-        final Evaluator evaluator = EvaluatorFactory.getEvaluator( Evaluator.OBJECT_TYPE,
-                                                                   Evaluator.EQUAL );
+        Evaluator evaluator = ValueType.STRING_TYPE.getEvaluator( Operator.EQUAL );
+        
         final LiteralConstraint constraint = new LiteralConstraint( extractor,
                                                                     evaluator,
                                                                     field );
@@ -208,14 +209,12 @@
         final ReturnValueConstraint constraint1 = new ReturnValueConstraint( priceExtractor,
                                                                              isDoubleThePrice,
                                                                              new Declaration[]{priceDeclaration},
-                                                                             EvaluatorFactory.getEvaluator( Evaluator.INTEGER_TYPE,
-                                                                                                            Evaluator.EQUAL ) );
+                                                                             ValueType.INTEGER_TYPE.getEvaluator( Operator.EQUAL ) );
 
         final ReturnValueConstraint constraint2 = new ReturnValueConstraint( priceExtractor,
                                                                              isDoubleThePrice,
                                                                              new Declaration[]{priceDeclaration},
-                                                                             EvaluatorFactory.getEvaluator( Evaluator.INTEGER_TYPE,
-                                                                                                            Evaluator.GREATER ) );
+                                                                             ValueType.INTEGER_TYPE.getEvaluator( Operator.GREATER ) );
 
         final Cheese cheddar0 = new Cheese( "cheddar",
                                             5 );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/OrTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/OrTest.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/OrTest.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -27,7 +27,8 @@
 import org.drools.WorkingMemory;
 import org.drools.base.ClassFieldExtractor;
 import org.drools.base.ClassObjectType;
-import org.drools.base.EvaluatorFactory;
+import org.drools.base.ValueType;
+import org.drools.base.evaluators.Operator;
 import org.drools.examples.waltz.Edge;
 import org.drools.examples.waltz.Stage;
 import org.drools.leaps.LeapsRuleBase;
@@ -69,10 +70,8 @@
         super.setUp();
         this.stageType = new ClassObjectType( Stage.class );
         this.edgeType = new ClassObjectType( Edge.class );
-        this.integerEqualEvaluator = EvaluatorFactory.getEvaluator( Evaluator.INTEGER_TYPE,
-                                                                    Evaluator.EQUAL );
-        this.integerNotEqualEvaluator = EvaluatorFactory.getEvaluator( Evaluator.INTEGER_TYPE,
-                                                                       Evaluator.NOT_EQUAL );
+        this.integerEqualEvaluator = ValueType.INTEGER_TYPE.getEvaluator( Operator.EQUAL );
+        this.integerNotEqualEvaluator = ValueType.INTEGER_TYPE.getEvaluator( Operator.NOT_EQUAL );
         this.pkg = new Package( "or" );
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/spi/MockObjectType.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/spi/MockObjectType.java	2006-08-03 00:14:06 UTC (rev 5421)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/spi/MockObjectType.java	2006-08-03 00:14:40 UTC (rev 5422)
@@ -1,5 +1,7 @@
 package org.drools.spi;
 
+import org.drools.base.ValueType;
+
 /*
  * Copyright 2005 JBoss Inc
  * 
@@ -73,8 +75,8 @@
         return this.matches;
     }
 
-    public int getValueType() {
-        return 0;
+    public ValueType getValueType() {
+        return ValueType.OBJECT_TYPE;
     }
 
 }
\ No newline at end of file




More information about the jboss-svn-commits mailing list