Parse input/output wf ports and step names
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/a3428b2d Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/a3428b2d Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/a3428b2d Branch: refs/heads/cwl Commit: a3428b2d22184136a467c4a9c2d62bdb2dcfd342 Parents: 6766411 Author: Stian Soiland-Reyes <[email protected]> Authored: Fri May 20 19:02:06 2016 +0200 Committer: Stian Soiland-Reyes <[email protected]> Committed: Fri May 20 19:02:06 2016 +0200 ---------------------------------------------------------------------- .../apache/taverna/scufl2/cwl/CwlReader.java | 87 ++++++++++++++++++-- 1 file changed, 81 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/a3428b2d/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 8d41ccd..f092a4b 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 @@ -12,12 +12,19 @@ import java.util.Collections; import java.util.Set; import java.util.UUID; +import org.apache.taverna.scufl2.api.common.Named; import org.apache.taverna.scufl2.api.container.WorkflowBundle; +import org.apache.taverna.scufl2.api.core.Processor; 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.InputWorkflowPort; +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 com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; @@ -27,7 +34,7 @@ import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; public class CwlReader implements WorkflowBundleReader { private static final WorkflowBundleIO WF_IO = new WorkflowBundleIO(); - private static final String MEDIA_TYPE = "text/x-common-workflow-language+yaml"; + public static final String MEDIA_TYPE = "text/vnd.commonwf.workflow+yaml"; @Override public Set<String> getMediaTypes() { @@ -56,16 +63,84 @@ public class CwlReader implements WorkflowBundleReader { private WorkflowBundle readBundle(InputStream inputStream, URI base) throws JsonParseException, JsonMappingException, IOException { ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); - CWLWorkflow user = mapper.readValue(inputStream, CWLWorkflow.class); - System.out.println(user.id); - + CWLWorkflow cwlWf = mapper.readValue(inputStream, CWLWorkflow.class); WorkflowBundle wfb = WF_IO.createBundle(); - Workflow wf = wfb.getMainWorkflow(); - wf.setName("Hello"); + + parseWorkflow(cwlWf, wfb.getMainWorkflow()); return wfb; } + private void parseWorkflow(CWLWorkflow src, Workflow dest) { + if (src.id != null) { + // TODO: Make id absolute + dest.setIdentifier(URI.create(src.id)); + // TODO: Generate local name from ID, if possible + //dest.setName(src.id); + } + + // TODO: Check compatibility and store as annotations + //src.cwlVersion; + //src.requirements; + //src.klass; + + // TODO: Store as annotations + //src.label; + //src.description; + //src.hints; + + + if (src.inputs != null) { + for (CWLInputParameter input : src.inputs) { + InputWorkflowPort p = new InputWorkflowPort(); + p.setParent(dest); + parseInputPort(input, p); + + } + } + if (src.outputs != null) { + for (CWLWorkflowOutputParameter out : src.outputs) { + OutputWorkflowPort p = new OutputWorkflowPort(); + p.setParent(dest); + parseOutputPort(out, p); + + } + } + + if (src.steps != null) { + for (CWLWorkflowStep step : src.steps) { + Processor p = new Processor(); + p.setParent(dest); + parseWorkflowStep(step, p); + } + } + + } + + private void parseWorkflowStep(CWLWorkflowStep step, Processor p) { + if (step.id != null && ! Named.INVALID_NAME.matcher(step.id).matches()) { + p.setName(step.id); + } + } + + private void parseOutputPort(CWLWorkflowOutputParameter out, OutputWorkflowPort p) { + if (out.id != null && ! Named.INVALID_NAME.matcher(out.id).matches()) { + p.setName(out.id); + } + + } + + private void parseInputPort(CWLInputParameter input, InputWorkflowPort p) { + if (input.id != null && ! Named.INVALID_NAME.matcher(input.id).matches()) { + p.setName(input.id); + } + // TODO: Depth from input.type Array + // TODO: if (input.defaultValue + //input. + + + } + @Override public String guessMediaTypeForSignature(byte[] firstBytes) { String s = new String(firstBytes, StandardCharsets.ISO_8859_1);
