### Eclipse Workspace Patch 1.0
#P jbpm4
Index: modules/api/src/main/java/org/jbpm/api/Execution.java
===================================================================
--- modules/api/src/main/java/org/jbpm/api/Execution.java (revision 6375)
+++ modules/api/src/main/java/org/jbpm/api/Execution.java (working copy)
@@ -184,6 +184,12 @@
* structure. Null will be returned in case this execution itself is the
* main execution path. */
Execution getProcessInstance();
+
+ /**
+ * the sub path of execution in the execution
+ * structure. Null will be returned in case there is no sub process execution.
+ */
+ Execution getSubProcessInstance();
/** the parent execution in the execution
* structure. Null will be returned in case this execution itself is the
Index: modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
===================================================================
--- modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java (revision 6375)
+++ modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java (working copy)
@@ -1066,6 +1066,9 @@
protected void checkActive() {
if (!isActive()) {
throw new JbpmException(toString()+" is not active: "+state);
+ } else if (this.subProcessInstance != null && !Execution.STATE_ENDED.equals(this.subProcessInstance.getState())) {
+ throw new JbpmException(toString() + " has running subprocess: "
+ + this.subProcessInstance.toString() + " in state " + this.subProcessInstance.getState());
}
}
Index: modules/test-db/src/test/java/org/jbpm/test/activity/subprocess/SubProcessSignalTest.java
===================================================================
--- modules/test-db/src/test/java/org/jbpm/test/activity/subprocess/SubProcessSignalTest.java (revision 0)
+++ modules/test-db/src/test/java/org/jbpm/test/activity/subprocess/SubProcessSignalTest.java (revision 0)
@@ -0,0 +1,130 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.test.activity.subprocess;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.jbpm.api.ProcessInstance;
+import org.jbpm.pvm.internal.model.ExecutionImpl;
+import org.jbpm.test.JbpmTestCase;
+
+
+/**
+ * Test case for signal of subprocess state activities.
+ *
+ * @author Maciej Swiderski
+ */
+public class SubProcessSignalTest extends JbpmTestCase {
+
+
+
+ private static final String SUB_PROCESS_WITH_WAIT_STATE =
+ "" +
+ " " +
+ " " +
+ " " +
+ " " +
+ " " +
+ " " +
+ " " +
+ " " +
+ " " +
+ " " +
+ "";
+
+
+
+ private static final String MAIN_PROCESS_SUB_EL_ID =
+ "" +
+ " " +
+ " " +
+ " " +
+ " " +
+ " " +
+ " " +
+ " " +
+ " " +
+ " " +
+ " " +
+ " " +
+ " " +
+ " " +
+ " " +
+ " " +
+ "";
+
+
+ public void testSubProcessWithStateFailure() {
+ deployJpdlXmlString(SUB_PROCESS_WITH_WAIT_STATE);
+ deployJpdlXmlString(MAIN_PROCESS_SUB_EL_ID);
+
+ Map vars = new HashMap();
+ vars.put("dynamic_subprocess", "SubProcessReview-1");
+
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("mainProcess", vars);
+ String subId = ((ExecutionImpl)processInstance).getSubProcessInstance().getId();
+
+ try {
+ processInstance = executionService.signalExecutionById(processInstance.getId());
+
+ processInstance = executionService.signalExecutionById(processInstance.getId());
+
+ assertProcessInstanceEnded(processInstance);
+ ProcessInstance subProcessInstance = executionService.findProcessInstanceById(subId);
+ assertEquals(ProcessInstance.STATE_ENDED, subProcessInstance.getState());
+ } catch (Exception e) {
+
+ //expected exception since we are signaling main process while sub process is not finished
+ assertTrue(e.getMessage().indexOf("has running subprocess") != -1);
+
+ // clean up to let other tests execute
+ executionService.signalExecutionById(((ExecutionImpl)processInstance).getSubProcessInstance().getId());
+ executionService.signalExecutionById(((ExecutionImpl)processInstance).getSubProcessInstance().getId());
+
+ processInstance = executionService.signalExecutionById(processInstance.getId());
+
+ }
+
+ }
+
+ public void testSubProcessWithStateSuccess() {
+ deployJpdlXmlString(SUB_PROCESS_WITH_WAIT_STATE);
+ deployJpdlXmlString(MAIN_PROCESS_SUB_EL_ID);
+
+ Map vars = new HashMap();
+ vars.put("dynamic_subprocess", "SubProcessReview-1");
+
+ ProcessInstance processInstance = executionService.startProcessInstanceByKey("mainProcess", vars);
+ String subId = ((ExecutionImpl)processInstance).getSubProcessInstance().getId();
+ executionService.signalExecutionById(((ExecutionImpl)processInstance).getSubProcessInstance().getId());
+ executionService.signalExecutionById(((ExecutionImpl)processInstance).getSubProcessInstance().getId());
+
+ processInstance = executionService.signalExecutionById(processInstance.getId());
+
+ assertProcessInstanceEnded(processInstance);
+ ProcessInstance subProcessInstance = executionService.findProcessInstanceById(subId);
+ assertEquals(ProcessInstance.STATE_ENDED, subProcessInstance.getState());
+
+ }
+
+}
Property changes on: modules\test-db\src\test\java\org\jbpm\test\activity\subprocess\SubProcessSignalTest.java
___________________________________________________________________
Added: svn:keywords
+ Id Revision
Added: svn:eol-style
+ LF