[jbpm-commits] JBoss JBPM SVN: r6204 - in jbpm4/trunk/modules: test-db/src/test/java/org/jbpm/test/activity/subprocess and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Sat Feb 27 17:46:38 EST 2010


Author: kukeltje
Date: 2010-02-27 17:46:37 -0500 (Sat, 27 Feb 2010)
New Revision: 6204

Modified:
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessActivity.java
   jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/subprocess/SubProcessTest.java
Log:
EL for subprocess keys JBPM-2444

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessActivity.java	2010-02-27 18:48:14 UTC (rev 6203)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessActivity.java	2010-02-27 22:46:37 UTC (rev 6204)
@@ -24,6 +24,9 @@
 import java.util.List;
 import java.util.Map;
 
+import javax.el.PropertyNotFoundException;
+
+import org.jbpm.api.JbpmException;
 import org.jbpm.api.activity.ActivityExecution;
 import org.jbpm.api.model.Activity;
 import org.jbpm.pvm.internal.client.ClientProcessDefinition;
@@ -64,7 +67,22 @@
     if (subProcessId!=null) {
       processDefinition = repositorySession.findProcessDefinitionById(subProcessId);
     } else {
-      processDefinition = repositorySession.findProcessDefinitionByKey(subProcessKey);
+      String subProcessKeyEval = null;
+      try {
+        Expression subProcessKeyExpression = Expression.create(subProcessKey, Expression.LANGUAGE_UEL_VALUE);
+        subProcessKeyEval = (String) subProcessKeyExpression.evaluate(execution);
+        if (subProcessKeyEval == null) {
+          throw new JbpmException("Subprocess key '" + subProcessKey +"' resolved to null.");
+        }
+      } catch (PropertyNotFoundException e) {
+        throw new JbpmException("Subprocess key '" + subProcessKey +"' could not be resolved.");
+      }
+
+      processDefinition = repositorySession.findProcessDefinitionByKey(subProcessKeyEval);
+      if (processDefinition == null) {
+        throw new JbpmException("Subprocess '" + subProcessKeyEval + "' could not be found.");
+      }
+
     }
     
     ExecutionImpl subProcessInstance = (ExecutionImpl) processDefinition.createProcessInstance(null, execution);

Modified: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/subprocess/SubProcessTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/subprocess/SubProcessTest.java	2010-02-27 18:48:14 UTC (rev 6203)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/activity/subprocess/SubProcessTest.java	2010-02-27 22:46:37 UTC (rev 6204)
@@ -24,6 +24,11 @@
  */
 package org.jbpm.test.activity.subprocess;
 
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.jdt.internal.compiler.ast.AssertStatement;
+import org.jbpm.api.JbpmException;
 import org.jbpm.api.ProcessInstance;
 import org.jbpm.api.task.Task;
 import org.jbpm.test.JbpmTestCase;
@@ -85,6 +90,21 @@
     "  <end name='theEnd' />" +
     "</process>";  
   
+  private static final String MAIN_PROCESS_SUB_EL =
+    "<process name='mainProcess'>" +
+    "  <start>" +
+    "    <transition to='review' />" +
+    "  </start>" +
+    "  <sub-process name='review' sub-process-key='#{dynamic_subprocess}'>" +
+    "    <transition name='ok' to='next step'/>" +
+    "    <transition name='nok' to='update'/>" +
+    "    <transition name='reject' to='close'/>" +
+    "  </sub-process>" +
+    "  <state name='next step'/>" +
+    "  <state name='update'/>" +
+    "  <end name='close'/>" +
+    "</process>"; 
+  
   public void testSubProcessOutcomeToState() {
     deployJpdlXmlString(SUB_PROCESS);
     deployJpdlXmlString(MAIN_PROCESS);
@@ -96,6 +116,48 @@
   }
 
   
+  public void testDynamicSubProcess() {
+    deployJpdlXmlString(SUB_PROCESS);
+    deployJpdlXmlString(MAIN_PROCESS_SUB_EL);
+    
+    Map<String, String> vars = new HashMap<String, String>();
+    vars.put("dynamic_subprocess", "SubProcessReview");
+    ProcessInstance processInstance = executionService.startProcessInstanceByKey("mainProcess",vars);
+    Task task = taskService.findPersonalTasks("johndoe").get(0);
+    taskService.completeTask(task.getId(), "reject");
+    assertProcessInstanceEnded(processInstance); 
+  }
+  
+  public void testDynamicSubProcessNotFound() {
+    String expectedError = "Subprocess 'DOES_NOT_EXIST' could not be found.";
+    deployJpdlXmlString(SUB_PROCESS);
+    deployJpdlXmlString(MAIN_PROCESS_SUB_EL);
+    
+    Map<String, String> vars = new HashMap<String, String>();
+    vars.put("dynamic_subprocess", "DOES_NOT_EXIST");
+    try {
+      ProcessInstance processInstance = executionService.startProcessInstanceByKey("mainProcess",vars);
+      fail("Should not happen, error expected: " + expectedError);
+    } catch (JbpmException je) {
+      assertEquals(expectedError, je.getMessage());
+    }
+  }
+  
+  public void testDynamicSubProcessWrongProperty() {
+    String expectedError = "Subprocess key '#{dynamic_subprocess}' could not be resolved.";
+    deployJpdlXmlString(SUB_PROCESS);
+    deployJpdlXmlString(MAIN_PROCESS_SUB_EL);
+    
+    Map<String, String> vars = new HashMap<String, String>();
+    vars.put("WRONG_PROPERTY", "VALUE_DOES_NOT_MATTER");
+    try {
+      ProcessInstance processInstance = executionService.startProcessInstanceByKey("mainProcess",vars);
+      fail("Should not happen, error expected: " + expectedError);
+    } catch (JbpmException je) {
+      assertEquals(expectedError, je.getMessage());
+    }
+  }
+  
   public void testSubProcessOutcomeToEnd() {
     deployJpdlXmlString(SUB_PROCESS);
     deployJpdlXmlString(MAIN_PROCESS);
@@ -105,8 +167,8 @@
     taskService.completeTask(task.getId(), "reject");
     assertProcessInstanceEnded(processInstance); 
   }
+
   
-  
   // Test for JBPM-2651
   public void testSubProcessNoWaitStates() {
     deployJpdlXmlString(SUB_PROCESS_NO_WAIT_STATE);



More information about the jbpm-commits mailing list