[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