54 lines
1.3 KiB
Java
54 lines
1.3 KiB
Java
package eu.dnetlib.manager.wf.nodes;
|
|
|
|
import java.util.concurrent.Executors;
|
|
|
|
import org.apache.commons.logging.Log;
|
|
import org.apache.commons.logging.LogFactory;
|
|
|
|
import eu.dnetlib.manager.wf.workflows.procs.Token;
|
|
import eu.dnetlib.manager.wf.workflows.util.NodeCallback;
|
|
|
|
public abstract class AbstractJobNode extends ProcessNode {
|
|
|
|
private static final Log log = LogFactory.getLog(AbstractJobNode.class);
|
|
|
|
private final boolean async;
|
|
|
|
public AbstractJobNode(final boolean async) {
|
|
this.async = async;
|
|
}
|
|
|
|
@Override
|
|
public final void execute(final Token token, final NodeCallback callback) {
|
|
try {
|
|
log.debug("START NODE: " + getBeanName());
|
|
token.setProgressMessage(getNodeName());
|
|
|
|
if (isAsync()) {
|
|
Executors.newSingleThreadExecutor().execute(() -> doExecute(token, callback));
|
|
} else {
|
|
doExecute(token, callback);
|
|
}
|
|
|
|
log.debug("END NODE (SUCCESS): " + getBeanName());
|
|
} catch (final Throwable e) {
|
|
log.error("got exception while executing workflow node", e);
|
|
log.debug("END NODE (FAILED): " + getBeanName());
|
|
callback.onFail(token);
|
|
}
|
|
|
|
}
|
|
|
|
private final void doExecute(final Token token, final NodeCallback callback) {
|
|
execute();
|
|
callback.onComplete(token);
|
|
}
|
|
|
|
protected abstract void execute();
|
|
|
|
public final boolean isAsync() {
|
|
return async;
|
|
}
|
|
|
|
}
|