parse workflow step input/output params
Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/commit/87c6b74c Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/87c6b74c Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/87c6b74c Branch: refs/heads/cwl Commit: 87c6b74cd395dfbfa36ae46f4979f1bfad3841ba Parents: 3a3ee83 Author: Stian Soiland-Reyes <[email protected]> Authored: Fri May 20 19:17:06 2016 +0200 Committer: Stian Soiland-Reyes <[email protected]> Committed: Fri May 20 19:17:06 2016 +0200 ---------------------------------------------------------------------- .../apache/taverna/scufl2/cwl/CwlReader.java | 57 +++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/87c6b74c/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CwlReader.java ---------------------------------------------------------------------- diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CwlReader.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CwlReader.java index f092a4b..afc0185 100644 --- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CwlReader.java +++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CwlReader.java @@ -19,20 +19,26 @@ import org.apache.taverna.scufl2.api.core.Workflow; import org.apache.taverna.scufl2.api.io.ReaderException; import org.apache.taverna.scufl2.api.io.WorkflowBundleIO; import org.apache.taverna.scufl2.api.io.WorkflowBundleReader; +import org.apache.taverna.scufl2.api.port.InputProcessorPort; import org.apache.taverna.scufl2.api.port.InputWorkflowPort; +import org.apache.taverna.scufl2.api.port.OutputProcessorPort; import org.apache.taverna.scufl2.api.port.OutputWorkflowPort; import org.apache.taverna.scufl2.cwl.workflow.CWLInputParameter; import org.apache.taverna.scufl2.cwl.workflow.CWLWorkflow; import org.apache.taverna.scufl2.cwl.workflow.CWLWorkflowOutputParameter; import org.apache.taverna.scufl2.cwl.workflow.CWLWorkflowStep; +import org.apache.taverna.scufl2.cwl.workflow.CWLWorkflowStepInput; +import org.apache.taverna.scufl2.cwl.workflow.CWLWorkflowStepOutput; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; public class CwlReader implements WorkflowBundleReader { + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); private static final WorkflowBundleIO WF_IO = new WorkflowBundleIO(); public static final String MEDIA_TYPE = "text/vnd.commonwf.workflow+yaml"; @@ -111,7 +117,8 @@ public class CwlReader implements WorkflowBundleReader { for (CWLWorkflowStep step : src.steps) { Processor p = new Processor(); p.setParent(dest); - parseWorkflowStep(step, p); + parseWorkflowStep(step, p); + } } @@ -121,6 +128,54 @@ public class CwlReader implements WorkflowBundleReader { if (step.id != null && ! Named.INVALID_NAME.matcher(step.id).matches()) { p.setName(step.id); } + // TODO step.run + + if (step.in != null) { + for (CWLWorkflowStepInput s : step.in) { + InputProcessorPort inp = new InputProcessorPort(); + inp.setParent(p); + parseWorkflowStepInput(s, inp); + } + } + if (step.out != null) { + for (JsonNode s : step.out) { + OutputProcessorPort outp = new OutputProcessorPort(); + outp.setParent(p); + parseWorkflowStepOutput(s, outp); + } + } + + // TODO: Check compatibility + //step.requirements + + + // TODO: Annotations + //step.label; + //step.description; + //step.hints; + + // TODO: Iteration strategy + //step.scatter; + + // TODO: Handle run + // TODO: Handle nested workflows + //step.run; + } + + private void parseWorkflowStepOutput(JsonNode s, OutputProcessorPort outp) { + if (s.isTextual() && ! Named.INVALID_NAME.matcher(s.asText()).matches()) { + outp.setName(s.asText()); + } + CWLWorkflowStepOutput out = OBJECT_MAPPER.convertValue(s, CWLWorkflowStepOutput.class); + if (out.id != null && ! Named.INVALID_NAME.matcher(out.id).matches()) { + outp.setName(out.id); + } + + } + + private void parseWorkflowStepInput(CWLWorkflowStepInput s, InputProcessorPort inp) { + // TODO Auto-generated method stub + } private void parseOutputPort(CWLWorkflowOutputParameter out, OutputWorkflowPort p) {
