[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