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

    
6
import com.googlecode.sarasvati.Engine;
7
import com.googlecode.sarasvati.NodeToken;
8

    
9
import eu.dnetlib.msro.workflows.util.WorkflowsConstants;
10

    
11
public abstract class SimpleJobNode extends SarasvatiJobNode {
12

    
13
	private static final Log log = LogFactory.getLog(SarasvatiJobNode.class);
14

    
15
	@Override
16
	public final void execute(final Engine engine, final NodeToken token) {
17
		super.execute(engine, token);
18

    
19
		try {
20
			log.debug("START NODE: " + getBeanName());
21
			beforeStart(token);
22
			String arc = execute(token);
23
			beforeCompleted(token);
24
			log.debug("END NODE (SUCCESS): " + getBeanName());
25

    
26
			engine.complete(token, arc);
27
		} catch (Throwable e) {
28
			log.error("got exception while executing workflow node", e);
29
			log.debug("END NODE (FAILED): " + getBeanName());
30
			beforeFailed(token);
31
			token.getEnv().setAttribute(WorkflowsConstants.SYSTEM_HAS_FAILED, true);
32
			token.getEnv().setAttribute(WorkflowsConstants.SYSTEM_ERROR, e.getMessage());
33
			engine.complete(token, "failed");
34
		}
35
	}
36

    
37
	abstract protected String execute(final NodeToken token) throws Exception;
38

    
39
	protected void beforeStart(final NodeToken token) {
40
		// For optional overwrites
41
	}
42

    
43
	protected void beforeCompleted(final NodeToken token) {
44
		// For optional overwrites
45
	}
46

    
47
	protected void beforeFailed(final NodeToken token) {
48
		// For optional overwrites
49
	}
50

    
51
}
(8-8/9)