dnet-applications/libs/dnet-wf-service/src/main/java/eu/dnetlib/manager/wf/workflows/procs/ProcessFactory.java

71 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.List;
import java.util.Map;
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.manager.wf.model.GraphNode;
import eu.dnetlib.manager.wf.model.WorkflowInstance;
import eu.dnetlib.manager.wf.workflows.graph.GraphLoader;
import eu.dnetlib.manager.wf.workflows.util.ProcessCallback;
@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 String wfId,
final String wfName,
final String wfFamily,
final List<GraphNode> graph,
final WorkflowInstance instance,
final ProcessCallback processCallback,
final String parent) throws WorkflowManagerException {
final Map<String, String> globalParams = new HashMap<>();
globalParams.putAll(instance.getSystemParams());
globalParams.putAll(instance.getUserParams());
return new WorkflowProcess(generateProcessId(),
wfName,
wfFamily,
instance.getDsId(),
instance.getDsName(),
instance.getApiId(),
graphLoader.loadGraph(graph, globalParams),
instance.getPriority(),
wfId,
instance.getId(),
globalParams,
processCallback, parent);
}
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;
}
}