protected void checkWorkflowFinished()

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);
		}
	}