[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