62 lines
1.9 KiB
Java
62 lines
1.9 KiB
Java
package eu.dnetlib.manager.wf.workflows.procs;
|
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.function.Consumer;
|
|
|
|
import org.apache.commons.logging.Log;
|
|
import org.apache.commons.logging.LogFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import eu.dnetlib.errors.WorkflowManagerException;
|
|
import eu.dnetlib.is.model.resource.SimpleResource;
|
|
import eu.dnetlib.manager.wf.model.WorkflowGraph;
|
|
import eu.dnetlib.manager.wf.model.WorkflowInstance;
|
|
import eu.dnetlib.manager.wf.workflows.graph.Graph;
|
|
import eu.dnetlib.manager.wf.workflows.graph.GraphLoader;
|
|
|
|
@Component
|
|
public class ProcessFactory {
|
|
|
|
private static final Log log = LogFactory.getLog(ProcessFactory.class);
|
|
|
|
private String oldGeneratedId = "";
|
|
|
|
private final DateTimeFormatter processIdFormatter = DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss_S");
|
|
|
|
@Autowired
|
|
private GraphLoader graphLoader;
|
|
|
|
public WorkflowProcess newProcess(final SimpleResource wfMetadata,
|
|
final WorkflowGraph wfGraph,
|
|
final WorkflowInstance wfInstance,
|
|
final String parent,
|
|
final Consumer<WorkflowProcess> onSuccess,
|
|
final Consumer<WorkflowProcess> onFail) throws WorkflowManagerException {
|
|
|
|
final Map<String, String> globalParams = new HashMap<>();
|
|
globalParams.putAll(wfInstance.getSystemParams());
|
|
globalParams.putAll(wfInstance.getUserParams());
|
|
|
|
final Graph graph = graphLoader.loadGraph(wfGraph, globalParams);
|
|
|
|
return new WorkflowProcess(generateProcessId(), wfMetadata, wfInstance, graph, globalParams, parent, onSuccess, onFail);
|
|
|
|
}
|
|
|
|
private synchronized String generateProcessId() {
|
|
String id = "";
|
|
do {
|
|
id = "wf_" + LocalDateTime.now().format(processIdFormatter);
|
|
log.info("Generated processID " + id);
|
|
} while (id.equals(oldGeneratedId));
|
|
|
|
oldGeneratedId = id;
|
|
|
|
return id;
|
|
}
|
|
}
|