[jboss-svn-commits] JBL Code SVN: r26570 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/base/evaluators and 8 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri May 15 14:46:31 EDT 2009


Author: tirelli
Date: 2009-05-15 14:46:31 -0400 (Fri, 15 May 2009)
New Revision: 26570

Added:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/MathUtils.java
Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseClassFieldReader.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseClassFieldWriter.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldAccessor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldReader.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldWriter.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ComparableEvaluatorsDefinition.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/EqualityEvaluatorsDefinition.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/ArrayElementReader.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/DoubleFieldImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/ObjectFieldImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateFieldExtractor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalExtractor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/InternalReadAccessor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/PatternExtractor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ReadAccessor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/WriteAccessor.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TemporalEvaluatorFactoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/evaluators/BigDecimalEqualityTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
Log:
JBRULES-2093: fixing handling of BigInteger and BigDecimal coercion

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseClassFieldReader.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseClassFieldReader.java	2009-05-15 16:26:33 UTC (rev 26569)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseClassFieldReader.java	2009-05-15 18:46:31 UTC (rev 26570)
@@ -16,8 +16,13 @@
  * limitations under the License.
  */
 
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
 import org.drools.RuntimeDroolsException;
+import org.drools.common.InternalWorkingMemory;
 import org.drools.util.ClassUtils;
+import org.drools.util.MathUtils;
 import org.drools.util.asm.ClassFieldInspector;
 
 /**
@@ -174,6 +179,28 @@
                                 object );
     }
 
+    public BigDecimal getBigDecimalValue(Object object) {
+        return getBigDecimalValue( null,
+                                   object );
+    }
+
+    public BigInteger getBigIntegerValue(Object object) {
+        return getBigIntegerValue( null,
+                                   object );
+    }
+
+    public BigDecimal getBigDecimalValue(InternalWorkingMemory workingMemory,
+                                         Object object) {
+        return MathUtils.getBigDecimal( getValue( workingMemory,
+                                                  object ) );
+    }
+
+    public BigInteger getBigIntegerValue(InternalWorkingMemory workingMemory,
+                                         Object object) {
+        return MathUtils.getBigInteger( getValue( workingMemory,
+                                                  object ) );
+    }
+
     public boolean isNullValue(Object object) {
         return isNullValue( null,
                             object );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseClassFieldWriter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseClassFieldWriter.java	2009-05-15 16:26:33 UTC (rev 26569)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/BaseClassFieldWriter.java	2009-05-15 18:46:31 UTC (rev 26570)
@@ -19,6 +19,8 @@
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import java.math.BigDecimal;
+import java.math.BigInteger;
 
 import org.drools.RuntimeDroolsException;
 import org.drools.spi.WriteAccessor;
@@ -100,6 +102,18 @@
         return this.valueType;
     }
 
+    public void setBigDecimalValue(Object bean,
+                                   BigDecimal value) {
+        setValue( bean,
+                  value );
+    }
+
+    public void setBigIntegerValue(Object bean,
+                                   BigInteger value) {
+        setValue( bean,
+                  value );
+    }
+
     public int hashCode() {
         final int PRIME = 31;
         int result = 1;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldAccessor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldAccessor.java	2009-05-15 16:26:33 UTC (rev 26569)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldAccessor.java	2009-05-15 18:46:31 UTC (rev 26570)
@@ -21,6 +21,8 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.lang.reflect.Method;
+import java.math.BigDecimal;
+import java.math.BigInteger;
 
 import org.drools.spi.AcceptsReadAccessor;
 import org.drools.spi.AcceptsWriteAccessor;
@@ -103,29 +105,27 @@
         return this.reader.toString();
     }
 
-    
-    
-//    public int hashCode() {
-//        return this.reader.hashCode();
-//    }
-//
-//    public boolean equals(final Object object) {
-//        if ( this == object ) {
-//            return true;
-//        }
-//
-//        if ( object == null || !(object instanceof ClassFieldAccessor) ) {
-//            return false;
-//        }
-//
-//        final ClassFieldAccessor other = (ClassFieldAccessor) object;
-//
-//        return this.reader.equals( other.reader );
-//    }
+    //    public int hashCode() {
+    //        return this.reader.hashCode();
+    //    }
+    //
+    //    public boolean equals(final Object object) {
+    //        if ( this == object ) {
+    //            return true;
+    //        }
+    //
+    //        if ( object == null || !(object instanceof ClassFieldAccessor) ) {
+    //            return false;
+    //        }
+    //
+    //        final ClassFieldAccessor other = (ClassFieldAccessor) object;
+    //
+    //        return this.reader.equals( other.reader );
+    //    }
 
     @Override
     public int hashCode() {
-        return  reader.getClassName().hashCode() ^ reader.getFieldName().hashCode();
+        return reader.getClassName().hashCode() ^ reader.getFieldName().hashCode();
     }
 
     @Override
@@ -139,7 +139,7 @@
         } else if ( !reader.getClassName().equals( other.reader.getClassName() ) || !reader.getFieldName().equals( other.reader.getFieldName() ) ) return false;
         if ( writer == null ) {
             if ( other.writer != null ) return false;
-        } else if ( !writer.getClassName().equals( other.writer.getClassName() ) || !writer.getFieldName().equals( other.writer.getFieldName() )  ) return false;
+        } else if ( !writer.getClassName().equals( other.writer.getClassName() ) || !writer.getFieldName().equals( other.writer.getFieldName() ) ) return false;
         return true;
     }
 
@@ -320,4 +320,24 @@
                          value );
     }
 
+    public BigDecimal getBigDecimalValue(Object object) {
+        return reader.getBigDecimalValue( object );
+    }
+
+    public BigInteger getBigIntegerValue(Object object) {
+        return reader.getBigIntegerValue( object );
+    }
+
+    public void setBigDecimalValue(Object bean,
+                                   BigDecimal value) {
+        writer.setBigDecimalValue( bean,
+                                   value );
+    }
+
+    public void setBigIntegerValue(Object bean,
+                                   BigInteger value) {
+        writer.setBigIntegerValue( bean,
+                                   value );
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldReader.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldReader.java	2009-05-15 16:26:33 UTC (rev 26569)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldReader.java	2009-05-15 18:46:31 UTC (rev 26570)
@@ -21,6 +21,8 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.lang.reflect.Method;
+import java.math.BigDecimal;
+import java.math.BigInteger;
 
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.InternalReadAccessor;
@@ -46,17 +48,16 @@
     private String                         className;
     private String                         fieldName;
     private transient InternalReadAccessor reader;
-    
-    
+
     public ClassFieldReader() {
-        
+
     }
-    
+
     public ClassFieldReader(final String className,
                             final String fieldName) {
         this.className = className;
         this.fieldName = fieldName;
-    }    
+    }
 
     public void writeExternal(ObjectOutput out) throws IOException {
         out.writeObject( className );
@@ -76,7 +77,7 @@
     public int getIndex() {
         return this.reader.getIndex();
     }
-    
+
     public String getClassName() {
         return this.className;
     }
@@ -113,7 +114,7 @@
         result = prime * result + ((className == null) ? 0 : className.hashCode());
         result = prime * result + ((fieldName == null) ? 0 : fieldName.hashCode());
         return result;
-    }       
+    }
 
     public boolean equals(Object obj) {
         if ( this == obj ) return true;
@@ -196,7 +197,7 @@
     public boolean isGlobal() {
         return false;
     }
-    
+
     public boolean isSelfReference() {
         return "this".equals( this.fieldName );
     }
@@ -300,4 +301,24 @@
         return reader.isNullValue( object );
     }
 
+    public BigDecimal getBigDecimalValue(InternalWorkingMemory workingMemory,
+                                         Object object) {
+        return reader.getBigDecimalValue( workingMemory,
+                                          object );
+    }
+
+    public BigInteger getBigIntegerValue(InternalWorkingMemory workingMemory,
+                                         Object object) {
+        return reader.getBigIntegerValue( workingMemory,
+                                          object );
+    }
+
+    public BigDecimal getBigDecimalValue(Object object) {
+        return reader.getBigDecimalValue( object );
+    }
+
+    public BigInteger getBigIntegerValue(Object object) {
+        return reader.getBigIntegerValue( object );
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldWriter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldWriter.java	2009-05-15 16:26:33 UTC (rev 26569)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassFieldWriter.java	2009-05-15 18:46:31 UTC (rev 26570)
@@ -20,6 +20,8 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.lang.reflect.Method;
+import java.math.BigDecimal;
+import java.math.BigInteger;
 
 import org.drools.spi.WriteAccessor;
 
@@ -42,12 +44,12 @@
     public ClassFieldWriter() {
 
     }
-    
+
     public ClassFieldWriter(final String className,
                             final String fieldName) {
         this.className = className;
         this.fieldName = fieldName;
-    }    
+    }
 
     public void writeExternal(ObjectOutput out) throws IOException {
         out.writeObject( className );
@@ -59,18 +61,18 @@
         className = (String) is.readObject();
         fieldName = (String) is.readObject();
     }
-    
+
     public void setWriteAccessor(WriteAccessor writer) {
         this.writer = writer;
-    }    
+    }
 
     public int getIndex() {
         return this.writer.getIndex();
     }
-    
+
     public String getClassName() {
         return this.className;
-    }    
+    }
 
     public String getFieldName() {
         return this.fieldName;
@@ -112,48 +114,69 @@
 
     public void setBooleanValue(Object bean,
                                 boolean value) {
-        writer.setBooleanValue( bean, value );
+        writer.setBooleanValue( bean,
+                                value );
     }
 
     public void setByteValue(Object bean,
                              byte value) {
-        writer.setByteValue( bean, value );
+        writer.setByteValue( bean,
+                             value );
 
     }
 
     public void setCharValue(Object bean,
                              char value) {
-        writer.setCharValue( bean, value );
+        writer.setCharValue( bean,
+                             value );
     }
 
     public void setDoubleValue(Object bean,
                                double value) {
-        writer.setDoubleValue( bean, value );
+        writer.setDoubleValue( bean,
+                               value );
     }
 
     public void setFloatValue(Object bean,
                               float value) {
-        writer.setFloatValue( bean, value );
+        writer.setFloatValue( bean,
+                              value );
     }
 
     public void setIntValue(Object bean,
                             int value) {
-        writer.setIntValue( bean, value );
+        writer.setIntValue( bean,
+                            value );
     }
 
     public void setLongValue(Object bean,
                              long value) {
-        writer.setLongValue( bean, value );
+        writer.setLongValue( bean,
+                             value );
     }
 
     public void setShortValue(Object bean,
                               short value) {
-        writer.setShortValue( bean, value );
+        writer.setShortValue( bean,
+                              value );
     }
 
     public void setValue(Object bean,
                          Object value) {
-        writer.setValue( bean, value );
+        writer.setValue( bean,
+                         value );
     }
 
+    public void setBigDecimalValue(Object bean,
+                              BigDecimal value) {
+        writer.setBigDecimalValue( bean,
+                              value );
+    }
+
+    public void setBigIntegerValue(Object bean,
+                              BigInteger value) {
+        writer.setBigIntegerValue( bean,
+                              value );
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ComparableEvaluatorsDefinition.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ComparableEvaluatorsDefinition.java	2009-05-15 16:26:33 UTC (rev 26569)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/ComparableEvaluatorsDefinition.java	2009-05-15 18:46:31 UTC (rev 26570)
@@ -37,6 +37,7 @@
 import org.drools.spi.FieldValue;
 import org.drools.spi.InternalReadAccessor;
 import org.drools.util.DateUtils;
+import org.drools.util.MathUtils;
 
 /**
  * This class defines all the comparable built in
@@ -218,7 +219,7 @@
             if( extractor.isNullValue( workingMemory, object1 ) ) {
                 return false;
             }
-            final BigDecimal comp = (BigDecimal) extractor.getValue( workingMemory, object1 );
+            final BigDecimal comp = extractor.getBigDecimalValue( workingMemory, object1 );
             return comp.compareTo( object2.getBigDecimalValue() ) < 0;
         }
 
@@ -227,8 +228,8 @@
             if( context.rightNull ) {
                 return false;
             }
-            final BigDecimal comp = (BigDecimal) ((ObjectVariableContextEntry) context).right;
-            return comp.compareTo( (BigDecimal) context.declaration.getExtractor().getValue( workingMemory, left ) ) < 0;
+            final BigDecimal comp = MathUtils.getBigDecimal( ((ObjectVariableContextEntry) context).right );
+            return comp.compareTo( context.declaration.getExtractor().getBigDecimalValue( workingMemory, left ) ) < 0;
         }
 
         public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
@@ -236,8 +237,8 @@
             if( context.extractor.isNullValue( workingMemory, right ) ) {
                 return false;
             }
-            final BigDecimal comp = (BigDecimal) context.extractor.getValue( workingMemory, right );
-            return comp.compareTo( (BigDecimal) ((ObjectVariableContextEntry) context).left ) < 0;
+            final BigDecimal comp = context.extractor.getBigDecimalValue( workingMemory, right );
+            return comp.compareTo( MathUtils.getBigDecimal( ((ObjectVariableContextEntry) context).left )) < 0;
         }
 
         public boolean evaluate(InternalWorkingMemory workingMemory,
@@ -247,8 +248,8 @@
             if( extractor1.isNullValue( workingMemory, object1 ) ) {
                 return false;
             }
-            final BigDecimal comp = (BigDecimal) extractor1.getValue( workingMemory, object1 );
-            return comp.compareTo( (BigDecimal) extractor2.getValue( workingMemory, object2 ) ) < 0;
+            final BigDecimal comp = extractor1.getBigDecimalValue( workingMemory, object1 );
+            return comp.compareTo( extractor2.getBigDecimalValue( workingMemory, object2 ) ) < 0;
         }
 
         public String toString() {
@@ -274,7 +275,7 @@
             if( extractor.isNullValue( workingMemory, object1 ) ) {
                 return false;
             }
-            final BigDecimal comp = (BigDecimal) extractor.getValue( workingMemory, object1 );
+            final BigDecimal comp = extractor.getBigDecimalValue( workingMemory, object1 );
             return comp.compareTo( object2.getBigDecimalValue() ) <= 0;
         }
 
@@ -283,8 +284,8 @@
             if( context.rightNull ) {
                 return false;
             }
-            final BigDecimal comp = (BigDecimal) ((ObjectVariableContextEntry) context).right;
-            return comp.compareTo( (BigDecimal) context.declaration.getExtractor().getValue( workingMemory, left ) ) <= 0;
+            final BigDecimal comp = MathUtils.getBigDecimal( ((ObjectVariableContextEntry) context).right );
+            return comp.compareTo( context.declaration.getExtractor().getBigDecimalValue( workingMemory, left ) ) <= 0;
         }
 
         public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
@@ -292,8 +293,8 @@
             if( context.extractor.isNullValue( workingMemory, right ) ) {
                 return false;
             }
-            final BigDecimal comp = (BigDecimal) context.extractor.getValue( workingMemory, right );
-            return comp.compareTo( (BigDecimal) ((ObjectVariableContextEntry) context).left ) <= 0;
+            final BigDecimal comp = context.extractor.getBigDecimalValue( workingMemory, right );
+            return comp.compareTo( MathUtils.getBigDecimal( ((ObjectVariableContextEntry) context).left ) ) <= 0;
         }
 
         public boolean evaluate(InternalWorkingMemory workingMemory,
@@ -303,8 +304,8 @@
             if( extractor1.isNullValue( workingMemory, object1 ) ) {
                 return false;
             }
-            final BigDecimal comp = (BigDecimal) extractor1.getValue( workingMemory, object1 );
-            return comp.compareTo( (BigDecimal) extractor2.getValue( workingMemory, object2 ) ) <= 0;
+            final BigDecimal comp = extractor1.getBigDecimalValue( workingMemory, object1 );
+            return comp.compareTo( extractor2.getBigDecimalValue( workingMemory, object2 ) ) <= 0;
         }
 
         public String toString() {
@@ -330,7 +331,7 @@
             if( extractor.isNullValue( workingMemory, object1 ) ) {
                 return false;
             }
-            final BigDecimal comp = (BigDecimal) extractor.getValue( workingMemory, object1 );
+            final BigDecimal comp = extractor.getBigDecimalValue( workingMemory, object1 );
             return comp.compareTo( object2.getBigDecimalValue() ) > 0;
         }
 
@@ -339,8 +340,8 @@
             if( context.rightNull ) {
                 return false;
             }
-            final BigDecimal comp = (BigDecimal) ((ObjectVariableContextEntry) context).right;
-            return comp.compareTo( (BigDecimal) context.declaration.getExtractor().getValue( workingMemory, left ) ) > 0;
+            final BigDecimal comp = MathUtils.getBigDecimal( ((ObjectVariableContextEntry) context).right );
+            return comp.compareTo( context.declaration.getExtractor().getBigDecimalValue( workingMemory, left ) ) > 0;
         }
 
         public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
@@ -348,8 +349,8 @@
             if( context.extractor.isNullValue( workingMemory, right ) ) {
                 return false;
             }
-            final BigDecimal comp = (BigDecimal) context.extractor.getValue( workingMemory, right );
-            return comp.compareTo( (BigDecimal) ((ObjectVariableContextEntry) context).left ) > 0;
+            final BigDecimal comp = context.extractor.getBigDecimalValue( workingMemory, right );
+            return comp.compareTo( MathUtils.getBigDecimal( ((ObjectVariableContextEntry) context).left ) ) > 0;
         }
 
         public boolean evaluate(InternalWorkingMemory workingMemory,
@@ -359,8 +360,8 @@
             if( extractor1.isNullValue( workingMemory, object1 ) ) {
                 return false;
             }
-            final BigDecimal comp = (BigDecimal) extractor1.getValue( workingMemory, object1 );
-            return comp.compareTo( (BigDecimal) extractor2.getValue( workingMemory, object2 ) ) > 0;
+            final BigDecimal comp = extractor1.getBigDecimalValue( workingMemory, object1 );
+            return comp.compareTo( extractor2.getBigDecimalValue( workingMemory, object2 ) ) > 0;
         }
 
         public String toString() {
@@ -386,7 +387,7 @@
             if( extractor.isNullValue( workingMemory, object1 ) ) {
                 return false;
             }
-            final BigDecimal comp = (BigDecimal) extractor.getValue( workingMemory, object1 );
+            final BigDecimal comp = extractor.getBigDecimalValue( workingMemory, object1 );
             return comp.compareTo( object2.getBigDecimalValue() ) >= 0;
         }
 
@@ -395,8 +396,8 @@
             if( context.rightNull ) {
                 return false;
             }
-            final BigDecimal comp = (BigDecimal) ((ObjectVariableContextEntry) context).right;
-            return comp.compareTo( (BigDecimal) context.declaration.getExtractor().getValue( workingMemory, left ) ) >= 0;
+            final BigDecimal comp = MathUtils.getBigDecimal( ((ObjectVariableContextEntry) context).right );
+            return comp.compareTo( context.declaration.getExtractor().getBigDecimalValue( workingMemory, left ) ) >= 0;
         }
 
         public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
@@ -404,8 +405,8 @@
             if( context.extractor.isNullValue( workingMemory, right ) ) {
                 return false;
             }
-            final BigDecimal comp = (BigDecimal) context.extractor.getValue( workingMemory, right );
-            return comp.compareTo( (BigDecimal) ((ObjectVariableContextEntry) context).left ) >= 0;
+            final BigDecimal comp = context.extractor.getBigDecimalValue( workingMemory, right );
+            return comp.compareTo( MathUtils.getBigDecimal( ((ObjectVariableContextEntry) context).left ) ) >= 0;
         }
 
         public boolean evaluate(InternalWorkingMemory workingMemory,
@@ -415,8 +416,8 @@
             if( extractor1.isNullValue( workingMemory, object1 ) ) {
                 return false;
             }
-            final BigDecimal comp = (BigDecimal) extractor1.getValue( workingMemory, object1 );
-            return comp.compareTo( (BigDecimal) extractor2.getValue( workingMemory, object2 ) ) >= 0;
+            final BigDecimal comp = extractor1.getBigDecimalValue( workingMemory, object1 );
+            return comp.compareTo( extractor2.getBigDecimalValue( workingMemory, object2 ) ) >= 0;
         }
 
         public String toString() {
@@ -442,7 +443,7 @@
             if( extractor.isNullValue( workingMemory, object1 ) ) {
                 return false;
             }
-            final BigInteger comp = (BigInteger) extractor.getValue( workingMemory, object1 );
+            final BigInteger comp =  extractor.getBigIntegerValue( workingMemory, object1 );
             return comp.compareTo( object2.getBigIntegerValue() ) < 0;
         }
 
@@ -451,8 +452,8 @@
             if( context.rightNull ) {
                 return false;
             }
-            final BigInteger comp = (BigInteger) ((ObjectVariableContextEntry) context).right;
-            return comp.compareTo( (BigInteger) context.declaration.getExtractor().getValue( workingMemory, left ) ) < 0;
+            final BigInteger comp = MathUtils.getBigInteger( ((ObjectVariableContextEntry) context).right );
+            return comp.compareTo(  context.declaration.getExtractor().getBigIntegerValue( workingMemory, left ) ) < 0;
         }
 
         public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
@@ -460,8 +461,8 @@
             if( context.extractor.isNullValue( workingMemory, right ) ) {
                 return false;
             }
-            final BigInteger comp = (BigInteger) context.extractor.getValue( workingMemory, right );
-            return comp.compareTo( (BigInteger) ((ObjectVariableContextEntry) context).left ) < 0;
+            final BigInteger comp =  context.extractor.getBigIntegerValue( workingMemory, right );
+            return comp.compareTo( MathUtils.getBigInteger(  ((ObjectVariableContextEntry) context).left )) < 0;
         }
 
         public boolean evaluate(InternalWorkingMemory workingMemory,
@@ -471,8 +472,8 @@
             if( extractor1.isNullValue( workingMemory, object1 ) ) {
                 return false;
             }
-            final BigInteger comp = (BigInteger) extractor1.getValue( workingMemory, object1 );
-            return comp.compareTo( (BigInteger) extractor2.getValue( workingMemory, object2 ) ) < 0;
+            final BigInteger comp =  extractor1.getBigIntegerValue( workingMemory, object1 );
+            return comp.compareTo(  extractor2.getBigIntegerValue( workingMemory, object2 ) ) < 0;
         }
 
         public String toString() {
@@ -498,7 +499,7 @@
             if( extractor.isNullValue( workingMemory, object1 ) ) {
                 return false;
             }
-            final BigInteger comp = (BigInteger) extractor.getValue( workingMemory, object1 );
+            final BigInteger comp =  extractor.getBigIntegerValue( workingMemory, object1 );
             return comp.compareTo( object2.getBigIntegerValue() ) <= 0;
         }
 
@@ -507,8 +508,8 @@
             if( context.rightNull ) {
                 return false;
             }
-            final BigInteger comp = (BigInteger) ((ObjectVariableContextEntry) context).right;
-            return comp.compareTo( (BigInteger) context.declaration.getExtractor().getValue( workingMemory, left ) ) <= 0;
+            final BigInteger comp = MathUtils.getBigInteger( ((ObjectVariableContextEntry) context).right );
+            return comp.compareTo(  context.declaration.getExtractor().getBigIntegerValue( workingMemory, left ) ) <= 0;
         }
 
         public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
@@ -516,8 +517,8 @@
             if( context.extractor.isNullValue( workingMemory, right ) ) {
                 return false;
             }
-            final BigInteger comp = (BigInteger) context.extractor.getValue( workingMemory, right );
-            return comp.compareTo( (BigInteger) ((ObjectVariableContextEntry) context).left ) <= 0;
+            final BigInteger comp = context.extractor.getBigIntegerValue( workingMemory, right );
+            return comp.compareTo( MathUtils.getBigInteger( ((ObjectVariableContextEntry) context).left )) <= 0;
         }
 
         public boolean evaluate(InternalWorkingMemory workingMemory,
@@ -527,8 +528,8 @@
             if( extractor1.isNullValue( workingMemory, object1 ) ) {
                 return false;
             }
-            final BigInteger comp = (BigInteger) extractor1.getValue( workingMemory, object1 );
-            return comp.compareTo( (BigInteger) extractor2.getValue( workingMemory, object2 ) ) <= 0;
+            final BigInteger comp =  extractor1.getBigIntegerValue( workingMemory, object1 );
+            return comp.compareTo(  extractor2.getBigIntegerValue( workingMemory, object2 ) ) <= 0;
         }
 
         public String toString() {
@@ -554,7 +555,7 @@
             if( extractor.isNullValue( workingMemory, object1 ) ) {
                 return false;
             }
-            final BigInteger comp = (BigInteger) extractor.getValue( workingMemory, object1 );
+            final BigInteger comp =  extractor.getBigIntegerValue( workingMemory, object1 );
             return comp.compareTo( object2.getBigIntegerValue() ) > 0;
         }
 
@@ -563,8 +564,8 @@
             if( context.rightNull ) {
                 return false;
             }
-            final BigInteger comp = (BigInteger) ((ObjectVariableContextEntry) context).right;
-            return comp.compareTo( (BigInteger) context.declaration.getExtractor().getValue( workingMemory, left ) ) > 0;
+            final BigInteger comp = MathUtils.getBigInteger( ((ObjectVariableContextEntry) context).right );
+            return comp.compareTo( context.declaration.getExtractor().getBigIntegerValue( workingMemory, left ) ) > 0;
         }
 
         public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
@@ -572,8 +573,8 @@
             if( context.extractor.isNullValue( workingMemory, right ) ) {
                 return false;
             }
-            final BigInteger comp = (BigInteger) context.extractor.getValue( workingMemory, right );
-            return comp.compareTo( (BigInteger) ((ObjectVariableContextEntry) context).left ) > 0;
+            final BigInteger comp =  context.extractor.getBigIntegerValue( workingMemory, right );
+            return comp.compareTo( MathUtils.getBigInteger( ((ObjectVariableContextEntry) context).left ) ) > 0;
         }
 
         public boolean evaluate(InternalWorkingMemory workingMemory,
@@ -583,8 +584,8 @@
             if( extractor1.isNullValue( workingMemory, object1 ) ) {
                 return false;
             }
-            final BigInteger comp = (BigInteger) extractor1.getValue( workingMemory, object1 );
-            return comp.compareTo( (BigInteger) extractor2.getValue( workingMemory, object2 ) ) > 0;
+            final BigInteger comp =  extractor1.getBigIntegerValue( workingMemory, object1 );
+            return comp.compareTo(  extractor2.getBigIntegerValue( workingMemory, object2 ) ) > 0;
         }
 
         public String toString() {
@@ -610,7 +611,7 @@
             if( extractor.isNullValue( workingMemory, object1 ) ) {
                 return false;
             }
-            final BigInteger comp = (BigInteger) extractor.getValue( workingMemory, object1 );
+            final BigInteger comp =  extractor.getBigIntegerValue( workingMemory, object1 );
             return comp.compareTo( object2.getBigIntegerValue() ) >= 0;
         }
 
@@ -619,8 +620,8 @@
             if( context.rightNull ) {
                 return false;
             }
-            final BigInteger comp = (BigInteger) ((ObjectVariableContextEntry) context).right;
-            return comp.compareTo( (BigInteger) context.declaration.getExtractor().getValue( workingMemory, left ) ) >= 0;
+            final BigInteger comp = MathUtils.getBigInteger( ((ObjectVariableContextEntry) context).right );
+            return comp.compareTo(  context.declaration.getExtractor().getBigIntegerValue( workingMemory, left ) ) >= 0;
         }
 
         public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
@@ -628,8 +629,8 @@
             if( context.extractor.isNullValue( workingMemory, right ) ) {
                 return false;
             }
-            final BigInteger comp = (BigInteger) context.extractor.getValue( workingMemory, right );
-            return comp.compareTo( (BigInteger) ((ObjectVariableContextEntry) context).left ) >= 0;
+            final BigInteger comp =  context.extractor.getBigIntegerValue( workingMemory, right );
+            return comp.compareTo( MathUtils.getBigInteger( ((ObjectVariableContextEntry) context).left ) ) >= 0;
         }
 
         public boolean evaluate(InternalWorkingMemory workingMemory,
@@ -639,8 +640,8 @@
             if( extractor1.isNullValue( workingMemory, object1 ) ) {
                 return false;
             }
-            final BigInteger comp = (BigInteger) extractor1.getValue( workingMemory, object1 );
-            return comp.compareTo( (BigInteger) extractor2.getValue( workingMemory, object2 ) ) >= 0;
+            final BigInteger comp =  extractor1.getBigIntegerValue( workingMemory, object1 );
+            return comp.compareTo(  extractor2.getBigIntegerValue( workingMemory, object2 ) ) >= 0;
         }
 
         public String toString() {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/EqualityEvaluatorsDefinition.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/EqualityEvaluatorsDefinition.java	2009-05-15 16:26:33 UTC (rev 26569)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/evaluators/EqualityEvaluatorsDefinition.java	2009-05-15 18:46:31 UTC (rev 26570)
@@ -36,6 +36,7 @@
 import org.drools.spi.FieldValue;
 import org.drools.spi.InternalReadAccessor;
 import org.drools.util.DateUtils;
+import org.drools.util.MathUtils;
 
 /**
  * This class defines the default built in equality
@@ -327,7 +328,7 @@
         public boolean evaluate(InternalWorkingMemory workingMemory,
                                 final InternalReadAccessor extractor,
                                 final Object object1, final FieldValue object2) {
-            final Object value1 = extractor.getValue( workingMemory, object1 );
+            final Object value1 = extractor.getBigDecimalValue( workingMemory, object1 );
             final BigDecimal value2 = object2.getBigDecimalValue();
             if ( value1 == null ) {
                 return value2 == null;
@@ -338,29 +339,29 @@
 
         public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
                                            final VariableContextEntry context, final Object left) {
-            final Object value = context.declaration.getExtractor().getValue( workingMemory, left );
+            final Object value = context.declaration.getExtractor().getBigDecimalValue( workingMemory, left );
             if ( value == null ) {
                 return ((ObjectVariableContextEntry) context).right == null;
             }
-            return isEqual(value, ((ObjectVariableContextEntry) context).right);
+            return isEqual(value, MathUtils.getBigDecimal( ((ObjectVariableContextEntry) context).right ));
         }
 
         public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
                                           final VariableContextEntry context, final Object right) {
-            final Object value = context.extractor.getValue( workingMemory, right );
+            final Object value = context.extractor.getBigDecimalValue( workingMemory, right );
             if ( ((ObjectVariableContextEntry) context).left == null ) {
                 return value == null;
             }
 
-            return isEqual(((ObjectVariableContextEntry) context).left, value);
+            return isEqual(MathUtils.getBigDecimal( ((ObjectVariableContextEntry) context).left ), value);
         }
 
         public boolean evaluate(InternalWorkingMemory workingMemory,
                                 final InternalReadAccessor extractor1,
                                 final Object object1,
                                 final InternalReadAccessor extractor2, final Object object2) {
-            final Object value1 = extractor1.getValue( workingMemory, object1 );
-            final Object value2 = extractor2.getValue( workingMemory, object2 );
+            final Object value1 = extractor1.getBigDecimalValue( workingMemory, object1 );
+            final Object value2 = extractor2.getBigDecimalValue( workingMemory, object2 );
             if ( value1 == null ) {
                 return value2 == null;
             }
@@ -391,7 +392,7 @@
         public boolean evaluate(InternalWorkingMemory workingMemory,
                                 final InternalReadAccessor extractor,
                                 final Object object1, final FieldValue object2) {
-            final Object value1 = extractor.getValue( workingMemory, object1 );
+            final Object value1 = extractor.getBigDecimalValue( workingMemory, object1 );
             final Object value2 = object2.getBigDecimalValue();
             if ( value1 == null ) {
                 return value2 != null;
@@ -401,28 +402,28 @@
 
         public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
                                            final VariableContextEntry context, final Object left) {
-            final Object value = context.declaration.getExtractor().getValue( workingMemory, left );
+            final Object value = context.declaration.getExtractor().getBigDecimalValue( workingMemory, left );
             if ( value == null ) {
                 return ((ObjectVariableContextEntry) context).right != null;
             }
-            return !BigDecimalEqualEvaluator.isEqual(value, ((ObjectVariableContextEntry) context).right);
+            return !BigDecimalEqualEvaluator.isEqual(value, MathUtils.getBigDecimal( ((ObjectVariableContextEntry) context).right ));
         }
 
         public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
                                           final VariableContextEntry context, final Object right) {
-            final Object value = context.extractor.getValue( workingMemory, right );
+            final Object value = context.extractor.getBigDecimalValue( workingMemory, right );
             if ( ((ObjectVariableContextEntry) context).left == null ) {
                 return value != null;
             }
-            return !BigDecimalEqualEvaluator.isEqual(((ObjectVariableContextEntry) context).left,  value );
+            return !BigDecimalEqualEvaluator.isEqual(MathUtils.getBigDecimal( ((ObjectVariableContextEntry) context).left ),  value );
         }
 
         public boolean evaluate(InternalWorkingMemory workingMemory,
                                 final InternalReadAccessor extractor1,
                                 final Object object1,
                                 final InternalReadAccessor extractor2, final Object object2) {
-            final Object value1 = extractor1.getValue( workingMemory, object1 );
-            final Object value2 = extractor2.getValue( workingMemory, object2 );
+            final Object value1 = extractor1.getBigDecimalValue( workingMemory, object1 );
+            final Object value2 = extractor2.getBigDecimalValue( workingMemory, object2 );
             if ( value1 == null ) {
                 return value2 != null;
             }
@@ -449,7 +450,7 @@
         public boolean evaluate(InternalWorkingMemory workingMemory,
                                 final InternalReadAccessor extractor,
                                 final Object object1, final FieldValue object2) {
-            final Object value1 = extractor.getValue( workingMemory, object1 );
+            final Object value1 = extractor.getBigIntegerValue( workingMemory, object1 );
             final Object value2 = object2.getBigIntegerValue();
             if ( value1 == null ) {
                 return value2 == null;
@@ -459,28 +460,28 @@
 
         public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
                                            final VariableContextEntry context, final Object left) {
-            final Object value = context.declaration.getExtractor().getValue( workingMemory, left );
+            final Object value = context.declaration.getExtractor().getBigIntegerValue( workingMemory, left );
             if ( value == null ) {
                 return ((ObjectVariableContextEntry) context).right == null;
             }
-            return value.equals( ((ObjectVariableContextEntry) context).right );
+            return value.equals( MathUtils.getBigInteger( ((ObjectVariableContextEntry) context).right ) );
         }
 
         public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
                                           final VariableContextEntry context, final Object right) {
-            final Object value = context.extractor.getValue( workingMemory, right );
+            final Object value = context.extractor.getBigIntegerValue( workingMemory, right );
             if ( ((ObjectVariableContextEntry) context).left == null ) {
                 return value == null;
             }
-            return ((ObjectVariableContextEntry) context).left.equals( value );
+            return MathUtils.getBigInteger( ((ObjectVariableContextEntry) context).left ).equals( value );
         }
 
         public boolean evaluate(InternalWorkingMemory workingMemory,
                                 final InternalReadAccessor extractor1,
                                 final Object object1,
                                 final InternalReadAccessor extractor2, final Object object2) {
-            final Object value1 = extractor1.getValue( workingMemory, object1 );
-            final Object value2 = extractor2.getValue( workingMemory, object2 );
+            final Object value1 = extractor1.getBigIntegerValue( workingMemory, object1 );
+            final Object value2 = extractor2.getBigIntegerValue( workingMemory, object2 );
             if ( value1 == null ) {
                 return value2 == null;
             }
@@ -507,8 +508,8 @@
         public boolean evaluate(InternalWorkingMemory workingMemory,
                                 final InternalReadAccessor extractor,
                                 final Object object1, final FieldValue object2) {
-            final Object value1 = extractor.getValue( workingMemory, object1 );
-            final Object value2 = object2.getBigDecimalValue();
+            final Object value1 = extractor.getBigIntegerValue( workingMemory, object1 );
+            final Object value2 = object2.getBigIntegerValue();
             if ( value1 == null ) {
                 return value2 != null;
             }
@@ -517,28 +518,28 @@
 
         public boolean evaluateCachedRight(InternalWorkingMemory workingMemory,
                                            final VariableContextEntry context, final Object left) {
-            final Object value = context.declaration.getExtractor().getValue( workingMemory, left );
+            final Object value = context.declaration.getExtractor().getBigIntegerValue( workingMemory, left );
             if ( value == null ) {
                 return ((ObjectVariableContextEntry) context).right != null;
             }
-            return !value.equals( ((ObjectVariableContextEntry) context).right );
+            return !value.equals(MathUtils.getBigInteger( ((ObjectVariableContextEntry) context).right ));
         }
 
         public boolean evaluateCachedLeft(InternalWorkingMemory workingMemory,
                                           final VariableContextEntry context, final Object right) {
-            final Object value = context.extractor.getValue( workingMemory, right );
+            final Object value = context.extractor.getBigIntegerValue( workingMemory, right );
             if ( ((ObjectVariableContextEntry) context).left == null ) {
                 return value != null;
             }
-            return !((ObjectVariableContextEntry) context).left.equals( value );
+            return !MathUtils.getBigInteger( ((ObjectVariableContextEntry) context).left).equals( value );
         }
 
         public boolean evaluate(InternalWorkingMemory workingMemory,
                                 final InternalReadAccessor extractor1,
                                 final Object object1,
                                 final InternalReadAccessor extractor2, final Object object2) {
-            final Object value1 = extractor1.getValue( workingMemory, object1 );
-            final Object value2 = extractor2.getValue( workingMemory, object2 );
+            final Object value1 = extractor1.getBigIntegerValue( workingMemory, object1 );
+            final Object value2 = extractor2.getBigIntegerValue( workingMemory, object2 );
             if ( value1 == null ) {
                 return value2 != null;
             }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/ArrayElementReader.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/ArrayElementReader.java	2009-05-15 16:26:33 UTC (rev 26569)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/extractors/ArrayElementReader.java	2009-05-15 18:46:31 UTC (rev 26570)
@@ -5,12 +5,15 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.lang.reflect.Method;
+import java.math.BigDecimal;
+import java.math.BigInteger;
 
 import org.drools.base.ValueType;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.spi.AcceptsReadAccessor;
 import org.drools.spi.InternalReadAccessor;
 import org.drools.util.ClassUtils;
+import org.drools.util.MathUtils;
 
 public class ArrayElementReader implements AcceptsReadAccessor, InternalReadAccessor, Externalizable  {
     private InternalReadAccessor arrayReadAccessor;
@@ -92,6 +95,17 @@
         Object[] array = ( Object[] ) this.arrayReadAccessor.getValue( workingMemory, object );
         return array[ this.index ];
     }
+    public BigDecimal getBigDecimalValue(InternalWorkingMemory workingMemory,
+                                         Object object) {
+        Object[] array = ( Object[] ) this.arrayReadAccessor.getValue( workingMemory, object );
+        return MathUtils.getBigDecimal( array[ this.index ] );
+    }
+
+    public BigInteger getBigIntegerValue(InternalWorkingMemory workingMemory,
+                                         Object object) {
+        Object[] array = ( Object[] ) this.arrayReadAccessor.getValue( workingMemory, object );
+        return MathUtils.getBigInteger( array[ this.index ] );
+    }
     public ValueType getValueType() {
         return ValueType.OBJECT_TYPE;
     }
@@ -191,4 +205,12 @@
         return isNullValue( null,
                             object );
     }
+
+    public BigDecimal getBigDecimalValue(Object object) {
+        return null;
+    }
+
+    public BigInteger getBigIntegerValue(Object object) {
+        return null;
+    }
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/DoubleFieldImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/DoubleFieldImpl.java	2009-05-15 16:26:33 UTC (rev 26569)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/DoubleFieldImpl.java	2009-05-15 18:46:31 UTC (rev 26570)
@@ -122,7 +122,7 @@
 	}
 
 	public BigInteger getBigIntegerValue() {
-		throw new RuntimeDroolsException( "Conversion to BigInteger not supported for type double" );
+		return new BigDecimal(this.value).toBigInteger();
 	}
 
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/ObjectFieldImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/ObjectFieldImpl.java	2009-05-15 16:26:33 UTC (rev 26569)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/ObjectFieldImpl.java	2009-05-15 18:46:31 UTC (rev 26570)
@@ -27,6 +27,7 @@
 
 import org.drools.RuntimeDroolsException;
 import org.drools.spi.FieldValue;
+import org.drools.util.MathUtils;
 
 public class ObjectFieldImpl
     implements
@@ -230,25 +231,11 @@
     }
 
 	public BigDecimal getBigDecimalValue() {
-		if (this.value instanceof BigDecimal) return (BigDecimal) this.value;
-		if (this.isNumber) {
-			return new BigDecimal(((Number) value).doubleValue());
-		} else if (this.isString) {
-			return new BigDecimal((String) value);
-		}
-		if (this.value == null) return null;
-        throw new RuntimeDroolsException( "Conversion to BigDecimal not supported for type: " + this.value.getClass() );
+	    return MathUtils.getBigDecimal( this.value );
 	}
 
 	public BigInteger getBigIntegerValue() {
-		if (this.value instanceof BigInteger) return (BigInteger) this.value;
-		if (this.isNumber) {
-			return BigInteger.valueOf(((Number) value).longValue());
-		} else if (this.isString) {
-			return new BigInteger((String) value);
-		}
-		if (this.value == null) return null;
-        throw new RuntimeDroolsException( "Conversion to BigInteger not supported for type: " + this.value.getClass() );
+        return MathUtils.getBigInteger( this.value );
 	}
 
     public boolean isEnum() {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateFieldExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateFieldExtractor.java	2009-05-15 16:26:33 UTC (rev 26569)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/facttemplates/FactTemplateFieldExtractor.java	2009-05-15 18:46:31 UTC (rev 26570)
@@ -5,11 +5,14 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.lang.reflect.Method;
+import java.math.BigDecimal;
+import java.math.BigInteger;
 
 import org.drools.RuntimeDroolsException;
 import org.drools.base.ValueType;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.util.ClassUtils;
+import org.drools.util.MathUtils;
 
 public class FactTemplateFieldExtractor
     implements
@@ -181,6 +184,28 @@
                          object );
     }
 
+    public BigDecimal getBigDecimalValue(Object object) {
+        return getBigDecimalValue( null,
+                                   object );
+    }
+
+    public BigInteger getBigIntegerValue(Object object) {
+        return getBigIntegerValue( null,
+                                   object );
+    }
+
+    public BigDecimal getBigDecimalValue(InternalWorkingMemory workingMemory,
+                                         Object object) {
+        return MathUtils.getBigDecimal( getValue( workingMemory,
+                                                  object ) );
+    }
+
+    public BigInteger getBigIntegerValue(InternalWorkingMemory workingMemory,
+                                         Object object) {
+        return MathUtils.getBigInteger( getValue( workingMemory,
+                                                  object ) );
+    }
+
     public boolean isNullValue(Object object) {
         return isNullValue( null,
                             object );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalExtractor.java	2009-05-15 16:26:33 UTC (rev 26569)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/GlobalExtractor.java	2009-05-15 18:46:31 UTC (rev 26570)
@@ -21,11 +21,14 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.lang.reflect.Method;
+import java.math.BigDecimal;
+import java.math.BigInteger;
 
 import org.drools.RuntimeDroolsException;
 import org.drools.base.ClassObjectType;
 import org.drools.base.ValueType;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.util.MathUtils;
 
 /**
  * This is a global variable extractor used to get a global variable value
@@ -152,6 +155,18 @@
         throw new ClassCastException("Not possible to convert global '"+identifier+"' into a short.");
     }
 
+    public BigDecimal getBigDecimalValue(InternalWorkingMemory workingMemory,
+                                         Object object) {
+        return MathUtils.getBigDecimal( getValue( workingMemory,
+                                                  object ) );
+    }
+
+    public BigInteger getBigIntegerValue(InternalWorkingMemory workingMemory,
+                                         Object object) {
+        return MathUtils.getBigInteger( getValue( workingMemory,
+                                                  object ) );
+    }
+
     public Method getNativeReadMethod() {
         try {
             return this.getClass().getDeclaredMethod( "getValue",
@@ -203,39 +218,45 @@
     }
 
     public boolean getBooleanValue(Object object) {
-        throw new RuntimeDroolsException("Can't extract a value from a global without a working memory reference");
+        throw new RuntimeDroolsException("Can't extract a value from global "+identifier+" without a working memory reference");
     }
     public byte getByteValue(Object object) {
-        throw new RuntimeDroolsException("Can't extract a value from a global without a working memory reference");
+        throw new RuntimeDroolsException("Can't extract a value from global "+identifier+" without a working memory reference");
     }
     public char getCharValue(Object object) {
-        throw new RuntimeDroolsException("Can't extract a value from a global without a working memory reference");
+        throw new RuntimeDroolsException("Can't extract a value from global "+identifier+" without a working memory reference");
     }
     public double getDoubleValue(Object object) {
-        throw new RuntimeDroolsException("Can't extract a value from a global without a working memory reference");
+        throw new RuntimeDroolsException("Can't extract a value from global "+identifier+" without a working memory reference");
     }
     public float getFloatValue(Object object) {
-        throw new RuntimeDroolsException("Can't extract a value from a global without a working memory reference");
+        throw new RuntimeDroolsException("Can't extract a value from global "+identifier+" without a working memory reference");
     }
     public int getHashCode(Object object) {
-        throw new RuntimeDroolsException("Can't extract a value from a global without a working memory reference");
+        throw new RuntimeDroolsException("Can't extract a value from global "+identifier+" without a working memory reference");
     }
     public int getIndex() {
-        throw new RuntimeDroolsException("Can't extract a value from a global without a working memory reference");
+        throw new RuntimeDroolsException("Can't extract a value from global "+identifier+" without a working memory reference");
     }
     public int getIntValue(Object object) {
-        throw new RuntimeDroolsException("Can't extract a value from a global without a working memory reference");
+        throw new RuntimeDroolsException("Can't extract a value from global "+identifier+" without a working memory reference");
     }
     public long getLongValue(Object object) {
-        throw new RuntimeDroolsException("Can't extract a value from a global without a working memory reference");
+        throw new RuntimeDroolsException("Can't extract a value from global "+identifier+" without a working memory reference");
     }
     public short getShortValue(Object object) {
-        throw new RuntimeDroolsException("Can't extract a value from a global without a working memory reference");
+        throw new RuntimeDroolsException("Can't extract a value from global "+identifier+" without a working memory reference");
     }
     public Object getValue(Object object) {
-        throw new RuntimeDroolsException("Can't extract a value from a global without a working memory reference");
+        throw new RuntimeDroolsException("Can't extract a value from global "+identifier+" without a working memory reference");
     }
+    public BigDecimal getBigDecimalValue(Object object) {
+        throw new RuntimeDroolsException("Can't extract a value from global "+identifier+" without a working memory reference");
+    }
+    public BigInteger getBigIntegerValue(Object object) {
+        throw new RuntimeDroolsException("Can't extract a value from global "+identifier+" without a working memory reference");
+    }
     public boolean isNullValue(Object object) {
-        throw new RuntimeDroolsException("Can't extract a value from a global without a working memory reference");
+        throw new RuntimeDroolsException("Can't extract a value from global "+identifier+" without a working memory reference");
     }
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/InternalReadAccessor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/InternalReadAccessor.java	2009-05-15 16:26:33 UTC (rev 26569)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/InternalReadAccessor.java	2009-05-15 18:46:31 UTC (rev 26570)
@@ -16,6 +16,9 @@
  * limitations under the License.
  */
 
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
 import org.drools.common.InternalWorkingMemory;
 
 public interface InternalReadAccessor
@@ -24,6 +27,10 @@
 
     public Object getValue(InternalWorkingMemory workingMemory, Object object);
 
+    public BigDecimal getBigDecimalValue(InternalWorkingMemory workingMemory, Object object);
+
+    public BigInteger getBigIntegerValue(InternalWorkingMemory workingMemory, Object object);
+
     public char getCharValue(InternalWorkingMemory workingMemory, Object object);
 
     public int getIntValue(InternalWorkingMemory workingMemory, Object object);

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/PatternExtractor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/PatternExtractor.java	2009-05-15 16:26:33 UTC (rev 26569)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/PatternExtractor.java	2009-05-15 18:46:31 UTC (rev 26570)
@@ -5,6 +5,8 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.lang.reflect.Method;
+import java.math.BigDecimal;
+import java.math.BigInteger;
 
 import org.drools.RuntimeDroolsException;
 import org.drools.base.ClassObjectType;
@@ -13,6 +15,7 @@
 import org.drools.common.InternalWorkingMemory;
 import org.drools.facttemplates.Fact;
 import org.drools.util.ClassUtils;
+import org.drools.util.MathUtils;
 
 /*
  * Copyright 2005 JBoss Inc
@@ -261,7 +264,29 @@
         return getValue( null,
                          object );
     }
+    
+    public BigDecimal getBigDecimalValue(Object object) {
+        return getBigDecimalValue( null,
+                                   object );
+    }
 
+    public BigInteger getBigIntegerValue(Object object) {
+        return getBigIntegerValue( null,
+                                   object );
+    }
+
+    public BigDecimal getBigDecimalValue(InternalWorkingMemory workingMemory,
+                                         Object object) {
+        return MathUtils.getBigDecimal( getValue( workingMemory,
+                                                  object ) );
+    }
+
+    public BigInteger getBigIntegerValue(InternalWorkingMemory workingMemory,
+                                         Object object) {
+        return MathUtils.getBigInteger( getValue( workingMemory,
+                                                  object ) );
+    }
+
     public boolean isNullValue(Object object) {
         return isNullValue( null,
                             object );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ReadAccessor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ReadAccessor.java	2009-05-15 16:26:33 UTC (rev 26569)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ReadAccessor.java	2009-05-15 18:46:31 UTC (rev 26570)
@@ -1,6 +1,8 @@
 package org.drools.spi;
 
 import java.lang.reflect.Method;
+import java.math.BigDecimal;
+import java.math.BigInteger;
 
 import org.drools.base.ValueType;
 
@@ -27,6 +29,10 @@
 
     public Object getValue(Object object);
 
+    public BigDecimal getBigDecimalValue(Object object);
+
+    public BigInteger getBigIntegerValue(Object object);
+
     public char getCharValue(Object object);
 
     public int getIntValue(Object object);

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/WriteAccessor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/WriteAccessor.java	2009-05-15 16:26:33 UTC (rev 26569)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/WriteAccessor.java	2009-05-15 18:46:31 UTC (rev 26570)
@@ -18,6 +18,8 @@
 
 import java.io.Externalizable;
 import java.lang.reflect.Method;
+import java.math.BigDecimal;
+import java.math.BigInteger;
 
 import org.drools.base.ValueType;
 
@@ -35,6 +37,10 @@
 
     public void setValue( Object bean, Object value );
 
+    public void setBigDecimalValue( Object bean, BigDecimal value );
+
+    public void setBigIntegerValue( Object bean, BigInteger value );
+
     public void setCharValue( Object bean, char value );
 
     public void setIntValue( Object bean, int value );

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/MathUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/MathUtils.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/MathUtils.java	2009-05-15 18:46:31 UTC (rev 26570)
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2008 Red Hat
+ * 
+ * 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.
+ *
+ */
+package org.drools.util;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+/**
+ * Utility methods for math classes
+ * 
+ * @author etirelli
+ */
+public class MathUtils {
+    
+    public static BigDecimal getBigDecimal( Object value ) {
+        BigDecimal ret = null;
+        if( value != null ) {
+            if( value instanceof BigDecimal ) {
+                ret = (BigDecimal) value;
+            } else if( value instanceof String ) {
+                ret = new BigDecimal( (String) value );
+            } else if( value instanceof BigInteger ) {
+                ret = new BigDecimal( (BigInteger) value );
+            } else if( value instanceof Number ) {
+                ret = new BigDecimal( ((Number)value).doubleValue() );
+            } else {
+                throw new ClassCastException("Not possible to coerce ["+value+"] from class "+value.getClass()+" into a BigDecimal.");
+            }
+        }
+        return ret;
+    }
+
+    public static BigInteger getBigInteger(Object value) {
+        BigInteger ret = null;
+        if ( value != null ) {
+            if ( value instanceof BigInteger ) {
+                ret = (BigInteger) value;
+            } else if ( value instanceof String ) {
+                ret = new BigInteger( (String) value );
+            } else if ( value instanceof BigDecimal ) {
+                ret = ((BigDecimal) value).toBigInteger();
+            } else if ( value instanceof Number ) {
+                ret = BigInteger.valueOf( ((Number) value).longValue() );
+            } else {
+                throw new ClassCastException( "Not possible to coerce [" + value + "] from class " + value.getClass() + " into a BigInteger." );
+            }
+        }
+        return ret;
+    }
+
+}

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	2009-05-15 16:26:33 UTC (rev 26569)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/EvaluatorFactoryTest.java	2009-05-15 18:46:31 UTC (rev 26570)
@@ -44,6 +44,7 @@
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldValue;
 import org.drools.spi.InternalReadAccessor;
+import org.drools.util.MathUtils;
 
 /**
  * Some test coverage goodness for the evaluators.
@@ -134,15 +135,49 @@
                     ValueType.BIG_DECIMAL_TYPE );
 
         Collection col = new ArrayList();
-        col.add( new BigDecimal( 42 ) );
-        col.add( new BigDecimal( 45 ) );
+        col.add( new BigDecimal( 42.0 ) );
+        col.add( new BigDecimal( 45.0 ) );
 
-        final Object[][] data = {{new BigDecimal( 42 ), "==", new BigDecimal( 42 ), Boolean.TRUE}, {new BigDecimal( 42 ), "<", new BigDecimal( 43 ), Boolean.TRUE}, {new BigDecimal( 42 ), ">=", new BigDecimal( 41 ), Boolean.TRUE},
-                {new BigDecimal( 42 ), "!=", new BigDecimal( 41 ), Boolean.TRUE}, {new BigDecimal( 42 ), ">", new BigDecimal( 41 ), Boolean.TRUE}, {new BigDecimal( 42 ), "<=", new BigDecimal( 42 ), Boolean.TRUE},
-                {new BigDecimal( 42 ), ">", new BigDecimal( 100 ), Boolean.FALSE}, {new BigDecimal( 42 ), "==", null, Boolean.FALSE}, {new BigDecimal( 42 ), "!=", null, Boolean.TRUE}, {null, "==", new BigDecimal( 42 ), Boolean.FALSE},
-                {null, "!=", new BigDecimal( 42 ), Boolean.TRUE}, {null, "<", new BigDecimal( 43 ), Boolean.FALSE}, {null, ">=", new BigDecimal( -10 ), Boolean.FALSE}, {null, ">", new BigDecimal( -10 ), Boolean.FALSE},
-                {null, "<=", new BigDecimal( 42 ), Boolean.FALSE}, {new BigDecimal( 42 ), "memberOf", col, Boolean.TRUE}, {new BigDecimal( 43 ), "memberOf", col, Boolean.FALSE}, {null, "memberOf", col, Boolean.FALSE},
-                {new BigDecimal( 42 ), "memberOf", null, Boolean.FALSE}, {new BigDecimal( 42 ), "not memberOf", col, Boolean.FALSE}, {new BigDecimal( 43 ), "not memberOf", col, Boolean.TRUE}, {null, "not memberOf", col, Boolean.TRUE},
+        final Object[][] data = {
+                {new BigDecimal( 42 ), "==", new BigDecimal( 42 ), Boolean.TRUE}, 
+                {new BigDecimal( 42 ), "==", new BigDecimal( "42.0" ), Boolean.TRUE}, 
+                {new BigDecimal( 42 ), "!=", new BigDecimal( "42.0" ), Boolean.FALSE}, 
+                {new BigDecimal( 45 ), "==", new Double( 45.0 ), Boolean.TRUE}, 
+                {new BigDecimal( 45 ), "!=", new Double( 45.0 ), Boolean.FALSE}, 
+                {new BigDecimal( 42 ), "==", new BigInteger( "42" ), Boolean.TRUE}, 
+                {new BigDecimal( 42 ), "!=", new BigInteger( "42" ), Boolean.FALSE}, 
+                {new BigDecimal( 42 ), "<", new BigDecimal( 43 ), Boolean.TRUE}, 
+                {new BigDecimal( 42 ), ">=", new BigDecimal( 41 ), Boolean.TRUE},
+                {new BigDecimal( 42 ), ">=", new BigDecimal( "41.0" ), Boolean.TRUE},
+                {new BigDecimal( 42 ), "!=", new BigDecimal( 41 ), Boolean.TRUE}, 
+                {new BigDecimal( 42 ), ">", new BigDecimal( 41 ), Boolean.TRUE}, 
+                {new BigDecimal( 42 ), "<=", new BigDecimal( 42 ), Boolean.TRUE},
+                {new BigDecimal( 42 ), ">", new BigDecimal( 100 ), Boolean.FALSE}, 
+                {new BigDecimal( 42 ), "<", new Double( 43 ), Boolean.TRUE}, 
+                {new BigDecimal( 42 ), ">=", new Double( 41 ), Boolean.TRUE},
+                {new BigDecimal( 42 ), ">", new Double( 41 ), Boolean.TRUE}, 
+                {new BigDecimal( 42 ), "<=", new Double( 42 ), Boolean.TRUE},
+                {new BigDecimal( 42 ), ">", new Double( 100 ), Boolean.FALSE}, 
+                {new BigDecimal( 42 ), "<", new BigInteger( "43" ), Boolean.TRUE}, 
+                {new BigDecimal( 42 ), ">=", new BigInteger( "41" ), Boolean.TRUE},
+                {new BigDecimal( 42 ), ">", new BigInteger( "41" ), Boolean.TRUE}, 
+                {new BigDecimal( 42 ), "<=", new BigInteger( "42" ), Boolean.TRUE},
+                {new BigDecimal( 42 ), ">", new BigInteger( "100" ), Boolean.FALSE}, 
+                {new BigDecimal( 42 ), "==", null, Boolean.FALSE}, 
+                {new BigDecimal( 42 ), "!=", null, Boolean.TRUE}, 
+                {null, "==", new BigDecimal( 42 ), Boolean.FALSE},
+                {null, "!=", new BigDecimal( 42 ), Boolean.TRUE}, 
+                {null, "<", new BigDecimal( 43 ), Boolean.FALSE}, 
+                {null, ">=", new BigDecimal( -10 ), Boolean.FALSE}, 
+                {null, ">", new BigDecimal( -10 ), Boolean.FALSE},
+                {null, "<=", new BigDecimal( 42 ), Boolean.FALSE}, 
+                {new BigDecimal( 42 ), "memberOf", col, Boolean.TRUE}, 
+                {new BigDecimal( 43 ), "memberOf", col, Boolean.FALSE}, 
+                {null, "memberOf", col, Boolean.FALSE},
+                {new BigDecimal( 42 ), "memberOf", null, Boolean.FALSE}, 
+                {new BigDecimal( 42 ), "not memberOf", col, Boolean.FALSE}, 
+                {new BigDecimal( 43 ), "not memberOf", col, Boolean.TRUE}, 
+                {null, "not memberOf", col, Boolean.TRUE},
                 {new BigDecimal( 42 ), "not memberOf", null, Boolean.FALSE}};
 
         runEvaluatorTest( data,
@@ -160,12 +195,39 @@
         col.add( new BigInteger( "42" ) );
         col.add( new BigInteger( "45" ) );
 
-        final Object[][] data = {{new BigInteger( "42" ), "==", new BigInteger( "42" ), Boolean.TRUE}, {new BigInteger( "42" ), "<", new BigInteger( "43" ), Boolean.TRUE}, {new BigInteger( "42" ), ">=", new BigInteger( "41" ), Boolean.TRUE},
-                {new BigInteger( "42" ), "!=", new BigInteger( "41" ), Boolean.TRUE}, {new BigInteger( "42" ), ">", new BigInteger( "41" ), Boolean.TRUE}, {new BigInteger( "42" ), "<=", new BigInteger( "42" ), Boolean.TRUE},
-                {new BigInteger( "42" ), ">", new BigInteger( "100" ), Boolean.FALSE}, {new BigInteger( "42" ), "==", null, Boolean.FALSE}, {new BigInteger( "42" ), "!=", null, Boolean.TRUE}, {null, "==", new BigInteger( "42" ), Boolean.FALSE},
-                {null, "!=", new BigInteger( "42" ), Boolean.TRUE}, {null, "<", new BigInteger( "43" ), Boolean.FALSE}, {null, ">=", new BigInteger( "-10" ), Boolean.FALSE}, {null, ">", new BigInteger( "-10" ), Boolean.FALSE},
-                {null, "<=", new BigInteger( "42" ), Boolean.FALSE}, {new BigInteger( "42" ), "memberOf", col, Boolean.TRUE}, {new BigInteger( "43" ), "memberOf", col, Boolean.FALSE}, {null, "memberOf", col, Boolean.FALSE},
-                {new BigInteger( "42" ), "memberOf", null, Boolean.FALSE}, {new BigInteger( "42" ), "not memberOf", col, Boolean.FALSE}, {new BigInteger( "43" ), "not memberOf", col, Boolean.TRUE}, {null, "not memberOf", col, Boolean.TRUE},
+        final Object[][] data = {
+                {new BigInteger( "42" ), "==", new BigInteger( "42" ), Boolean.TRUE}, 
+                {new BigInteger( "42" ), "==", new BigDecimal( "42.0" ), Boolean.TRUE}, 
+                {new BigInteger( "42" ), "==", new Double( 42 ), Boolean.TRUE}, 
+                {new BigInteger( "42" ), "!=", new BigDecimal( "43.0" ), Boolean.TRUE}, 
+                {new BigInteger( "42" ), "!=", new Double( 43 ), Boolean.TRUE}, 
+                {new BigInteger( "42" ), "<", new BigInteger( "43" ), Boolean.TRUE}, 
+                {new BigInteger( "42" ), ">=", new BigInteger( "41" ), Boolean.TRUE},
+                {new BigInteger( "42" ), "!=", new BigInteger( "41" ), Boolean.TRUE}, 
+                {new BigInteger( "42" ), ">", new BigInteger( "41" ), Boolean.TRUE}, 
+                {new BigInteger( "42" ), "<=", new BigInteger( "42" ), Boolean.TRUE},
+                {new BigInteger( "42" ), ">", new BigInteger( "100" ), Boolean.FALSE},
+                {new BigInteger( "42" ), "<", new Long( "43" ), Boolean.TRUE}, 
+                {new BigInteger( "42" ), ">=", new Long( "41" ), Boolean.TRUE},
+                {new BigInteger( "42" ), "!=", new Long( "41" ), Boolean.TRUE}, 
+                {new BigInteger( "42" ), ">", new Long( "41" ), Boolean.TRUE}, 
+                {new BigInteger( "42" ), "<=", new Long( "42" ), Boolean.TRUE},
+                {new BigInteger( "42" ), ">", new Long( "100" ), Boolean.FALSE}, 
+                {new BigInteger( "42" ), "==", null, Boolean.FALSE}, 
+                {new BigInteger( "42" ), "!=", null, Boolean.TRUE}, 
+                {null, "==", new BigInteger( "42" ), Boolean.FALSE},
+                {null, "!=", new BigInteger( "42" ), Boolean.TRUE}, 
+                {null, "<", new BigInteger( "43" ), Boolean.FALSE}, 
+                {null, ">=", new BigInteger( "-10" ), Boolean.FALSE}, 
+                {null, ">", new BigInteger( "-10" ), Boolean.FALSE},
+                {null, "<=", new BigInteger( "42" ), Boolean.FALSE}, 
+                {new BigInteger( "42" ), "memberOf", col, Boolean.TRUE}, 
+                {new BigInteger( "43" ), "memberOf", col, Boolean.FALSE}, 
+                {null, "memberOf", col, Boolean.FALSE},
+                {new BigInteger( "42" ), "memberOf", null, Boolean.FALSE}, 
+                {new BigInteger( "42" ), "not memberOf", col, Boolean.FALSE}, 
+                {new BigInteger( "43" ), "not memberOf", col, Boolean.TRUE}, 
+                {null, "not memberOf", col, Boolean.TRUE},
                 {new BigInteger( "42" ), "not memberOf", null, Boolean.FALSE}};
 
         runEvaluatorTest( data,
@@ -707,6 +769,24 @@
             return false;
         }
 
+        public BigDecimal getBigDecimalValue(InternalWorkingMemory workingMemory,
+                                             Object object) {
+            return MathUtils.getBigDecimal( object );
+        }
+
+        public BigInteger getBigIntegerValue(InternalWorkingMemory workingMemory,
+                                             Object object) {
+            return MathUtils.getBigInteger( object );
+        }
+
+        public BigDecimal getBigDecimalValue(Object object) {
+            return MathUtils.getBigDecimal( object );
+        }
+
+        public BigInteger getBigIntegerValue(Object object) {
+            return MathUtils.getBigInteger( object );
+        }
+
     }
 
     //    public void testRegexFoo() {

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TemporalEvaluatorFactoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TemporalEvaluatorFactoryTest.java	2009-05-15 16:26:33 UTC (rev 26569)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TemporalEvaluatorFactoryTest.java	2009-05-15 18:46:31 UTC (rev 26570)
@@ -20,6 +20,8 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.lang.reflect.Method;
+import java.math.BigDecimal;
+import java.math.BigInteger;
 
 import junit.framework.TestCase;
 
@@ -1216,6 +1218,28 @@
             return false;
         }
 
+        public BigDecimal getBigDecimalValue(InternalWorkingMemory workingMemory,
+                                             Object object) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public BigInteger getBigIntegerValue(InternalWorkingMemory workingMemory,
+                                             Object object) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public BigDecimal getBigDecimalValue(Object object) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public BigInteger getBigIntegerValue(Object object) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
     }
 
 }

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/evaluators/BigDecimalEqualityTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/evaluators/BigDecimalEqualityTest.java	2009-05-15 16:26:33 UTC (rev 26569)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/evaluators/BigDecimalEqualityTest.java	2009-05-15 18:46:31 UTC (rev 26570)
@@ -261,6 +261,28 @@
         public int getIndex() {
             return 0;  //To change body of implemented methods use File | Settings | File Templates.
         }
+
+        public BigDecimal getBigDecimalValue(InternalWorkingMemory workingMemory,
+                                             Object object) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public BigInteger getBigIntegerValue(InternalWorkingMemory workingMemory,
+                                             Object object) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public BigDecimal getBigDecimalValue(Object object) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public BigInteger getBigIntegerValue(Object object) {
+            // TODO Auto-generated method stub
+            return null;
+        }
     }
     
 }

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java	2009-05-15 16:26:33 UTC (rev 26569)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java	2009-05-15 18:46:31 UTC (rev 26570)
@@ -4,6 +4,8 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.lang.reflect.Method;
+import java.math.BigDecimal;
+import java.math.BigInteger;
 
 import junit.framework.TestCase;
 
@@ -547,6 +549,28 @@
             return false;
         }
 
+        public BigDecimal getBigDecimalValue(InternalWorkingMemory workingMemory,
+                                             Object object) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public BigInteger getBigIntegerValue(InternalWorkingMemory workingMemory,
+                                             Object object) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public BigDecimal getBigDecimalValue(Object object) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public BigInteger getBigIntegerValue(Object object) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
     }
 
     static class MockBetaNode extends BetaNode {




More information about the jboss-svn-commits mailing list