[jboss-svn-commits] JBL Code SVN: r25135 - in labs/jbossrules/trunk: drools-compiler/src/test/java/org/drools/integrationtests and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Feb 6 08:53:12 EST 2009
Author: KrisVerlaenen
Date: 2009-02-06 08:53:12 -0500 (Fri, 06 Feb 2009)
New Revision: 25135
Added:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessForEachTest.java
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/javaRule.mvel
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELReturnValueEvaluator.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/ForEachNodeInstance.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/RuleFlowConstraintDialog.java
Log:
- minor improvements to make process model more expressive
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-06 12:32:52 UTC (rev 25134)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel 2009-02-06 13:53:12 UTC (rev 25135)
@@ -399,7 +399,7 @@
@end{}
return @{processClassName}.@{methodName} (
- @foreach{identifier : globals} @{identifier}
+ processContext at if{globals != empty}, at end{} @foreach{identifier : globals} @{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-06 12:32:52 UTC (rev 25134)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaRule.mvel 2009-02-06 13:53:12 UTC (rev 25135)
@@ -113,7 +113,8 @@
@end{}
@declare{"returnValueEvaluatorMethod"}
-public static Object @{methodName}(@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{","} ) throws Exception {
+ org.drools.runtime.process.ProcessContext kcontext = context;
@{text}
}
@end{}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessForEachTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessForEachTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessForEachTest.java 2009-02-06 13:53:12 UTC (rev 25135)
@@ -0,0 +1,92 @@
+package org.drools.integrationtests;
+
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.drools.Message;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.WorkingMemory;
+import org.drools.compiler.DroolsError;
+import org.drools.compiler.PackageBuilder;
+import org.drools.compiler.PackageBuilderErrors;
+import org.drools.process.instance.ProcessInstance;
+import org.drools.rule.Package;
+import org.drools.runtime.ObjectFilter;
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+
+public class ProcessForEachTest extends TestCase {
+
+ public void testOnEntryExit() {
+ PackageBuilder builder = new PackageBuilder();
+ Reader source = new StringReader(
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
+ " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+ " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
+ " type=\"RuleFlow\" name=\"ForEach\" id=\"org.drools.ForEach\" package-name=\"org.drools\" >\n" +
+ " <header>\n" +
+ " <globals>\n" +
+ " <global identifier=\"myList\" type=\"java.util.List\" />\n" +
+ " </globals>\n" +
+ " <variables>\n" +
+ " <variable name=\"collection\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"java.util.List\" />\n" +
+ " </variable>\n" +
+ " </variables>\n" +
+ " </header>\n" +
+ "\n" +
+ " <nodes>\n" +
+ " <forEach id=\"2\" name=\"ForEach\" variableName=\"item\" collectionExpression=\"collection\" >\n" +
+ " <nodes>\n" +
+ " <actionNode id=\"1\" name=\"Action\" >\n" +
+ " <action type=\"expression\" dialect=\"mvel\" >myList.add(item);</action>\n" +
+ " </actionNode>\n" +
+ " </nodes>\n" +
+ " <connections>\n" +
+ " </connections>\n" +
+ " <in-ports>\n" +
+ " <in-port type=\"DROOLS_DEFAULT\" nodeId=\"1\" nodeInType=\"DROOLS_DEFAULT\" />\n" +
+ " </in-ports>\n" +
+ " <out-ports>\n" +
+ " <out-port type=\"DROOLS_DEFAULT\" nodeId=\"1\" nodeOutType=\"DROOLS_DEFAULT\" />\n" +
+ " </out-ports>\n" +
+ " </forEach>\n" +
+ " <start id=\"1\" name=\"Start\" />\n" +
+ " <end id=\"3\" name=\"End\" />\n" +
+ " </nodes>\n" +
+ "\n" +
+ " <connections>\n" +
+ " <connection from=\"1\" to=\"2\" />\n" +
+ " <connection from=\"2\" to=\"3\" />\n" +
+ " </connections>\n" +
+ "</process>");
+ builder.addRuleFlow(source);
+ Package pkg = builder.getPackage();
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage( pkg );
+ WorkingMemory workingMemory = ruleBase.newStatefulSession();
+ List<String> myList = new ArrayList<String>();
+ workingMemory.setGlobal("myList", myList);
+ List<String> collection = new ArrayList<String>();
+ collection.add("one");
+ collection.add("two");
+ collection.add("three");
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("collection", collection);
+ ProcessInstance processInstance = ( ProcessInstance )
+ workingMemory.startProcess("org.drools.ForEach", params);
+ assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+ assertEquals(3, myList.size());
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELReturnValueEvaluator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELReturnValueEvaluator.java 2009-02-06 12:32:52 UTC (rev 25134)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELReturnValueEvaluator.java 2009-02-06 13:53:12 UTC (rev 25135)
@@ -74,6 +74,8 @@
ProcessContext context) throws Exception {
DroolsMVELFactory factory = (DroolsMVELFactory) this.prototype.clone();
+ factory.addResolver("context", new SimpleValueResolver(context));
+ factory.addResolver("kcontext", new SimpleValueResolver(context));
if (variableNames != null) {
for (String variableName: variableNames) {
factory.addResolver(
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/ForEachNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/ForEachNodeInstance.java 2009-02-06 12:32:52 UTC (rev 25134)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/ForEachNodeInstance.java 2009-02-06 13:53:12 UTC (rev 25135)
@@ -14,6 +14,8 @@
import org.drools.workflow.instance.NodeInstance;
import org.drools.workflow.instance.NodeInstanceContainer;
import org.drools.workflow.instance.impl.NodeInstanceImpl;
+import org.drools.workflow.instance.impl.NodeInstanceResolverFactory;
+import org.mvel2.MVEL;
/*
* Copyright 2005 JBoss Inc
@@ -98,13 +100,20 @@
private Collection<?> evaluateCollectionExpression(String collectionExpression) {
// TODO: should evaluate this expression using MVEL
+ Object collection = null;
VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
resolveContextInstance(VariableScope.VARIABLE_SCOPE, collectionExpression);
- if (variableScopeInstance == null) {
- throw new IllegalArgumentException(
- "Could not find collection " + collectionExpression);
+ if (variableScopeInstance != null) {
+ collection = variableScopeInstance.getVariable(collectionExpression);
+ } else {
+ try {
+ collection = MVEL.eval(collectionExpression, new NodeInstanceResolverFactory(this));
+ } catch (Throwable t) {
+ throw new IllegalArgumentException(
+ "Could not find collection " + collectionExpression);
+ }
+
}
- Object collection = variableScopeInstance.getVariable(collectionExpression);
if (collection == null) {
return Collections.EMPTY_LIST;
}
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/RuleFlowConstraintDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/RuleFlowConstraintDialog.java 2009-02-06 12:32:52 UTC (rev 25134)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/RuleFlowConstraintDialog.java 2009-02-06 13:53:12 UTC (rev 25135)
@@ -324,7 +324,11 @@
if (!alwaysTrue.getSelection()) {
constraint.setConstraint(getConstraintText());
} else {
- constraint.setConstraint("eval(true)");
+ if (typeCombo.getSelectionIndex() == 0) {
+ constraint.setConstraint("eval(true)");
+ } else {
+ constraint.setConstraint("return true;");
+ }
}
constraint.setName(nameText.getText());
try {
@@ -343,7 +347,7 @@
public void setConstraint(Constraint constraint) {
this.constraint = constraint;
if (constraint != null) {
- if ("eval(true)".equals(constraint.getConstraint())) {
+ if ("eval(true)".equals(constraint.getConstraint()) || "return true;".equals(constraint.getConstraint())) {
alwaysTrue.setSelection(true);
} else {
setConstraintText(constraint.getConstraint() == null ? "" : constraint.getConstraint());
More information about the jboss-svn-commits
mailing list