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:42 UTC

[46/50] incubator-taverna-language git commit: Some kind of POJOs for CWL Draft 4 (2016-05-20)

Some kind of POJOs for CWL Draft 4 (2016-05-20)


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/52bb54ed
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/52bb54ed
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/52bb54ed

Branch: refs/heads/cwl
Commit: 52bb54ede32b73454c60a6e6dde4e44da85582a9
Parents: f9e46e0
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Fri May 20 18:06:46 2016 +0200
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Fri May 20 18:06:46 2016 +0200

----------------------------------------------------------------------
 taverna-scufl2-cwl/pom.xml                      | 71 +++++++++-----------
 .../org/apache/taverna/scufl2/cwl/CWLInput.java | 14 ----
 .../apache/taverna/scufl2/cwl/CWLOutput.java    | 20 ------
 .../taverna/scufl2/cwl/CWLRequirement.java      |  5 --
 .../org/apache/taverna/scufl2/cwl/CWLStep.java  |  5 --
 .../apache/taverna/scufl2/cwl/CWLWorkflow.java  | 22 ------
 .../apache/taverna/scufl2/cwl/CwlReader.java    |  1 +
 .../cwl/workflow/CWLCommandLineBinding.java     | 11 +++
 .../cwl/workflow/CWLCommandOutputBinding.java   |  9 +++
 .../scufl2/cwl/workflow/CWLDirectory.java       | 12 ++++
 .../scufl2/cwl/workflow/CWLExpressionTool.java  | 32 +++++++++
 .../taverna/scufl2/cwl/workflow/CWLFile.java    | 18 +++++
 .../CWLInlineJavascriptRequirement.java         | 11 +++
 .../cwl/workflow/CWLInputArraySchema.java       | 19 ++++++
 .../scufl2/cwl/workflow/CWLInputEnumSchema.java | 23 +++++++
 .../scufl2/cwl/workflow/CWLInputParameter.java  | 34 ++++++++++
 .../cwl/workflow/CWLInputRecordField.java       | 10 +++
 .../cwl/workflow/CWLInputRecordSchema.java      | 18 +++++
 .../scufl2/cwl/workflow/CWLLinkMergeMethod.java |  6 ++
 .../CWLMultipleInputFeatureRequirement.java     |  8 +++
 .../taverna/scufl2/cwl/workflow/CWLOutput.java  | 20 ++++++
 .../cwl/workflow/CWLOutputArraySchema.java      | 18 +++++
 .../cwl/workflow/CWLOutputEnumSchema.java       | 17 +++++
 .../scufl2/cwl/workflow/CWLOutputParameter.java | 22 ++++++
 .../cwl/workflow/CWLOutputRecordField.java      | 15 +++++
 .../cwl/workflow/CWLOutputRecordSchema.java     | 15 +++++
 .../scufl2/cwl/workflow/CWLRequirement.java     |  8 +++
 .../workflow/CWLScatterFeatureRequirement.java  | 10 +++
 .../scufl2/cwl/workflow/CWLScatterMethod.java   |  7 ++
 .../taverna/scufl2/cwl/workflow/CWLSchema.java  |  5 ++
 .../cwl/workflow/CWLSchemaDefRequirement.java   |  8 +++
 .../CWLStepInputExpressionRequirement.java      |  8 +++
 .../CWLSubworkflowFeatureRequirement.java       |  8 +++
 .../taverna/scufl2/cwl/workflow/CWLType.java    | 22 ++++++
 .../scufl2/cwl/workflow/CWLVersions.java        | 20 ++++++
 .../scufl2/cwl/workflow/CWLWorkflow.java        | 27 ++++++++
 .../workflow/CWLWorkflowOutputParameter.java    | 31 +++++++++
 .../scufl2/cwl/workflow/CWLWorkflowStep.java    | 32 +++++++++
 .../cwl/workflow/CWLWorkflowStepInput.java      | 28 ++++++++
 .../cwl/workflow/CWLWorkflowStepOutput.java     |  8 +++
 .../taverna/scufl2/cwl/TestCwlReader.java       |  7 +-
 .../src/test/resources/ex1/revsort.cwl          |  8 +--
 42 files changed, 583 insertions(+), 110 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/pom.xml
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/pom.xml b/taverna-scufl2-cwl/pom.xml
index 656b950..e939a18 100644
--- a/taverna-scufl2-cwl/pom.xml
+++ b/taverna-scufl2-cwl/pom.xml
@@ -1,42 +1,37 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
+	license agreements. See the NOTICE file distributed with this work for additional 
+	information regarding copyright ownership. The ASF licenses this file to 
+	You under the Apache License, Version 2.0 (the "License"); you may not use 
+	this file except in compliance with the License. You may obtain a copy of 
+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
+	by applicable law or agreed to in writing, software distributed under the 
+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
+	OF ANY KIND, either express or implied. See the License for the specific 
+	language governing permissions and limitations under the License. -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.apache.taverna.language</groupId>
+		<artifactId>apache-taverna-language</artifactId>
+		<version>0.15.2-incubating-SNAPSHOT</version>
+	</parent>
+	<artifactId>taverna-scufl2-cwl</artifactId>
+	<name>Apache Taverna Scufl 2 CWL read/write</name>
+	<description> Common Workflow Language (CWL) support</description>
+	<dependencies>
+		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>taverna-scufl2-api</artifactId>
+			<version>${project.parent.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>com.fasterxml.jackson.dataformat</groupId>
+			<artifactId>jackson-dataformat-yaml</artifactId>
+			<version>${jackson.version}</version>
+		</dependency>
 
-       http://www.apache.org/licenses/LICENSE-2.0
+	</dependencies>
 
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache.taverna.language</groupId>
-    <artifactId>taverna-language</artifactId>
-    <version>0.15.0-incubating-SNAPSHOT</version>
-  </parent>
-  <artifactId>taverna-scufl2-cwl</artifactId>
-  <name>Apache Taverna Scufl 2 CWL read/write</name>
-  <description> Common Workflow Language (CWL) support</description>
-  <dependencies>
-  	<dependency>
-  		<groupId>${project.parent.groupId}</groupId>
-  		<artifactId>taverna-scufl2-api</artifactId>
-  		<version>${project.parent.version}</version>
-  	</dependency>
-	<dependency>
-		<groupId>com.fasterxml.jackson.dataformat</groupId>
-		<artifactId>jackson-dataformat-yaml</artifactId>
-		<version>${jackson.version}</version>
-	</dependency>
-  	
-  </dependencies>
-  
 </project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLInput.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLInput.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLInput.java
deleted file mode 100644
index bcde2aa..0000000
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLInput.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.apache.taverna.scufl2.cwl;
-
-import java.util.Map;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class CWLInput {
-	public String id;
-	public String description;
-	@JsonProperty(value="default")
-	public String defaultValue;
-	public String type;
-	public Map<String,String> inputBinding;
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLOutput.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLOutput.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLOutput.java
deleted file mode 100644
index 1bbbc46..0000000
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLOutput.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.apache.taverna.scufl2.cwl;
-
-import java.util.List;
-import java.util.Map;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class CWLOutput {
-	public String id;
-	public String type;
-	public String label;
-	public String description;
-	public boolean streamable;
-	public String linkMerge;
-	@JsonProperty(value="default")
-	public String defaultValue;
-	
-	public String source;
-	public Map<String,String> outputBinding;
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLRequirement.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLRequirement.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLRequirement.java
deleted file mode 100644
index f5b6b85..0000000
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLRequirement.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.apache.taverna.scufl2.cwl;
-
-public class CWLRequirement {
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLStep.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLStep.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLStep.java
deleted file mode 100644
index eddd40c..0000000
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLStep.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.apache.taverna.scufl2.cwl;
-
-public class CWLStep {
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLWorkflow.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLWorkflow.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLWorkflow.java
deleted file mode 100644
index 8b0b43b..0000000
--- a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/CWLWorkflow.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.apache.taverna.scufl2.cwl;
-
-import java.util.List;
-import java.util.Map;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class CWLWorkflow {
-
-	public String id;
-	@JsonProperty(value="class")
-	public String klass;
-	public String description;
-	public List<CWLInput> inputs;
-	public List<CWLOutput> outputs;
-	public List<Map<String,String>> requirements;
-	public List<CWLStep> steps;
-	public String baseCommand;
-	public String stdout;
-	
-	
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/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 31b2e6d..8d41ccd 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
@@ -17,6 +17,7 @@ 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.cwl.workflow.CWLWorkflow;
 
 import com.fasterxml.jackson.core.JsonParseException;
 import com.fasterxml.jackson.databind.JsonMappingException;

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLCommandLineBinding.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLCommandLineBinding.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLCommandLineBinding.java
new file mode 100644
index 0000000..33fbba3
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLCommandLineBinding.java
@@ -0,0 +1,11 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+public class CWLCommandLineBinding {
+	Boolean loadContents;
+	Integer position;
+	String prefix;
+	Boolean separate;
+	String itemSeparator;
+	String valueFrom;
+	Boolean shellQuote;
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLCommandOutputBinding.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLCommandOutputBinding.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLCommandOutputBinding.java
new file mode 100644
index 0000000..2376243
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLCommandOutputBinding.java
@@ -0,0 +1,9 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import java.util.List;
+
+public class CWLCommandOutputBinding {
+	List<String> glob;
+	Boolean loadContents;
+	String outputEval;
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLDirectory.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLDirectory.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLDirectory.java
new file mode 100644
index 0000000..e76e9c7
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLDirectory.java
@@ -0,0 +1,12 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class CWLDirectory {
+	private static final String DIRECTORY = "Directory";
+	@JsonProperty(value="class", defaultValue=DIRECTORY, required=true)
+	public String klass = DIRECTORY;
+	@JsonProperty(required=true)
+	String path;
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLExpressionTool.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLExpressionTool.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLExpressionTool.java
new file mode 100644
index 0000000..bedbaff
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLExpressionTool.java
@@ -0,0 +1,32 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.JsonNode;
+
+public class CWLExpressionTool {
+	@JsonProperty(required=true)
+	public List<CWLInputParameter> inputs;
+
+	@JsonProperty(required=true)
+	public List<CWLOutputParameter> outputs;
+
+	@JsonProperty(value="class", required=true)
+	public String klass;
+	
+	@JsonProperty(required=true)
+	public String expression;
+	
+	public String id;
+	
+	public List<JsonNode> requirements;
+	
+	public List<JsonNode> hints;
+	
+	public String label;
+	public String description;
+	
+	public String cwlVersion;
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLFile.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLFile.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLFile.java
new file mode 100644
index 0000000..b2b0784
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLFile.java
@@ -0,0 +1,18 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class CWLFile {
+	private static final String FILE = "File";
+	@JsonProperty(value="class", defaultValue=FILE, required=true)
+	public String klass = FILE;
+	@JsonProperty(required=true)
+	String path;
+	String checksum;
+	Long size;
+	List<CWLFile> secondaryFiles;
+	String format;
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInlineJavascriptRequirement.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInlineJavascriptRequirement.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInlineJavascriptRequirement.java
new file mode 100644
index 0000000..e25efd9
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInlineJavascriptRequirement.java
@@ -0,0 +1,11 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class CWLInlineJavascriptRequirement extends CWLRequirement {
+	@JsonProperty("class")
+	public String klass;
+	List<String> expressionLib;
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInputArraySchema.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInputArraySchema.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInputArraySchema.java
new file mode 100644
index 0000000..8aa684a
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInputArraySchema.java
@@ -0,0 +1,19 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.JsonNode;
+
+public class CWLInputArraySchema {
+	@JsonProperty(required=true, defaultValue="array")
+	public String type = "array";
+	
+	List<JsonNode> types;
+	
+	List<String> secondaryFiles;
+	List<String> format;
+	Boolean streamable;
+	CWLCommandLineBinding inputBinding;
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInputEnumSchema.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInputEnumSchema.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInputEnumSchema.java
new file mode 100644
index 0000000..6d23393
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInputEnumSchema.java
@@ -0,0 +1,23 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class CWLInputEnumSchema {
+
+	@JsonProperty(defaultValue="enum", required=true)
+	public String type = "enum";
+	
+	@JsonProperty(required=true)
+	public List<String> symbols;
+	
+	public List<String> secondaryFiles;
+	
+	public List<String> format;
+	
+	public Boolean streamable;
+	
+	public CWLCommandLineBinding inputBinding;
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInputParameter.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInputParameter.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInputParameter.java
new file mode 100644
index 0000000..9fb5586
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInputParameter.java
@@ -0,0 +1,34 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import java.util.Arrays;
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.JsonNode;
+
+public class CWLInputParameter {
+	
+	@JsonProperty(required=true)
+	public String id;
+
+	public List<String> secondaryFiles;
+	
+	public List<String> format;
+	
+	public Boolean streamable;
+	
+	public List<String> type;
+	
+	public void setType(String type) {
+		this.type = Arrays.asList(type);
+	}
+	
+	public String label;
+	
+	public String description;
+	
+	public CWLCommandLineBinding inputBinding;
+	
+	@JsonProperty("default")
+	public JsonNode defaultValue;
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInputRecordField.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInputRecordField.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInputRecordField.java
new file mode 100644
index 0000000..553b841
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInputRecordField.java
@@ -0,0 +1,10 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import java.util.List;
+
+public class CWLInputRecordField {
+	String name;
+	List<String> type;
+	String doc;
+	CWLCommandLineBinding inputBinding;
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInputRecordSchema.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInputRecordSchema.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInputRecordSchema.java
new file mode 100644
index 0000000..ca0d81d
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLInputRecordSchema.java
@@ -0,0 +1,18 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class CWLInputRecordSchema {
+	@JsonProperty(required=true, defaultValue="record")
+	public String type="record";
+	
+	public List<CWLInputRecordField> fields;
+	
+	public List<String> secondaryFiles;
+	
+	public List<String> format;
+	
+	public Boolean streamable; 
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLLinkMergeMethod.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLLinkMergeMethod.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLLinkMergeMethod.java
new file mode 100644
index 0000000..07e49d9
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLLinkMergeMethod.java
@@ -0,0 +1,6 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+public enum CWLLinkMergeMethod {
+	merge_nested,
+	merge_flattened
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLMultipleInputFeatureRequirement.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLMultipleInputFeatureRequirement.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLMultipleInputFeatureRequirement.java
new file mode 100644
index 0000000..3f1272d
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLMultipleInputFeatureRequirement.java
@@ -0,0 +1,8 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class CWLMultipleInputFeatureRequirement extends CWLRequirement {
+	@JsonProperty(value="class", required=true)
+	public String klass;
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutput.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutput.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutput.java
new file mode 100644
index 0000000..d687adf
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutput.java
@@ -0,0 +1,20 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import java.util.List;
+import java.util.Map;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class CWLOutput {
+	public String id;
+	public String type;
+	public String label;
+	public String description;
+	public boolean streamable;
+	public String linkMerge;
+	@JsonProperty(value="default")
+	public String defaultValue;
+	
+	public String source;
+	public Map<String,String> outputBinding;
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutputArraySchema.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutputArraySchema.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutputArraySchema.java
new file mode 100644
index 0000000..edaa1d7
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutputArraySchema.java
@@ -0,0 +1,18 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class CWLOutputArraySchema {
+	@JsonProperty(required = true, defaultValue = "array")
+	public String type = "array";
+	
+	@JsonProperty(required=true)
+	List<String> items;
+	List<String> secondaryFiles;
+	List<String> format;
+	Boolean streamable;
+	CWLCommandOutputBinding outputBinding;
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutputEnumSchema.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutputEnumSchema.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutputEnumSchema.java
new file mode 100644
index 0000000..5d4f5d5
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutputEnumSchema.java
@@ -0,0 +1,17 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class CWLOutputEnumSchema {
+	@JsonProperty(required=true, defaultValue="enum")
+	public String type = "enum";
+	
+	List<String> symbols;
+	List<String> secondaryFiles;
+	List<String> format;
+	Boolean streamable;
+	CWLCommandOutputBinding outputBinding;
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutputParameter.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutputParameter.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutputParameter.java
new file mode 100644
index 0000000..7613650
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutputParameter.java
@@ -0,0 +1,22 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import java.util.List;
+
+public class CWLOutputParameter {
+
+	public String id;
+	
+	public List<String> secondaryFiles;
+	
+	public List<String> format;
+	
+	public Boolean streamable;
+	
+	public List<String> type;
+	
+	public String label;
+	
+	public CWLCommandLineBinding outputBinding;
+	
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutputRecordField.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutputRecordField.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutputRecordField.java
new file mode 100644
index 0000000..50c56fd
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutputRecordField.java
@@ -0,0 +1,15 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class CWLOutputRecordField {
+	@JsonProperty(required=true)
+	String name;
+	@JsonProperty(required=true)
+	List<String> type; 
+	String doc;
+	CWLCommandOutputBinding outputBinding;
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutputRecordSchema.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutputRecordSchema.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutputRecordSchema.java
new file mode 100644
index 0000000..0cb0a3a
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLOutputRecordSchema.java
@@ -0,0 +1,15 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class CWLOutputRecordSchema {
+	@JsonProperty(required=true, defaultValue="record")
+	public String type="record";
+	
+	List<CWLOutputRecordField> fields;
+	List<String> secondaryFiles;
+	List<String> format;
+	boolean streamable;
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLRequirement.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLRequirement.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLRequirement.java
new file mode 100644
index 0000000..ead5f1f
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLRequirement.java
@@ -0,0 +1,8 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class CWLRequirement {
+	@JsonProperty("class")
+	public String klass;
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLScatterFeatureRequirement.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLScatterFeatureRequirement.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLScatterFeatureRequirement.java
new file mode 100644
index 0000000..aa4db88
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLScatterFeatureRequirement.java
@@ -0,0 +1,10 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class CWLScatterFeatureRequirement extends CWLRequirement {
+
+	@JsonProperty(value="class", required=true)
+	public String klass;
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLScatterMethod.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLScatterMethod.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLScatterMethod.java
new file mode 100644
index 0000000..53c86ec
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLScatterMethod.java
@@ -0,0 +1,7 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+public enum CWLScatterMethod {
+	dotproduct,
+	nested_crossproduct,
+	flat_crossproduct;
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLSchema.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLSchema.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLSchema.java
new file mode 100644
index 0000000..1374b32
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLSchema.java
@@ -0,0 +1,5 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+public interface CWLSchema {
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLSchemaDefRequirement.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLSchemaDefRequirement.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLSchemaDefRequirement.java
new file mode 100644
index 0000000..c905810
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLSchemaDefRequirement.java
@@ -0,0 +1,8 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import java.util.List;
+
+public class CWLSchemaDefRequirement extends CWLRequirement {
+	public String klass;
+	public List<CWLSchema> types;
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLStepInputExpressionRequirement.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLStepInputExpressionRequirement.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLStepInputExpressionRequirement.java
new file mode 100644
index 0000000..26a9302
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLStepInputExpressionRequirement.java
@@ -0,0 +1,8 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class CWLStepInputExpressionRequirement extends CWLRequirement {
+	@JsonProperty(value="class", required=true)
+	public String klass;
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLSubworkflowFeatureRequirement.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLSubworkflowFeatureRequirement.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLSubworkflowFeatureRequirement.java
new file mode 100644
index 0000000..746f3ce
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLSubworkflowFeatureRequirement.java
@@ -0,0 +1,8 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class CWLSubworkflowFeatureRequirement extends CWLRequirement {
+	@JsonProperty(value="class", required=true)
+	public String klass;
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLType.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLType.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLType.java
new file mode 100644
index 0000000..793171b
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLType.java
@@ -0,0 +1,22 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+public enum CWLType {
+	Null("null"),
+	Boolean("boolean"),
+	Int("int"),
+	Long("long"),
+	Float("float"),
+	Double("double"),
+	string("string"),
+	File("File");
+	
+	public final String name;
+	
+	CWLType(String name){
+		this.name = name;
+	}
+	public String toString() {
+		return name;
+	};
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLVersions.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLVersions.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLVersions.java
new file mode 100644
index 0000000..2ea5c87
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLVersions.java
@@ -0,0 +1,20 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+public enum CWLVersions {
+	draft2("draft-2"),
+	draft3Dev1("draft-3.dev1"),
+	draft3Dev2("draft-3.dev2"),
+	draft3Dev3("draft-3.dev3"),
+	draft3Dev4("draft-3.dev4"),
+	draft3Dev5("draft-3.dev5"),
+	draft4Dev1("draft-4.dev1"),
+	draft4("draft-4"),
+	;
+	
+	
+	public final String name;
+	
+	CWLVersions(String name) { 
+		this.name = name;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLWorkflow.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLWorkflow.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLWorkflow.java
new file mode 100644
index 0000000..c05c251
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLWorkflow.java
@@ -0,0 +1,27 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.JsonNode;
+
+public class CWLWorkflow {
+
+	@JsonProperty(required=true)
+	public List<CWLInputParameter> inputs;
+	@JsonProperty(required=true)
+	public List<CWLWorkflowOutputParameter> outputs;
+	@JsonProperty(value="class", required=true)
+	public String klass;
+	@JsonProperty(required=true)
+	public List<CWLWorkflowStep> steps;
+	public String id;
+	public List<JsonNode> requirements;
+	public List<JsonNode> hints;
+	
+	public String label;
+	public String description;
+	public String cwlVersion;
+	
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLWorkflowOutputParameter.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLWorkflowOutputParameter.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLWorkflowOutputParameter.java
new file mode 100644
index 0000000..1330fc8
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLWorkflowOutputParameter.java
@@ -0,0 +1,31 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import java.util.Arrays;
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class CWLWorkflowOutputParameter {
+	@JsonProperty(required=true)
+	public String id;
+	public List<String> secondaryFiles;
+	public List<String> format;
+	public boolean streamable;
+	
+	public List<String> type;
+	
+	public void setType(String type) {
+		this.type = Arrays.asList(type);
+	}
+	
+	public String label;
+	public String description;
+	public CWLCommandOutputBinding outputBinding;
+	public List<String> source;
+	
+	public void setSource(String source) {
+		this.source = Arrays.asList(source);
+	}
+	
+	public CWLLinkMergeMethod linkMerge;
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLWorkflowStep.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLWorkflowStep.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLWorkflowStep.java
new file mode 100644
index 0000000..a23d658
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLWorkflowStep.java
@@ -0,0 +1,32 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.JsonNode;
+
+public class CWLWorkflowStep {
+
+	@JsonProperty(required=true)
+	public String id;
+	
+	@JsonProperty(required=true)
+	public List<CWLWorkflowStepInput> in;
+	
+	@JsonProperty(required=true)
+	public List<JsonNode> out;
+	
+	@JsonProperty(required=true)
+	public JsonNode run;
+	
+	public List<CWLRequirement> requirements;
+	
+	public List<JsonNode> hints;
+	
+	public String label;
+	public String description;
+	public List<String> scatter;
+	public CWLScatterMethod scatterMethod;
+	
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLWorkflowStepInput.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLWorkflowStepInput.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLWorkflowStepInput.java
new file mode 100644
index 0000000..791f79c
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLWorkflowStepInput.java
@@ -0,0 +1,28 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import java.util.Arrays;
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.JsonNode;
+
+public class CWLWorkflowStepInput {
+
+	@JsonProperty(required=true)
+	public String id;
+	
+	public List<String> source;
+	
+	public void setSource(String source) {
+		this.source = Arrays.asList(source);
+	}
+	
+	@JsonProperty(defaultValue="merge_nested")
+	public CWLLinkMergeMethod linkMerge;
+	
+	@JsonProperty("value")
+	public JsonNode defaultValue;
+	public String valueFrom;
+	
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLWorkflowStepOutput.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLWorkflowStepOutput.java b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLWorkflowStepOutput.java
new file mode 100644
index 0000000..6861db0
--- /dev/null
+++ b/taverna-scufl2-cwl/src/main/java/org/apache/taverna/scufl2/cwl/workflow/CWLWorkflowStepOutput.java
@@ -0,0 +1,8 @@
+package org.apache.taverna.scufl2.cwl.workflow;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class CWLWorkflowStepOutput {
+	@JsonProperty(required=true)
+	String id;
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestCwlReader.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestCwlReader.java b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestCwlReader.java
index a72123f..bd384c5 100644
--- a/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestCwlReader.java
+++ b/taverna-scufl2-cwl/src/test/java/org/apache/taverna/scufl2/cwl/TestCwlReader.java
@@ -4,6 +4,9 @@ import static org.junit.Assert.*;
 
 import java.net.URL;
 
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
+import org.apache.taverna.scufl2.cwl.CwlReader;
 import org.junit.Test;
 
 public class TestCwlReader {
@@ -11,7 +14,7 @@ public class TestCwlReader {
 	public void parseEx1() throws Exception {
 		URL revsort = getClass().getResource("/ex1/revsort.cwl");
 		CwlReader reader = new CwlReader();
-		reader.readBundle(revsort);
-		
+		WorkflowBundle b = reader.readBundle(revsort);
+		new WorkflowBundleIO().writeBundle(b, System.out, "text/vnd.taverna.scufl2.structure");
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/52bb54ed/taverna-scufl2-cwl/src/test/resources/ex1/revsort.cwl
----------------------------------------------------------------------
diff --git a/taverna-scufl2-cwl/src/test/resources/ex1/revsort.cwl b/taverna-scufl2-cwl/src/test/resources/ex1/revsort.cwl
index bcdfd1b..b4339d1 100644
--- a/taverna-scufl2-cwl/src/test/resources/ex1/revsort.cwl
+++ b/taverna-scufl2-cwl/src/test/resources/ex1/revsort.cwl
@@ -50,16 +50,16 @@ outputs:
 # parameter "#reversed" from the first step to the input parameter of the
 # tool "sorttool.cwl#input".
 steps:
-  - inputs:
+  - in:
       - { id: "#rev.input", source: "#input" }
-    outputs:
+    out:
       - { id: "#rev.output" }
     run: { import: revtool.cwl }
 
-  - inputs:
+  - in:
       - { id: "#sorted.input", source: "#rev.output" }
       - { id: "#sorted.reverse", source: "#reverse_sort" }
-    outputs:
+    out:
       - { id: "#sorted.output" }
     run: { import: sorttool.cwl }
     
\ No newline at end of file