[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