Project

General

Profile

1
package eu.dnetlib.msro.workflows.nodes;
2

    
3
import org.apache.commons.logging.Log;
4
import org.apache.commons.logging.LogFactory;
5
import org.springframework.beans.factory.annotation.Autowired;
6

    
7
import eu.dnetlib.msro.workflows.graph.Arc;
8
import eu.dnetlib.msro.workflows.procs.ProcessAware;
9
import eu.dnetlib.msro.workflows.procs.ProcessRegistry;
10
import eu.dnetlib.msro.workflows.procs.Token;
11
import eu.dnetlib.msro.workflows.procs.WorkflowExecutor;
12
import eu.dnetlib.msro.workflows.procs.WorkflowProcess;
13
import eu.dnetlib.msro.workflows.util.ProcessCallback;
14
import eu.dnetlib.msro.workflows.util.SubWorkflowProgressProvider;
15

    
16
/**
17
 * Created by michele on 18/11/15.
18
 */
19
public class LaunchWorkflowJobNode extends ProcessNode implements ProcessAware {
20

    
21
	private static final Log log = LogFactory.getLog(LaunchWorkflowJobNode.class);
22
	private String wfId;
23

    
24
	@Autowired
25
	private WorkflowExecutor executor;
26

    
27
	@Autowired
28
	private ProcessRegistry processRegistry;
29

    
30
	private WorkflowProcess process;
31

    
32
	@Override
33
	public final void execute(final Token token) {
34

    
35
		try {
36
			final String procId = executor.startWorkflow(getWfId(), new ProcessCallback() {
37

    
38
				@Override
39
				public void onSuccess() {
40
					log.debug("Child workflow has been completed successfully");
41
					token.setNextArc(Arc.DEFAULT_ARC);
42
					token.release();
43
				}
44

    
45
				@Override
46
				public void onFail() {
47
					log.error("Child workflow is failed");
48
					token.releaseAsFailed("Child workflow is failed");
49
				}
50
			}, process.getProfileId());
51

    
52
			if (log.isDebugEnabled()) {
53
				log.debug("The child workflow [" + getWfId() + "] is starting with procId: " + procId);
54
			}
55

    
56
			token.setProgressProvider(new SubWorkflowProgressProvider(procId, processRegistry));
57

    
58
		} catch (final Throwable e) {
59
			log.error("got exception while launching child workflow", e);
60
			token.releaseAsFailed(e);
61
		}
62
	}
63

    
64
	public String getWfId() {
65
		return wfId;
66
	}
67

    
68
	public void setWfId(final String wfId) {
69
		this.wfId = wfId;
70
	}
71

    
72
	@Override
73
	public void setProcess(final WorkflowProcess process) {
74
		this.process = process;
75
	}
76

    
77
}
(5-5/10)