提交 cdf63fb9 编写于 作者: M meyerd

ACT-1072 improving AtomicOpertaionAcivityEnd such that it ends the process...

ACT-1072 improving AtomicOpertaionAcivityEnd such that it ends the process instance if we end a scope under the process definition with no outgoing sequence flows
上级 b8410776
......@@ -74,9 +74,18 @@ public class AtomicOperationActivityEnd extends AbstractEventAtomicOperation {
// default destroy scope behavior
InterpretableExecution parentScopeExecution = (InterpretableExecution) execution.getParent();
execution.destroy();
execution.remove();
parentScopeExecution.setActivity(parentActivity);
parentScopeExecution.performOperation(ACTIVITY_END);
execution.remove();
// if we are a scope under the process instance
// and have no outgoing transitions: end the process instance here
if(activity.getParent() == activity.getProcessDefinition()
&& activity.getOutgoingTransitions().isEmpty()) {
parentScopeExecution.setActivity(activity);
// we call end() because it sets isEnded on the execution
parentScopeExecution.end();
} else {
parentScopeExecution.setActivity(parentActivity);
parentScopeExecution.performOperation(ACTIVITY_END);
}
}
} else { // execution.isConcurrent() && !execution.isScope()
......
......@@ -340,7 +340,7 @@ public class SubProcessTest extends PluggableActivitiTestCase {
* @see http://jira.codehaus.org/browse/ACT-1072
*/
@Deployment
public void FAILING_testSimpleSubProcessWithoutEndEvent() {
public void testSimpleSubProcessWithoutEndEvent() {
ProcessInstance pi = runtimeService.startProcessInstanceByKey("testSimpleSubProcessWithoutEndEvent");
assertProcessEnded(pi.getId());
}
......@@ -349,7 +349,7 @@ public class SubProcessTest extends PluggableActivitiTestCase {
* @see http://jira.codehaus.org/browse/ACT-1072
*/
@Deployment
public void FAILING_testNestedSubProcessesWithoutEndEvents() {
public void testNestedSubProcessesWithoutEndEvents() {
ProcessInstance pi = runtimeService.startProcessInstanceByKey("testNestedSubProcessesWithoutEndEvents");
assertProcessEnded(pi.getId());
}
......
......@@ -249,14 +249,44 @@ public class PvmEmbeddedSubProcessTest extends PvmTestCase {
assertEquals(expectedActiveActivityIds, processInstance.findActiveActivityIds());
}
/**
* +------------------------------+
* | embedded subprocess |
* +-----+ | +-----------+ |
* |start|-->| |startInside| |
* +-----+ | +-----------+ |
* +------------------------------+
*/
public void testEmbeddedSubProcessWithoutEndEvents() {
PvmProcessDefinition processDefinition = new ProcessDefinitionBuilder()
.createActivity("start")
.initial()
.behavior(new Automatic())
.transition("embeddedsubprocess")
.endActivity()
.createActivity("embeddedsubprocess")
.scope()
.behavior(new EmbeddedSubProcess())
.createActivity("startInside")
.behavior(new Automatic())
.endActivity()
.endActivity()
.buildProcessDefinition();
PvmProcessInstance processInstance = processDefinition.createProcessInstance();
processInstance.start();
assertTrue(processInstance.isEnded());
}
/**
* +-------------------------------------------------------+
* | embedded subprocess |
* | +--------------------------------+ |
* | | nested embedded subprocess | |
* +-----+ | +-----------+ | +-----------+ | | +---+
* |start|-->| |startInside|--> | |startInside| | |-->|end|
* +-----+ | +-----------+ | +-----------+ | | +---+
* +-----+ | +-----------+ | +-----------+ | |
* |start|-->| |startInside|--> | |startInside| | |
* +-----+ | +-----------+ | +-----------+ | |
* | +--------------------------------+ |
* | |
* +-------------------------------------------------------+
......@@ -282,20 +312,48 @@ public class PvmEmbeddedSubProcessTest extends PvmTestCase {
.behavior(new Automatic())
.endActivity()
.endActivity()
.transition("end")
.endActivity()
.createActivity("end")
.behavior(new WaitState())
.endActivity()
.buildProcessDefinition();
PvmProcessInstance processInstance = processDefinition.createProcessInstance();
processInstance.start();
assertTrue(processInstance.isEnded());
}
/**
* +------------------------------+
* | embedded subprocess |
* +-----+ | +-----------+ +---------+ |
* |start|-->| |startInside|-->|endInside| |
* +-----+ | +-----------+ +---------+ |
* +------------------------------+
*/
public void testEmbeddedSubProcessNoEnd() {
PvmProcessDefinition processDefinition = new ProcessDefinitionBuilder()
.createActivity("start")
.initial()
.behavior(new Automatic())
.transition("embeddedsubprocess")
.endActivity()
.createActivity("embeddedsubprocess")
.scope()
.behavior(new EmbeddedSubProcess())
.createActivity("startInside")
.behavior(new Automatic())
.transition("endInside")
.endActivity()
.createActivity("endInside")
.behavior(new End())
.endActivity()
.endActivity()
.buildProcessDefinition();
PvmProcessInstance processInstance = processDefinition.createProcessInstance();
processInstance.start();
List<String> expectedActiveActivityIds = new ArrayList<String>();
expectedActiveActivityIds.add("end");
assertEquals(expectedActiveActivityIds, processInstance.findActiveActivityIds());
assertTrue(processInstance.isEnded());
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册