com.adobe.granite.workflow.exec.WorkflowExternalProcess Maven / Gradle / Ivy
/*************************************************************************
*
* ADOBE CONFIDENTIAL
* __________________
*
* Copyright 2012 Adobe Systems Incorporated
* All Rights Reserved.
*
* NOTICE: All information contained herein is, and remains
* the property of Adobe Systems Incorporated and its suppliers,
* if any. The intellectual and technical concepts contained
* herein are proprietary to Adobe Systems Incorporated and its
* suppliers and are protected by trade secret or copyright law.
* Dissemination of this information or reproduction of this material
* is strictly forbidden unless prior written permission is obtained
* from Adobe Systems Incorporated.
**************************************************************************/
package com.adobe.granite.workflow.exec;
import com.adobe.granite.workflow.WorkflowException;
import com.adobe.granite.workflow.WorkflowSession;
import com.adobe.granite.workflow.metadata.MetaDataMap;
import java.io.Serializable;
/**
* This is the interface to use to run external process steps.
*
* The external process steps are covered by {@link com.adobe.granite.workflow.model.WorkflowNode#TYPE_EXTERNAL_PROCESS}.
* They are typically used for asynchronous tasks to execute on external systems.
*
* Flow:
*
* - First the {@link #execute(WorkItem, com.adobe.granite.workflow.WorkflowSession, com.adobe.granite.workflow.metadata.MetaDataMap)} method is called,
* providing an identifier for the external process
* - Then the {@link #hasFinished(java.io.Serializable, WorkItem, com.adobe.granite.workflow.WorkflowSession, com.adobe.granite.workflow.metadata.MetaDataMap)}
* method is called periodically to check if the external process has finished. Interval and timeouts can be configured on the step
* - Once {@link #hasFinished(java.io.Serializable, WorkItem, com.adobe.granite.workflow.WorkflowSession, com.adobe.granite.workflow.metadata.MetaDataMap)}
* returns
true
the {@link #handleResult(java.io.Serializable, WorkItem, com.adobe.granite.workflow.WorkflowSession, com.adobe.granite.workflow.metadata.MetaDataMap)}
* method is called, to read the results, if any
*
* Process Identifiers:
* It's up to the implementation how the external process identifier returned by execute()
looks like. The engine does not make any assumptions about it, other than it
* must be serializable. But of course the implementations of hasFinished()
and handleResult()
must know about it and handle it accordingly.
*
*/
public interface WorkflowExternalProcess {
/**
* Executes the external process step. In order to keep track of this asynchronous process, an identifier must be returned. One can return null
* to indicate that nothing was executed. In this case, the step directly advances to the next step.
*
* @param item The current work item
* @param session The current workflow session
* @param arguments The current steps node arguments (aka as node meta data)
* @return Any serializable identifier for the external process executed, or null
* @throws com.adobe.granite.workflow.WorkflowException thrown in case
* something goes wrong during execution
*/
public Serializable execute(WorkItem item, WorkflowSession session, MetaDataMap arguments) throws WorkflowException;
/**
* Tests the external process, given by the external process id, for completeness.
*
* @param externalProcessId The external process to test for completeness
* @param item The current work item
* @param session The current workflow session
* @param arguments The current steps node arguments (aka as node meta data)
* @return {@code true} if the specified external process has finished
*/
public boolean hasFinished(Serializable externalProcessId, WorkItem item, WorkflowSession session, MetaDataMap arguments);
/**
* Get and handle the result of the external process, given by the external process id. This would include storing any results where appropriate for
* further use.
*
* @param externalProcessId The external process to handle the results for
* @param workItem The current work item
* @param session The current workflow session
* @param arguments The current steps node arguments (aka as node meta data)
* @throws com.adobe.granite.workflow.WorkflowException thrown in case
* something goes wrong during execution
*/
public void handleResult(Serializable externalProcessId, WorkItem workItem, WorkflowSession session, MetaDataMap arguments) throws WorkflowException;
}