You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by st...@apache.org on 2016/05/26 13:43:44 UTC

[48/50] incubator-taverna-language git commit: Parse input/output wf ports and step names

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 <st...@apache.org>
Authored: Fri May 20 19:02:06 2016 +0200
Committer: Stian Soiland-Reyes <st...@apache.org>
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);