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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Jun 3 12:05:15 EDT 2008


Author: tirelli
Date: 2008-06-03 12:05:15 -0400 (Tue, 03 Jun 2008)
New Revision: 20273

Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/JavaAccumulatorFunctionExecutor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/MVELAccumulatorFunctionExecutor.java
Log:
Fixing accumulate tests after shadow proxy removal

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java	2008-06-03 15:59:53 UTC (rev 20272)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java	2008-06-03 16:05:15 UTC (rev 20273)
@@ -1,5 +1,6 @@
 package org.drools.integrationtests;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.Reader;
@@ -22,6 +23,7 @@
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsParserException;
 import org.drools.compiler.PackageBuilder;
+import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.rule.Package;
 
@@ -41,6 +43,14 @@
     private RuleBase loadRuleBase(final Reader reader) throws IOException,
                                                       DroolsParserException,
                                                       Exception {
+        return loadRuleBase( reader,
+                             new PackageBuilderConfiguration() );
+    }
+
+    private RuleBase loadRuleBase(final Reader reader,
+                                  final PackageBuilderConfiguration conf) throws IOException,
+                                                                         DroolsParserException,
+                                                                         Exception {
         final DrlParser parser = new DrlParser();
         final PackageDescr packageDescr = parser.parse( reader );
         if ( parser.hasErrors() ) {
@@ -48,7 +58,7 @@
             Assert.fail( "Error messages in parser, need to sort this our (or else collect error messages)" );
         }
         // pre build the package
-        final PackageBuilder builder = new PackageBuilder();
+        final PackageBuilder builder = new PackageBuilder( conf );
         builder.addPackage( packageDescr );
         final Package pkg = builder.getPackage();
 
@@ -1136,7 +1146,7 @@
         wm.setGlobal( "results",
                       results );
         wm.setGlobal( "globalValue",
-                      new Integer(50) );
+                      new Integer( 50 ) );
 
         wm.insert( new Cheese( "stilton",
                                10 ) );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/JavaAccumulatorFunctionExecutor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/JavaAccumulatorFunctionExecutor.java	2008-06-03 15:59:53 UTC (rev 20272)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/JavaAccumulatorFunctionExecutor.java	2008-06-03 16:05:15 UTC (rev 20273)
@@ -17,6 +17,7 @@
  */
 package org.drools.base.accumulators;
 
+import org.drools.FactHandle;
 import org.drools.WorkingMemory;
 import org.drools.common.InternalFactHandle;
 import org.drools.rule.Declaration;
@@ -27,6 +28,9 @@
 import java.io.ObjectOutput;
 import java.io.IOException;
 import java.io.ObjectInput;
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * An MVEL accumulator function executor implementation
@@ -65,7 +69,12 @@
      * @see org.drools.spi.Accumulator#createContext()
      */
     public Object createContext() {
-        return this.function.createContext();
+        JavaAccumulatorFunctionContext context = new JavaAccumulatorFunctionContext();
+        context.context = this.function.createContext(); 
+        if( this.function.supportsReverse() ) {
+            context.reverseSupport = new HashMap<ReverseSupportKey, Object>();
+        }
+        return context;
     }
 
     /* (non-Javadoc)
@@ -76,7 +85,7 @@
                      Tuple leftTuple,
                      Declaration[] declarations,
                      WorkingMemory workingMemory) throws Exception {
-        this.function.init( context );
+        this.function.init( ((JavaAccumulatorFunctionContext) context).context );
     }
 
     /* (non-Javadoc)
@@ -95,7 +104,10 @@
                                                        innerDeclarations,
                                                        workingMemory,
                                                        workingMemoryContext ).getValue();
-        this.function.accumulate( context,
+        if( this.function.supportsReverse() ) {
+            ((JavaAccumulatorFunctionContext) context).reverseSupport.put( new ReverseSupportKey(leftTuple, handle), value );
+        }
+        this.function.accumulate( ((JavaAccumulatorFunctionContext) context).context,
                                   value );
     }
 
@@ -106,14 +118,10 @@
                         Declaration[] declarations,
                         Declaration[] innerDeclarations,
                         WorkingMemory workingMemory) throws Exception {
-        final Object value = this.expression.evaluate( handle.getObject(),
-                                                       leftTuple,
-                                                       declarations,
-                                                       innerDeclarations,
-                                                       workingMemory,
-                                                       workingMemoryContext ).getValue();
-        this.function.reverse( context,
-                               value );
+        
+        final Object value = ((JavaAccumulatorFunctionContext) context).reverseSupport.remove( new ReverseSupportKey(leftTuple, handle) );
+        this.function.reverse( ((JavaAccumulatorFunctionContext) context).context,
+                                  value );
     }
 
     /* (non-Javadoc)
@@ -124,7 +132,7 @@
                             Tuple leftTuple,
                             Declaration[] declarations,
                             WorkingMemory workingMemory) throws Exception {
-        return this.function.getResult( context );
+        return this.function.getResult( ((JavaAccumulatorFunctionContext) context).context );
     }
 
     public boolean supportsReverse() {
@@ -143,4 +151,42 @@
         // no working memory context needed
         return null;
     }
+    
+    private static class JavaAccumulatorFunctionContext {
+        public Object context;
+        public Map<ReverseSupportKey, Object> reverseSupport;
+    }
+    
+    private static class ReverseSupportKey implements Serializable {
+        private static final long serialVersionUID = 1473894397336046369L;
+        public final Tuple leftTuple;
+        public final FactHandle factHandle;
+        public ReverseSupportKey( final Tuple leftTuple, final FactHandle handle ) {
+            this.leftTuple = leftTuple;
+            this.factHandle = handle;
+        }
+        @Override
+        public int hashCode() {
+            final int prime = 31;
+            int result = 1;
+            result = prime * result + ((factHandle == null) ? 0 : factHandle.hashCode());
+            result = prime * result + ((leftTuple == null) ? 0 : leftTuple.hashCode());
+            return result;
+        }
+        @Override
+        public boolean equals(Object obj) {
+            if ( this == obj ) return true;
+            if ( obj == null ) return false;
+            if ( getClass() != obj.getClass() ) return false;
+            final ReverseSupportKey other = (ReverseSupportKey) obj;
+            if ( factHandle == null ) {
+                if ( other.factHandle != null ) return false;
+            } else if ( !factHandle.equals( other.factHandle ) ) return false;
+            if ( leftTuple == null ) {
+                if ( other.leftTuple != null ) return false;
+            } else if ( !leftTuple.equals( other.leftTuple ) ) return false;
+            return true;
+        }
+        
+    }
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/MVELAccumulatorFunctionExecutor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/MVELAccumulatorFunctionExecutor.java	2008-06-03 15:59:53 UTC (rev 20272)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/MVELAccumulatorFunctionExecutor.java	2008-06-03 16:05:15 UTC (rev 20273)
@@ -17,12 +17,14 @@
  */
 package org.drools.base.accumulators;
 
-import java.io.Serializable;
+import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
-import java.io.IOException;
+import java.io.Serializable;
+import java.util.HashMap;
 import java.util.Map;
 
+import org.drools.FactHandle;
 import org.drools.WorkingMemory;
 import org.drools.base.mvel.DroolsMVELFactory;
 import org.drools.common.InternalFactHandle;
@@ -76,7 +78,12 @@
      * @see org.drools.spi.Accumulator#createContext()
      */
     public Object createContext() {
-        return this.function.createContext();
+        MVELAccumulatorFunctionContext context = new MVELAccumulatorFunctionContext();
+        context.context = this.function.createContext(); 
+        if( this.function.supportsReverse() ) {
+            context.reverseSupport = new HashMap<ReverseSupportKey, Object>();
+        }
+        return context;
     }
 
     /* (non-Javadoc)
@@ -87,7 +94,7 @@
                      Tuple leftTuple,
                      Declaration[] declarations,
                      WorkingMemory workingMemory) throws Exception {
-        this.function.init( context );
+        this.function.init( ((MVELAccumulatorFunctionContext) context).context );
     }
 
     /* (non-Javadoc)
@@ -109,7 +116,10 @@
         final Object value = MVEL.executeExpression( this.expression,
                                                      this.dummy,
                                                      factory );
-        this.function.accumulate( context,
+        if( this.function.supportsReverse() ) {
+            ((MVELAccumulatorFunctionContext) context).reverseSupport.put( new ReverseSupportKey(leftTuple, handle), value );
+        }
+        this.function.accumulate( ((MVELAccumulatorFunctionContext) context).context,
                                   value );
     }
 
@@ -120,16 +130,8 @@
                         Declaration[] declarations,
                         Declaration[] innerDeclarations,
                         WorkingMemory workingMemory) throws Exception {
-        DroolsMVELFactory factory = (DroolsMVELFactory) workingMemoryContext;
-        factory.setContext( leftTuple,
-                               null,
-                               handle.getObject(),
-                               workingMemory,
-                               null );
-        final Object value = MVEL.executeExpression( this.expression,
-                                                     this.dummy,
-                                                     factory );
-        this.function.reverse( context,
+        final Object value = ((MVELAccumulatorFunctionContext) context).reverseSupport.remove( new ReverseSupportKey(leftTuple, handle) );
+        this.function.reverse( ((MVELAccumulatorFunctionContext) context).context,
                                value );
     }
 
@@ -141,7 +143,7 @@
                             Tuple leftTuple,
                             Declaration[] declarations,
                             WorkingMemory workingMemory) throws Exception {
-        return this.function.getResult( context );
+        return this.function.getResult( ((MVELAccumulatorFunctionContext) context).context );
     }
 
     public boolean supportsReverse() {
@@ -151,5 +153,42 @@
     public Object createWorkingMemoryContext() {
         return this.model.clone();
     }
-
+    
+    private static class MVELAccumulatorFunctionContext {
+        public Object context;
+        public Map<ReverseSupportKey, Object> reverseSupport;
+    }
+    
+    private static class ReverseSupportKey implements Serializable {
+        private static final long serialVersionUID = 1473894397336046369L;
+        public final Tuple leftTuple;
+        public final FactHandle factHandle;
+        public ReverseSupportKey( final Tuple leftTuple, final FactHandle handle ) {
+            this.leftTuple = leftTuple;
+            this.factHandle = handle;
+        }
+        @Override
+        public int hashCode() {
+            final int prime = 31;
+            int result = 1;
+            result = prime * result + ((factHandle == null) ? 0 : factHandle.hashCode());
+            result = prime * result + ((leftTuple == null) ? 0 : leftTuple.hashCode());
+            return result;
+        }
+        @Override
+        public boolean equals(Object obj) {
+            if ( this == obj ) return true;
+            if ( obj == null ) return false;
+            if ( getClass() != obj.getClass() ) return false;
+            final ReverseSupportKey other = (ReverseSupportKey) obj;
+            if ( factHandle == null ) {
+                if ( other.factHandle != null ) return false;
+            } else if ( !factHandle.equals( other.factHandle ) ) return false;
+            if ( leftTuple == null ) {
+                if ( other.leftTuple != null ) return false;
+            } else if ( !leftTuple.equals( other.leftTuple ) ) return false;
+            return true;
+        }
+        
+    }
 }




More information about the jboss-svn-commits mailing list