in taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/YAMLHelper.java [115:165]
public Set<Step> processSteps(JsonNode file) {
Set<Step> result = new HashSet<>();
if(file == null || !file.has(STEPS)) {
return result;
}
JsonNode steps = file.get(STEPS);
if(steps.isArray()) {
for (JsonNode stepNode : steps) {
Step step = new Step();
String id = stepNode.get(ID).asText();
JsonNode runNode = stepNode.get(RUN);
Process run = ProcessFactory.createProcess(runNode);
run.parse(); // Recursively parse nested process
Set<InputPort> inputs = processStepInput(stepNode.get(INPUTS));
Set<OutputPort> outputs = processStepOutput(stepNode.get(OUTPUTS));
step.setId(id);
step.setRun(run);
step.setInputs(inputs);
step.setOutputs(outputs);
result.add(step);
}
} else if(steps.isObject()) {
Iterator<Entry<String, JsonNode>> iterator = steps.fields();
while(iterator.hasNext()) {
Entry<String, JsonNode> entry = iterator.next();
Step step = new Step();
String id = entry.getKey();
JsonNode value = entry.getValue();
if(value.has(RUN)) {
JsonNode runNode = value.get(RUN);
Process run = ProcessFactory.createProcess(runNode);
run.parse();
step.setRun(run);
}
Set<InputPort> inputs = processStepInput(value.get(INPUTS));
Set<OutputPort> outputs = processStepOutput(value.get(OUTPUTS));
step.setId(id);
step.setInputs(inputs);
step.setOutputs(outputs);
result.add(step);
}
}
return result;
}