input params
This commit is contained in:
parent
97d17eb379
commit
66523a612b
|
@ -203,13 +203,13 @@ public class WorkflowTemplate implements Serializable {
|
|||
.collect(Collectors.toMap(NodeParam::getName, NodeParam::getEnv));
|
||||
}
|
||||
|
||||
public Map<String, Object> calculateInitialParams(final Map<String, String> globalParams, final Environment environment) {
|
||||
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(p -> p.getName(), p -> calculateSimpleValue(p, globalParams, environment)));
|
||||
.collect(Collectors.toMap(NodeParam::getName, p -> calculateSimpleValue(p, globalParams, environment)));
|
||||
}
|
||||
|
||||
private Object calculateSimpleValue(final NodeParam p, final Map<String, String> globalParams, final Environment 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();
|
||||
|
|
|
@ -3,9 +3,11 @@ package eu.dnetlib.manager.wf.nodes;
|
|||
import java.lang.annotation.Annotation;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.beans.factory.BeanNameAware;
|
||||
|
@ -13,13 +15,12 @@ import org.springframework.beans.factory.BeanNameAware;
|
|||
import eu.dnetlib.manager.wf.annotations.WfInputParam;
|
||||
import eu.dnetlib.manager.wf.annotations.WfOutputParam;
|
||||
import eu.dnetlib.manager.wf.workflows.procs.Env;
|
||||
import eu.dnetlib.manager.wf.workflows.procs.ProcessEngine;
|
||||
import eu.dnetlib.manager.wf.workflows.procs.Token;
|
||||
import eu.dnetlib.manager.wf.workflows.util.NodeCallback;
|
||||
|
||||
public abstract class ProcessNode implements BeanNameAware {
|
||||
|
||||
private static final Log log = LogFactory.getLog(ProcessEngine.class);
|
||||
private static final Log log = LogFactory.getLog(ProcessNode.class);
|
||||
|
||||
private String beanName;
|
||||
|
||||
|
@ -27,13 +28,13 @@ public abstract class ProcessNode implements BeanNameAware {
|
|||
|
||||
public abstract void execute(final Token token, NodeCallback callback);
|
||||
|
||||
public final void initInputParams(final Env env) {
|
||||
public final void initInputParams(final Map<String, Object> params) {
|
||||
findFields(getClass(), WfInputParam.class).forEach(field -> {
|
||||
final String annName = field.getAnnotation(WfInputParam.class).value();
|
||||
if (StringUtils.isNotBlank(annName)) {
|
||||
fieldValue(field, env.getAttribute(annName, field.getType()));
|
||||
fieldValue(field, params.get(annName));
|
||||
} else {
|
||||
fieldValue(field, env.getAttribute(field.getName(), field.getType()));
|
||||
fieldValue(field, params.get(field.getName()));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -49,10 +50,27 @@ public abstract class ProcessNode implements BeanNameAware {
|
|||
});
|
||||
}
|
||||
|
||||
private final void fieldValue(final Field field, final Object object) {
|
||||
private final void fieldValue(final Field field, final Object value) {
|
||||
try {
|
||||
field.setAccessible(true);
|
||||
field.set(this, object);
|
||||
final Class<?> fieldClass = field.getType();
|
||||
if (value.getClass().isAssignableFrom(fieldClass)) {
|
||||
field.set(this, value);
|
||||
} else if (String.class.isAssignableFrom(fieldClass)) {
|
||||
field.set(this, value.toString());
|
||||
} else if (long.class.isAssignableFrom(fieldClass) || Long.class.isAssignableFrom(fieldClass)) {
|
||||
field.set(this, NumberUtils.toLong(value.toString()));
|
||||
} else if (int.class.isAssignableFrom(fieldClass) || Integer.class.isAssignableFrom(fieldClass)) {
|
||||
field.set(this, NumberUtils.toInt(value.toString()));
|
||||
} else if (double.class.isAssignableFrom(fieldClass) || Double.class.isAssignableFrom(fieldClass)) {
|
||||
field.set(this, NumberUtils.toDouble(value.toString()));
|
||||
} else if (float.class.isAssignableFrom(fieldClass) || Float.class.isAssignableFrom(fieldClass)) {
|
||||
field.set(this, NumberUtils.toFloat(value.toString()));
|
||||
} else {
|
||||
log.error("Not Mapped Type, Field class: " + fieldClass + ", Value: " + value + " (" + value.getClass() + ")");
|
||||
throw new RuntimeException("Not Mapped Type: " + fieldClass);
|
||||
}
|
||||
|
||||
} catch (IllegalArgumentException | IllegalAccessException e) {
|
||||
log.error("Error setting field " + field.getName(), e);
|
||||
throw new RuntimeException(e);
|
||||
|
@ -88,7 +106,7 @@ public abstract class ProcessNode implements BeanNameAware {
|
|||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("[node beanName=%s, name=%s]", this.beanName, this.nodeName);
|
||||
return String.format("[node beanName=%s, name=%s, object: %s]", this.beanName, this.nodeName, super.toString());
|
||||
}
|
||||
|
||||
private final Set<Field> findFields(final Class<?> clazz, final Class<? extends Annotation> ann) {
|
||||
|
|
|
@ -69,7 +69,7 @@ public class GraphLoader {
|
|||
final boolean isStart = node.isStart();
|
||||
final boolean isJoin = node.isJoin();
|
||||
|
||||
final Map<String, Object> params = node.calculateInitialParams(globalParams, environment);
|
||||
final Map<String, String> params = node.calculateInitialParams(globalParams, environment);
|
||||
final Map<String, String> envParams = node.findEnvParams();
|
||||
|
||||
if (isStart) {
|
||||
|
|
|
@ -6,8 +6,6 @@ import java.util.Map;
|
|||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import eu.dnetlib.manager.wf.workflows.procs.Env;
|
||||
|
||||
public class GraphNode {
|
||||
|
||||
public static final String SUCCESS_NODE = "success";
|
||||
|
@ -17,7 +15,7 @@ public class GraphNode {
|
|||
private final boolean isStart;
|
||||
private final boolean isJoin;
|
||||
private final boolean isSucessNode;
|
||||
private final Map<String, Object> params;
|
||||
private final Map<String, String> params;
|
||||
private final Map<String, String> envParams;
|
||||
|
||||
private GraphNode(final String name,
|
||||
|
@ -25,7 +23,7 @@ public class GraphNode {
|
|||
final boolean isStart,
|
||||
final boolean isJoin,
|
||||
final boolean isSuccessNode,
|
||||
final Map<String, Object> params,
|
||||
final Map<String, String> params,
|
||||
final Map<String, String> envParams) {
|
||||
this.name = name;
|
||||
this.type = type;
|
||||
|
@ -38,21 +36,21 @@ public class GraphNode {
|
|||
|
||||
public static GraphNode newNode(final String name,
|
||||
final String type,
|
||||
final Map<String, Object> params,
|
||||
final Map<String, String> params,
|
||||
final Map<String, String> envParams) {
|
||||
return new GraphNode(name, type, false, false, false, params, envParams);
|
||||
}
|
||||
|
||||
public static GraphNode newStartNode(final String name,
|
||||
final String type,
|
||||
final Map<String, Object> params,
|
||||
final Map<String, String> params,
|
||||
final Map<String, String> envParams) {
|
||||
return new GraphNode(name, type, true, false, false, params, envParams);
|
||||
}
|
||||
|
||||
public static GraphNode newJoinNode(final String name,
|
||||
final String type,
|
||||
final Map<String, Object> params,
|
||||
final Map<String, String> params,
|
||||
final Map<String, String> envParams) {
|
||||
return new GraphNode(name, type, false, true, false, params, envParams);
|
||||
}
|
||||
|
@ -100,7 +98,7 @@ public class GraphNode {
|
|||
return sw.toString();
|
||||
}
|
||||
|
||||
public Map<String, Object> getParams() {
|
||||
public Map<String, String> getParams() {
|
||||
return this.params;
|
||||
}
|
||||
|
||||
|
@ -108,22 +106,4 @@ public class GraphNode {
|
|||
return this.envParams;
|
||||
}
|
||||
|
||||
public Map<String, Object> resolveParamsWithNoEnv() {
|
||||
return resolveParams(null);
|
||||
}
|
||||
|
||||
public Map<String, Object> resolveParams(final Env env) {
|
||||
final Map<String, Object> map = new HashMap<>();
|
||||
|
||||
if (this.params != null) {
|
||||
this.params.forEach((k, v) -> map.put(k, v));
|
||||
}
|
||||
|
||||
if (this.envParams != null && env != null) {
|
||||
this.envParams.forEach((k, v) -> map.put(k, env.getAttribute(v)));
|
||||
}
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -120,12 +120,16 @@ public class ProcessEngine {
|
|||
private void executeNode(final WorkflowProcess process, final GraphNode graphNode, final Token token) throws WorkflowManagerException {
|
||||
process.setLastActivityDate(LocalDateTime.now());
|
||||
|
||||
final Map<String, Object> params = new HashMap<>();
|
||||
if (graphNode.getParams() != null) {
|
||||
graphNode.getParams().forEach((k, v) -> params.put(k, v));
|
||||
}
|
||||
if (graphNode.getEnvParams() != null) {
|
||||
graphNode.getEnvParams().forEach((k, v) -> params.put(k, token.getEnv().getAttribute(v)));
|
||||
}
|
||||
|
||||
final ProcessNode pNode = newProcessNode(graphNode, process);
|
||||
|
||||
// TODO Is it correct?
|
||||
token.getEnv().addAttributes(graphNode.resolveParams(token.getEnv()));
|
||||
|
||||
pNode.initInputParams(token.getEnv());
|
||||
pNode.initInputParams(params);
|
||||
pNode.execute(token, newNodeCallback(process, pNode, graphNode));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue