parse workflow step input/output params
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.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 @@
 			for (CWLWorkflowStep step : src.steps) {
 				Processor p = new Processor();
 				p.setParent(dest);
-				parseWorkflowStep(step, p);				
+				parseWorkflowStep(step, p);					
+
 			}
 		}
 		
@@ -121,6 +128,54 @@
 		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) {