[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