Parse step outputs from the yaml file
- The yaml parser used didn't support output inputs parsing
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/YAMLHelper.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/YAMLHelper.java
index f745386..76652ea 100644
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/YAMLHelper.java
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/YAMLHelper.java
@@ -125,9 +125,12 @@
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()) {
@@ -145,8 +148,10 @@
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);
}
@@ -183,6 +188,32 @@
return result;
}
+ private Set<OutputPort> processStepOutput(JsonNode outputs) {
+ Set<OutputPort> result = new HashSet<>();
+ if(outputs == null) {
+ return result;
+ }
+ if (outputs.isArray()) {
+
+ for (JsonNode output : outputs) {
+ String id = output.get(ID).asText();
+
+ result.add(new OutputPort(id));
+ }
+ } else if (outputs.isObject()) {
+ Iterator<Entry<String, JsonNode>> iterator = outputs.fields();
+ while (iterator.hasNext()) {
+ Entry<String, JsonNode> entry = iterator.next();
+
+ String id = entry.getKey();
+
+ result.add(new OutputPort(id));
+ }
+ }
+
+ return result;
+ }
+
/**
* This method will go through CWL tool input or out puts and figure outs
* their IDs and the respective depths