[jboss-svn-commits] JBL Code SVN: r26819 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools/base and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jun 3 17:49:06 EDT 2009


Author: tirelli
Date: 2009-06-03 17:49:06 -0400 (Wed, 03 Jun 2009)
New Revision: 26819

Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldFactory.java
Log:
JBRULES-2105: fixing FieldFactory to store BigDecimal and BigInteger values as is, avoiding coercion everytime a field is queried

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java	2009-06-03 21:30:29 UTC (rev 26818)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java	2009-06-03 21:49:06 UTC (rev 26819)
@@ -17,6 +17,8 @@
 package org.drools.rule.builder.dialect.java;
 
 import java.io.InputStreamReader;
+import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.util.Calendar;
 import java.util.HashSet;
 
@@ -31,11 +33,19 @@
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.guvnor.client.modeldriven.brl.FieldConstraint;
+import org.drools.lang.descr.AndDescr;
 import org.drools.lang.descr.AttributeDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
 import org.drools.lang.descr.PackageDescr;
+import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.RuleDescr;
 import org.drools.rule.GroupElement;
+import org.drools.rule.LiteralConstraint;
+import org.drools.rule.LiteralRestriction;
 import org.drools.rule.Package;
+import org.drools.rule.Pattern;
 import org.drools.rule.Rule;
 import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.RuleBuilder;
@@ -237,4 +247,60 @@
         mockery.assertIsSatisfied();
 
     }
+    
+    public void testBuildBigDecimalLiteralConstraint() throws Exception {
+        final PackageDescr pkgDescr = new PackageDescr("org.drools");
+        final RuleDescr ruleDescr = new RuleDescr("Test Rule");
+        AndDescr andDescr = new AndDescr();
+        PatternDescr patDescr = new PatternDescr("java.math.BigDecimal", "$bd");
+        FieldConstraintDescr fcd = new FieldConstraintDescr("this");
+        LiteralRestrictionDescr restr = new LiteralRestrictionDescr("==", "10");
+        fcd.addRestriction( restr );
+        patDescr.addConstraint( fcd );
+        andDescr.addDescr( patDescr );
+        ruleDescr.setLhs( andDescr );
+        ruleDescr.setConsequence( "" );
+        pkgDescr.addRule( ruleDescr );
+        
+        final PackageBuilder pkgBuilder = new PackageBuilder();
+        pkgBuilder.addPackage( pkgDescr );
+
+        Assert.assertTrue( pkgBuilder.getErrors().toString(),
+                           pkgBuilder.getErrors().isEmpty() );
+
+        final Rule rule = pkgBuilder.getPackages()[0].getRule("Test Rule");
+        final GroupElement and = rule.getLhs();
+        final Pattern pat = (Pattern) and.getChildren().get( 0 );
+        final LiteralConstraint fc = (LiteralConstraint) pat.getConstraints().get( 0 );
+        assertTrue("Wrong class. Expected java.math.BigDecimal. Found: " + fc.getField().getValue().getClass(), fc.getField().getValue() instanceof BigDecimal );
+    }
+
+    public void testBuildBigIntegerLiteralConstraint() throws Exception {
+        final PackageDescr pkgDescr = new PackageDescr("org.drools");
+        final RuleDescr ruleDescr = new RuleDescr("Test Rule");
+        AndDescr andDescr = new AndDescr();
+        PatternDescr patDescr = new PatternDescr("java.math.BigInteger", "$bd");
+        FieldConstraintDescr fcd = new FieldConstraintDescr("this");
+        LiteralRestrictionDescr restr = new LiteralRestrictionDescr("==", "10");
+        fcd.addRestriction( restr );
+        patDescr.addConstraint( fcd );
+        andDescr.addDescr( patDescr );
+        ruleDescr.setLhs( andDescr );
+        ruleDescr.setConsequence( "" );
+        pkgDescr.addRule( ruleDescr );
+        
+        final PackageBuilder pkgBuilder = new PackageBuilder();
+        pkgBuilder.addPackage( pkgDescr );
+
+        Assert.assertTrue( pkgBuilder.getErrors().toString(),
+                           pkgBuilder.getErrors().isEmpty() );
+
+        final Rule rule = pkgBuilder.getPackages()[0].getRule("Test Rule");
+        final GroupElement and = rule.getLhs();
+        final Pattern pat = (Pattern) and.getChildren().get( 0 );
+        final LiteralConstraint fc = (LiteralConstraint) pat.getConstraints().get( 0 );
+        assertTrue("Wrong class. Expected java.math.BigInteger. Found: " + fc.getField().getValue().getClass(), fc.getField().getValue() instanceof BigInteger );
+    }
+
+    
 }

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	2009-06-03 21:30:29 UTC (rev 26818)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FieldFactory.java	2009-06-03 21:49:06 UTC (rev 26819)
@@ -16,8 +16,6 @@
  * limitations under the License.
  */
 
-import java.math.BigDecimal;
-import java.math.BigInteger;
 import java.util.Date;
 
 import org.drools.base.field.BooleanFieldImpl;
@@ -26,6 +24,7 @@
 import org.drools.base.field.ObjectFieldImpl;
 import org.drools.spi.FieldValue;
 import org.drools.util.DateUtils;
+import org.drools.util.MathUtils;
 
 public class FieldFactory {
     private static final FieldFactory INSTANCE = new FieldFactory();
@@ -90,9 +89,9 @@
         } else if ( valueType == ValueType.OBJECT_TYPE ) {
             field = new ObjectFieldImpl( value );
         } else if ( valueType == ValueType.BIG_DECIMAL_TYPE ) {
-            field = new ObjectFieldImpl( new BigDecimal( value ) );
+            field = new ObjectFieldImpl( MathUtils.getBigDecimal( value ) );
         } else if ( valueType == ValueType.BIG_INTEGER_TYPE ) {
-            field = new ObjectFieldImpl( new BigInteger( value ) );
+            field = new ObjectFieldImpl( MathUtils.getBigInteger( value ) );
         }
 
         return field;
@@ -187,9 +186,9 @@
         } else if ( valueType == ValueType.OBJECT_TYPE ) {
             field = new ObjectFieldImpl( value );
         } else if ( valueType == ValueType.BIG_DECIMAL_TYPE ) {
-            field = new ObjectFieldImpl( value );
+            field = new ObjectFieldImpl( MathUtils.getBigDecimal( value ) );
         } else if ( valueType == ValueType.BIG_INTEGER_TYPE ) {
-            field = new ObjectFieldImpl( value );
+            field = new ObjectFieldImpl( MathUtils.getBigInteger( value ) );
         }
 
         return field;




More information about the jboss-svn-commits mailing list