354 lines
7.7 KiB
Java
354 lines
7.7 KiB
Java
package eu.dnetlib.manager.wf.model;
|
|
|
|
import java.io.Serializable;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Pattern;
|
|
import java.util.stream.Collectors;
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.core.env.Environment;
|
|
|
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
|
import com.fasterxml.jackson.annotation.JsonInclude.Include;
|
|
|
|
@JsonInclude(Include.NON_NULL)
|
|
public class WorkflowTemplate implements Serializable {
|
|
|
|
private static final long serialVersionUID = 5919290887480115842L;
|
|
|
|
private List<WfParam> parameters = new ArrayList<>();
|
|
private List<Node> graph = new ArrayList<>();
|
|
|
|
public List<Node> getGraph() {
|
|
return graph;
|
|
}
|
|
|
|
public void setGraph(final List<Node> graph) {
|
|
this.graph = graph;
|
|
}
|
|
|
|
public List<WfParam> getParameters() {
|
|
return parameters;
|
|
}
|
|
|
|
public void setParameters(final List<WfParam> parameters) {
|
|
this.parameters = parameters;
|
|
}
|
|
|
|
public static enum WfParamType {
|
|
STRING,
|
|
NUMBER,
|
|
DATE,
|
|
BOOLEAN
|
|
}
|
|
|
|
@JsonInclude(Include.NON_NULL)
|
|
public static class WfParam implements Serializable {
|
|
|
|
private static final long serialVersionUID = 5885589803738655166L;
|
|
|
|
private String name;
|
|
private String description;
|
|
private WfParamType type = WfParamType.STRING;
|
|
private String defaultValue;
|
|
private boolean required = true;
|
|
|
|
public WfParam() {}
|
|
|
|
public WfParam(final String name) {
|
|
this.name = name;
|
|
this.description = name;
|
|
}
|
|
|
|
public WfParam(final String name, final WfParamType type) {
|
|
this.name = name;
|
|
this.description = name;
|
|
this.type = type;
|
|
}
|
|
|
|
public WfParam(final String name, final String description, final WfParamType type, final String defaultValue, final boolean required) {
|
|
this.name = name;
|
|
this.description = description;
|
|
this.type = type;
|
|
this.defaultValue = defaultValue;
|
|
this.required = required;
|
|
}
|
|
|
|
public String getName() {
|
|
return name;
|
|
}
|
|
|
|
public void setName(final String name) {
|
|
this.name = name;
|
|
}
|
|
|
|
public String getDescription() {
|
|
return description;
|
|
}
|
|
|
|
public void setDescription(final String description) {
|
|
this.description = description;
|
|
}
|
|
|
|
public WfParamType getType() {
|
|
return type;
|
|
}
|
|
|
|
public void setType(final WfParamType type) {
|
|
this.type = type;
|
|
}
|
|
|
|
public String getDefaultValue() {
|
|
return defaultValue;
|
|
}
|
|
|
|
public void setDefaultValue(final String defaultValue) {
|
|
this.defaultValue = defaultValue;
|
|
}
|
|
|
|
public boolean isRequired() {
|
|
return required;
|
|
}
|
|
|
|
public void setRequired(final boolean required) {
|
|
this.required = required;
|
|
}
|
|
|
|
}
|
|
|
|
@JsonInclude(Include.NON_NULL)
|
|
public static class Node implements Serializable {
|
|
|
|
private static final long serialVersionUID = -3695762832959801906L;
|
|
|
|
private static final String regExRef = "\\$\\{(\\w*)\\}";
|
|
|
|
private String name;
|
|
private String type;
|
|
private boolean isStart = false;
|
|
private boolean isJoin = false;
|
|
private List<Arc> arcs = new ArrayList<>();
|
|
private List<NodeParam> input = new ArrayList<>();
|
|
|
|
public Node() {}
|
|
|
|
public Node(final String name, final boolean isStart) {
|
|
this.name = name;
|
|
this.isStart = isStart;
|
|
}
|
|
|
|
public Node(final String name) {
|
|
this.name = name;
|
|
}
|
|
|
|
public Node(final String name, final String type) {
|
|
this.name = name;
|
|
this.type = type;
|
|
}
|
|
|
|
public String getName() {
|
|
return name;
|
|
}
|
|
|
|
public void setName(final String name) {
|
|
this.name = name;
|
|
}
|
|
|
|
public String getType() {
|
|
return type;
|
|
}
|
|
|
|
public void setType(final String type) {
|
|
this.type = type;
|
|
}
|
|
|
|
public boolean isStart() {
|
|
return isStart;
|
|
}
|
|
|
|
public void setStart(final boolean isStart) {
|
|
this.isStart = isStart;
|
|
}
|
|
|
|
public boolean isJoin() {
|
|
return isJoin;
|
|
}
|
|
|
|
public void setJoin(final boolean isJoin) {
|
|
this.isJoin = isJoin;
|
|
}
|
|
|
|
public List<Arc> getArcs() {
|
|
return arcs;
|
|
}
|
|
|
|
public void setArcs(final List<Arc> arcs) {
|
|
this.arcs = arcs;
|
|
}
|
|
|
|
public List<NodeParam> getInput() {
|
|
return input;
|
|
}
|
|
|
|
public void setInput(final List<NodeParam> input) {
|
|
this.input = input;
|
|
}
|
|
|
|
public Map<String, String> findEnvParams() {
|
|
return input.stream()
|
|
.filter(p -> StringUtils.isNotBlank(p.getEnv()))
|
|
.collect(Collectors.toMap(NodeParam::getName, NodeParam::getEnv));
|
|
}
|
|
|
|
public Map<String, String> calculateInitialParams(final Map<String, String> globalParams, final Environment environment) {
|
|
return input.stream()
|
|
.filter(p -> StringUtils.isBlank(p.getEnv()))
|
|
.collect(Collectors.toMap(NodeParam::getName, p -> calculateSimpleValue(p, globalParams, environment)));
|
|
}
|
|
|
|
private String calculateSimpleValue(final NodeParam p, final Map<String, String> globalParams, final Environment environment) {
|
|
String value = p.getValue();
|
|
final String ref = p.getRef();
|
|
final String prop = p.getProperty();
|
|
|
|
if (StringUtils.isNotBlank(ref) && StringUtils.isNotBlank(globalParams.get(ref))) {
|
|
return globalParams.get(ref);
|
|
} else if (StringUtils.isNotBlank(value)) {
|
|
final Matcher matcher = Pattern.compile(regExRef, Pattern.MULTILINE).matcher(value);
|
|
while (matcher.find()) {
|
|
final String rName = matcher.group(1);
|
|
final String rValue = globalParams.get(rName);
|
|
if (StringUtils.isBlank(rValue)) { return null; }
|
|
value = value.replaceAll(Pattern.quote(matcher.group(0)), rValue);
|
|
}
|
|
return value;
|
|
} else if (StringUtils.isNotBlank(prop)) {
|
|
return environment.getProperty(prop);
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
|
|
@JsonInclude(Include.NON_NULL)
|
|
public static class Arc implements Serializable {
|
|
|
|
private static final long serialVersionUID = 7866138976929522262L;
|
|
|
|
private String to;
|
|
private String condition;
|
|
|
|
public Arc() {}
|
|
|
|
public Arc(final String to) {
|
|
this.to = to;
|
|
}
|
|
|
|
public Arc(final String to, final String condition) {
|
|
this.to = to;
|
|
this.condition = condition;
|
|
}
|
|
|
|
public String getTo() {
|
|
return to;
|
|
}
|
|
|
|
public void setTo(final String to) {
|
|
this.to = to;
|
|
}
|
|
|
|
public String getCondition() {
|
|
return condition;
|
|
}
|
|
|
|
public void setCondition(final String condition) {
|
|
this.condition = condition;
|
|
}
|
|
}
|
|
|
|
@JsonInclude(Include.NON_NULL)
|
|
public static class NodeParam implements Serializable {
|
|
|
|
private static final long serialVersionUID = 7815785723401725707L;
|
|
|
|
private String name;
|
|
private String value;
|
|
private String ref;
|
|
private String property;
|
|
private String env;
|
|
|
|
public static NodeParam newRefParam(final String name, final String ref) {
|
|
final NodeParam np = new NodeParam();
|
|
np.setName(name);
|
|
np.setRef(ref);
|
|
return np;
|
|
}
|
|
|
|
public static NodeParam newSimpleParam(final String name, final String value) {
|
|
final NodeParam np = new NodeParam();
|
|
np.setName(name);
|
|
np.setValue(value);
|
|
return np;
|
|
}
|
|
|
|
public static NodeParam newPropertyParam(final String name, final String property) {
|
|
final NodeParam np = new NodeParam();
|
|
np.setName(name);
|
|
np.setProperty(property);
|
|
return np;
|
|
}
|
|
|
|
public static NodeParam newEnvParam(final String name, final String envProp) {
|
|
final NodeParam np = new NodeParam();
|
|
np.setName(name);
|
|
np.setEnv(envProp);
|
|
return np;
|
|
}
|
|
|
|
public String getName() {
|
|
return name;
|
|
}
|
|
|
|
public void setName(final String name) {
|
|
this.name = name;
|
|
}
|
|
|
|
public String getValue() {
|
|
return value;
|
|
}
|
|
|
|
public void setValue(final String value) {
|
|
this.value = value;
|
|
}
|
|
|
|
public String getRef() {
|
|
return ref;
|
|
}
|
|
|
|
public void setRef(final String ref) {
|
|
this.ref = ref;
|
|
}
|
|
|
|
public String getProperty() {
|
|
return property;
|
|
}
|
|
|
|
public void setProperty(final String property) {
|
|
this.property = property;
|
|
}
|
|
|
|
public String getEnv() {
|
|
return env;
|
|
}
|
|
|
|
public void setEnv(final String env) {
|
|
this.env = env;
|
|
}
|
|
|
|
}
|
|
|
|
}
|