[jboss-svn-commits] JBL Code SVN: r35739 - in labs/jbossrules/soa_branches/BRMS-5.0.x: drools-compiler/src/test/resources/org/drools/integrationtests and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Oct 26 10:07:40 EDT 2010
Author: tirelli
Date: 2010-10-26 10:07:39 -0400 (Tue, 26 Oct 2010)
New Revision: 35739
Added:
labs/jbossrules/soa_branches/BRMS-5.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_OrWithReturnValue.drl
Modified:
labs/jbossrules/soa_branches/BRMS-5.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
labs/jbossrules/soa_branches/BRMS-5.0.x/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java
Log:
JBRULES-2224: backporting commit #35724. Fixing multirestriction issue when used with return value constraints
Modified: labs/jbossrules/soa_branches/BRMS-5.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2010-10-26 13:42:54 UTC (rev 35738)
+++ labs/jbossrules/soa_branches/BRMS-5.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2010-10-26 14:07:39 UTC (rev 35739)
@@ -170,6 +170,25 @@
config );
}
+ private KnowledgeBase loadKnowledgeBase(String fileName) {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add( ResourceFactory.newClassPathResource( fileName,
+ getClass() ),
+ ResourceType.DRL );
+ KnowledgeBuilderErrors errors = kbuilder.getErrors();
+ if ( errors.size() > 0 ) {
+ for ( KnowledgeBuilderError error : errors ) {
+ System.err.println( error );
+ }
+ throw new IllegalArgumentException( "Could not parse knowledge." );
+ }
+ assertFalse( kbuilder.hasErrors() );
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+ return kbase;
+ }
+
public void testImportFunctions() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_ImportFunctions.drl" ) ) );
@@ -6849,4 +6868,20 @@
}
}
+
+ public void testOrWithReturnValueRestriction() throws Exception {
+ String fileName = "test_OrWithReturnValue.drl";
+ KnowledgeBase kbase = loadKnowledgeBase( fileName );
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+
+ ksession.insert( new Cheese("brie", 18) );
+ ksession.insert( new Cheese("stilton", 8) );
+ ksession.insert( new Cheese("brie", 28) );
+
+ int fired = ksession.fireAllRules();
+ assertEquals( 2,
+ fired );
+ }
+
+
}
Copied: labs/jbossrules/soa_branches/BRMS-5.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_OrWithReturnValue.drl (from rev 35724, labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_OrWithReturnValue.drl)
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_OrWithReturnValue.drl (rev 0)
+++ labs/jbossrules/soa_branches/BRMS-5.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_OrWithReturnValue.drl 2010-10-26 14:07:39 UTC (rev 35739)
@@ -0,0 +1,9 @@
+package org.drools
+
+rule "r1"
+when
+ Cheese( type == "brie", $price : price )
+ Cheese( type == "stilton", price == 10 || == ( $price % 10 ) )
+then
+ // noop
+end
Modified: labs/jbossrules/soa_branches/BRMS-5.0.x/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java
===================================================================
--- labs/jbossrules/soa_branches/BRMS-5.0.x/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java 2010-10-26 13:42:54 UTC (rev 35738)
+++ labs/jbossrules/soa_branches/BRMS-5.0.x/drools-core/src/main/java/org/drools/rule/ReturnValueRestriction.java 2010-10-26 14:07:39 UTC (rev 35739)
@@ -32,6 +32,7 @@
import org.drools.spi.AcceptsReadAccessor;
import org.drools.spi.CompiledInvoker;
import org.drools.spi.Evaluator;
+import org.drools.spi.FieldValue;
import org.drools.spi.InternalReadAccessor;
import org.drools.spi.ReadAccessor;
import org.drools.spi.Restriction;
@@ -126,6 +127,7 @@
this.localDeclarations.length );
}
+ @SuppressWarnings("unchecked")
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
expression = (ReturnValueExpression) in.readObject();
@@ -244,12 +246,40 @@
public boolean isAllowedCachedLeft(final ContextEntry context,
final InternalFactHandle handle) {
- throw new UnsupportedOperationException( "does not support method call isAllowed(Object object, InternalWorkingMemory workingMemoiry)" );
+ try {
+ ReturnValueContextEntry ctx = (ReturnValueContextEntry) context;
+ FieldValue value = this.expression.evaluate( handle.getObject(),
+ ctx.leftTuple,
+ this.previousDeclarations,
+ this.localDeclarations,
+ ctx.workingMemory,
+ ctx.dialectContext );
+ return this.evaluator.evaluate( ctx.workingMemory,
+ this.readAccessor,
+ handle.getObject(),
+ value );
+ } catch ( final Exception e ) {
+ throw new RuntimeDroolsException( e );
+ }
}
public boolean isAllowedCachedRight(final LeftTuple tuple,
final ContextEntry context) {
- throw new UnsupportedOperationException( "does not support method call isAllowed(Object object, InternalWorkingMemory workingMemoiry)" );
+ try {
+ ReturnValueContextEntry ctx = (ReturnValueContextEntry) context;
+ FieldValue value = this.expression.evaluate( ctx.handle.getObject(),
+ tuple,
+ this.previousDeclarations,
+ this.localDeclarations,
+ ctx.workingMemory,
+ ctx.dialectContext );
+ return this.evaluator.evaluate( ctx.workingMemory,
+ this.readAccessor,
+ ctx.handle.getObject(),
+ value );
+ } catch ( final Exception e ) {
+ throw new RuntimeDroolsException( e );
+ }
}
public int hashCode() {
More information about the jboss-svn-commits
mailing list