in taverna-workflowmodel-impl/src/main/java/org/apache/taverna/facade/impl/WorkflowInstanceFacadeImpl.java [448:493]
protected void checkWorkflowFinished(WorkflowInstanceFacadeChange change) {
synchronized (this) {
applyChange(change);
if (getState().equals(State.cancelled) && processorsToComplete < 0) {
logger.error("Already cancelled workflow run "
+ instanceOwningProcessId);
return;
}
if (getState().equals(State.completed)) {
logger.error("Already finished workflow run "
+ instanceOwningProcessId, new IllegalStateException());
return;
}
if (processorsToComplete > 0 || portsToComplete > 0)
// Not yet finished
return;
if (processorsToComplete < 0 || portsToComplete < 0) {
logger.error("Already finished workflow run "
+ instanceOwningProcessId, new IllegalStateException());
return;
}
if (!getState().equals(State.cancelled))
setState(State.completed);
processorsToComplete = -1;
portsToComplete = -1;
}
// De-register the workflow node from the monitor
monitorManager.deregisterNode(instanceOwningProcessId + ":" + dataflow.getLocalName());
/*
* De-register this facade node from the monitor - this will effectively
* tell the monitor that the workflow run has finished
*/
monitorManager.deregisterNode(instanceOwningProcessId);
if (provEnabled) {
DataflowRunComplete provItem = new DataflowRunComplete();
provItem.setInvocationEnded(new Timestamp(currentTimeMillis()));
provItem.setParentId(workflowItem.getIdentifier());
provItem.setWorkflowId(workflowItem.getParentId());
provItem.setProcessId(instanceOwningProcessId);
provItem.setIdentifier(randomUUID().toString());
provItem.setState(getState());
context.getProvenanceReporter().addProvenanceItem(provItem);
}
}