[jboss-svn-commits] JBL Code SVN: r25444 - in labs/jbossrules/trunk: drools-compiler/src/main/java/org/drools/rule/builder and 7 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Feb 26 18:47:52 EST 2009


Author: KrisVerlaenen
Date: 2009-02-26 18:47:51 -0500 (Thu, 26 Feb 2009)
New Revision: 25444

Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/SplitNodeBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ReturnValueEvaluatorBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueEvaluatorBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueEvaluatorBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel
   labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaRule.mvel
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessSplitTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaReturnValueConstraintEvaluatorBuilderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueConstraintEvaluatorBuilderTest.java
   labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/xpath/XPathReturnValueEvaluatorBuilder.java
Log:
JBRULES-1984: Support the direct use of variables in code constraints
 - added support for variables in both Java and MVEL

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/SplitNodeBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/SplitNodeBuilder.java	2009-02-26 22:52:32 UTC (rev 25443)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/SplitNodeBuilder.java	2009-02-26 23:47:51 UTC (rev 25444)
@@ -13,6 +13,7 @@
 import org.drools.rule.builder.ProcessBuildContext;
 import org.drools.workflow.core.Constraint;
 import org.drools.workflow.core.impl.ConstraintImpl;
+import org.drools.workflow.core.impl.NodeImpl;
 import org.drools.workflow.core.node.Split;
 import org.drools.workflow.instance.impl.ReturnValueConstraintEvaluator;
 import org.drools.workflow.instance.impl.RuleConstraintEvaluator;
@@ -62,7 +63,7 @@
                 returnValueDescr.setText( constraint.getConstraint() );
                 
                 Dialect dialect = context.getDialectRegistry().getDialect( constraint.getDialect() );                               
-                dialect.getReturnValueEvaluatorBuilder().build( context, returnValueConstraint, returnValueDescr );
+                dialect.getReturnValueEvaluatorBuilder().build( context, returnValueConstraint, returnValueDescr, (NodeImpl) node );
             }
         }
     }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ReturnValueEvaluatorBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ReturnValueEvaluatorBuilder.java	2009-02-26 22:52:32 UTC (rev 25443)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ReturnValueEvaluatorBuilder.java	2009-02-26 23:47:51 UTC (rev 25444)
@@ -1,12 +1,14 @@
 package org.drools.rule.builder;
 
 import org.drools.compiler.ReturnValueDescr;
+import org.drools.process.core.ContextResolver;
 import org.drools.workflow.instance.impl.ReturnValueConstraintEvaluator;
 
 public interface ReturnValueEvaluatorBuilder {
 
     public void build(final PackageBuildContext context,
                       final ReturnValueConstraintEvaluator returnValueConstraintEvaluator,
-                      final ReturnValueDescr returnValueDescr);
+                      final ReturnValueDescr returnValueDescr,
+                      final ContextResolver contextResolver);
 
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueEvaluatorBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueEvaluatorBuilder.java	2009-02-26 22:52:32 UTC (rev 25443)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaReturnValueEvaluatorBuilder.java	2009-02-26 23:47:51 UTC (rev 25444)
@@ -23,6 +23,7 @@
 
 import org.drools.compiler.Dialect;
 import org.drools.compiler.ReturnValueDescr;
+import org.drools.process.core.ContextResolver;
 import org.drools.rule.builder.PackageBuildContext;
 import org.drools.rule.builder.ProcessBuildContext;
 import org.drools.rule.builder.ReturnValueEvaluatorBuilder;
@@ -41,7 +42,8 @@
      */
     public void build(final PackageBuildContext context,
                       final ReturnValueConstraintEvaluator constraintNode,
-                      final ReturnValueDescr descr) {
+                      final ReturnValueDescr descr,
+                      final ContextResolver contextResolver) {
 
         final String className = "returnValueEvaluator" + context.getNextId();
 
@@ -63,7 +65,9 @@
         final Map map = createVariableContext( className,
                                                descr.getText(),
                                                (ProcessBuildContext) context,
-                                               (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ) );
+                                               (String[]) usedIdentifiers[1].toArray( new String[usedIdentifiers[1].size()] ),
+                                               analysis.getNotBoundedIdentifiers(),
+                                               contextResolver );
         map.put( "text",
                  descr.getText() );
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueEvaluatorBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueEvaluatorBuilder.java	2009-02-26 22:52:32 UTC (rev 25443)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueEvaluatorBuilder.java	2009-02-26 23:47:51 UTC (rev 25444)
@@ -1,6 +1,9 @@
 package org.drools.rule.builder.dialect.mvel;
 
 import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import org.drools.base.mvel.MVELCompilationUnit;
@@ -8,6 +11,8 @@
 import org.drools.compiler.DescrBuildError;
 import org.drools.compiler.Dialect;
 import org.drools.compiler.ReturnValueDescr;
+import org.drools.process.core.ContextResolver;
+import org.drools.process.core.context.variable.VariableScope;
 import org.drools.rule.MVELDialectRuntimeData;
 import org.drools.rule.builder.PackageBuildContext;
 import org.drools.rule.builder.ReturnValueEvaluatorBuilder;
@@ -23,7 +28,8 @@
 
     public void build(final PackageBuildContext context,
                       final ReturnValueConstraintEvaluator constraintNode,
-                      final ReturnValueDescr descr) {
+                      final ReturnValueDescr descr,
+                      final ContextResolver contextResolver) {
 
         String text = descr.getText();
 
@@ -37,28 +43,49 @@
                                                                     new Set[]{Collections.EMPTY_SET, context.getPkg().getGlobals().keySet()},
                                                                     null );         
 
+            Map<String, Class> variableClasses = new HashMap<String, Class>();
+            List<String> variableNames = analysis.getNotBoundedIdentifiers();
+            if (contextResolver != null) {
+	            for (String variableName: variableNames) {
+	            	VariableScope variableScope = (VariableScope) contextResolver.resolveContext(VariableScope.VARIABLE_SCOPE, variableName);
+	            	if (variableScope == null) {
+	            		context.getErrors().add(
+	        				new DescrBuildError(
+	    						context.getParentDescr(),
+	                            descr,
+	                            null,
+	                            "Could not find variable '" + variableName + "' for constraint '" + descr.getText() + "'" ) );            		
+	            	} else {
+	            		variableClasses.put(variableName,
+            				context.getDialect().getTypeResolver().resolveType(
+        						variableScope.findVariable(variableName).getType().getStringType()));
+	            	}
+	            }
+            }
+            
             MVELCompilationUnit unit = dialect.getMVELCompilationUnit( text,
                                                                        analysis,
                                                                        null,
                                                                        null,
-                                                                       null,
+                                                                       variableClasses,
                                                                        context );  
 
             MVELReturnValueEvaluator expr = new MVELReturnValueEvaluator( unit,
                                                                           dialect.getId() );
+            expr.setVariableNames(variableNames);
+
             constraintNode.setEvaluator( expr );
             
             MVELDialectRuntimeData data = (MVELDialectRuntimeData) context.getPkg().getDialectRuntimeRegistry().getDialectData( dialect.getId() );
             data.addCompileable( constraintNode,
                                   expr );
             
-            expr.setVariableNames(analysis.getNotBoundedIdentifiers());
             expr.compile( context.getPackageBuilder().getRootClassLoader() );
         } catch ( final Exception e ) {
             context.getErrors().add( new DescrBuildError( context.getParentDescr(),
                                                           descr,
                                                           null,
-                                                          "Unable to build expression for 'returnValuEvaluator' : " + e.getMessage() + "'" + descr.getText() + "'" ) );
+                                                          "Unable to build expression for 'constraint' " + descr.getText() + "': " + e ) );
         }
     }
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel	2009-02-26 22:52:32 UTC (rev 25443)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel	2009-02-26 23:47:51 UTC (rev 25444)
@@ -403,8 +403,14 @@
         @foreach{type : globalTypes, identifier : globals} @{type} @{identifier} = ( @{type} ) workingMemory.getGlobal( "@{identifier}" );
         @end{}
 
+        @foreach{type : variableTypes, identifier : variables} @{type} @{identifier} = ( @{type} ) processContext.getVariable( "@{identifier}" );
+        @end{}
+
         return @{processClassName}.@{methodName} (
-	        processContext at if{globals != empty}, at end{} @foreach{identifier : globals} @{identifier}
+	        processContext at if{globals != empty}, at end{}
+	        @foreach{identifier : globals} @{identifier}
+	        @end{","}@if{variables != empty}, at end{}
+	        @foreach{identifier : variables} @{identifier}
 	        @end{","} );
     }
     

Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaRule.mvel
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaRule.mvel	2009-02-26 22:52:32 UTC (rev 25443)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaRule.mvel	2009-02-26 23:47:51 UTC (rev 25444)
@@ -113,7 +113,7 @@
 @end{}
 
 @declare{"returnValueEvaluatorMethod"}
-public static Object @{methodName}(org.drools.spi.ProcessContext context at if{globals != empty}, at end{} @foreach{type : globalTypes, identifier : globals}  @{type} @{identifier} @end{","} ) throws Exception {
+public static Object @{methodName}(org.drools.spi.ProcessContext context at if{globals != empty}, at end{} @foreach{type : globalTypes, identifier : globals}  @{type} @{identifier} @end{","} @if{variables != empty}, at end{} @foreach{type2 :variableTypes, identifier2 : variables}  @{type2} @{identifier2} @end{","} ) throws Exception {
     org.drools.runtime.process.ProcessContext kcontext = context;
     @{text}
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessSplitTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessSplitTest.java	2009-02-26 22:52:32 UTC (rev 25443)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessSplitTest.java	2009-02-26 23:47:51 UTC (rev 25444)
@@ -106,7 +106,266 @@
         assertEquals(ProcessInstance.STATE_COMPLETED, processInstance3.getState());
         assertEquals(2, list.size());
     }
+
+    public void testSplitWithMVELVariableConstraint() {
+        PackageBuilder builder = new PackageBuilder();
+        Reader source = new StringReader(
+            "<process xmlns=\"http://drools.org/drools-5.0/process\"" +
+            "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"" +
+            "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"" +
+            "         type=\"RuleFlow\" name=\"ruleflow\" id=\"org.drools.process-split\" package-name=\"org.drools\" >" +
+            "" +
+            "  <header>" +
+            "    <imports>" +
+            "      <import name=\"org.drools.Person\" />" +
+            "      <import name=\"org.drools.integrationtests.ProcessSplitTest.ProcessUtils\" />" +
+            "    </imports>" +
+            "    <globals>" +
+            "      <global identifier=\"list\" type=\"java.util.List\" />" +
+            "    </globals>" +
+            "    <variables>\n" +
+            "      <variable name=\"name\" >\n" +
+            "        <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+            "      </variable>\n" +
+            "    </variables>\n" +
+            "  </header>" +
+            "" +
+            "  <nodes>" +
+            "    <actionNode id=\"2\" name=\"Action\" >" +
+            "        <action type=\"expression\" dialect=\"mvel\" >insert(context.getProcessInstance());</action>" +
+            "    </actionNode>" +
+            "    <split id=\"4\" name=\"Split\" type=\"2\" >" +
+            "      <constraints>" +
+            "        <constraint toNodeId=\"8\" toType=\"DROOLS_DEFAULT\" priority=\"2\" type=\"code\" dialect=\"mvel\" >return true;</constraint>" +
+            "        <constraint toNodeId=\"6\" toType=\"DROOLS_DEFAULT\" priority=\"1\" type=\"code\" dialect=\"mvel\" >return name != null;</constraint>" +
+            "      </constraints>" +
+            "    </split>" +
+            "    <end id=\"8\" name=\"End\" />" +
+            "    <actionNode id=\"6\" name=\"Action\" >" +
+            "        <action type=\"expression\" dialect=\"mvel\" >list.add(context.getProcessInstance().getId());</action>" +
+            "    </actionNode>" +
+            "    <start id=\"1\" name=\"Start\" />" +
+            "    <end id=\"3\" name=\"End\" />" +
+            "  </nodes>" +
+            "  <connections>" +
+            "    <connection from=\"1\" to=\"2\" />" +
+            "    <connection from=\"2\" to=\"4\" />" +
+            "    <connection from=\"4\" to=\"8\" />" +
+            "    <connection from=\"4\" to=\"6\" />" +
+            "    <connection from=\"6\" to=\"3\" />" +
+            "  </connections>" +
+            "" +
+            "</process>");
+        builder.addRuleFlow(source);
+        Package pkg = builder.getPackage();
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+        ruleBase.addPackage( pkg );
+        WorkingMemory workingMemory = ruleBase.newStatefulSession();
+        List<Long> list = new ArrayList<Long>();
+        workingMemory.setGlobal("list", list);
+
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("name", "John Doe");
+        ProcessInstance processInstance = ( ProcessInstance )
+            workingMemory.startProcess("org.drools.process-split", params);
+        
+        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+        assertEquals(1, list.size());
+    }
     
+    public void testSplitWithJavaVariableConstraint() {
+        PackageBuilder builder = new PackageBuilder();
+        Reader source = new StringReader(
+            "<process xmlns=\"http://drools.org/drools-5.0/process\"" +
+            "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"" +
+            "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"" +
+            "         type=\"RuleFlow\" name=\"ruleflow\" id=\"org.drools.process-split\" package-name=\"org.drools\" >" +
+            "" +
+            "  <header>" +
+            "    <imports>" +
+            "      <import name=\"org.drools.Person\" />" +
+            "      <import name=\"org.drools.integrationtests.ProcessSplitTest.ProcessUtils\" />" +
+            "    </imports>" +
+            "    <globals>" +
+            "      <global identifier=\"list\" type=\"java.util.List\" />" +
+            "    </globals>" +
+            "    <variables>\n" +
+            "      <variable name=\"name\" >\n" +
+            "        <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+            "      </variable>\n" +
+            "    </variables>\n" +
+            "  </header>" +
+            "" +
+            "  <nodes>" +
+            "    <actionNode id=\"2\" name=\"Action\" >" +
+            "        <action type=\"expression\" dialect=\"mvel\" >insert(context.getProcessInstance());</action>" +
+            "    </actionNode>" +
+            "    <split id=\"4\" name=\"Split\" type=\"2\" >" +
+            "      <constraints>" +
+            "        <constraint toNodeId=\"8\" toType=\"DROOLS_DEFAULT\" priority=\"2\" type=\"code\" dialect=\"java\" >return true;</constraint>" +
+            "        <constraint toNodeId=\"6\" toType=\"DROOLS_DEFAULT\" priority=\"1\" type=\"code\" dialect=\"java\" >return name != null;</constraint>" +
+            "      </constraints>" +
+            "    </split>" +
+            "    <end id=\"8\" name=\"End\" />" +
+            "    <actionNode id=\"6\" name=\"Action\" >" +
+            "        <action type=\"expression\" dialect=\"mvel\" >list.add(context.getProcessInstance().getId());</action>" +
+            "    </actionNode>" +
+            "    <start id=\"1\" name=\"Start\" />" +
+            "    <end id=\"3\" name=\"End\" />" +
+            "  </nodes>" +
+            "  <connections>" +
+            "    <connection from=\"1\" to=\"2\" />" +
+            "    <connection from=\"2\" to=\"4\" />" +
+            "    <connection from=\"4\" to=\"8\" />" +
+            "    <connection from=\"4\" to=\"6\" />" +
+            "    <connection from=\"6\" to=\"3\" />" +
+            "  </connections>" +
+            "" +
+            "</process>");
+        builder.addRuleFlow(source);
+        Package pkg = builder.getPackage();
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+        ruleBase.addPackage( pkg );
+        WorkingMemory workingMemory = ruleBase.newStatefulSession();
+        List<Long> list = new ArrayList<Long>();
+        workingMemory.setGlobal("list", list);
+
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("name", "John Doe");
+        ProcessInstance processInstance = ( ProcessInstance )
+            workingMemory.startProcess("org.drools.process-split", params);
+        
+        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+        assertEquals(1, list.size());
+    }
+
+    public void testSplitWithMVELGlobalConstraint() {
+        PackageBuilder builder = new PackageBuilder();
+        Reader source = new StringReader(
+            "<process xmlns=\"http://drools.org/drools-5.0/process\"" +
+            "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"" +
+            "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"" +
+            "         type=\"RuleFlow\" name=\"ruleflow\" id=\"org.drools.process-split\" package-name=\"org.drools\" >" +
+            "" +
+            "  <header>" +
+            "    <imports>" +
+            "      <import name=\"org.drools.Person\" />" +
+            "      <import name=\"org.drools.integrationtests.ProcessSplitTest.ProcessUtils\" />" +
+            "    </imports>" +
+            "    <globals>" +
+            "      <global identifier=\"list\" type=\"java.util.List\" />" +
+            "    </globals>" +
+            "    <variables>\n" +
+            "      <variable name=\"name\" >\n" +
+            "        <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+            "      </variable>\n" +
+            "    </variables>\n" +
+            "  </header>" +
+            "" +
+            "  <nodes>" +
+            "    <actionNode id=\"2\" name=\"Action\" >" +
+            "        <action type=\"expression\" dialect=\"mvel\" >insert(context.getProcessInstance());</action>" +
+            "    </actionNode>" +
+            "    <split id=\"4\" name=\"Split\" type=\"2\" >" +
+            "      <constraints>" +
+            "        <constraint toNodeId=\"8\" toType=\"DROOLS_DEFAULT\" priority=\"2\" type=\"code\" dialect=\"mvel\" >return true;</constraint>" +
+            "        <constraint toNodeId=\"6\" toType=\"DROOLS_DEFAULT\" priority=\"1\" type=\"code\" dialect=\"mvel\" >return list != null;</constraint>" +
+            "      </constraints>" +
+            "    </split>" +
+            "    <end id=\"8\" name=\"End\" />" +
+            "    <actionNode id=\"6\" name=\"Action\" >" +
+            "        <action type=\"expression\" dialect=\"mvel\" >list.add(context.getProcessInstance().getId());</action>" +
+            "    </actionNode>" +
+            "    <start id=\"1\" name=\"Start\" />" +
+            "    <end id=\"3\" name=\"End\" />" +
+            "  </nodes>" +
+            "  <connections>" +
+            "    <connection from=\"1\" to=\"2\" />" +
+            "    <connection from=\"2\" to=\"4\" />" +
+            "    <connection from=\"4\" to=\"8\" />" +
+            "    <connection from=\"4\" to=\"6\" />" +
+            "    <connection from=\"6\" to=\"3\" />" +
+            "  </connections>" +
+            "" +
+            "</process>");
+        builder.addRuleFlow(source);
+        Package pkg = builder.getPackage();
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+        ruleBase.addPackage( pkg );
+        WorkingMemory workingMemory = ruleBase.newStatefulSession();
+        List<Long> list = new ArrayList<Long>();
+        workingMemory.setGlobal("list", list);
+
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("name", "John Doe");
+        ProcessInstance processInstance = ( ProcessInstance )
+            workingMemory.startProcess("org.drools.process-split", params);
+        
+        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+        assertEquals(1, list.size());
+    }
+    
+    public void testSplitWithJavaGlobalConstraint() {
+        PackageBuilder builder = new PackageBuilder();
+        Reader source = new StringReader(
+            "<process xmlns=\"http://drools.org/drools-5.0/process\"" +
+            "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"" +
+            "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"" +
+            "         type=\"RuleFlow\" name=\"ruleflow\" id=\"org.drools.process-split\" package-name=\"org.drools\" >" +
+            "" +
+            "  <header>" +
+            "    <imports>" +
+            "      <import name=\"org.drools.Person\" />" +
+            "      <import name=\"org.drools.integrationtests.ProcessSplitTest.ProcessUtils\" />" +
+            "    </imports>" +
+            "    <globals>" +
+            "      <global identifier=\"list\" type=\"java.util.List\" />" +
+            "    </globals>" +
+            "  </header>" +
+            "" +
+            "  <nodes>" +
+            "    <actionNode id=\"2\" name=\"Action\" >" +
+            "        <action type=\"expression\" dialect=\"mvel\" >insert(context.getProcessInstance());</action>" +
+            "    </actionNode>" +
+            "    <split id=\"4\" name=\"Split\" type=\"2\" >" +
+            "      <constraints>" +
+            "        <constraint toNodeId=\"8\" toType=\"DROOLS_DEFAULT\" priority=\"2\" type=\"code\" dialect=\"java\" >return true;</constraint>" +
+            "        <constraint toNodeId=\"6\" toType=\"DROOLS_DEFAULT\" priority=\"1\" type=\"code\" dialect=\"java\" >return list != null;</constraint>" +
+            "      </constraints>" +
+            "    </split>" +
+            "    <end id=\"8\" name=\"End\" />" +
+            "    <actionNode id=\"6\" name=\"Action\" >" +
+            "        <action type=\"expression\" dialect=\"mvel\" >list.add(context.getProcessInstance().getId());</action>" +
+            "    </actionNode>" +
+            "    <start id=\"1\" name=\"Start\" />" +
+            "    <end id=\"3\" name=\"End\" />" +
+            "  </nodes>" +
+            "  <connections>" +
+            "    <connection from=\"1\" to=\"2\" />" +
+            "    <connection from=\"2\" to=\"4\" />" +
+            "    <connection from=\"4\" to=\"8\" />" +
+            "    <connection from=\"4\" to=\"6\" />" +
+            "    <connection from=\"6\" to=\"3\" />" +
+            "  </connections>" +
+            "" +
+            "</process>");
+        builder.addRuleFlow(source);
+        Package pkg = builder.getPackage();
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+        ruleBase.addPackage( pkg );
+        WorkingMemory workingMemory = ruleBase.newStatefulSession();
+        List<Long> list = new ArrayList<Long>();
+        workingMemory.setGlobal("list", list);
+
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("name", "John Doe");
+        ProcessInstance processInstance = ( ProcessInstance )
+            workingMemory.startProcess("org.drools.process-split", params);
+        
+        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+        assertEquals(1, list.size());
+    }
+    
     public static class ProcessUtils {
     	
     	public static Object getValue(RuleFlowProcessInstance processInstance, String name) {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaReturnValueConstraintEvaluatorBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaReturnValueConstraintEvaluatorBuilderTest.java	2009-02-26 22:52:32 UTC (rev 25443)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaReturnValueConstraintEvaluatorBuilderTest.java	2009-02-26 23:47:51 UTC (rev 25444)
@@ -57,7 +57,8 @@
         final JavaReturnValueEvaluatorBuilder builder = new JavaReturnValueEvaluatorBuilder();
         builder.build( context,
                        node,
-                       descr );
+                       descr,
+                       null );
 
         javaDialect.addProcess( context );
         javaDialect.compileAll();

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueConstraintEvaluatorBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueConstraintEvaluatorBuilderTest.java	2009-02-26 22:52:32 UTC (rev 25443)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueConstraintEvaluatorBuilderTest.java	2009-02-26 23:47:51 UTC (rev 25444)
@@ -49,7 +49,8 @@
         final MVELReturnValueEvaluatorBuilder builder = new MVELReturnValueEvaluatorBuilder();
         builder.build( context,
                        node,
-                       descr );
+                       descr,
+                       null );
 
         final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
         ruleBase.addPackage( pkgBuilder.getPackage() );

Modified: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/xpath/XPathReturnValueEvaluatorBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/xpath/XPathReturnValueEvaluatorBuilder.java	2009-02-26 22:52:32 UTC (rev 25443)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/xpath/XPathReturnValueEvaluatorBuilder.java	2009-02-26 23:47:51 UTC (rev 25444)
@@ -18,6 +18,7 @@
 import org.apache.ode.utils.Namespaces;
 import org.drools.bpel.core.BPELProcess;
 import org.drools.compiler.ReturnValueDescr;
+import org.drools.process.core.ContextResolver;
 import org.drools.rule.builder.PackageBuildContext;
 import org.drools.rule.builder.ProcessBuildContext;
 import org.drools.rule.builder.ReturnValueEvaluatorBuilder;
@@ -29,7 +30,8 @@
 
 	public void build(PackageBuildContext context,
 			ReturnValueConstraintEvaluator returnValueConstraintEvaluator,
-			ReturnValueDescr returnValueDescr) {
+			ReturnValueDescr returnValueDescr,
+			ContextResolver contextResolver) {
 		try {
 			XPathReturnValueEvaluator evaluator = new XPathReturnValueEvaluator();
             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();




More information about the jboss-svn-commits mailing list