79 lines
2.2 KiB
Java
79 lines
2.2 KiB
Java
package eu.dnetlib.manager.wf.nodes;
|
|
|
|
import org.apache.commons.logging.Log;
|
|
import org.apache.commons.logging.LogFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import eu.dnetlib.manager.wf.workflows.graph.Arc;
|
|
import eu.dnetlib.manager.wf.workflows.procs.ProcessAware;
|
|
import eu.dnetlib.manager.wf.workflows.procs.ProcessRegistry;
|
|
import eu.dnetlib.manager.wf.workflows.procs.Token;
|
|
import eu.dnetlib.manager.wf.workflows.procs.WorkflowExecutor;
|
|
import eu.dnetlib.manager.wf.workflows.procs.WorkflowProcess;
|
|
import eu.dnetlib.manager.wf.workflows.util.ProcessCallback;
|
|
import eu.dnetlib.manager.wf.workflows.util.SubWorkflowProgressProvider;
|
|
|
|
/**
|
|
* Created by michele on 18/11/15.
|
|
*/
|
|
public class LaunchWorkflowJobNode extends ProcessNode implements ProcessAware {
|
|
|
|
private static final Log log = LogFactory.getLog(LaunchWorkflowJobNode.class);
|
|
|
|
private String wfInstanceId;
|
|
|
|
@Autowired
|
|
private WorkflowExecutor executor;
|
|
|
|
@Autowired
|
|
private ProcessRegistry processRegistry;
|
|
|
|
private WorkflowProcess process;
|
|
|
|
@Override
|
|
public final void execute(final Token token) {
|
|
|
|
try {
|
|
final String procId = executor.startWorkflowInstance(getWfInstanceId(), new ProcessCallback() {
|
|
|
|
@Override
|
|
public void onSuccess() {
|
|
log.debug("Child workflow has been completed successfully");
|
|
token.setNextArc(Arc.DEFAULT_ARC);
|
|
token.release();
|
|
}
|
|
|
|
@Override
|
|
public void onFail() {
|
|
log.error("Child workflow is failed");
|
|
token.releaseAsFailed("Child workflow is failed");
|
|
}
|
|
}, process.getWfInstanceId());
|
|
|
|
if (log.isDebugEnabled()) {
|
|
log.debug("The child workflow [instance: " + getWfInstanceId() + "] is starting with procId: " + procId);
|
|
}
|
|
|
|
token.setProgressProvider(new SubWorkflowProgressProvider(procId, processRegistry));
|
|
|
|
} catch (final Throwable e) {
|
|
log.error("got exception while launching child workflow", e);
|
|
token.releaseAsFailed(e);
|
|
}
|
|
}
|
|
|
|
public String getWfInstanceId() {
|
|
return wfInstanceId;
|
|
}
|
|
|
|
public void setWfInstanceId(final String wfInstanceId) {
|
|
this.wfInstanceId = wfInstanceId;
|
|
}
|
|
|
|
@Override
|
|
public void setProcess(final WorkflowProcess process) {
|
|
this.process = process;
|
|
}
|
|
|
|
}
|