[jboss-svn-commits] JBL Code SVN: r17745 - in labs/jbossrules/branches/Branch_4_0_2_SOA_4_2/drools-compiler/src: test/java/org/drools/integrationtests and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Jan 11 15:15:00 EST 2008
Author: fmeyer
Date: 2008-01-11 15:15:00 -0500 (Fri, 11 Jan 2008)
New Revision: 17745
Added:
labs/jbossrules/branches/Branch_4_0_2_SOA_4_2/drools-compiler/src/test/resources/org/drools/integrationtests/test_AccumulatePreviousBinds.drl
Modified:
labs/jbossrules/branches/Branch_4_0_2_SOA_4_2/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java
labs/jbossrules/branches/Branch_4_0_2_SOA_4_2/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java
Log:
SOA-322 Duplicate parameter error while trying to use pattern bound variables or globals in accumulate function JBRULES-1354
Modified: labs/jbossrules/branches/Branch_4_0_2_SOA_4_2/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java
===================================================================
--- labs/jbossrules/branches/Branch_4_0_2_SOA_4_2/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java 2008-01-11 19:47:48 UTC (rev 17744)
+++ labs/jbossrules/branches/Branch_4_0_2_SOA_4_2/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java 2008-01-11 20:15:00 UTC (rev 17745)
@@ -18,9 +18,11 @@
import java.util.ArrayList;
import java.util.Comparator;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.TreeSet;
import org.drools.base.accumulators.AccumulateFunction;
@@ -133,11 +135,11 @@
accumDescr,
accumDescr.getResultCode() );
- final List requiredDeclarations = new ArrayList( initCodeAnalysis.getBoundIdentifiers()[0] );
+ final Set requiredDeclarations = new HashSet( initCodeAnalysis.getBoundIdentifiers()[0] );
requiredDeclarations.addAll( actionCodeAnalysis.getBoundIdentifiers()[0] );
requiredDeclarations.addAll( resultCodeAnalysis.getBoundIdentifiers()[0] );
- final List requiredGlobals = new ArrayList( initCodeAnalysis.getBoundIdentifiers()[1] );
+ final Set requiredGlobals = new HashSet( initCodeAnalysis.getBoundIdentifiers()[1] );
requiredGlobals.addAll( actionCodeAnalysis.getBoundIdentifiers()[1] );
requiredGlobals.addAll( resultCodeAnalysis.getBoundIdentifiers()[1] );
@@ -150,8 +152,9 @@
}
final Declaration[] declarations = new Declaration[requiredDeclarations.size()];
- for ( int i = 0, size = requiredDeclarations.size(); i < size; i++ ) {
- declarations[i] = context.getDeclarationResolver().getDeclaration( (String) requiredDeclarations.get( i ) );
+ int i = 0;
+ for( Iterator it = requiredDeclarations.iterator(); it.hasNext(); i++ ) {
+ declarations[i] = context.getDeclarationResolver().getDeclaration( (String) it.next() );
}
final Declaration[] sourceDeclArr = (Declaration[]) source.getOuterDeclarations().values().toArray( new Declaration[0] );
Modified: labs/jbossrules/branches/Branch_4_0_2_SOA_4_2/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java
===================================================================
--- labs/jbossrules/branches/Branch_4_0_2_SOA_4_2/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java 2008-01-11 19:47:48 UTC (rev 17744)
+++ labs/jbossrules/branches/Branch_4_0_2_SOA_4_2/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java 2008-01-11 20:15:00 UTC (rev 17745)
@@ -679,7 +679,7 @@
public void testAccumulateMultiPatternMVEL() throws Exception {
execTestAccumulateReverseModifyMultiPattern( "test_AccumulateMultiPatternMVEL.drl" );
}
-
+
public void execTestAccumulateSum(String fileName) throws Exception {
// read in the source
final Reader reader = new InputStreamReader( getClass().getResourceAsStream( fileName ) );
@@ -1024,7 +1024,7 @@
}
- public void execTestAccumulateReverseModifyMultiPattern( String fileName ) throws Exception {
+ public void execTestAccumulateReverseModifyMultiPattern(String fileName) throws Exception {
// read in the source
final Reader reader = new InputStreamReader( getClass().getResourceAsStream( fileName ) );
final RuleBase ruleBase = loadRuleBase( reader );
@@ -1095,4 +1095,33 @@
}
+ public void testAccumulateWithPreviouslyBoundVariables() throws Exception {
+
+ // read in the source
+ final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_AccumulatePreviousBinds.drl" ) );
+ final RuleBase ruleBase = loadRuleBase( reader );
+
+ final WorkingMemory wm = ruleBase.newStatefulSession();
+ final List results = new ArrayList();
+
+ wm.setGlobal( "results",
+ results );
+
+ wm.insert( new Cheese( "stilton",
+ 10 ) );
+ wm.insert( new Cheese( "brie",
+ 5 ) );
+ wm.insert( new Cheese( "provolone",
+ 150 ) );
+ wm.insert( new Cheese( "brie",
+ 20 ) );
+
+ wm.fireAllRules();
+
+ assertEquals( 1,
+ results.size() );
+ assertEquals( new Integer( 45 ),
+ results.get( 0 ) );
+ }
+
}
Copied: labs/jbossrules/branches/Branch_4_0_2_SOA_4_2/drools-compiler/src/test/resources/org/drools/integrationtests/test_AccumulatePreviousBinds.drl (from rev 17719, labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_AccumulatePreviousBinds.drl)
===================================================================
--- labs/jbossrules/branches/Branch_4_0_2_SOA_4_2/drools-compiler/src/test/resources/org/drools/integrationtests/test_AccumulatePreviousBinds.drl (rev 0)
+++ labs/jbossrules/branches/Branch_4_0_2_SOA_4_2/drools-compiler/src/test/resources/org/drools/integrationtests/test_AccumulatePreviousBinds.drl 2008-01-11 20:15:00 UTC (rev 17745)
@@ -0,0 +1,17 @@
+package org.drools;
+
+global java.util.List results;
+
+rule "Accumulate with bound var " salience 100
+ when
+ Cheese( type == "stilton", $price : price )
+ $totalAmount : Number() from accumulate( $c : Cheese( type == "brie" ),
+ init( int total = 0; ),
+ action( total += $c.getPrice() + $price; ),
+ reverse( total -= $c.getPrice() + $price; ),
+ result( new Integer( total ) ) );
+ then
+ //System.out.println("Total amount = US$ "+$totalAmount );
+ results.add($totalAmount);
+end
+
More information about the jboss-svn-commits
mailing list