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/02/02 22:57:57 UTC

[01/11] incubator-taverna-language git commit: taverna language commandline module renamed -> tavlangtool

Repository: incubator-taverna-language
Updated Branches:
  refs/heads/master 99156bd0e -> 92ccd6b3c


http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestTools.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestTools.java b/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestTools.java
new file mode 100644
index 0000000..483d4c3
--- /dev/null
+++ b/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestTools.java
@@ -0,0 +1,80 @@
+package org.apache.taverna.tavlang.test;
+
+/*
+ * 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.
+ */
+
+import static org.junit.Assert.*;
+
+import java.util.HashMap;
+
+import org.apache.taverna.tavlang.tools.Tools.ConvertionTools;
+import org.junit.Test;
+import org.junit.*;
+
+/*
+ * Test cases for the Tools Class.
+ * Input :- The output file format
+ * Output:- The relevant writer media type for that file format
+ * 
+ * */
+
+public class TestTools {
+
+	private ConvertionTools tools;
+	private HashMap<String, String> map = new HashMap<>();
+	
+	 
+	@Before
+	public void setMap(){
+		this.map.put("wfdesc", "text/vnd.wf4ever.wfdesc+turtle");
+		this.map.put("iwir", "application/vnd.shiwa.iwir+xml");
+		this.map.put("json", "application/ld+json");
+		this.map.put("wfbundle", "application/vnd.taverna.scufl2.workflow-bundle");
+		this.map.put("robundle", null);
+	}
+	
+	
+	@Test
+	public void testWfdesc() {
+		assertEquals(map.get("wfdesc"), ConvertionTools.valueOf("wfdesc").getMediaType(tools));
+	}
+
+	@Test
+	public void testIwir() {
+		assertEquals(map.get("iwir"), ConvertionTools.valueOf("iwir").getMediaType(tools));
+	}
+
+	@Test
+	public void testJson() {
+		assertEquals(map.get("json"), ConvertionTools.valueOf("json").getMediaType(tools));
+	}
+
+
+	@Test
+	public void testWfbundle() {
+		assertEquals(map.get("wfbundle"), ConvertionTools.valueOf("wfbundle").getMediaType(tools));
+	}
+	
+	
+	@Test
+	public void testRobundle() {
+		assertEquals(map.get("robundle"), ConvertionTools.valueOf("robundle").getMediaType(tools));
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestValidate.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestValidate.java b/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestValidate.java
new file mode 100644
index 0000000..58e0d3f
--- /dev/null
+++ b/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestValidate.java
@@ -0,0 +1,49 @@
+package org.apache.taverna.tavlang.test;
+
+/*
+ * 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.
+ */
+
+
+import static org.junit.Assert.*;
+
+import java.awt.List;
+import java.util.ArrayList;
+
+import org.apache.taverna.robundle.Bundle;
+import org.apache.taverna.tavlang.tools.validate.Validate;
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.google.common.collect.Lists;
+
+public class TestValidate {
+
+	
+	
+	@Test
+	public void test() {
+		ArrayList<String> list = Lists.newArrayList();
+		list.add("src/test/resources/workflows/t2flow/as.t2flow");
+		Validate val = new Validate(list, null, false);
+		
+		assertEquals(false, val.getCheck());
+		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/src/test/resources/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/test/resources/.gitignore b/taverna-tavlangtool/src/test/resources/.gitignore
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/src/test/resources/workflows/t2flow/as.t2flow
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/test/resources/workflows/t2flow/as.t2flow b/taverna-tavlangtool/src/test/resources/workflows/t2flow/as.t2flow
new file mode 100644
index 0000000..2d9f127
--- /dev/null
+++ b/taverna-tavlangtool/src/test/resources/workflows/t2flow/as.t2flow
@@ -0,0 +1,1674 @@
+<?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
+
+       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.
+-->
+<workflow xmlns="http://taverna.sf.net/2008/xml/t2flow" version="1" producedBy="taverna-2.1.0">
+  <dataflow id="92c5e8d5-8360-4f86-a845-09c9849cbdc5" role="top">
+    <name>Workflow1</name>
+    <inputPorts />
+    <outputPorts>
+      <port>
+        <name>asdasd</name>
+        <annotations />
+      </port>
+    </outputPorts>
+    <processors>
+      <processor>
+        <name>Workflow19</name>
+        <inputPorts>
+          <port>
+            <name>lk</name>
+            <depth>0</depth>
+          </port>
+        </inputPorts>
+        <outputPorts>
+          <port>
+            <name>kk</name>
+            <depth>0</depth>
+            <granularDepth>0</granularDepth>
+          </port>
+          <port>
+            <name>String_constant_value</name>
+            <depth>0</depth>
+            <granularDepth>0</granularDepth>
+          </port>
+        </outputPorts>
+        <annotations />
+        <activities>
+          <activity>
+            <raven>
+              <group>net.sf.taverna.t2.activities</group>
+              <artifact>dataflow-activity</artifact>
+              <version>1.0</version>
+            </raven>
+            <class>net.sf.taverna.t2.activities.dataflow.DataflowActivity</class>
+            <inputMap>
+              <map from="lk" to="lk" />
+            </inputMap>
+            <outputMap>
+              <map from="String_constant_value" to="String_constant_value" />
+              <map from="kk" to="kk" />
+            </outputMap>
+            <configBean encoding="dataflow">
+              <dataflow ref="c451b1cf-1c95-47e5-b89c-537a5501a1ef" />
+            </configBean>
+            <annotations />
+          </activity>
+        </activities>
+        <dispatchStack>
+          <dispatchLayer>
+            <raven>
+              <group>net.sf.taverna.t2.core</group>
+              <artifact>workflowmodel-impl</artifact>
+              <version>1.0</version>
+            </raven>
+            <class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+            <configBean encoding="xstream">
+              <net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+                <maxJobs>1</maxJobs>
+              </net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+            </configBean>
+          </dispatchLayer>
+          <dispatchLayer>
+            <raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy>
+<cross>
+<port name="lk" depth="0" />
+</cross>
+</strategy>
+</iteration>
+</iterationStrategyStack>
+</processor>
+<processor>
+<name>Concatenate_two_strings</name>
+<inputPorts>
+<port>
+<name>string2</name>
+<depth>0</depth>
+</port>
+<port>
+<name>string1</name>
+<depth>0</depth>
+</port>
+</inputPorts>
+<outputPorts>
+<port>
+<name>output</name>
+<depth>0</depth>
+<granularDepth>0</granularDepth>
+</port>
+</outputPorts>
+<annotations />
+<activities>
+<activity>
+<raven>
+<group>net.sf.taverna.t2.activities</group>
+<artifact>localworker-activity</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
+<inputMap>
+<map from="string2" to="string2" />
+<map from="string1" to="string1" />
+</inputMap>
+<outputMap>
+<map from="output" to="output" />
+</outputMap>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
+  <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
+  <script>output = string1 + string2;</script>
+  <dependencies />
+  <classLoaderSharing>workflow</classLoaderSharing>
+  <localDependencies />
+  <artifactDependencies />
+  <inputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>java.lang.String</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>string1</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>java.lang.String</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>string2</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+  </inputs>
+  <outputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+      <granularDepth>0</granularDepth>
+      <name>output</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+  </outputs>
+</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
+</configBean>
+<annotations />
+</activity>
+</activities>
+<dispatchStack>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+  <maxJobs>1</maxJobs>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy>
+<cross>
+<port name="string2" depth="0" />
+<port name="string1" depth="0" />
+</cross>
+</strategy>
+</iteration>
+</iterationStrategyStack>
+</processor>
+<processor>
+<name>Concatenate_two_strings_2</name>
+<inputPorts>
+<port>
+<name>string2</name>
+<depth>0</depth>
+</port>
+<port>
+<name>string1</name>
+<depth>0</depth>
+</port>
+</inputPorts>
+<outputPorts>
+<port>
+<name>output</name>
+<depth>0</depth>
+<granularDepth>0</granularDepth>
+</port>
+</outputPorts>
+<annotations />
+<activities>
+<activity>
+<raven>
+<group>net.sf.taverna.t2.activities</group>
+<artifact>localworker-activity</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
+<inputMap>
+<map from="string2" to="string2" />
+<map from="string1" to="string1" />
+</inputMap>
+<outputMap>
+<map from="output" to="output" />
+</outputMap>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
+  <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
+  <script>output = string1 + string2;</script>
+  <dependencies />
+  <classLoaderSharing>workflow</classLoaderSharing>
+  <localDependencies />
+  <artifactDependencies />
+  <inputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>java.lang.String</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>string1</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>java.lang.String</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>string2</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+  </inputs>
+  <outputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+      <granularDepth>0</granularDepth>
+      <name>output</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+  </outputs>
+</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
+</configBean>
+<annotations />
+</activity>
+</activities>
+<dispatchStack>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+  <maxJobs>1</maxJobs>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy>
+<cross>
+<port name="string2" depth="0" />
+<port name="string1" depth="0" />
+</cross>
+</strategy>
+</iteration>
+</iterationStrategyStack>
+</processor>
+<processor>
+<name>Create_Lots_Of_Strings</name>
+<inputPorts />
+<outputPorts>
+<port>
+<name>strings</name>
+<depth>1</depth>
+<granularDepth>1</granularDepth>
+</port>
+</outputPorts>
+<annotations />
+<activities>
+<activity>
+<raven>
+<group>net.sf.taverna.t2.activities</group>
+<artifact>localworker-activity</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
+<inputMap />
+<outputMap>
+<map from="strings" to="strings" />
+</outputMap>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
+  <localworkerName>org.embl.ebi.escience.scuflworkers.java.EmitLotsOfStrings</localworkerName>
+  <script>List strings = new ArrayList();
+for (int i = 0; i &lt; 40; i++) {
+	strings.add("String" + i);
+}
+</script>
+  <dependencies />
+  <classLoaderSharing>workflow</classLoaderSharing>
+  <localDependencies />
+  <artifactDependencies />
+  <inputs />
+  <outputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+      <granularDepth>1</granularDepth>
+      <name>strings</name>
+      <depth>1</depth>
+      <mimeTypes>
+        <string>l('text/plain')</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+  </outputs>
+</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
+</configBean>
+<annotations />
+</activity>
+</activities>
+<dispatchStack>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+  <maxJobs>1</maxJobs>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy />
+</iteration>
+</iterationStrategyStack>
+</processor>
+<processor>
+<name>Concatenate_two_strings_3</name>
+<inputPorts>
+<port>
+<name>string1</name>
+<depth>0</depth>
+</port>
+<port>
+<name>string2</name>
+<depth>0</depth>
+</port>
+</inputPorts>
+<outputPorts>
+<port>
+<name>output</name>
+<depth>0</depth>
+<granularDepth>0</granularDepth>
+</port>
+</outputPorts>
+<annotations />
+<activities>
+<activity>
+<raven>
+<group>net.sf.taverna.t2.activities</group>
+<artifact>localworker-activity</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
+<inputMap>
+<map from="string2" to="string2" />
+<map from="string1" to="string1" />
+</inputMap>
+<outputMap>
+<map from="output" to="output" />
+</outputMap>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
+  <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
+  <script>output = string1 + string2;</script>
+  <dependencies />
+  <classLoaderSharing>workflow</classLoaderSharing>
+  <localDependencies />
+  <artifactDependencies />
+  <inputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>java.lang.String</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>string1</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>java.lang.String</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>string2</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+  </inputs>
+  <outputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+      <granularDepth>0</granularDepth>
+      <name>output</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+  </outputs>
+</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
+</configBean>
+<annotations />
+</activity>
+</activities>
+<dispatchStack>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+  <maxJobs>1</maxJobs>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy>
+<cross>
+<port name="string1" depth="0" />
+<port name="string2" depth="0" />
+</cross>
+</strategy>
+</iteration>
+</iterationStrategyStack>
+</processor>
+<processor>
+<name>String_constant</name>
+<inputPorts />
+<outputPorts>
+<port>
+<name>value</name>
+<depth>0</depth>
+<granularDepth>0</granularDepth>
+</port>
+</outputPorts>
+<annotations />
+<activities>
+<activity>
+<raven>
+<group>net.sf.taverna.t2.activities</group>
+<artifact>stringconstant-activity</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.activities.stringconstant.StringConstantActivity</class>
+<inputMap />
+<outputMap>
+<map from="value" to="value" />
+</outputMap>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean xmlns="">
+  <value>Add your own value here</value>
+</net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean>
+</configBean>
+<annotations />
+</activity>
+</activities>
+<dispatchStack>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+  <maxJobs>1</maxJobs>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy />
+</iteration>
+</iterationStrategyStack>
+</processor>
+<processor>
+<name>Concatenate_two_strings_4</name>
+<inputPorts>
+<port>
+<name>string1</name>
+<depth>0</depth>
+</port>
+<port>
+<name>string2</name>
+<depth>0</depth>
+</port>
+</inputPorts>
+<outputPorts>
+<port>
+<name>output</name>
+<depth>0</depth>
+<granularDepth>0</granularDepth>
+</port>
+</outputPorts>
+<annotations />
+<activities>
+<activity>
+<raven>
+<group>net.sf.taverna.t2.activities</group>
+<artifact>localworker-activity</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
+<inputMap>
+<map from="string2" to="string2" />
+<map from="string1" to="string1" />
+</inputMap>
+<outputMap>
+<map from="output" to="output" />
+</outputMap>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
+  <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
+  <script>output = string1 + string2;</script>
+  <dependencies />
+  <classLoaderSharing>workflow</classLoaderSharing>
+  <localDependencies />
+  <artifactDependencies />
+  <inputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>java.lang.String</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>string1</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>java.lang.String</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>string2</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+  </inputs>
+  <outputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+      <granularDepth>0</granularDepth>
+      <name>output</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+  </outputs>
+</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
+</configBean>
+<annotations />
+</activity>
+</activities>
+<dispatchStack>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+  <maxJobs>1</maxJobs>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy>
+<cross>
+<port name="string1" depth="0" />
+<port name="string2" depth="0" />
+</cross>
+</strategy>
+</iteration>
+</iterationStrategyStack>
+</processor>
+<processor>
+<name>Echo_List</name>
+<inputPorts>
+<port>
+<name>inputlist</name>
+<depth>1</depth>
+</port>
+</inputPorts>
+<outputPorts>
+<port>
+<name>outputlist</name>
+<depth>1</depth>
+<granularDepth>1</granularDepth>
+</port>
+</outputPorts>
+<annotations />
+<activities>
+<activity>
+<raven>
+<group>net.sf.taverna.t2.activities</group>
+<artifact>localworker-activity</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
+<inputMap>
+<map from="inputlist" to="inputlist" />
+</inputMap>
+<outputMap>
+<map from="outputlist" to="outputlist" />
+</outputMap>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
+  <localworkerName>org.embl.ebi.escience.scuflworkers.java.EchoList</localworkerName>
+  <script>outputlist = inputlist;</script>
+  <dependencies />
+  <classLoaderSharing>workflow</classLoaderSharing>
+  <localDependencies />
+  <artifactDependencies />
+  <inputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>[B</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>inputlist</name>
+      <depth>1</depth>
+      <mimeTypes>
+        <string>l('')</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+  </inputs>
+  <outputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+      <granularDepth>1</granularDepth>
+      <name>outputlist</name>
+      <depth>1</depth>
+      <mimeTypes>
+        <string>l('')</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+  </outputs>
+</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
+</configBean>
+<annotations />
+</activity>
+</activities>
+<dispatchStack>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+  <maxJobs>1</maxJobs>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy>
+<cross>
+<port name="inputlist" depth="1" />
+</cross>
+</strategy>
+</iteration>
+</iterationStrategyStack>
+</processor>
+</processors>
+<conditions />
+<datalinks>
+<datalink>
+<sink type="processor">
+<processor>Workflow19</processor>
+<port>lk</port>
+</sink>
+<source type="processor">
+<processor>Concatenate_two_strings</processor>
+<port>output</port>
+</source>
+</datalink>
+<datalink>
+<sink type="processor">
+<processor>Concatenate_two_strings</processor>
+<port>string2</port>
+</sink>
+<source type="processor">
+<processor>Concatenate_two_strings_2</processor>
+<port>output</port>
+</source>
+</datalink>
+<datalink>
+<sink type="processor">
+<processor>Concatenate_two_strings</processor>
+<port>string1</port>
+</sink>
+<source type="processor">
+<processor>Create_Lots_Of_Strings</processor>
+<port>strings</port>
+</source>
+</datalink>
+<datalink>
+<sink type="processor">
+<processor>Concatenate_two_strings_2</processor>
+<port>string2</port>
+</sink>
+<source type="processor">
+<processor>Create_Lots_Of_Strings</processor>
+<port>strings</port>
+</source>
+</datalink>
+<datalink>
+<sink type="processor">
+<processor>Concatenate_two_strings_2</processor>
+<port>string1</port>
+</sink>
+<source type="processor">
+<processor>Create_Lots_Of_Strings</processor>
+<port>strings</port>
+</source>
+</datalink>
+<datalink>
+<sink type="processor">
+<processor>Concatenate_two_strings_3</processor>
+<port>string1</port>
+</sink>
+<source type="processor">
+<processor>Workflow19</processor>
+<port>kk</port>
+</source>
+</datalink>
+<datalink>
+<sink type="processor">
+<processor>Concatenate_two_strings_3</processor>
+<port>string2</port>
+</sink>
+<source type="processor">
+<processor>String_constant</processor>
+<port>value</port>
+</source>
+</datalink>
+<datalink>
+<sink type="processor">
+<processor>Concatenate_two_strings_4</processor>
+<port>string1</port>
+</sink>
+<source type="processor">
+<processor>String_constant</processor>
+<port>value</port>
+</source>
+</datalink>
+<datalink>
+<sink type="processor">
+<processor>Concatenate_two_strings_4</processor>
+<port>string2</port>
+</sink>
+<source type="processor">
+<processor>Workflow19</processor>
+<port>String_constant_value</port>
+</source>
+</datalink>
+<datalink>
+<sink type="merge">
+<processor>Echo_List</processor>
+<port>inputlist</port>
+</sink>
+<source type="processor">
+<processor>Concatenate_two_strings_4</processor>
+<port>output</port>
+</source>
+</datalink>
+<datalink>
+<sink type="merge">
+<processor>Echo_List</processor>
+<port>inputlist</port>
+</sink>
+<source type="processor">
+<processor>Concatenate_two_strings_3</processor>
+<port>output</port>
+</source>
+</datalink>
+<datalink>
+<sink type="dataflow">
+<port>asdasd</port>
+</sink>
+<source type="processor">
+<processor>Echo_List</processor>
+<port>outputlist</port>
+</source>
+</datalink>
+</datalinks>
+<annotations />
+</dataflow>
+<dataflow id="c451b1cf-1c95-47e5-b89c-537a5501a1ef" role="nested">
+<name>Workflow19</name>
+<inputPorts>
+<port>
+<name>lk</name>
+<depth>0</depth>
+<granularDepth>0</granularDepth>
+<annotations />
+</port>
+</inputPorts>
+<outputPorts>
+<port>
+<name>kk</name>
+<annotations />
+</port>
+<port>
+<name>String_constant_value</name>
+<annotations />
+</port>
+</outputPorts>
+<processors>
+<processor>
+<name>Concatenate_two_strings</name>
+<inputPorts>
+<port>
+<name>string1</name>
+<depth>0</depth>
+</port>
+<port>
+<name>string2</name>
+<depth>0</depth>
+</port>
+</inputPorts>
+<outputPorts>
+<port>
+<name>output</name>
+<depth>0</depth>
+<granularDepth>0</granularDepth>
+</port>
+</outputPorts>
+<annotations />
+<activities>
+<activity>
+<raven>
+<group>net.sf.taverna.t2.activities</group>
+<artifact>localworker-activity</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
+<inputMap>
+<map from="string2" to="string2" />
+<map from="string1" to="string1" />
+</inputMap>
+<outputMap>
+<map from="output" to="output" />
+</outputMap>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
+  <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
+  <script>output = string1 + string2;</script>
+  <dependencies />
+  <classLoaderSharing>workflow</classLoaderSharing>
+  <localDependencies />
+  <artifactDependencies />
+  <inputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>java.lang.String</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>string1</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>java.lang.String</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>string2</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+  </inputs>
+  <outputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+      <granularDepth>0</granularDepth>
+      <name>output</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+  </outputs>
+</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
+</configBean>
+<annotations />
+</activity>
+</activities>
+<dispatchStack>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+  <maxJobs>1</maxJobs>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy>
+<cross>
+<port name="string1" depth="0" />
+<port name="string2" depth="0" />
+</cross>
+</strategy>
+</iteration>
+</iterationStrategyStack>
+</processor>
+<processor>
+<name>string1_value</name>
+<inputPorts />
+<outputPorts>
+<port>
+<name>value</name>
+<depth>0</depth>
+<granularDepth>0</granularDepth>
+</port>
+</outputPorts>
+<annotations />
+<activities>
+<activity>
+<raven>
+<group>net.sf.taverna.t2.activities</group>
+<artifact>stringconstant-activity</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.activities.stringconstant.StringConstantActivity</class>
+<inputMap />
+<outputMap>
+<map from="value" to="value" />
+</outputMap>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean xmlns="">
+  <value>kjkj</value>
+</net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean>
+</configBean>
+<annotations />
+</activity>
+</activities>
+<dispatchStack>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+  <maxJobs>1</maxJobs>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy />
+</iteration>
+</iterationStrategyStack>
+</processor>
+<processor>
+<name>String_constant</name>
+<inputPorts />
+<outputPorts>
+<port>
+<name>value</name>
+<depth>0</depth>
+<granularDepth>0</granularDepth>
+</port>
+</outputPorts>
+<annotations />
+<activities>
+<activity>
+<raven>
+<group>net.sf.taverna.t2.activities</group>
+<artifact>stringconstant-activity</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.activities.stringconstant.StringConstantActivity</class>
+<inputMap />
+<outputMap>
+<map from="value" to="value" />
+</outputMap>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean xmlns="">
+  <value>Add your own value here</value>
+</net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean>
+</configBean>
+<annotations />
+</activity>
+</activities>
+<dispatchStack>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+  <maxJobs>1</maxJobs>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy />
+</iteration>
+</iterationStrategyStack>
+</processor>
+</processors>
+<conditions>
+<condition control="Concatenate_two_strings" target="String_constant" />
+</conditions>
+<datalinks>
+<datalink>
+<sink type="processor">
+<processor>Concatenate_two_strings</processor>
+<port>string1</port>
+</sink>
+<source type="processor">
+<processor>string1_value</processor>
+<port>value</port>
+</source>
+</datalink>
+<datalink>
+<sink type="processor">
+<processor>Concatenate_two_strings</processor>
+<port>string2</port>
+</sink>
+<source type="dataflow">
+<port>lk</port>
+</source>
+</datalink>
+<datalink>
+<sink type="dataflow">
+<port>kk</port>
+</sink>
+<source type="processor">
+<processor>Concatenate_two_strings</processor>
+<port>output</port>
+</source>
+</datalink>
+<datalink>
+<sink type="dataflow">
+<port>String_constant_value</port>
+</sink>
+<source type="processor">
+<processor>String_constant</processor>
+<port>value</port>
+</source>
+</datalink>
+</datalinks>
+<annotations />
+</dataflow>
+</workflow>
\ No newline at end of file


[03/11] incubator-taverna-language git commit: Taverna language commandline tool module rename added

Posted by st...@apache.org.
Taverna language commandline tool module rename added

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

Branch: refs/heads/master
Commit: 021fcd53ffebc1c5cc3a41d3b360da9a53619a41
Parents: 1e13219
Author: Menaka Madushanka <me...@gmail.com>
Authored: Tue Feb 2 11:47:13 2016 +0530
Committer: Menaka Madushanka <me...@gmail.com>
Committed: Tue Feb 2 11:47:13 2016 +0530

----------------------------------------------------------------------
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/021fcd53/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 01bbdf1..20f6b71 100644
--- a/pom.xml
+++ b/pom.xml
@@ -257,7 +257,7 @@
     <module>taverna-scufl2-t2flow</module>
     <module>taverna-scufl2-ucfpackage</module>
     <module>taverna-scufl2-wfbundle</module>
-    <module>taverna-language-commandline</module>
+    <module>taverna-tavlangtool</module>
     <!-- Disabled temporarily due to dependency overload..
     <module>taverna-scufl2-wfdesc</module>
     -->


[10/11] incubator-taverna-language git commit: taverna-tavlang-tool module added to parent pom

Posted by st...@apache.org.
taverna-tavlang-tool module added to parent pom

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

Branch: refs/heads/master
Commit: 2f6f465853c49e3fe1042da2ea1f4327fe37ce50
Parents: 6e2aa82
Author: Menaka Madushanka <me...@gmail.com>
Authored: Tue Feb 2 12:01:11 2016 +0530
Committer: Menaka Madushanka <me...@gmail.com>
Committed: Tue Feb 2 12:01:11 2016 +0530

----------------------------------------------------------------------
 pom.xml                        | 2 +-
 taverna-tavlangtool/.gitignore | 1 -
 2 files changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/2f6f4658/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 20f6b71..30baeb1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -257,7 +257,7 @@
     <module>taverna-scufl2-t2flow</module>
     <module>taverna-scufl2-ucfpackage</module>
     <module>taverna-scufl2-wfbundle</module>
-    <module>taverna-tavlangtool</module>
+    <module>taverna-tavlang-tool</module>
     <!-- Disabled temporarily due to dependency overload..
     <module>taverna-scufl2-wfdesc</module>
     -->

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/2f6f4658/taverna-tavlangtool/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/.gitignore b/taverna-tavlangtool/.gitignore
deleted file mode 100644
index 916e17c..0000000
--- a/taverna-tavlangtool/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-dependency-reduced-pom.xml


[05/11] incubator-taverna-language git commit: Command line module removed

Posted by st...@apache.org.
Command line module removed

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

Branch: refs/heads/master
Commit: 66a8cfd1fb33925c99a24c8b63a1cc9dda9e8c0f
Parents: 021fcd5
Author: Menaka Madushanka <me...@gmail.com>
Authored: Tue Feb 2 11:49:46 2016 +0530
Committer: Menaka Madushanka <me...@gmail.com>
Committed: Tue Feb 2 11:49:46 2016 +0530

----------------------------------------------------------------------
 taverna-language-commandline/.gitignore         |    1 -
 taverna-language-commandline/README.md          |  425 -----
 taverna-language-commandline/pom.xml            |  213 ---
 .../src/main/java/.gitignore                    |    0
 .../apache/taverna/tavlang/CommandLineTool.java |  350 ----
 .../taverna/tavlang/TavernaCommandline.java     |   29 -
 .../org/apache/taverna/tavlang/tools/Tools.java |   88 -
 .../tavlang/tools/convert/Scufl2Convert.java    |  206 ---
 .../taverna/tavlang/tools/convert/ToJson.java   |  298 ----
 .../tavlang/tools/convert/ToRobundle.java       |   66 -
 .../tavlang/tools/inspect/ProcessorNames.java   |  169 --
 .../tavlang/tools/inspect/ServiceTypes.java     |  112 --
 .../taverna/tavlang/tools/stats/GetWfStat.java  |  193 --
 .../tavlang/tools/validate/Validate.java        |  151 --
 .../src/main/resources/.gitignore               |    0
 .../src/main/resources/META-INF/NOTICE          |    7 -
 .../src/test/java/.gitignore                    |    0
 .../taverna/tavlang/test/CommandLineTest.java   |   43 -
 .../taverna/tavlang/test/TestConvert.java       |   34 -
 .../apache/taverna/tavlang/test/TestStats.java  |   34 -
 .../apache/taverna/tavlang/test/TestTools.java  |   80 -
 .../taverna/tavlang/test/TestValidate.java      |   49 -
 .../src/test/resources/.gitignore               |    0
 .../test/resources/workflows/t2flow/as.t2flow   | 1674 ------------------
 24 files changed, 4222 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/.gitignore b/taverna-language-commandline/.gitignore
deleted file mode 100644
index 916e17c..0000000
--- a/taverna-language-commandline/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-dependency-reduced-pom.xml

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/README.md
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/README.md b/taverna-language-commandline/README.md
deleted file mode 100644
index e76cbcd..0000000
--- a/taverna-language-commandline/README.md
+++ /dev/null
@@ -1,425 +0,0 @@
-<!--
-   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.
--->
-
-# Apache Taverna Language Command Line
-
-
-This is planned as a command line for the
-[Apache Taverna Language](https://github.com/apache/incubator-taverna-language/),
-an API for the 
-[Apache Taverna](http://taverna.incubator.apache.org/) workflows.
-
-This module is a **work in progress** as part of Google Summer of Code 2015.
-
-
-
-## License
-
-(c) 2015 Apache Software Foundation
-
-This product includes software developed at The [Apache Software
-Foundation](http://www.apache.org/).
-
-Licensed under the [Apache License
-2.0](https://www.apache.org/licenses/LICENSE-2.0), see the file
-[../LICENSE](../LICENSE) for details.
-
-The file [NOTICE](src/main/resources/NOTICE) contains any additional attributions and
-details about embedded third-party libraries and source code.
-
-
-# Contribute
-
-Please subscribe to and contact the 
-[dev@taverna](http://taverna.incubator.apache.org/community/lists#dev%20mailing%20list)
-for any questions, suggestions and discussions about 
-Apache Taverna Language Commandline.
-
-Bugs and planned features are tracked in the Jira
-[Issue tracker](https://issues.apache.org/jira/browse/TAVERNA/component/12326903)
-under the `TAVERNA` component _GSOC Taverna Language Command line_. Feel free
-to add an issue!
-
-To suggest changes to this source code, feel free to raise a 
-[GitHub pull request](https://github.com/apache/incubator-taverna-mobile/pulls).
-Any contributions received are assumed to be covered by the [Apache License
-2.0](https://www.apache.org/licenses/LICENSE-2.0). We might ask you 
-to sign a [Contributor License Agreement](https://www.apache.org/licenses/#clas)
-before accepting a larger contribution.
-
-
-# Building and install requirements
-
-## Requisites
-
-* Java 1.7 or newer
-* [Apache Maven](https://maven.apache.org/download.html) 3.2.5 or newer (older
-  versions probably also work)
-
-
-## Building
-
-To build, run:
-
-    mvn clean install
-
-
-# Usage
-
-	usage: tavlang <command> [<args>]
-	
-	The most commonly used tavlang commands are:
-	    convert    Convert the given workflow
-	    help       Display help information about Tvarna
-	    inspect    Inspect the given workflow and show the results on the terminal
-	    validate   Validate the given workflow
-	    version    Show version informantion
-	
-	See 'tavlang help <command>' for more information on a specific command.
-
-# Documentation
-
-The Taverna language command line tool is for accessing the features of the Taverna language modules. 
-The tool has the following functions:
-
-* Conversion
-* Inspection
-* Validation
-* Viewing workflow statistics.
-	
-## Command line structure 
-	
-	$tavlang <command> <options> [arguments and parameters]
-	
-Each command has its own set of options.
-
-###Commands and Options
-The tool has the following major commands:
-
-* convert: Options {-r -- recursive, -i --input, -o --output,}
-* inspect: Options {-l --log}
-* validate: Options {-l --log, -v --verbose}
-* stats: Options {-l --log, -v --verbose}
-
-## Commands in detail
-
-### convert ------------------------------------------------------
-
-Convert the given workflow file/s into a specified output format.
-
-Usage:
-	
-	tavlang convert (--output_fomat) ([[options] [arguments]]|files...)
-	
- Supported output formats are,
- 
- * wfbundle
- * iwir
- * json
- * robundle
- * structure
- 
-Options:
-
- * -r, --recursive : Convert all workflow files in a given directory recursively
- * -i, --input     : Used with recursive case. Specify the input directory
- * -o, --output    : Specify the out put directory 
-
-*The tool can only convert into one format at a time
-
-There are two methods for using the conversion command.
-
-####  1. Non-recursive method
-
-Usage: 
-
-	$tavlang convert (--output_format) [options] [arguments] 
-	
-####### Example 1: Without specifying any options
-	
-	$tavlang convert --structure /helloworld.t2flow
-	
-Output:
-
-	/converted/helloworld.structure is created
-
-Convert the helloworld.t2flow into helloworld.structure format and store in the /converted directory
-
-###### Example 2: Convert multiple workflows
-	
-	$tavlang convert --json /helloworld.t2flow /hello.t2flow
-	
-Output:
-	
-	/converted/helloworld.json is created
-	/converted/hello.json is created
-	
-Convert both workflow files and store them in /converted directory
-
-###### Example 3: with options and arguments
-
-	$tavlang convert --wfbundle /helloworld.t2flow -o /output/workflows
-	
-Output:
-	
-	/output/workflows/helloworld.wfbundle is created
-	
-Convert the workflow file/s and store them in the specified output directory
-
-####  2. Recursive method
-
-If there are many workflows in a directory, which are needed to be converted into one single format use this method.
-	
-Usage: 
-	
-	$tavlang convert -r (--output_format) -i workflow_src_dir <options> [arguments]
-
-###### Example 4: Without options and arguments
-
-	$tavlang convert -r --json -i /home/user/workflows
-	
-Convert all the workflows in the input directory into the specified format and store them in the "/home/user/workflows/converted" directory.
-
-Output: Suppose that there are 2 workflow files in the dir 1.t2flow and 2.t2flow
-
-	/home/workflows/converted/1.json is created
-	/home/workflows/converted/2.json is created
-
-###### Example 5: with output dir is specified
-
-	$tavlang convert -r --iwir -i /home/workflows -o /home/final
-	
-Convert all the workflows in the input directory and store them in /home/final directory
-
-Output:
-
-	/home/final/1.iwir is created
-	/home/final/2.iwir is created
-	
-### inspect -----------------------------------------------------------------
-
-Inspect the given workflow file/s and give the inspection report. 
-Supported workflow bundle formats: .wfbundle, .t2flow
-
-Usage:-
-	
-	$tavlang inspect (--inspection_options) <-other-options> [arguments] workflow_undles_to_be_inspected
-	
-Inspection options: 
-
- * --servicetypes :- List all the service-types used in the workflow
- * --processornames :- List the tree of the processor names used in the workflow
- 
-Other Options:
-
- * -l, --log :- save the inspection report in a text file 
- 
-###### Example 1: Without any other-options
-
-1. Inspection result for Service types
-
-
-	$tavlang inspect --servicetypes helloworld.wfbundle
-	Service types used in helloworld.wfbundle :
-
-	http://ns.taverna.org.uk/2010/activity/constant
-	**************************************************
-
-2. inspection result for Processor names
-	
-	
-	$tavlang inspect --processornames helloworld.wfbundle
-	Processor tree of helloworld.wfbundle 
-	+ Hello_World
-	  - hello
-	
-###### Example 2: With other options
-The output is the same but the results will be saved in the given file.
-
-	$tavlang inspect --processornames helloworld.wfbundle -l results.txt
-	Processor tree of helloworld.wfbundle 
-	+ Hello_World
-	 - hello
-
-
-The output will be saved in results.txt in the same format.
-
-### validate ----------------------------------------------------------------------
-
-Validates the given workflow file or files and gives the validation report. 
-Validate tool checks for the following problematic conditions.
-
- * Empty Iteration Strategy Top-Node Problems
- * Mismatch Configurable Type Problems
- * Non-Absolute URI Problems
- * Null Field Problems
- * Out-Of-Scope Value Problems
- * Port Mentioned Twice Problems
- * Port Missing From Iteration Strategy Stack Problems
- * Wrong Parent Problems
- * Incompatible Granular Depth Problems
- 
-Usage:-
-
-	$tavlang validate [options][arguments] input_files
-
-Options:- 
-
- * -l, --log: Save the validation report in a text file
- * -v, --verbose: Verbose mode
-
-Supported workflow bundle formats: .t2flow and .wfbundle
-
-###### Example 1: Normal mode
-
-  Validate one workflow bundle
-
-	$tavlang validate helloworld.t2flow
-	
-Output: 
-	
-	Validation started....
-	Validating helloworld.t2flow
-	The workflow helloworld.t2flow has no errors. 
-
-	Validation completed.......
- 
-  Validate more than one workflow bundles
- 
-	$tavlang validate ../../workflow2.t2flow ../../workflow3.wfbundle
-
-	Validation started....
-	Validating ../../workflow2.t2flow
-	The workflow workflow2.t2flow has no errors. 
-
-	Validating ../../workflow3.wfbundle
-	The workflow workflow3.t2flow has no errors. 
-
-	Validation completed.......
-
-
-###### Example 2: Verbose mode
-
-The report is more explanatory.
-
-	$tavlang validate -v ../../workflow2.t2flow
-
-	Validation started....
-	Validating ../../workflow2.t2flow
-	The workflow workflow2.t2flow has no errors. 
-
-	The validation report for defaultActivitiesTaverna2.wfbundle......
-	-------------------------------------------------------------------------------- 
-	-->NegativeValueProblems:- null 
-	
-	-->EmptyIterationStrategyTopNodeProblems:- null 
-
-	-->MismatchConfigurableTypeProblems:- null 
-
-	-->NonAbsoluteURIProblems:- null 
-
-	-->NullFieldProblems:- null 
-
-	-->OutOfScopeValueProblems:- null 
-
-	-->PortMentionedTwiceProblems:- null 
-
-	-->PortMissingFromIterationStrategyStackProblems:- null 
-
-	-->WrongParentProblems:- null 
-
-	-->IncompatibleGranularDepthProblems:- null 
-
-	---------------------------------------------------------------------------------
-
-###### Example 3: Saving results to a file
-
-	$tavlang validate workflow2.t2flow -l log2.txt 
-	Validation started.... 
-	Validating workflow2.t2flow 
-	The workflow helloworld.wfbundle has no errors. 
-	Validation completed....... 
-	
-	Results were saved into log2.txt
-
-### stats ----------------------------------------------------------------------------------
-
-A workflow contains several resources.
-
-* Processors
-* Input ports
-* Output ports
-* Data links
-* Control links
-
-The stats command gives a report of the resources used in the workflow.
-
-Usage:- 
-
-	$tavlang stats <options>[arguments] input_files...
-	
-Options:- 
-
- * -l, – – log : Save results in a log file
- * -v, – – verbose : verbose mode
- 
-Supported workflow bundle formats:- .t2flow, .wfbundle
-
-###### Example 1: Normal mode
-
-	$tavlang helloworld.wfbundle
-	>>> Statistics of the workflow bundle: helloworld.wfbundle <<<
-	Name of the workflow = Hello_World
-	 |--> Number of Processors = 1
-	 |--> Number of Data Links = 1
-	 |--> Number of Control Links = 0
-	 |--> Number of Input ports = 0
-	 |--> Number of Output Ports = 1
- 
-###### Example 2: Verbose mode 
-
-	$tavlang -v ../../../helloworld.wfbundle
-	>>> Statistics of the workflow bundle: helloworld.wfbundle <<<
-	Name of the workflow = Hello_World
-	 |--> Number of Processors = 1
-	 | |--> Processors: 
-	 |      |--> hello
-	 |
-	 |--> Number of Data Links = 1
-	 | |--> Data Links
-	 |      |--> DataLink value=>greeting
-	 |
-	 |--> Number of Control Links = 0
-	 |--> Number of Input ports = 0
-	 |--> Number of Output Ports = 1
-	 | |--> Output Ports
-	 |      |--> OutputWorkflowPort "greeting"
-	 
-###### Example 3: Saving results in a file 
-
-	$tavlang -l ../../results.txt ../../../helloworld.wfbundle
-	>>> Statistics of the workflow bundle: helloworld.wfbundle <<<
-	Name of the workflow = Hello_World
-	 |--> Number of Processors = 1
-	 |--> Number of Data Links = 1
-	 |--> Number of Control Links = 0
-	 |--> Number of Input ports = 0
-	 |--> Number of Output Ports = 1
-
-	Results were saved into ../../results.txt
-	
------------------------------------------------------------------------------------------------------------------------------------------
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/pom.xml
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/pom.xml b/taverna-language-commandline/pom.xml
deleted file mode 100644
index 2da63ff..0000000
--- a/taverna-language-commandline/pom.xml
+++ /dev/null
@@ -1,213 +0,0 @@
-<?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
-
-       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>taverna-language</artifactId>
-      	<version>0.15.1-incubating-SNAPSHOT</version>
-    </parent>
-    <artifactId>taverna-language-commandline</artifactId>
-    <name>Apache Taverna Language Commandline</name>
-    <description>Command line for Taverna Language (experimental)</description>
-
-	
-    <dependencies>
-    
-    	<dependency>
-			<groupId>commons-io</groupId>
-			<artifactId>commons-io</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>${project.parent.groupId}</groupId>
-			<artifactId>taverna-scufl2-api</artifactId>
-			<version>${project.parent.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>${project.groupId}</groupId>
-			<artifactId>taverna-scufl2-wfbundle</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>${project.groupId}</groupId>
-			<artifactId>taverna-scufl2-t2flow</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-
-<!-- 		<dependency> -->
-<!-- 			<groupId>org.shiwa.iwir</groupId> -->
-<!-- 			<artifactId>iwir</artifactId> -->
-<!-- 			<version>1.1.4</version> -->
-<!-- 			<scope>optional</scope> -->
-<!-- 			<systemPath>${project.build.directory}/taverna-language-commandline/lib/</systemPath> -->
-<!-- 		</dependency> -->
-		
-   	 <dependency>
-		<groupId>no.s11.scufl2</groupId>
-		<artifactId>scufl2-iwir</artifactId>
-		<version>0.2-SNAPSHOT</version>
-        <optional>true</optional>
-    </dependency>
-
- 
-		
-		<dependency>
-			<groupId>com.thoughtworks.xstream</groupId>
-			<artifactId>xstream</artifactId>
-			<version>1.4.8</version>
-		</dependency>
-
-
-		<!-- <dependency> <groupId>${project.groupId}</groupId> <artifactId>taverna-scufl2-wfdesc</artifactId> 
-			<version>${project.version}</version> <optional>true</optional> </dependency> -->
-		<!-- <dependency> <groupId>org.purl.wf4ever</groupId> <artifactId>scufl2-wfdesc</artifactId> 
-			<version>0.3.7</version> </dependency> -->
-		<dependency>
-			<groupId>com.fasterxml.jackson.core</groupId>
-			<artifactId>jackson-core</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>com.fasterxml.jackson.core</groupId>
-			<artifactId>jackson-databind</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>${project.groupId}</groupId>
-			<artifactId>taverna-scufl2-ucfpackage</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>${project.groupId}</groupId>
-			<artifactId>taverna-robundle</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<scope>test</scope>
-		</dependency>
-
-		<dependency>
-			<groupId>io.airlift</groupId>
-			<artifactId>airline</artifactId>
-			<!-- <version>${io.airlift.airline.version}</version> -->
-			<version>0.7</version>
-		</dependency>
-
-
-	</dependencies>
-
-	<build>
-		<!-- TODO: plugins for launchers and executable jar files? -->
-		<plugins>
-
-			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>appassembler-maven-plugin</artifactId>
-				<version>1.1.1</version>
-				<executions>
-					<execution>
-						<id>assemble</id>
-						<phase>package</phase>
-						<goals>
-							<goal>assemble</goal>
-						</goals>
-					</execution>
-				</executions>
-				<configuration>
-					<repositoryLayout>flat</repositoryLayout>
-					<repositoryName>lib</repositoryName>
-					<assembleDirectory>${project.build.directory}/${project.artifactId}</assembleDirectory>
-					<programs>
-						<program>
-							<mainClass>org.apache.taverna.tavlang.TavernaCommandline</mainClass>
-							<name>tavlang</name>
-						</program>
-					</programs>
-				</configuration>
-			</plugin>
-
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-shade-plugin</artifactId>
-				<version>2.3</version>
-				<executions>
-					<execution>
-						<phase>package</phase>
-						<goals>
-							<goal>shade</goal>
-						</goals>
-						<configuration>
-							<transformers>
-								<transformer
-									implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
-								<transformer
-									implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
-									<mainClass>org.apache.taverna.tavlang.TavernaCommandline</mainClass>
-								</transformer>
-								<transformer implementation="org.apache.maven.plugins.shade.resource.ApacheNoticeResourceTransformer">
-                    			<addHeader>false</addHeader>
-                    			</transformer>
-							</transformers>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-
-
-		</plugins>
-	</build>
-
-	<repositories>
-		<repository>
-			<releases>
-				<enabled>false</enabled>
-			</releases>
-			<snapshots />
-			<id>mygrid-repository</id>
-			<name>myGrid Repository</name>
-			<url>http://www.mygrid.org.uk/maven/repository</url>
-		</repository>
-		
-		<repository>
-			<id>mygrid-snapshot-repository</id>
-			<name>myGrid Snapshot Repository</name>
-			<url>http://www.mygrid.org.uk/maven/snapshot-repository</url>
-			<releases>
-				<enabled>false</enabled>
-			</releases>
-			<snapshots />
-		</repository>
-
-		<repository>
-			<id>apache.snapshots</id>
-			<name>Apache Snapshot Repository</name>
-			<url>http://repository.apache.org/snapshots</url>
-			<releases>
-				<enabled>false</enabled>
-			</releases>
-		</repository>
-	</repositories>
-
-</project>

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/src/main/java/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/main/java/.gitignore b/taverna-language-commandline/src/main/java/.gitignore
deleted file mode 100644
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java
deleted file mode 100644
index 068c933..0000000
--- a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java
+++ /dev/null
@@ -1,350 +0,0 @@
-package org.apache.taverna.tavlang;
-
-/*
- * 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.
- */
-
-import io.airlift.airline.Arguments;
-import io.airlift.airline.Cli;
-import io.airlift.airline.Cli.CliBuilder;
-import io.airlift.airline.Command;
-import io.airlift.airline.Help;
-import io.airlift.airline.Option;
-
-import java.io.IOException;
-import java.util.List;
-
-import javax.inject.Inject;
-import javax.xml.bind.JAXBException;
-
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.tavlang.tools.convert.Scufl2Convert;
-import org.apache.taverna.tavlang.tools.convert.ToRobundle;
-import org.apache.taverna.tavlang.tools.inspect.ProcessorNames;
-import org.apache.taverna.tavlang.tools.inspect.ServiceTypes;
-import org.apache.taverna.tavlang.tools.stats.GetWfStat;
-import org.apache.taverna.tavlang.tools.validate.Validate;
-
-import com.google.common.collect.Lists;
-
-/*
- * The command line options for convert, validate and inspect workflows.
- * Use the airlift/airline library
- * */
-
-public class CommandLineTool {
-
-	private static Cli<TvnLangTool> parser() {
-		CliBuilder<TvnLangTool> build = Cli.<TvnLangTool> builder("tavlang")
-				.withDescription("Convert, manage workflows")
-				.withDefaultCommand(HelpCommand.class)
-				.withCommand(CommandConvert.class) // Conversion
-				.withCommand(HelpCommand.class) // Help
-				.withCommand(CommandInspect.class) // Inspect
-				.withCommand(CommandValidate.class) // Validate
-				.withCommand(CommandVersion.class) // Version
-				.withCommand(CommandStat.class); // Statistics
-
-		return build.build();
-	}
-
-	public CommandLineTool() {
-	};
-
-	public void parse(String... args) {
-		TvnLangTool command = parser().parse(args);
-		command.execute();
-		System.out.println();
-	}
-
-	public static abstract class TvnLangTool {
-
-		public abstract void execute();
-	}
-
-	// placeholder for output file types
-	public static class Filetypes {
-		@Option(name = "--wfdesc", description = "Convert the workflow file to wfdesc-turtle")
-		public static boolean isWfdesc = false;
-
-		@Option(name = "--wfbundle", description = "Convert the workflow file to wfbundle")
-		public static boolean isWfbundle = false;
-
-		@Option(name = "--robundle", description = "Convert given bundle in to Research Object bundle")
-		public static boolean isRo = false;
-
-		@Option(name = "--structure", description = "Convert the workflow into *.structure")
-		public static boolean isStructure = false;
-
-		@Option(name = "--json", description = "Convert the workflow into json")
-		public static boolean isJson = false;
-
-		
-		@Option(name = "--iwir", description = "Convert scufl2 workflows into IWIR 1.1 specification")
-		public static boolean isIwir = false;
-		
-		
-		// The tool can only handle one output format at a time.
-		// Return the file type which is selected
-		public static String isTrue() {
-			if (isWfdesc)
-				return "wfdesc";
-			else if (isWfbundle)
-				return "wfbundle";
-			else if (isRo)
-				return "robundle";
-			else if (isStructure)
-				return "structure";
-			else if (isJson)
-				return "json";
-			
-			else if (isIwir)
-				return "iwir";
-				
-			
-			else{
-				System.out.println("Invalid argument....");
-				TvnLangTool command = parser().parse("help", "convert");
-				command.execute();
-				return null;
-			}
-				
-		}
-
-	}
-
-	public static class Inspect {
-		@Option(name = "--servicetypes", description = "List the service types used in workflow")
-		public static boolean servicetypes = false;
-
-		@Option(name = "--processornames", description = "List a tree of processor names used in workflow")
-		public static boolean processor = false;
-
-		public String getWay() {
-			if (servicetypes)
-				return "servicetypes";
-			else if (processor)
-				return "processornames";
-			else{
-				System.out.println("Invalid argument....");
-				TvnLangTool command = parser().parse("help", "inspect");
-				command.execute();
-				return null;
-				
-			}
-				
-		}
-
-	}
-
-	// Placeholder for optional parameters: Ex: -i, -o
-	public static class Optional {
-
-		// The input file or directory
-		@Option(name = { "-i", "--input" }, description = "Input file/ file dir for conversion")
-		public static String in_file_dir;
-
-		// The out put file or directory. When this is set, all the converted
-		// files will be saved into the directory that specified.
-		@Option(name = { "-o", "--output" }, description = "Output file/ directory")
-		public static String out_file_dir;
-
-		public static String getInFile() {
-			return in_file_dir;
-		}
-
-		public static String getOutFile() {
-			return out_file_dir;
-		}
-
-	}
-
-	@Command(name = "help", description = "Display help information about Tvarna")
-	public static class HelpCommand extends TvnLangTool {
-		@Inject
-		public Help help;
-
-		@Override
-		public void execute() {
-			help.call();
-		}
-	}
-
-	// Command for convert workflows
-	@Command(name = "convert", description = "Convert the given workflow")
-	public static class CommandConvert extends TvnLangTool {
-		@Inject
-		Optional optional = new Optional();
-
-		@Inject
-		Filetypes filetypes = new Filetypes();
-
-		@Arguments(usage = "<output format> <input files> ", description = "List of files to be converted.\n "
-				+ "Give the list of files to be converted without -i/-o and the converted files will be saved in to /converted folder in the same dir")
-		public final List<String> files = Lists.newArrayList();
-
-		// When this is true, the command will run recursively in a directory.
-		@Option(name = { "-r", "--recursive" }, description = "Execute the command recursively")
-		public boolean recurse = false;
-
-		// Option for validate the given workflow when converting
-		@Option(name = { "-V", "--validate" }, description = "Validate the workflow before convert")
-		public boolean validate = false;
-
-		@Override
-		public void execute() {
-			
-			//Validate before convert
-			if(validate){
-				Validate validate = new Validate(files, null, false);
-				if(validate.getCheck()){
-					System.out.println("Conversion failed...! Workflow bundle has errors");
-					return;
-				}else{
-					runcommand();
-				}
-			}
-		}
-			
-		public void runcommand(){
-			if (Filetypes.isRo) {
-				try {
-					new ToRobundle(files, Optional.getOutFile());
-				} catch (Exception e) {
-					e.printStackTrace();
-				}
-//				else if(Filetypes.isIwir || Filetypes.isJson || Filetypes.isStructure || Filetypes.isWfbundle || Filetypes.isWfdesc)
-			} else if(Filetypes.isIwir || Filetypes.isJson || Filetypes.isStructure || Filetypes.isWfbundle || Filetypes.isWfdesc){
-				if (recurse) {
-					new Scufl2Convert(Filetypes.isTrue(),
-							Optional.getInFile(), Optional.getOutFile());
-				} else {
-					new Scufl2Convert(Filetypes.isTrue(), files,
-							Optional.getOutFile());
-				}
-			}else{
-				System.out.println("Invalid argument....");
-				TvnLangTool command = parser().parse("help", "convert");
-				command.execute();
-			}
-
-		}
-		
-		
-		
-	}
-
-	// Version command
-	@Command(name = "version", description = "Show version informantion")
-	public static class CommandVersion extends TvnLangTool {
-
-		@Override
-		public void execute() {
-			System.out.print(getClass().getPackage().getImplementationTitle());
-            System.out.println(" " + getClass().getPackage().getImplementationVersion());
-		}
-
-	}
-
-	// Command for inspection of workflows....!!
-	@Command(name = "inspect", description = "Inspect the given workflow and show the results on the terminal")
-	public static class CommandInspect extends TvnLangTool {
-
-		@Inject
-		Inspect inspect = new Inspect();
-
-		@Option(name = { "-l", "--log" }, description = "Specify the file name where results should be stored ([some dir]/log.txt)")
-		public String file;
-
-		@Arguments(usage = "<option> <input files>", description = "Inspect the given workflow")
-		public List<String> toInspect = Lists.newArrayList();
-
-		@Override
-		public void execute() {
-			if (Inspect.processor) {
-				try {
-					new ProcessorNames(toInspect, file);
-
-				} catch (ReaderException | IOException | JAXBException e) {
-					e.printStackTrace();
-				}
-			} else if (Inspect.servicetypes) {
-				try {
-					new ServiceTypes(toInspect, file);
-				} catch (IOException | ReaderException e) {
-					e.printStackTrace();
-				}
-
-			}else{
-				System.out.println("Invalid argument....");
-				TvnLangTool command = parser().parse("help", "inspect");
-				command.execute();
-			}
-
-		}
-
-	}
-
-	// Command for validation
-	@Command(name = "validate", description = "validate the given workflow")
-	public static class CommandValidate extends TvnLangTool{
-	
-		@Option(name = { "-l", "--log" }, description = "Specify the file name where results should be stored ([some dir]/log.txt)")
-		public String file;
-		
-		@Option(name = {"-v", "--verbose"}, description = "Verbose mode")
-		public boolean verbose;
-
-//		@Arguments(usage = "<option> <input files> <output dir>", description = "Validate the given workflow file/s")
-		@Arguments(usage = "input files", description = "Validate the given workflow file/s")
-		public List<String> toValidate = Lists.newArrayList();
-
-		@Override
-		public void execute() {
-		
-			Validate validate = new Validate(toValidate, file, verbose);
-			
-
-		}
-
-	}
-	
-	//Command for getting workflow stats
-	@Command (name = "stats", description = "Shows the workflow statistics")
-	public static class CommandStat extends TvnLangTool{
-
-		
-		@Option(name = {"-l", "--log"}, description ="Save the workflow statictics in a file")
-		public String file;
-		
-		@Option(name = {"-v", "--verbose"}, description = "Verbose mode")
-		public boolean verbose;
-		
-		@Arguments(usage="input files", description = "Enter the workflow bundle files")
-		public List<String> files;
-		
-		@Override
-		public void execute() {
-			
-			GetWfStat stat = new GetWfStat(files, file, verbose);
-			
-		}
-		
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java
deleted file mode 100644
index 016488c..0000000
--- a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.apache.taverna.tavlang;
-
-/*
- * 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.
- */
-
-public class TavernaCommandline {
-
-	public static void main(String args[]){
-		CommandLineTool tool = new CommandLineTool();
-		tool.parse(args);
-		
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/Tools.java
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/Tools.java b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/Tools.java
deleted file mode 100644
index c78c7a2..0000000
--- a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/Tools.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.apache.taverna.tavlang.tools;
-
-/*
- * 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.
- */
-
-
-
-public class Tools {
-	
-	public static enum ConvertionTools {
-		wfbundle{
-			public String mediaType = "application/vnd.taverna.scufl2.workflow-bundle";
-			
-
-			@Override
-			public String getMediaType(ConvertionTools t) {
-				return this.mediaType;
-			}
-		},
-		json{
-			public String mediaType = "application/ld+json";
-
-
-			@Override
-			public String getMediaType(ConvertionTools t) {
-				return mediaType;
-			}
-		},
-		wfdesc{
-			public String mediaType = "text/vnd.wf4ever.wfdesc+turtle";
-
-
-			@Override
-			public String getMediaType(ConvertionTools t) {
-				// TODO Auto-generated method stub
-//				System.out.println(mediaType);
-				return mediaType;
-			}
-		},
-		robundle{
-
-			@Override
-			public String getMediaType(ConvertionTools t) {
-				return null;
-			}
-		
-		},
-		structure{
-			public String mediaType = "text/vnd.taverna.scufl2.structure";
-			
-			@Override
-			public String getMediaType(ConvertionTools t) {
-				return mediaType;
-			}
-		},
-		
-		iwir{
-				public String mediaType = "application/vnd.shiwa.iwir+xml";
-				
-				@Override
-				public String getMediaType(ConvertionTools t) {
-					return mediaType;
-				}
-		};
-		
-		ConvertionTools(){}
-		
-		public abstract String getMediaType(ConvertionTools t);
-		
-	}
-	
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java
deleted file mode 100644
index da4dff0..0000000
--- a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java
+++ /dev/null
@@ -1,206 +0,0 @@
-package org.apache.taverna.tavlang.tools.convert;
-
-/*
- * 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.
- */
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.FilenameUtils;
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
-import org.apache.taverna.scufl2.api.io.WriterException;
-import org.apache.taverna.tavlang.tools.Tools.ConvertionTools;
-
-
-/*
- * Converts 
- * 	.t2flow --> .wfbundle
- * 	.t2flow --> .structure
- * 	.wfbundle --> .structure
- *  .wfbundle/ .t2flow -> .iwir
- * two constructors.
- * Scufl2Convert(List<String> list, String out) --> will save the converted files in 'out folder or a directory named /converted in the same folder.
- * Scufl2Convert(String in, String out) --> Will convert all the files in the 'in' folder and save them in 'out' folder --> -r must be true.
- * 
- * */
-public class Scufl2Convert{
-	
-	private ConvertionTools t;
-	private String MEDIA_TYPE;
-	private String input;
-	private String output;
-	private String type;
-	private List<String> filesList;
-	
-	public Scufl2Convert(String type, List<String> files, String out){
-		this.filesList = files;
-		this.output = out;
-		this.type = type.equals("wfdesc")?".wfdesc.ttl":"."+type;
-		this.MEDIA_TYPE = ConvertionTools.valueOf(type).getMediaType(t);
-		this.convert();
-	}
-	
-	//When recursive case is on....
-	public Scufl2Convert(String type, String in, String out){
-		this.input = in;
-		this.output = out;
-		this.type = type.equals("wfdesc")?".wfdesc.ttl":"."+type;
-		this.MEDIA_TYPE = ConvertionTools.valueOf(type).getMediaType(t);	//Determine the writer media type
-		
-		this.createdir();
-	}
-	
-	//Create the dir if not exists
-	public void createdir(){
-		if(output == null){
-			File outFile = new File(this.input, "converted");
-			try {
-				FileUtils.forceMkdir(outFile);
-				this.output = outFile.getAbsolutePath();
-			} catch (IOException e1) {
-				System.err.println("Error: The directory cannot be created...!!!!");
-				e1.printStackTrace();
-			}
-		}else{
-			File outFile = new File(this.output);
-			try {
-				FileUtils.forceMkdir(outFile);
-				
-			} catch (IOException e1) {
-				System.err.println("Error: The directory cannot be created...!!!!");
-				e1.printStackTrace();
-			}
-		}
-		this.rec_convert(this.input);
-	}
-	
-	//Convert the given file. Return in case of an exception.
-	public boolean convert(){
-		
-		boolean check = false;
-		// If the output folder is given, save the converted files in to that folder.
-		 
-		if(this.filesList.size()>0 && this.output != null){
-			File outFile = new File(this.output);
-			try {
-				FileUtils.forceMkdir(outFile);
-			} catch (IOException e1) {
-				System.err.println("Error: The directory cannot be created...!!!");
-			}
-			for(String file : this.filesList){
-				File t2File = new File(file);
-				
-				convertFile(t2File, outFile);
-				
-			}
-			
-		}
-		
-		 /* If the output file is not given, save the converted files in 
-		  *  '/converted' folder.
-		  */
-		 
-		else if(this.filesList.size()>0 && this.output == null){
-			for(String file : this.filesList){
-				File t2File = new File(file);
-				
-				File outFile = new File(t2File.getParentFile(), "converted");
-				try {
-					FileUtils.forceMkdir(outFile);
-				} catch (IOException e1) {
-					System.err.println("Error: The directory cannot be created...!!!");
-				}
-				
-				convertFile(t2File, outFile);
-				
-			}
-		}else{
-			System.err.println("Error: Argument mismatch");
-			check = false;
-		}
-		
-		return check;
-	}
-	
-	//Convert the files in a given directory and save the converted files in to specified dir or /converted folder.
-	//Recursive conversion
-	public void rec_convert(String dir){
-			
-			File parent = new File(this.input);
-			if(!parent.exists()){
-				System.err.println("Error: Input directory not found");
-			}else{
-				for(File file : parent.listFiles()){
-					if(!file.isDirectory())
-					{
-						File outFile = new File(this.output);
-						convertFile(file, outFile);
-					}
-				}
-			}
-	}
-	
-	//Convert the file
-	public void convertFile(File t2File, File outFile){
-		
-		//Check weather the input files are in valid format...!!!
-		String ext = FilenameUtils.getExtension(t2File.getName());
-		if(!ext.equalsIgnoreCase("t2flow")&&!ext.equalsIgnoreCase("wfbundle")){
-			System.err.println("Error: Invalid input file format...!!!");
-			return;
-		}
-		
-		WorkflowBundleIO wfbio = new WorkflowBundleIO();
-		String filename = t2File.getName();
-		filename = filename.replaceFirst("\\..*", this.type);
-		File scufl2File = new File(outFile.getAbsolutePath(), filename);
-		
-		WorkflowBundle wfBundle;
-		try {
-			wfBundle = wfbio.readBundle(t2File, null);// null --> will guess the media type for reading.
-			
-//			if(this.type.equals(".iwir")){
-//				IwirWriter iww = new IwirWriter();
-//				iww.writeBundle(wfBundle, scufl2File, this.MEDIA_TYPE);
-//			}else
-			
-			if(this.type.equals(".json")){
-				ToJson toJ = new ToJson();
-				toJ.convert(t2File, outFile);
-			}
-			else{
-				wfbio.writeBundle(wfBundle, scufl2File, this.MEDIA_TYPE);
-			}
-			System.out.println(scufl2File.getPath() + " is created.");
-		}catch (ReaderException e){
-			System.err.println("Error: Connot read the file");
-		}catch(IOException e){
-			System.err.println("Error: File not found");
-		}catch(WriterException e) {
-			System.err.println("Error: Cannot write to the file");
-//			e.printStackTrace();
-		}
-	}
-
-	
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java
deleted file mode 100644
index f11424c..0000000
--- a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java
+++ /dev/null
@@ -1,298 +0,0 @@
-package org.apache.taverna.tavlang.tools.convert;
-
-/*
- * 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.
- */
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.net.URI;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.taverna.scufl2.api.annotation.Annotation;
-import org.apache.taverna.scufl2.api.annotation.Revision;
-import org.apache.taverna.scufl2.api.common.Child;
-import org.apache.taverna.scufl2.api.common.Ported;
-import org.apache.taverna.scufl2.api.common.Scufl2Tools;
-import org.apache.taverna.scufl2.api.common.URITools;
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.core.BlockingControlLink;
-import org.apache.taverna.scufl2.api.core.ControlLink;
-import org.apache.taverna.scufl2.api.core.DataLink;
-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.WorkflowBundleWriter;
-import org.apache.taverna.scufl2.api.io.WriterException;
-import org.apache.taverna.scufl2.api.port.DepthPort;
-import org.apache.taverna.scufl2.api.port.GranularDepthPort;
-import org.apache.taverna.scufl2.api.port.Port;
-import org.apache.taverna.scufl2.api.profiles.Profile;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.fasterxml.jackson.databind.util.ISO8601DateFormat;
-
-public class ToJson {
-	public class JsonWriter implements WorkflowBundleWriter {
-
-		@Override
-		public Set<String> getMediaTypes() {
-			return new HashSet<String>(Arrays.asList("application/ld+json",
-					"application/json"));
-		}
-
-		@Override
-		public void writeBundle(WorkflowBundle wfBundle, File destination,
-				String mediaType) throws WriterException, IOException {
-			ObjectNode json = toJson(wfBundle);
-			mapper.writeValue(destination, json);
-		}
-
-		@Override
-		public void writeBundle(WorkflowBundle wfBundle, OutputStream output,
-				String mediaType) throws WriterException, IOException {
-			ObjectNode json = toJson(wfBundle);
-			mapper.writeValue(output, json);
-		}
-
-	}
-
-	
-	private WorkflowBundleIO io = new WorkflowBundleIO();;
-
-	private WorkflowBundleWriter jsonWriter = new JsonWriter();
-
-	private ObjectMapper mapper = new ObjectMapper();
-
-	private Scufl2Tools scufl2Tools = new Scufl2Tools();
-
-	private URITools uriTools = new URITools();
-
-	public ToJson() {
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
-		mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
-
-		mapper.setDateFormat(new ISO8601DateFormat());
-
-		// Adding custom writer dynamically
-		List<WorkflowBundleWriter> writers = io.getWriters();
-		writers.add(jsonWriter);
-		io.setWriters(writers);
-	}
-
-	protected void addPorts(Ported ported, ObjectNode p) {
-		ArrayNode inputs = mapper.createArrayNode();
-		for (Port port : ported.getInputPorts()) {
-			inputs.add(toJson(port));
-		}
-		p.put("inputs", inputs);
-
-		ArrayNode outputs = mapper.createArrayNode();
-		for (Port port : ported.getOutputPorts()) {
-			outputs.add(toJson(port));
-			// FIXME: Do we need the id for ports? Needed if we add datalinks
-		}
-		p.put("outputs", outputs);
-	}
-
-	protected ObjectNode annotations(Child<?> bean) {
-		ObjectNode node = mapper.createObjectNode();
-		for (Annotation ann : scufl2Tools.annotationsFor(bean)) {
-			URI annUri = uriTools.uriForBean(ann);
-
-			// TODO: include annotation body?
-		}
-		return node;
-	}
-
-	public void convert(File in, File out) throws ReaderException, IOException,
-			WriterException {
-		String filename = in.getName();
-		filename = filename.replaceFirst("\\..*", ".json");
-		File workflowFile = new File(out.getAbsolutePath(), filename);
-
-		WorkflowBundle wfBundle = io.readBundle(in, null);
-		io.writeBundle(wfBundle, workflowFile, "application/ld+json");
-//		System.out.println(workflowFile);
-
-	}
-
-	protected ObjectNode toJson(Port port) {
-		ObjectNode p = mapper.createObjectNode();
-		p.put("name", port.getName());
-		p.putPOJO("id",
-				uriTools.relativeUriForBean(port, scufl2Tools.findParent(
-						WorkflowBundle.class, ((Child<?>) port))));
-
-		if (port instanceof DepthPort) {
-			DepthPort depthPort = (DepthPort) port;
-			if (depthPort.getDepth() != null) {
-				p.put("depth", depthPort.getDepth());
-			}
-		}
-		if (port instanceof GranularDepthPort) {
-			GranularDepthPort granularDepthPort = (GranularDepthPort) port;
-			if (granularDepthPort.getGranularDepth() != null
-					&& !granularDepthPort.getGranularDepth().equals(
-							granularDepthPort.getDepth())) {
-				p.put("granularDepth", granularDepthPort.getGranularDepth());
-			}
-		}
-		p.putAll(annotations((Child<?>) port));
-		return p;
-	}
-
-	protected JsonNode toJson(Processor proc) {
-		ObjectNode p = mapper.createObjectNode();
-		p.putPOJO("id",
-				uriTools.relativeUriForBean(proc, proc.getParent().getParent()));
-		p.put("name", proc.getName());
-		addPorts(proc, p);
-		p.putAll(annotations(proc));
-
-		List<Workflow> nested = scufl2Tools.nestedWorkflowsForProcessor(proc,
-				proc.getParent().getParent().getMainProfile());
-		if (!nested.isEmpty()) {
-			if (nested.size() == 1) {
-				p.put("nestedWorkflow", toJson(nested.iterator().next()));
-			} else {
-				ArrayNode list = mapper.createArrayNode();
-				for (Workflow w : nested) {
-					list.add(toJson(w));
-				}
-				p.put("nestedWorkflow", list);
-			}
-		}
-		return p;
-	}
-
-	protected JsonNode toJson(Revision currentRevision) {
-		ArrayNode revisions = mapper.createArrayNode();
-		while (currentRevision != null) {
-			ObjectNode rev = mapper.createObjectNode();
-			rev.putPOJO("id", currentRevision.getIdentifier());
-			if (currentRevision.getGeneratedAtTime() != null) {
-				rev.putPOJO("generatedAtTime",
-						currentRevision.getGeneratedAtTime());
-			}
-			currentRevision = currentRevision.getPreviousRevision();
-			if (currentRevision != null) {
-				rev.putPOJO("wasRevisionOf", currentRevision.getIdentifier());
-			}
-			revisions.add(rev);
-		}
-		return revisions;
-	}
-
-	protected ObjectNode toJson(Workflow workflow) {
-		ObjectNode wf = mapper.createObjectNode();
-
-		wf.putPOJO("id",
-				uriTools.relativeUriForBean(workflow, workflow.getParent()));
-
-		wf.put("name", workflow.getName());
-		wf.put("revisions", toJson(workflow.getCurrentRevision()));
-
-		ArrayNode processors = mapper.createArrayNode();
-		for (Processor p : workflow.getProcessors()) {
-			processors.add(toJson(p));
-		}
-		addPorts(workflow, wf);
-		wf.put("processors", processors);
-
-		ArrayNode datalinks = mapper.createArrayNode();
-		for (DataLink link : workflow.getDataLinks()) {
-			datalinks.add(toJson(link));
-		}
-		wf.put("datalinks", datalinks);
-
-		ArrayNode controlLinks = mapper.createArrayNode();
-		for (ControlLink link : workflow.getControlLinks()) {
-			controlLinks.add(toJson(link));
-		}
-		wf.put("controllinks", controlLinks);
-
-		wf.putAll(annotations(workflow));
-
-		return wf;
-	}
-
-	protected JsonNode toJson(ControlLink link) {
-		ObjectNode l = mapper.createObjectNode();
-		if (link instanceof BlockingControlLink) {
-			BlockingControlLink controlLink = (BlockingControlLink) link;
-			l.putPOJO("block", uriTools.relativeUriForBean(
-					controlLink.getBlock(), link.getParent().getParent()));
-			l.putPOJO("untilFinished", uriTools.relativeUriForBean(controlLink
-					.getUntilFinished(), link.getParent().getParent()));
-		}
-		return l;
-	}
-
-	protected JsonNode toJson(DataLink link) {
-		ObjectNode l = mapper.createObjectNode();
-		l.putPOJO("receivesFrom", uriTools.relativeUriForBean(
-				link.getReceivesFrom(), link.getParent().getParent()));
-		l.putPOJO("sendsTo", uriTools.relativeUriForBean(link.getSendsTo(),
-				link.getParent().getParent()));
-		if (link.getMergePosition() != null) {
-			l.put("mergePosition", link.getMergePosition());
-		}
-		return l;
-	}
-
-	public ObjectNode toJson(WorkflowBundle wfBundle) {
-
-		ObjectNode root = mapper.createObjectNode();
-		ArrayNode contextList = root.arrayNode();
-		root.put("@context", contextList);
-		ObjectNode context = root.objectNode();
-		contextList.add("https://w3id.org/scufl2/context");
-		contextList.add(context);
-		URI base = wfBundle.getGlobalBaseURI();
-		context.put("@base", base.toASCIIString());
-		root.put("id", base.toASCIIString());
-
-		// root.put("name", wfBundle.getName());
-		// root.put("revisions", toJson(wfBundle.getCurrentRevision()));
-
-		root.put("workflow", toJson(wfBundle.getMainWorkflow()));
-		root.put("profile", toJson(wfBundle.getMainProfile()));
-
-		return root;
-	}
-
-	private JsonNode toJson(Profile profile) {
-		ObjectNode pf = mapper.createObjectNode();
-
-		pf.putPOJO("id",
-				uriTools.relativeUriForBean(profile, profile.getParent()));
-		// TODO: Activities and configurations
-		return pf;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java
deleted file mode 100644
index 6ab14bc..0000000
--- a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.apache.taverna.tavlang.tools.convert;
-
-/*
- * 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.
- */
-
-
-import java.io.IOException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.List;
-import java.util.logging.ConsoleHandler;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.apache.taverna.robundle.Bundle;
-import org.apache.taverna.robundle.Bundles;
-
-public class ToRobundle{
-
-	public ToRobundle(List<String> files, String out) throws Exception{
-		
-		Logger logger = Logger.getLogger("");
-		//logger.setLevel(Level.FINER);
-		ConsoleHandler console = new ConsoleHandler();
-		console.setLevel(Level.FINEST);
-		logger.addHandler(console);
-		Logger.getLogger("org.researchobject").setLevel(Level.FINEST);
-		
-		for(String f : files){
-			Path file = Paths.get(f);
-			convert(file);
-		}
-	}
-	
-	//Recursive conversion
-	public ToRobundle(String type, String in, String out) {
-		
-	}
-	
-	public void convert(Path file) throws IOException{
-		try (Bundle bundle = Bundles.openBundle(file)) {
-			
-//			System.out.println(bundle.getManifest().toString());
-			bundle.getManifest().writeAsJsonLD();
-			bundle.getManifest().writeAsCombineManifest();
-		}
-	}
-	
-	
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java
deleted file mode 100644
index f93aadc..0000000
--- a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package org.apache.taverna.tavlang.tools.inspect;
-
-/*
- * 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.
- */
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.TreeModel;
-import javax.xml.bind.JAXBException;
-
-import org.apache.taverna.scufl2.api.common.Scufl2Tools;
-import org.apache.taverna.scufl2.api.common.URITools;
-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.profiles.Profile;
-
-/*
- * list the processor names used in the workflow.
- * Supported formats: .t2flow, .wfbundle
- * */
-
-public class ProcessorNames {
-	
-	private List<String> fileList;
-	
-	private String file2;
-	
-	private Scufl2Tools scufl2Tools = new Scufl2Tools();
-
-	private URITools uriTools = new URITools();
-
-	public ProcessorNames(List<String> fileList, String file) throws ReaderException, IOException, JAXBException{
-		this.fileList = fileList;
-		this.file2 = file;
-		this.show();
-	}
-	
-	public void show() throws ReaderException, IOException, JAXBException{
-		WorkflowBundleIO io = new WorkflowBundleIO();
-		StringBuilder sb = new StringBuilder();
-		
-		for(String file : this.fileList){
-			File file2 = new File(file);
-			if(file2.isDirectory()){
-				for(File f : file2.listFiles()){
-					WorkflowBundle wfb = io.readBundle(f, null);
-					System.out.println("Processor tree of "+ f.getName() +" \n" +this.showProcessorTree(wfb));
-					sb.append("Processor tree of "+ f.getName() +" \n" +this.showProcessorTree(wfb) + "\n");
-				}
-			}else{
-				WorkflowBundle wfb = io.readBundle(new File(file), null);
-				System.out.println("Processor tree of "+ file +" \n" +this.showProcessorTree(wfb));
-				sb.append("Processor tree of "+ file +" \n" +this.showProcessorTree(wfb) + "\n");
-			}
-			
-			
-		}
-		
-		if(this.file2!=null){
-			File log = new File(file2);
-			FileWriter fw = new FileWriter(log);
-			BufferedWriter bw = new BufferedWriter(fw);
-			bw.write(sb.toString());
-			bw.close();
-			fw.close();
-			System.out.println("Results were saved into " + file2);
-		}
-	}
-	
-	private Workflow findNestedWorkflow(Processor processor) {
-		Profile profile = processor.getParent().getParent().getMainProfile();
-		return scufl2Tools.nestedWorkflowForProcessor(processor, profile);
-	}
-
-	private void findProcessors(WorkflowBundle ro, Workflow workflow,
-			DefaultMutableTreeNode parent) {
-		for (Processor processor : workflow.getProcessors()) {
-			DefaultMutableTreeNode processorNode = new DefaultMutableTreeNode(
-					processor.getName());
-			parent.add(processorNode);
-			Workflow wf = findNestedWorkflow(processor);
-			if (wf != null) {
-				findProcessors(ro, wf, processorNode);
-			}
-		}
-
-	}
-
-	public TreeModel makeProcessorTree(WorkflowBundle workflowBundle)
-			throws JAXBException, IOException {
-		Workflow workflow = workflowBundle.getMainWorkflow();
-		TreeModel treeModel = new DefaultTreeModel(new DefaultMutableTreeNode(
-				workflow.getName()));
-		DefaultMutableTreeNode parent = (DefaultMutableTreeNode) treeModel
-				.getRoot();
-
-		findProcessors(workflowBundle, workflow, parent);
-		return treeModel;
-	}
-
-	public List<String> showProcessorNames(WorkflowBundle ro)
-			throws JAXBException, IOException {
-		ArrayList<String> names = new ArrayList<String>();
-		for (Processor processor : ro.getMainWorkflow().getProcessors()) {
-			names.add(processor.getName());
-		}
-		Collections.sort(names);
-		return names;
-	}
-
-	public String showProcessorTree(WorkflowBundle ro) throws JAXBException,
-			IOException {
-		TreeModel treeModel = makeProcessorTree(ro);
-		return treeModelAsString(treeModel);
-	}
-
-	public String treeModelAsString(TreeModel treeModel) {
-		StringBuffer sb = new StringBuffer();
-		Object root = treeModel.getRoot();
-		treeModelAsString(treeModel, root, sb, "");
-		return sb.toString();
-	}
-
-	protected void treeModelAsString(TreeModel treeModel, Object parent,
-			StringBuffer sb, String indentation) {
-		sb.append(indentation);
-		int childCount = treeModel.getChildCount(parent);
-		if (childCount == 0) {
-			sb.append("- ");
-		} else {
-			sb.append("+ ");
-			indentation = indentation + "  ";
-		}
-		sb.append(parent);
-		sb.append("\n");
-		for (int i = 0; i < childCount; i++) {
-			Object child = treeModel.getChild(parent, i);
-			treeModelAsString(treeModel, child, sb, indentation);
-		}
-	}
-	
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java
deleted file mode 100644
index ddff2ab..0000000
--- a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package org.apache.taverna.tavlang.tools.inspect;
-
-
-/*
- * 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.
- */
-
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
-import org.apache.taverna.scufl2.api.activity.Activity;
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.api.profiles.Profile;
-
-/*
- * List the service types used in workflow.
- * Supported file formats : .wfbundle, .t2flow
- * */
-
-public class ServiceTypes {
-	
-	private List<String> filesList;
-	private Set<String> types = new LinkedHashSet<String>();
-	private String save;
-	
-	public ServiceTypes(List<String> filesList, String file) throws IOException, ReaderException{
-		this.filesList = filesList;
-		this.save = file;
-		this.service();
-		
-	}
-	
-	public void service() throws ReaderException, IOException{
-		WorkflowBundleIO io = new WorkflowBundleIO();
-		StringBuilder sb = new StringBuilder();
-		
-		for (String filepath : filesList) {
-			File file = new File(filepath);
-			
-			if(file.isDirectory()){
-				for(File f : file.listFiles()){
-				WorkflowBundle wfBundle = io.readBundle(f, null);
-				System.out.println("Service types used in " + f.getCanonicalPath() + " :" +"\n");
-				sb.append("Service types used in " + f.getCanonicalPath() + " :");
-				for (Profile profile : wfBundle.getProfiles()) {
-					for (Activity activity : profile.getActivities()) {
-						this.types.add(activity.getType().toASCIIString());
-					}
-				}
-				for(String t : types){
-					System.out.println(t);
-					sb.append(t + "\n");
-				}
-				System.out.println("\n**************************************************\n");
-				sb.append("\n**************************************************\n");
-				}
-			}else{
-			// mediaType = null  --> guess
-				WorkflowBundle wfBundle = io.readBundle(file, null);
-				System.out.println("Service types used in " + file.getCanonicalPath() + " :" + "\n");
-				sb.append("Service types used in " + file.getCanonicalPath() + " :");
-				for (Profile profile : wfBundle.getProfiles()) {
-					for (Activity activity : profile.getActivities()) {
-						this.types.add(activity.getType().toASCIIString());
-					}
-				}
-				for(String t : types){
-					System.out.println(t);
-					sb.append(t + "\n");
-				}
-				
-				System.out.println("\n**************************************************\n");
-				sb.append("\n**************************************************\n");
-			}
-		}
-		
-		if(save!=null){
-			File log = new File(save);
-			FileWriter fw = new FileWriter(log);
-			BufferedWriter bw = new BufferedWriter(fw);
-			bw.write(sb.toString());
-			bw.close();
-			fw.close();
-			System.out.println("Results were saved into " + save);
-		}
-		
-	}
-	
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/stats/GetWfStat.java
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/stats/GetWfStat.java b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/stats/GetWfStat.java
deleted file mode 100644
index 7daa38e..0000000
--- a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/stats/GetWfStat.java
+++ /dev/null
@@ -1,193 +0,0 @@
-package org.apache.taverna.tavlang.tools.stats;
-
-/*
- * 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.
- */
-
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.List;
-
-import org.apache.taverna.scufl2.api.common.NamedSet;
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.core.ControlLink;
-import org.apache.taverna.scufl2.api.core.DataLink;
-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.port.InputPort;
-import org.apache.taverna.scufl2.api.port.OutputPort;
-
-public class GetWfStat {
-	
-	private NamedSet<Workflow> set;
-	private String logFile;
-	private boolean verbose;
-	private StringBuilder str_verb = new StringBuilder();
-	private StringBuilder str_nverb = new StringBuilder();
-	
-	
-	//If given file is a workflow file
-	public GetWfStat(List<String> wf_files, String log, boolean verbose){
-		this.logFile = log;
-		this.verbose = verbose;
-		
-		for(String files : wf_files){
-			File f = new File(files);
-			if(f.isFile()){
-				this.read(f);
-				
-			}else{
-				System.err.println("Error reading the file " + f.getName());
-			}
-		}
-		
-		this.isVerbose();
-		
-		if(log!=null){
-			this.writefile(this.str_verb.toString(), this.logFile);
-		}
-	}
-	
-	//Read the workflow file and extract the resources.
-	//And append them to a String builder
-	public void read(File file){
-		WorkflowBundleIO io = new WorkflowBundleIO();
-		try {
-			WorkflowBundle wf = io.readBundle(file, null);
-			this.set = wf.getWorkflows();
-
-			//String to be written to a file.
-			this.str_nverb.append(">>> Statistics of the workflow bundle: " + file.getName() + " <<<\n");
-			this.str_verb.append(">>> Statistics of the workflow bundle: " + file.getName() + " <<<\n");
-			
-			for(Workflow wrf : set){
-				//TODO :- Take each type of resource and make a system to view them to the user.
-				String name = "Name of the workflow = " + wrf.getName();
-				this.str_verb.append(name + "\n");
-				this.str_nverb.append(name + "\n");
-
-				
-				String noP = "  |--> Number of Processors = " + wrf.getProcessors().size();
-				this.str_verb.append(noP + "\n");
-				this.str_nverb.append(noP + "\n");
-				
-				if(this.verbose && wrf.getProcessors().size()!=0){
-					this.str_verb.append("  |     |--> Processors: " + "\n");
-					
-					for(Processor p : wrf.getProcessors()){
-						this.str_verb.append("  |          |--> " + p.getName() + "\n");
-					}
-					this.str_verb.append("  |" + "\n");
-				}
-				
-				this.str_verb.append("  |--> Number of Data Links = " + wrf.getDataLinks().size() + "\n");
-				this.str_nverb.append("  |--> Number of Data Links = " + wrf.getDataLinks().size() + "\n");
-				
-				if(this.verbose && wrf.getDataLinks().size()!=0){
-					this.str_verb.append("  |     |--> Data Links" + "\n");
-					
-					for(DataLink link : wrf.getDataLinks()){
-						this.str_verb.append("  |          |--> " + link + "\n");
-					}
-					this.str_verb.append("  |" + "\n");
-				}
-				
-				this.str_nverb.append("  |--> Number of Control Links = " + wrf.getControlLinks().size() + "\n");
-				this.str_verb.append("  |--> Number of Control Links = " + wrf.getControlLinks().size() + "\n");
-				
-				
-				if(this.verbose && wrf.getControlLinks().size()!=0){
-					this.str_verb.append("  |     |--> Control Links\n");
-					for(ControlLink link : wrf.getControlLinks()){
-						this.str_verb.append("  |          |--> " + link + "\n");
-					}
-					this.str_verb.append("  |\n");
-				}
-				
-				this.str_nverb.append("  |--> Number of Input ports = " + wrf.getInputPorts().size()+"\n");
-				this.str_verb.append("  |--> Number of Input ports = " + wrf.getInputPorts().size()+"\n");
-				
-				
-				if(this.verbose && wrf.getInputPorts().size()!=0){
-					this.str_verb.append("  |     |--> Input Ports\n");
-					for(InputPort iport : wrf.getInputPorts()){
-						this.str_verb.append("  |          |--> " + iport.toString()+"\n");
-					}
-					this.str_verb.append("  |\n");
-				}
-			
-				this.str_nverb.append("  |--> Number of Output Ports = " + wrf.getOutputPorts().size()+"\n");
-				this.str_verb.append("  |--> Number of Output Ports = " + wrf.getOutputPorts().size()+"\n");
-				
-				if(this.verbose && wrf.getOutputPorts().size()!=0){
-					this.str_verb.append("  |     |--> Output Ports\n");
-					for(OutputPort o_port : wrf.getOutputPorts()){
-						this.str_verb.append("  |          |--> " + o_port.toString()+"\n");
-					}
-					
-					this.str_verb.append("\n");
-				}
-				
-				this.str_nverb.append("\n");
-				this.str_verb.append("\n");
-			}
-			
-		} catch (ReaderException | IOException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	
-	//Saving the output into a log
-	public void writefile(String report, String url){
-		
-			File file = new File(url);
-			
-			if(!file.isFile()){
-				System.err.println("Error in writing the log file...");
-			}
-			
-			FileWriter writer;
-			BufferedWriter bfw;
-			try {
-				writer = new FileWriter(file);
-				bfw = new BufferedWriter(writer);
-				bfw.write(report);
-				bfw.close();
-				writer.close();
-				System.out.println("Results were saved into " + file.getPath());
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		
-	}
-		
-	public void isVerbose(){
-		if(verbose)
-			System.out.println(this.str_verb.toString());
-		else 
-			System.out.println(this.str_nverb.toString());
-	}
-	
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java b/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java
deleted file mode 100644
index fc05e3b..0000000
--- a/taverna-language-commandline/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package org.apache.taverna.tavlang.tools.validate;
-
-/*
- * 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.
- */
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.List;
-
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
-import org.apache.taverna.scufl2.validation.correctness.CorrectnessValidationListener;
-import org.apache.taverna.scufl2.validation.correctness.CorrectnessValidator;
-import org.apache.taverna.scufl2.validation.correctness.ReportCorrectnessValidationListener;
-
-/*
- * Takes .wfbundle/ .t2flow as the input
- * */
-public class Validate {
-
-	private String logfile;
-	private String nonVerbose = "";
-	private String finalrep = "";
-	private boolean verbose;
-	private boolean check = false;
-	
-
-	public Validate(List<String> files, String file, boolean verbose) {
-		this.verbose = verbose;
-		this.logfile = file;
-		System.out.println("Validation started....");
-		for (String f : files) {
-			System.out.println("Validating " + f);
-			File wfile = new File(f);
-			read(wfile);
-			
-		}
-		System.out.println("Validation completed.......");
-		
-		
-		if (this.logfile != null) {
-			saveToLog(this.finalrep);
-		}
-	}
-
-	public void read(File file) {
-		WorkflowBundleIO io = new WorkflowBundleIO();
-		try {
-			this.finalrep += validate(io.readBundle(file, null), file.getName());
-			
-		} catch (ReaderException e) {
-			System.err.println(e.getMessage());
-
-		} catch (IOException e) {
-			System.err.println("Workflow bundle not found!");
-			System.err.println(e.getMessage());
-
-		}
-	}
-
-	public String validate(WorkflowBundle wfb, String file) {
-		
-		StringBuilder report2 = new StringBuilder();
-		CorrectnessValidationListener correctnessValidationListener = new ReportCorrectnessValidationListener();
-		CorrectnessValidator correctnessValidator = new CorrectnessValidator();
-		correctnessValidationListener = correctnessValidator.validate(wfb);
-		String report = correctnessValidationListener.toString().replace(
-				"ReportCorrectnessValidationListener [", "");
-
-		String[] sections = report.split(", ");
-
-		
-		
-		boolean detect = correctnessValidationListener.detectedProblems();
-		if (!detect){
-			report2.append("The workflow " + file + " has no errors. \n\n");
-			this.nonVerbose = "The workflow " + file + " has no errors. \n";
-		}
-			
-		
-//		System.out.println("The validation report for " + file);
-		report2.append("The validation report for " + file + "......\n");
-		report2.append("-------------------------------------------------------------------------------- \n");
-		for (int i = 0; i < sections.length; i++) {
-			String line = "-->"+sections[i].split("=")[0].replace("()", "").replace(
-					"get", "")
-					+ ":- ";
-			report2.append(line);
-			String line2 =  sections[i].split("=")[1].replace("[", "").replace("]","");
-			if(line2.equals("")) report2.append("null \n\n");
-			else report2.append("\t").append(line2).append("\n");
-			
-		
-		}
-		report2.append("--------------------------------------------------------------------------------- \n\n");
-		
-		if(detect){
-			System.out.println("The workflow bundle has following problems: \n"+report2.toString());
-			check = true;
-		}
-		
-		if(verbose){
-			System.out.println(report2.toString());
-		}else{
-			System.out.println(this.nonVerbose);
-		}
-		
-		return report2.toString();
-
-	}
-
-	public void saveToLog(String s) {
-		File logFile = new File(this.logfile);
-		FileWriter logwriter;
-		try {
-			logwriter = new FileWriter(logFile);
-			BufferedWriter blw = new BufferedWriter(logwriter);
-			blw.write(s);
-			blw.close();
-			logwriter.close();
-			System.out.println("Results were saved into " + logFile.getPath());
-		} catch (IOException e) {
-			System.err.println("Error writing to the file \n" + e.getMessage());
-		}
-
-	}
-	
-	public boolean getCheck(){
-		return this.check;
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/src/main/resources/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/main/resources/.gitignore b/taverna-language-commandline/src/main/resources/.gitignore
deleted file mode 100644
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/src/main/resources/META-INF/NOTICE
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/main/resources/META-INF/NOTICE b/taverna-language-commandline/src/main/resources/META-INF/NOTICE
deleted file mode 100644
index 370a8fc..0000000
--- a/taverna-language-commandline/src/main/resources/META-INF/NOTICE
+++ /dev/null
@@ -1,7 +0,0 @@
-Apache Taverna Language
-Copyright 2010-2014 University of Manchester, UK
-Copyright 2014-2015 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/src/test/java/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/test/java/.gitignore b/taverna-language-commandline/src/test/java/.gitignore
deleted file mode 100644
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/src/test/java/org/apache/taverna/tavlang/test/CommandLineTest.java
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/test/java/org/apache/taverna/tavlang/test/CommandLineTest.java b/taverna-language-commandline/src/test/java/org/apache/taverna/tavlang/test/CommandLineTest.java
deleted file mode 100644
index 6beaa8e..0000000
--- a/taverna-language-commandline/src/test/java/org/apache/taverna/tavlang/test/CommandLineTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.apache.taverna.tavlang.test;
-
-/*
- * 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.
- */
-
-
-import org.apache.taverna.tavlang.CommandLineTool;
-import org.junit.Assert;
-import org.junit.Test;
-
-public class CommandLineTest {
-	CommandLineTool commandLineTool = new CommandLineTool();
-	
-	@Test
-	public void testHelp(){
-		commandLineTool.parse();
-		commandLineTool.parse("version");
-		commandLineTool.parse("help");
-		commandLineTool.parse("help", "convert");
-		commandLineTool.parse("help", "inspect");
-		commandLineTool.parse("help", "validate");
-		commandLineTool.parse("help", "help");
-	}
-	
-	
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/src/test/java/org/apache/taverna/tavlang/test/TestConvert.java
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/test/java/org/apache/taverna/tavlang/test/TestConvert.java b/taverna-language-commandline/src/test/java/org/apache/taverna/tavlang/test/TestConvert.java
deleted file mode 100644
index a920db2..0000000
--- a/taverna-language-commandline/src/test/java/org/apache/taverna/tavlang/test/TestConvert.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.apache.taverna.tavlang.test;
-
-/*
- * 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.
- */
-
-import static org.junit.Assert.*;
-
-import org.junit.Test;
-
-public class TestConvert{
-
-	@Test
-	public void testConvertS() {
-//		fail("Not yet implemented");
-		
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/src/test/java/org/apache/taverna/tavlang/test/TestStats.java
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/test/java/org/apache/taverna/tavlang/test/TestStats.java b/taverna-language-commandline/src/test/java/org/apache/taverna/tavlang/test/TestStats.java
deleted file mode 100644
index 4c22377..0000000
--- a/taverna-language-commandline/src/test/java/org/apache/taverna/tavlang/test/TestStats.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.apache.taverna.tavlang.test;
-
-/*
- * 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.
- */
-
-
-import static org.junit.Assert.*;
-
-import org.junit.Test;
-
-public class TestStats {
-
-	@Test
-	public void test() {
-//		fail("Not yet implemented");
-	}
-
-}



[02/11] incubator-taverna-language git commit: taverna language commandline module renamed -> tavlangtool

Posted by st...@apache.org.
taverna language commandline module renamed -> tavlangtool

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

Branch: refs/heads/master
Commit: 1e13219f7214e31510dcdc9f446de12920dd3c3a
Parents: 99156bd
Author: Menaka Madushanka <me...@gmail.com>
Authored: Tue Feb 2 11:46:15 2016 +0530
Committer: Menaka Madushanka <me...@gmail.com>
Committed: Tue Feb 2 11:46:15 2016 +0530

----------------------------------------------------------------------
 taverna-tavlangtool/.gitignore                  |    1 +
 taverna-tavlangtool/README.md                   |  425 +++++
 taverna-tavlangtool/pom.xml                     |  213 +++
 taverna-tavlangtool/src/main/java/.gitignore    |    0
 .../apache/taverna/tavlang/CommandLineTool.java |  350 ++++
 .../taverna/tavlang/TavernaCommandline.java     |   29 +
 .../org/apache/taverna/tavlang/tools/Tools.java |   88 +
 .../tavlang/tools/convert/Scufl2Convert.java    |  206 +++
 .../taverna/tavlang/tools/convert/ToJson.java   |  298 ++++
 .../tavlang/tools/convert/ToRobundle.java       |   66 +
 .../tavlang/tools/inspect/ProcessorNames.java   |  169 ++
 .../tavlang/tools/inspect/ServiceTypes.java     |  112 ++
 .../taverna/tavlang/tools/stats/GetWfStat.java  |  193 ++
 .../tavlang/tools/validate/Validate.java        |  151 ++
 .../src/main/resources/.gitignore               |    0
 .../src/main/resources/META-INF/NOTICE          |    7 +
 taverna-tavlangtool/src/test/java/.gitignore    |    0
 .../taverna/tavlang/test/CommandLineTest.java   |   43 +
 .../taverna/tavlang/test/TestConvert.java       |   34 +
 .../apache/taverna/tavlang/test/TestStats.java  |   34 +
 .../apache/taverna/tavlang/test/TestTools.java  |   80 +
 .../taverna/tavlang/test/TestValidate.java      |   49 +
 .../src/test/resources/.gitignore               |    0
 .../test/resources/workflows/t2flow/as.t2flow   | 1674 ++++++++++++++++++
 24 files changed, 4222 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/.gitignore b/taverna-tavlangtool/.gitignore
new file mode 100644
index 0000000..916e17c
--- /dev/null
+++ b/taverna-tavlangtool/.gitignore
@@ -0,0 +1 @@
+dependency-reduced-pom.xml

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/README.md
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/README.md b/taverna-tavlangtool/README.md
new file mode 100644
index 0000000..e76cbcd
--- /dev/null
+++ b/taverna-tavlangtool/README.md
@@ -0,0 +1,425 @@
+<!--
+   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.
+-->
+
+# Apache Taverna Language Command Line
+
+
+This is planned as a command line for the
+[Apache Taverna Language](https://github.com/apache/incubator-taverna-language/),
+an API for the 
+[Apache Taverna](http://taverna.incubator.apache.org/) workflows.
+
+This module is a **work in progress** as part of Google Summer of Code 2015.
+
+
+
+## License
+
+(c) 2015 Apache Software Foundation
+
+This product includes software developed at The [Apache Software
+Foundation](http://www.apache.org/).
+
+Licensed under the [Apache License
+2.0](https://www.apache.org/licenses/LICENSE-2.0), see the file
+[../LICENSE](../LICENSE) for details.
+
+The file [NOTICE](src/main/resources/NOTICE) contains any additional attributions and
+details about embedded third-party libraries and source code.
+
+
+# Contribute
+
+Please subscribe to and contact the 
+[dev@taverna](http://taverna.incubator.apache.org/community/lists#dev%20mailing%20list)
+for any questions, suggestions and discussions about 
+Apache Taverna Language Commandline.
+
+Bugs and planned features are tracked in the Jira
+[Issue tracker](https://issues.apache.org/jira/browse/TAVERNA/component/12326903)
+under the `TAVERNA` component _GSOC Taverna Language Command line_. Feel free
+to add an issue!
+
+To suggest changes to this source code, feel free to raise a 
+[GitHub pull request](https://github.com/apache/incubator-taverna-mobile/pulls).
+Any contributions received are assumed to be covered by the [Apache License
+2.0](https://www.apache.org/licenses/LICENSE-2.0). We might ask you 
+to sign a [Contributor License Agreement](https://www.apache.org/licenses/#clas)
+before accepting a larger contribution.
+
+
+# Building and install requirements
+
+## Requisites
+
+* Java 1.7 or newer
+* [Apache Maven](https://maven.apache.org/download.html) 3.2.5 or newer (older
+  versions probably also work)
+
+
+## Building
+
+To build, run:
+
+    mvn clean install
+
+
+# Usage
+
+	usage: tavlang <command> [<args>]
+	
+	The most commonly used tavlang commands are:
+	    convert    Convert the given workflow
+	    help       Display help information about Tvarna
+	    inspect    Inspect the given workflow and show the results on the terminal
+	    validate   Validate the given workflow
+	    version    Show version informantion
+	
+	See 'tavlang help <command>' for more information on a specific command.
+
+# Documentation
+
+The Taverna language command line tool is for accessing the features of the Taverna language modules. 
+The tool has the following functions:
+
+* Conversion
+* Inspection
+* Validation
+* Viewing workflow statistics.
+	
+## Command line structure 
+	
+	$tavlang <command> <options> [arguments and parameters]
+	
+Each command has its own set of options.
+
+###Commands and Options
+The tool has the following major commands:
+
+* convert: Options {-r -- recursive, -i --input, -o --output,}
+* inspect: Options {-l --log}
+* validate: Options {-l --log, -v --verbose}
+* stats: Options {-l --log, -v --verbose}
+
+## Commands in detail
+
+### convert ------------------------------------------------------
+
+Convert the given workflow file/s into a specified output format.
+
+Usage:
+	
+	tavlang convert (--output_fomat) ([[options] [arguments]]|files...)
+	
+ Supported output formats are,
+ 
+ * wfbundle
+ * iwir
+ * json
+ * robundle
+ * structure
+ 
+Options:
+
+ * -r, --recursive : Convert all workflow files in a given directory recursively
+ * -i, --input     : Used with recursive case. Specify the input directory
+ * -o, --output    : Specify the out put directory 
+
+*The tool can only convert into one format at a time
+
+There are two methods for using the conversion command.
+
+####  1. Non-recursive method
+
+Usage: 
+
+	$tavlang convert (--output_format) [options] [arguments] 
+	
+####### Example 1: Without specifying any options
+	
+	$tavlang convert --structure /helloworld.t2flow
+	
+Output:
+
+	/converted/helloworld.structure is created
+
+Convert the helloworld.t2flow into helloworld.structure format and store in the /converted directory
+
+###### Example 2: Convert multiple workflows
+	
+	$tavlang convert --json /helloworld.t2flow /hello.t2flow
+	
+Output:
+	
+	/converted/helloworld.json is created
+	/converted/hello.json is created
+	
+Convert both workflow files and store them in /converted directory
+
+###### Example 3: with options and arguments
+
+	$tavlang convert --wfbundle /helloworld.t2flow -o /output/workflows
+	
+Output:
+	
+	/output/workflows/helloworld.wfbundle is created
+	
+Convert the workflow file/s and store them in the specified output directory
+
+####  2. Recursive method
+
+If there are many workflows in a directory, which are needed to be converted into one single format use this method.
+	
+Usage: 
+	
+	$tavlang convert -r (--output_format) -i workflow_src_dir <options> [arguments]
+
+###### Example 4: Without options and arguments
+
+	$tavlang convert -r --json -i /home/user/workflows
+	
+Convert all the workflows in the input directory into the specified format and store them in the "/home/user/workflows/converted" directory.
+
+Output: Suppose that there are 2 workflow files in the dir 1.t2flow and 2.t2flow
+
+	/home/workflows/converted/1.json is created
+	/home/workflows/converted/2.json is created
+
+###### Example 5: with output dir is specified
+
+	$tavlang convert -r --iwir -i /home/workflows -o /home/final
+	
+Convert all the workflows in the input directory and store them in /home/final directory
+
+Output:
+
+	/home/final/1.iwir is created
+	/home/final/2.iwir is created
+	
+### inspect -----------------------------------------------------------------
+
+Inspect the given workflow file/s and give the inspection report. 
+Supported workflow bundle formats: .wfbundle, .t2flow
+
+Usage:-
+	
+	$tavlang inspect (--inspection_options) <-other-options> [arguments] workflow_undles_to_be_inspected
+	
+Inspection options: 
+
+ * --servicetypes :- List all the service-types used in the workflow
+ * --processornames :- List the tree of the processor names used in the workflow
+ 
+Other Options:
+
+ * -l, --log :- save the inspection report in a text file 
+ 
+###### Example 1: Without any other-options
+
+1. Inspection result for Service types
+
+
+	$tavlang inspect --servicetypes helloworld.wfbundle
+	Service types used in helloworld.wfbundle :
+
+	http://ns.taverna.org.uk/2010/activity/constant
+	**************************************************
+
+2. inspection result for Processor names
+	
+	
+	$tavlang inspect --processornames helloworld.wfbundle
+	Processor tree of helloworld.wfbundle 
+	+ Hello_World
+	  - hello
+	
+###### Example 2: With other options
+The output is the same but the results will be saved in the given file.
+
+	$tavlang inspect --processornames helloworld.wfbundle -l results.txt
+	Processor tree of helloworld.wfbundle 
+	+ Hello_World
+	 - hello
+
+
+The output will be saved in results.txt in the same format.
+
+### validate ----------------------------------------------------------------------
+
+Validates the given workflow file or files and gives the validation report. 
+Validate tool checks for the following problematic conditions.
+
+ * Empty Iteration Strategy Top-Node Problems
+ * Mismatch Configurable Type Problems
+ * Non-Absolute URI Problems
+ * Null Field Problems
+ * Out-Of-Scope Value Problems
+ * Port Mentioned Twice Problems
+ * Port Missing From Iteration Strategy Stack Problems
+ * Wrong Parent Problems
+ * Incompatible Granular Depth Problems
+ 
+Usage:-
+
+	$tavlang validate [options][arguments] input_files
+
+Options:- 
+
+ * -l, --log: Save the validation report in a text file
+ * -v, --verbose: Verbose mode
+
+Supported workflow bundle formats: .t2flow and .wfbundle
+
+###### Example 1: Normal mode
+
+  Validate one workflow bundle
+
+	$tavlang validate helloworld.t2flow
+	
+Output: 
+	
+	Validation started....
+	Validating helloworld.t2flow
+	The workflow helloworld.t2flow has no errors. 
+
+	Validation completed.......
+ 
+  Validate more than one workflow bundles
+ 
+	$tavlang validate ../../workflow2.t2flow ../../workflow3.wfbundle
+
+	Validation started....
+	Validating ../../workflow2.t2flow
+	The workflow workflow2.t2flow has no errors. 
+
+	Validating ../../workflow3.wfbundle
+	The workflow workflow3.t2flow has no errors. 
+
+	Validation completed.......
+
+
+###### Example 2: Verbose mode
+
+The report is more explanatory.
+
+	$tavlang validate -v ../../workflow2.t2flow
+
+	Validation started....
+	Validating ../../workflow2.t2flow
+	The workflow workflow2.t2flow has no errors. 
+
+	The validation report for defaultActivitiesTaverna2.wfbundle......
+	-------------------------------------------------------------------------------- 
+	-->NegativeValueProblems:- null 
+	
+	-->EmptyIterationStrategyTopNodeProblems:- null 
+
+	-->MismatchConfigurableTypeProblems:- null 
+
+	-->NonAbsoluteURIProblems:- null 
+
+	-->NullFieldProblems:- null 
+
+	-->OutOfScopeValueProblems:- null 
+
+	-->PortMentionedTwiceProblems:- null 
+
+	-->PortMissingFromIterationStrategyStackProblems:- null 
+
+	-->WrongParentProblems:- null 
+
+	-->IncompatibleGranularDepthProblems:- null 
+
+	---------------------------------------------------------------------------------
+
+###### Example 3: Saving results to a file
+
+	$tavlang validate workflow2.t2flow -l log2.txt 
+	Validation started.... 
+	Validating workflow2.t2flow 
+	The workflow helloworld.wfbundle has no errors. 
+	Validation completed....... 
+	
+	Results were saved into log2.txt
+
+### stats ----------------------------------------------------------------------------------
+
+A workflow contains several resources.
+
+* Processors
+* Input ports
+* Output ports
+* Data links
+* Control links
+
+The stats command gives a report of the resources used in the workflow.
+
+Usage:- 
+
+	$tavlang stats <options>[arguments] input_files...
+	
+Options:- 
+
+ * -l, – – log : Save results in a log file
+ * -v, – – verbose : verbose mode
+ 
+Supported workflow bundle formats:- .t2flow, .wfbundle
+
+###### Example 1: Normal mode
+
+	$tavlang helloworld.wfbundle
+	>>> Statistics of the workflow bundle: helloworld.wfbundle <<<
+	Name of the workflow = Hello_World
+	 |--> Number of Processors = 1
+	 |--> Number of Data Links = 1
+	 |--> Number of Control Links = 0
+	 |--> Number of Input ports = 0
+	 |--> Number of Output Ports = 1
+ 
+###### Example 2: Verbose mode 
+
+	$tavlang -v ../../../helloworld.wfbundle
+	>>> Statistics of the workflow bundle: helloworld.wfbundle <<<
+	Name of the workflow = Hello_World
+	 |--> Number of Processors = 1
+	 | |--> Processors: 
+	 |      |--> hello
+	 |
+	 |--> Number of Data Links = 1
+	 | |--> Data Links
+	 |      |--> DataLink value=>greeting
+	 |
+	 |--> Number of Control Links = 0
+	 |--> Number of Input ports = 0
+	 |--> Number of Output Ports = 1
+	 | |--> Output Ports
+	 |      |--> OutputWorkflowPort "greeting"
+	 
+###### Example 3: Saving results in a file 
+
+	$tavlang -l ../../results.txt ../../../helloworld.wfbundle
+	>>> Statistics of the workflow bundle: helloworld.wfbundle <<<
+	Name of the workflow = Hello_World
+	 |--> Number of Processors = 1
+	 |--> Number of Data Links = 1
+	 |--> Number of Control Links = 0
+	 |--> Number of Input ports = 0
+	 |--> Number of Output Ports = 1
+
+	Results were saved into ../../results.txt
+	
+-----------------------------------------------------------------------------------------------------------------------------------------
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/pom.xml
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/pom.xml b/taverna-tavlangtool/pom.xml
new file mode 100644
index 0000000..c23c35f
--- /dev/null
+++ b/taverna-tavlangtool/pom.xml
@@ -0,0 +1,213 @@
+<?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
+
+       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>taverna-language</artifactId>
+      	<version>0.15.1-incubating-SNAPSHOT</version>
+    </parent>
+    <artifactId>taverna-tavlangtool</artifactId>
+    <name>Apache Taverna Language Commandline</name>
+    <description>Command line for Taverna Language (experimental)</description>
+
+	
+    <dependencies>
+    
+    	<dependency>
+			<groupId>commons-io</groupId>
+			<artifactId>commons-io</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>taverna-scufl2-api</artifactId>
+			<version>${project.parent.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>taverna-scufl2-wfbundle</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>taverna-scufl2-t2flow</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+
+<!-- 		<dependency> -->
+<!-- 			<groupId>org.shiwa.iwir</groupId> -->
+<!-- 			<artifactId>iwir</artifactId> -->
+<!-- 			<version>1.1.4</version> -->
+<!-- 			<scope>optional</scope> -->
+<!-- 			<systemPath>${project.build.directory}/taverna-language-commandline/lib/</systemPath> -->
+<!-- 		</dependency> -->
+		
+   	 <dependency>
+		<groupId>no.s11.scufl2</groupId>
+		<artifactId>scufl2-iwir</artifactId>
+		<version>0.2-SNAPSHOT</version>
+        <optional>true</optional>
+    </dependency>
+
+ 
+		
+		<dependency>
+			<groupId>com.thoughtworks.xstream</groupId>
+			<artifactId>xstream</artifactId>
+			<version>1.4.8</version>
+		</dependency>
+
+
+		<!-- <dependency> <groupId>${project.groupId}</groupId> <artifactId>taverna-scufl2-wfdesc</artifactId> 
+			<version>${project.version}</version> <optional>true</optional> </dependency> -->
+		<!-- <dependency> <groupId>org.purl.wf4ever</groupId> <artifactId>scufl2-wfdesc</artifactId> 
+			<version>0.3.7</version> </dependency> -->
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-core</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-databind</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>taverna-scufl2-ucfpackage</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>taverna-robundle</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>io.airlift</groupId>
+			<artifactId>airline</artifactId>
+			<!-- <version>${io.airlift.airline.version}</version> -->
+			<version>0.7</version>
+		</dependency>
+
+
+	</dependencies>
+
+	<build>
+		<!-- TODO: plugins for launchers and executable jar files? -->
+		<plugins>
+
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>appassembler-maven-plugin</artifactId>
+				<version>1.1.1</version>
+				<executions>
+					<execution>
+						<id>assemble</id>
+						<phase>package</phase>
+						<goals>
+							<goal>assemble</goal>
+						</goals>
+					</execution>
+				</executions>
+				<configuration>
+					<repositoryLayout>flat</repositoryLayout>
+					<repositoryName>lib</repositoryName>
+					<assembleDirectory>${project.build.directory}/${project.artifactId}</assembleDirectory>
+					<programs>
+						<program>
+							<mainClass>org.apache.taverna.tavlang.TavernaCommandline</mainClass>
+							<name>tavlang</name>
+						</program>
+					</programs>
+				</configuration>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-shade-plugin</artifactId>
+				<version>2.3</version>
+				<executions>
+					<execution>
+						<phase>package</phase>
+						<goals>
+							<goal>shade</goal>
+						</goals>
+						<configuration>
+							<transformers>
+								<transformer
+									implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
+								<transformer
+									implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+									<mainClass>org.apache.taverna.tavlang.TavernaCommandline</mainClass>
+								</transformer>
+								<transformer implementation="org.apache.maven.plugins.shade.resource.ApacheNoticeResourceTransformer">
+                    			<addHeader>false</addHeader>
+                    			</transformer>
+							</transformers>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+
+
+		</plugins>
+	</build>
+
+	<repositories>
+		<repository>
+			<releases>
+				<enabled>false</enabled>
+			</releases>
+			<snapshots />
+			<id>mygrid-repository</id>
+			<name>myGrid Repository</name>
+			<url>http://www.mygrid.org.uk/maven/repository</url>
+		</repository>
+		
+		<repository>
+			<id>mygrid-snapshot-repository</id>
+			<name>myGrid Snapshot Repository</name>
+			<url>http://www.mygrid.org.uk/maven/snapshot-repository</url>
+			<releases>
+				<enabled>false</enabled>
+			</releases>
+			<snapshots />
+		</repository>
+
+		<repository>
+			<id>apache.snapshots</id>
+			<name>Apache Snapshot Repository</name>
+			<url>http://repository.apache.org/snapshots</url>
+			<releases>
+				<enabled>false</enabled>
+			</releases>
+		</repository>
+	</repositories>
+
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/src/main/java/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/.gitignore b/taverna-tavlangtool/src/main/java/.gitignore
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java
new file mode 100644
index 0000000..068c933
--- /dev/null
+++ b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java
@@ -0,0 +1,350 @@
+package org.apache.taverna.tavlang;
+
+/*
+ * 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.
+ */
+
+import io.airlift.airline.Arguments;
+import io.airlift.airline.Cli;
+import io.airlift.airline.Cli.CliBuilder;
+import io.airlift.airline.Command;
+import io.airlift.airline.Help;
+import io.airlift.airline.Option;
+
+import java.io.IOException;
+import java.util.List;
+
+import javax.inject.Inject;
+import javax.xml.bind.JAXBException;
+
+import org.apache.taverna.scufl2.api.io.ReaderException;
+import org.apache.taverna.tavlang.tools.convert.Scufl2Convert;
+import org.apache.taverna.tavlang.tools.convert.ToRobundle;
+import org.apache.taverna.tavlang.tools.inspect.ProcessorNames;
+import org.apache.taverna.tavlang.tools.inspect.ServiceTypes;
+import org.apache.taverna.tavlang.tools.stats.GetWfStat;
+import org.apache.taverna.tavlang.tools.validate.Validate;
+
+import com.google.common.collect.Lists;
+
+/*
+ * The command line options for convert, validate and inspect workflows.
+ * Use the airlift/airline library
+ * */
+
+public class CommandLineTool {
+
+	private static Cli<TvnLangTool> parser() {
+		CliBuilder<TvnLangTool> build = Cli.<TvnLangTool> builder("tavlang")
+				.withDescription("Convert, manage workflows")
+				.withDefaultCommand(HelpCommand.class)
+				.withCommand(CommandConvert.class) // Conversion
+				.withCommand(HelpCommand.class) // Help
+				.withCommand(CommandInspect.class) // Inspect
+				.withCommand(CommandValidate.class) // Validate
+				.withCommand(CommandVersion.class) // Version
+				.withCommand(CommandStat.class); // Statistics
+
+		return build.build();
+	}
+
+	public CommandLineTool() {
+	};
+
+	public void parse(String... args) {
+		TvnLangTool command = parser().parse(args);
+		command.execute();
+		System.out.println();
+	}
+
+	public static abstract class TvnLangTool {
+
+		public abstract void execute();
+	}
+
+	// placeholder for output file types
+	public static class Filetypes {
+		@Option(name = "--wfdesc", description = "Convert the workflow file to wfdesc-turtle")
+		public static boolean isWfdesc = false;
+
+		@Option(name = "--wfbundle", description = "Convert the workflow file to wfbundle")
+		public static boolean isWfbundle = false;
+
+		@Option(name = "--robundle", description = "Convert given bundle in to Research Object bundle")
+		public static boolean isRo = false;
+
+		@Option(name = "--structure", description = "Convert the workflow into *.structure")
+		public static boolean isStructure = false;
+
+		@Option(name = "--json", description = "Convert the workflow into json")
+		public static boolean isJson = false;
+
+		
+		@Option(name = "--iwir", description = "Convert scufl2 workflows into IWIR 1.1 specification")
+		public static boolean isIwir = false;
+		
+		
+		// The tool can only handle one output format at a time.
+		// Return the file type which is selected
+		public static String isTrue() {
+			if (isWfdesc)
+				return "wfdesc";
+			else if (isWfbundle)
+				return "wfbundle";
+			else if (isRo)
+				return "robundle";
+			else if (isStructure)
+				return "structure";
+			else if (isJson)
+				return "json";
+			
+			else if (isIwir)
+				return "iwir";
+				
+			
+			else{
+				System.out.println("Invalid argument....");
+				TvnLangTool command = parser().parse("help", "convert");
+				command.execute();
+				return null;
+			}
+				
+		}
+
+	}
+
+	public static class Inspect {
+		@Option(name = "--servicetypes", description = "List the service types used in workflow")
+		public static boolean servicetypes = false;
+
+		@Option(name = "--processornames", description = "List a tree of processor names used in workflow")
+		public static boolean processor = false;
+
+		public String getWay() {
+			if (servicetypes)
+				return "servicetypes";
+			else if (processor)
+				return "processornames";
+			else{
+				System.out.println("Invalid argument....");
+				TvnLangTool command = parser().parse("help", "inspect");
+				command.execute();
+				return null;
+				
+			}
+				
+		}
+
+	}
+
+	// Placeholder for optional parameters: Ex: -i, -o
+	public static class Optional {
+
+		// The input file or directory
+		@Option(name = { "-i", "--input" }, description = "Input file/ file dir for conversion")
+		public static String in_file_dir;
+
+		// The out put file or directory. When this is set, all the converted
+		// files will be saved into the directory that specified.
+		@Option(name = { "-o", "--output" }, description = "Output file/ directory")
+		public static String out_file_dir;
+
+		public static String getInFile() {
+			return in_file_dir;
+		}
+
+		public static String getOutFile() {
+			return out_file_dir;
+		}
+
+	}
+
+	@Command(name = "help", description = "Display help information about Tvarna")
+	public static class HelpCommand extends TvnLangTool {
+		@Inject
+		public Help help;
+
+		@Override
+		public void execute() {
+			help.call();
+		}
+	}
+
+	// Command for convert workflows
+	@Command(name = "convert", description = "Convert the given workflow")
+	public static class CommandConvert extends TvnLangTool {
+		@Inject
+		Optional optional = new Optional();
+
+		@Inject
+		Filetypes filetypes = new Filetypes();
+
+		@Arguments(usage = "<output format> <input files> ", description = "List of files to be converted.\n "
+				+ "Give the list of files to be converted without -i/-o and the converted files will be saved in to /converted folder in the same dir")
+		public final List<String> files = Lists.newArrayList();
+
+		// When this is true, the command will run recursively in a directory.
+		@Option(name = { "-r", "--recursive" }, description = "Execute the command recursively")
+		public boolean recurse = false;
+
+		// Option for validate the given workflow when converting
+		@Option(name = { "-V", "--validate" }, description = "Validate the workflow before convert")
+		public boolean validate = false;
+
+		@Override
+		public void execute() {
+			
+			//Validate before convert
+			if(validate){
+				Validate validate = new Validate(files, null, false);
+				if(validate.getCheck()){
+					System.out.println("Conversion failed...! Workflow bundle has errors");
+					return;
+				}else{
+					runcommand();
+				}
+			}
+		}
+			
+		public void runcommand(){
+			if (Filetypes.isRo) {
+				try {
+					new ToRobundle(files, Optional.getOutFile());
+				} catch (Exception e) {
+					e.printStackTrace();
+				}
+//				else if(Filetypes.isIwir || Filetypes.isJson || Filetypes.isStructure || Filetypes.isWfbundle || Filetypes.isWfdesc)
+			} else if(Filetypes.isIwir || Filetypes.isJson || Filetypes.isStructure || Filetypes.isWfbundle || Filetypes.isWfdesc){
+				if (recurse) {
+					new Scufl2Convert(Filetypes.isTrue(),
+							Optional.getInFile(), Optional.getOutFile());
+				} else {
+					new Scufl2Convert(Filetypes.isTrue(), files,
+							Optional.getOutFile());
+				}
+			}else{
+				System.out.println("Invalid argument....");
+				TvnLangTool command = parser().parse("help", "convert");
+				command.execute();
+			}
+
+		}
+		
+		
+		
+	}
+
+	// Version command
+	@Command(name = "version", description = "Show version informantion")
+	public static class CommandVersion extends TvnLangTool {
+
+		@Override
+		public void execute() {
+			System.out.print(getClass().getPackage().getImplementationTitle());
+            System.out.println(" " + getClass().getPackage().getImplementationVersion());
+		}
+
+	}
+
+	// Command for inspection of workflows....!!
+	@Command(name = "inspect", description = "Inspect the given workflow and show the results on the terminal")
+	public static class CommandInspect extends TvnLangTool {
+
+		@Inject
+		Inspect inspect = new Inspect();
+
+		@Option(name = { "-l", "--log" }, description = "Specify the file name where results should be stored ([some dir]/log.txt)")
+		public String file;
+
+		@Arguments(usage = "<option> <input files>", description = "Inspect the given workflow")
+		public List<String> toInspect = Lists.newArrayList();
+
+		@Override
+		public void execute() {
+			if (Inspect.processor) {
+				try {
+					new ProcessorNames(toInspect, file);
+
+				} catch (ReaderException | IOException | JAXBException e) {
+					e.printStackTrace();
+				}
+			} else if (Inspect.servicetypes) {
+				try {
+					new ServiceTypes(toInspect, file);
+				} catch (IOException | ReaderException e) {
+					e.printStackTrace();
+				}
+
+			}else{
+				System.out.println("Invalid argument....");
+				TvnLangTool command = parser().parse("help", "inspect");
+				command.execute();
+			}
+
+		}
+
+	}
+
+	// Command for validation
+	@Command(name = "validate", description = "validate the given workflow")
+	public static class CommandValidate extends TvnLangTool{
+	
+		@Option(name = { "-l", "--log" }, description = "Specify the file name where results should be stored ([some dir]/log.txt)")
+		public String file;
+		
+		@Option(name = {"-v", "--verbose"}, description = "Verbose mode")
+		public boolean verbose;
+
+//		@Arguments(usage = "<option> <input files> <output dir>", description = "Validate the given workflow file/s")
+		@Arguments(usage = "input files", description = "Validate the given workflow file/s")
+		public List<String> toValidate = Lists.newArrayList();
+
+		@Override
+		public void execute() {
+		
+			Validate validate = new Validate(toValidate, file, verbose);
+			
+
+		}
+
+	}
+	
+	//Command for getting workflow stats
+	@Command (name = "stats", description = "Shows the workflow statistics")
+	public static class CommandStat extends TvnLangTool{
+
+		
+		@Option(name = {"-l", "--log"}, description ="Save the workflow statictics in a file")
+		public String file;
+		
+		@Option(name = {"-v", "--verbose"}, description = "Verbose mode")
+		public boolean verbose;
+		
+		@Arguments(usage="input files", description = "Enter the workflow bundle files")
+		public List<String> files;
+		
+		@Override
+		public void execute() {
+			
+			GetWfStat stat = new GetWfStat(files, file, verbose);
+			
+		}
+		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java
new file mode 100644
index 0000000..016488c
--- /dev/null
+++ b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java
@@ -0,0 +1,29 @@
+package org.apache.taverna.tavlang;
+
+/*
+ * 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.
+ */
+
+public class TavernaCommandline {
+
+	public static void main(String args[]){
+		CommandLineTool tool = new CommandLineTool();
+		tool.parse(args);
+		
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/Tools.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/Tools.java b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/Tools.java
new file mode 100644
index 0000000..c78c7a2
--- /dev/null
+++ b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/Tools.java
@@ -0,0 +1,88 @@
+package org.apache.taverna.tavlang.tools;
+
+/*
+ * 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.
+ */
+
+
+
+public class Tools {
+	
+	public static enum ConvertionTools {
+		wfbundle{
+			public String mediaType = "application/vnd.taverna.scufl2.workflow-bundle";
+			
+
+			@Override
+			public String getMediaType(ConvertionTools t) {
+				return this.mediaType;
+			}
+		},
+		json{
+			public String mediaType = "application/ld+json";
+
+
+			@Override
+			public String getMediaType(ConvertionTools t) {
+				return mediaType;
+			}
+		},
+		wfdesc{
+			public String mediaType = "text/vnd.wf4ever.wfdesc+turtle";
+
+
+			@Override
+			public String getMediaType(ConvertionTools t) {
+				// TODO Auto-generated method stub
+//				System.out.println(mediaType);
+				return mediaType;
+			}
+		},
+		robundle{
+
+			@Override
+			public String getMediaType(ConvertionTools t) {
+				return null;
+			}
+		
+		},
+		structure{
+			public String mediaType = "text/vnd.taverna.scufl2.structure";
+			
+			@Override
+			public String getMediaType(ConvertionTools t) {
+				return mediaType;
+			}
+		},
+		
+		iwir{
+				public String mediaType = "application/vnd.shiwa.iwir+xml";
+				
+				@Override
+				public String getMediaType(ConvertionTools t) {
+					return mediaType;
+				}
+		};
+		
+		ConvertionTools(){}
+		
+		public abstract String getMediaType(ConvertionTools t);
+		
+	}
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java
new file mode 100644
index 0000000..da4dff0
--- /dev/null
+++ b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java
@@ -0,0 +1,206 @@
+package org.apache.taverna.tavlang.tools.convert;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+import org.apache.taverna.scufl2.api.io.ReaderException;
+import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
+import org.apache.taverna.scufl2.api.io.WriterException;
+import org.apache.taverna.tavlang.tools.Tools.ConvertionTools;
+
+
+/*
+ * Converts 
+ * 	.t2flow --> .wfbundle
+ * 	.t2flow --> .structure
+ * 	.wfbundle --> .structure
+ *  .wfbundle/ .t2flow -> .iwir
+ * two constructors.
+ * Scufl2Convert(List<String> list, String out) --> will save the converted files in 'out folder or a directory named /converted in the same folder.
+ * Scufl2Convert(String in, String out) --> Will convert all the files in the 'in' folder and save them in 'out' folder --> -r must be true.
+ * 
+ * */
+public class Scufl2Convert{
+	
+	private ConvertionTools t;
+	private String MEDIA_TYPE;
+	private String input;
+	private String output;
+	private String type;
+	private List<String> filesList;
+	
+	public Scufl2Convert(String type, List<String> files, String out){
+		this.filesList = files;
+		this.output = out;
+		this.type = type.equals("wfdesc")?".wfdesc.ttl":"."+type;
+		this.MEDIA_TYPE = ConvertionTools.valueOf(type).getMediaType(t);
+		this.convert();
+	}
+	
+	//When recursive case is on....
+	public Scufl2Convert(String type, String in, String out){
+		this.input = in;
+		this.output = out;
+		this.type = type.equals("wfdesc")?".wfdesc.ttl":"."+type;
+		this.MEDIA_TYPE = ConvertionTools.valueOf(type).getMediaType(t);	//Determine the writer media type
+		
+		this.createdir();
+	}
+	
+	//Create the dir if not exists
+	public void createdir(){
+		if(output == null){
+			File outFile = new File(this.input, "converted");
+			try {
+				FileUtils.forceMkdir(outFile);
+				this.output = outFile.getAbsolutePath();
+			} catch (IOException e1) {
+				System.err.println("Error: The directory cannot be created...!!!!");
+				e1.printStackTrace();
+			}
+		}else{
+			File outFile = new File(this.output);
+			try {
+				FileUtils.forceMkdir(outFile);
+				
+			} catch (IOException e1) {
+				System.err.println("Error: The directory cannot be created...!!!!");
+				e1.printStackTrace();
+			}
+		}
+		this.rec_convert(this.input);
+	}
+	
+	//Convert the given file. Return in case of an exception.
+	public boolean convert(){
+		
+		boolean check = false;
+		// If the output folder is given, save the converted files in to that folder.
+		 
+		if(this.filesList.size()>0 && this.output != null){
+			File outFile = new File(this.output);
+			try {
+				FileUtils.forceMkdir(outFile);
+			} catch (IOException e1) {
+				System.err.println("Error: The directory cannot be created...!!!");
+			}
+			for(String file : this.filesList){
+				File t2File = new File(file);
+				
+				convertFile(t2File, outFile);
+				
+			}
+			
+		}
+		
+		 /* If the output file is not given, save the converted files in 
+		  *  '/converted' folder.
+		  */
+		 
+		else if(this.filesList.size()>0 && this.output == null){
+			for(String file : this.filesList){
+				File t2File = new File(file);
+				
+				File outFile = new File(t2File.getParentFile(), "converted");
+				try {
+					FileUtils.forceMkdir(outFile);
+				} catch (IOException e1) {
+					System.err.println("Error: The directory cannot be created...!!!");
+				}
+				
+				convertFile(t2File, outFile);
+				
+			}
+		}else{
+			System.err.println("Error: Argument mismatch");
+			check = false;
+		}
+		
+		return check;
+	}
+	
+	//Convert the files in a given directory and save the converted files in to specified dir or /converted folder.
+	//Recursive conversion
+	public void rec_convert(String dir){
+			
+			File parent = new File(this.input);
+			if(!parent.exists()){
+				System.err.println("Error: Input directory not found");
+			}else{
+				for(File file : parent.listFiles()){
+					if(!file.isDirectory())
+					{
+						File outFile = new File(this.output);
+						convertFile(file, outFile);
+					}
+				}
+			}
+	}
+	
+	//Convert the file
+	public void convertFile(File t2File, File outFile){
+		
+		//Check weather the input files are in valid format...!!!
+		String ext = FilenameUtils.getExtension(t2File.getName());
+		if(!ext.equalsIgnoreCase("t2flow")&&!ext.equalsIgnoreCase("wfbundle")){
+			System.err.println("Error: Invalid input file format...!!!");
+			return;
+		}
+		
+		WorkflowBundleIO wfbio = new WorkflowBundleIO();
+		String filename = t2File.getName();
+		filename = filename.replaceFirst("\\..*", this.type);
+		File scufl2File = new File(outFile.getAbsolutePath(), filename);
+		
+		WorkflowBundle wfBundle;
+		try {
+			wfBundle = wfbio.readBundle(t2File, null);// null --> will guess the media type for reading.
+			
+//			if(this.type.equals(".iwir")){
+//				IwirWriter iww = new IwirWriter();
+//				iww.writeBundle(wfBundle, scufl2File, this.MEDIA_TYPE);
+//			}else
+			
+			if(this.type.equals(".json")){
+				ToJson toJ = new ToJson();
+				toJ.convert(t2File, outFile);
+			}
+			else{
+				wfbio.writeBundle(wfBundle, scufl2File, this.MEDIA_TYPE);
+			}
+			System.out.println(scufl2File.getPath() + " is created.");
+		}catch (ReaderException e){
+			System.err.println("Error: Connot read the file");
+		}catch(IOException e){
+			System.err.println("Error: File not found");
+		}catch(WriterException e) {
+			System.err.println("Error: Cannot write to the file");
+//			e.printStackTrace();
+		}
+	}
+
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java
new file mode 100644
index 0000000..f11424c
--- /dev/null
+++ b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java
@@ -0,0 +1,298 @@
+package org.apache.taverna.tavlang.tools.convert;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URI;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.taverna.scufl2.api.annotation.Annotation;
+import org.apache.taverna.scufl2.api.annotation.Revision;
+import org.apache.taverna.scufl2.api.common.Child;
+import org.apache.taverna.scufl2.api.common.Ported;
+import org.apache.taverna.scufl2.api.common.Scufl2Tools;
+import org.apache.taverna.scufl2.api.common.URITools;
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+import org.apache.taverna.scufl2.api.core.BlockingControlLink;
+import org.apache.taverna.scufl2.api.core.ControlLink;
+import org.apache.taverna.scufl2.api.core.DataLink;
+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.WorkflowBundleWriter;
+import org.apache.taverna.scufl2.api.io.WriterException;
+import org.apache.taverna.scufl2.api.port.DepthPort;
+import org.apache.taverna.scufl2.api.port.GranularDepthPort;
+import org.apache.taverna.scufl2.api.port.Port;
+import org.apache.taverna.scufl2.api.profiles.Profile;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.fasterxml.jackson.databind.util.ISO8601DateFormat;
+
+public class ToJson {
+	public class JsonWriter implements WorkflowBundleWriter {
+
+		@Override
+		public Set<String> getMediaTypes() {
+			return new HashSet<String>(Arrays.asList("application/ld+json",
+					"application/json"));
+		}
+
+		@Override
+		public void writeBundle(WorkflowBundle wfBundle, File destination,
+				String mediaType) throws WriterException, IOException {
+			ObjectNode json = toJson(wfBundle);
+			mapper.writeValue(destination, json);
+		}
+
+		@Override
+		public void writeBundle(WorkflowBundle wfBundle, OutputStream output,
+				String mediaType) throws WriterException, IOException {
+			ObjectNode json = toJson(wfBundle);
+			mapper.writeValue(output, json);
+		}
+
+	}
+
+	
+	private WorkflowBundleIO io = new WorkflowBundleIO();;
+
+	private WorkflowBundleWriter jsonWriter = new JsonWriter();
+
+	private ObjectMapper mapper = new ObjectMapper();
+
+	private Scufl2Tools scufl2Tools = new Scufl2Tools();
+
+	private URITools uriTools = new URITools();
+
+	public ToJson() {
+		mapper.enable(SerializationFeature.INDENT_OUTPUT);
+		mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
+		mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+
+		mapper.setDateFormat(new ISO8601DateFormat());
+
+		// Adding custom writer dynamically
+		List<WorkflowBundleWriter> writers = io.getWriters();
+		writers.add(jsonWriter);
+		io.setWriters(writers);
+	}
+
+	protected void addPorts(Ported ported, ObjectNode p) {
+		ArrayNode inputs = mapper.createArrayNode();
+		for (Port port : ported.getInputPorts()) {
+			inputs.add(toJson(port));
+		}
+		p.put("inputs", inputs);
+
+		ArrayNode outputs = mapper.createArrayNode();
+		for (Port port : ported.getOutputPorts()) {
+			outputs.add(toJson(port));
+			// FIXME: Do we need the id for ports? Needed if we add datalinks
+		}
+		p.put("outputs", outputs);
+	}
+
+	protected ObjectNode annotations(Child<?> bean) {
+		ObjectNode node = mapper.createObjectNode();
+		for (Annotation ann : scufl2Tools.annotationsFor(bean)) {
+			URI annUri = uriTools.uriForBean(ann);
+
+			// TODO: include annotation body?
+		}
+		return node;
+	}
+
+	public void convert(File in, File out) throws ReaderException, IOException,
+			WriterException {
+		String filename = in.getName();
+		filename = filename.replaceFirst("\\..*", ".json");
+		File workflowFile = new File(out.getAbsolutePath(), filename);
+
+		WorkflowBundle wfBundle = io.readBundle(in, null);
+		io.writeBundle(wfBundle, workflowFile, "application/ld+json");
+//		System.out.println(workflowFile);
+
+	}
+
+	protected ObjectNode toJson(Port port) {
+		ObjectNode p = mapper.createObjectNode();
+		p.put("name", port.getName());
+		p.putPOJO("id",
+				uriTools.relativeUriForBean(port, scufl2Tools.findParent(
+						WorkflowBundle.class, ((Child<?>) port))));
+
+		if (port instanceof DepthPort) {
+			DepthPort depthPort = (DepthPort) port;
+			if (depthPort.getDepth() != null) {
+				p.put("depth", depthPort.getDepth());
+			}
+		}
+		if (port instanceof GranularDepthPort) {
+			GranularDepthPort granularDepthPort = (GranularDepthPort) port;
+			if (granularDepthPort.getGranularDepth() != null
+					&& !granularDepthPort.getGranularDepth().equals(
+							granularDepthPort.getDepth())) {
+				p.put("granularDepth", granularDepthPort.getGranularDepth());
+			}
+		}
+		p.putAll(annotations((Child<?>) port));
+		return p;
+	}
+
+	protected JsonNode toJson(Processor proc) {
+		ObjectNode p = mapper.createObjectNode();
+		p.putPOJO("id",
+				uriTools.relativeUriForBean(proc, proc.getParent().getParent()));
+		p.put("name", proc.getName());
+		addPorts(proc, p);
+		p.putAll(annotations(proc));
+
+		List<Workflow> nested = scufl2Tools.nestedWorkflowsForProcessor(proc,
+				proc.getParent().getParent().getMainProfile());
+		if (!nested.isEmpty()) {
+			if (nested.size() == 1) {
+				p.put("nestedWorkflow", toJson(nested.iterator().next()));
+			} else {
+				ArrayNode list = mapper.createArrayNode();
+				for (Workflow w : nested) {
+					list.add(toJson(w));
+				}
+				p.put("nestedWorkflow", list);
+			}
+		}
+		return p;
+	}
+
+	protected JsonNode toJson(Revision currentRevision) {
+		ArrayNode revisions = mapper.createArrayNode();
+		while (currentRevision != null) {
+			ObjectNode rev = mapper.createObjectNode();
+			rev.putPOJO("id", currentRevision.getIdentifier());
+			if (currentRevision.getGeneratedAtTime() != null) {
+				rev.putPOJO("generatedAtTime",
+						currentRevision.getGeneratedAtTime());
+			}
+			currentRevision = currentRevision.getPreviousRevision();
+			if (currentRevision != null) {
+				rev.putPOJO("wasRevisionOf", currentRevision.getIdentifier());
+			}
+			revisions.add(rev);
+		}
+		return revisions;
+	}
+
+	protected ObjectNode toJson(Workflow workflow) {
+		ObjectNode wf = mapper.createObjectNode();
+
+		wf.putPOJO("id",
+				uriTools.relativeUriForBean(workflow, workflow.getParent()));
+
+		wf.put("name", workflow.getName());
+		wf.put("revisions", toJson(workflow.getCurrentRevision()));
+
+		ArrayNode processors = mapper.createArrayNode();
+		for (Processor p : workflow.getProcessors()) {
+			processors.add(toJson(p));
+		}
+		addPorts(workflow, wf);
+		wf.put("processors", processors);
+
+		ArrayNode datalinks = mapper.createArrayNode();
+		for (DataLink link : workflow.getDataLinks()) {
+			datalinks.add(toJson(link));
+		}
+		wf.put("datalinks", datalinks);
+
+		ArrayNode controlLinks = mapper.createArrayNode();
+		for (ControlLink link : workflow.getControlLinks()) {
+			controlLinks.add(toJson(link));
+		}
+		wf.put("controllinks", controlLinks);
+
+		wf.putAll(annotations(workflow));
+
+		return wf;
+	}
+
+	protected JsonNode toJson(ControlLink link) {
+		ObjectNode l = mapper.createObjectNode();
+		if (link instanceof BlockingControlLink) {
+			BlockingControlLink controlLink = (BlockingControlLink) link;
+			l.putPOJO("block", uriTools.relativeUriForBean(
+					controlLink.getBlock(), link.getParent().getParent()));
+			l.putPOJO("untilFinished", uriTools.relativeUriForBean(controlLink
+					.getUntilFinished(), link.getParent().getParent()));
+		}
+		return l;
+	}
+
+	protected JsonNode toJson(DataLink link) {
+		ObjectNode l = mapper.createObjectNode();
+		l.putPOJO("receivesFrom", uriTools.relativeUriForBean(
+				link.getReceivesFrom(), link.getParent().getParent()));
+		l.putPOJO("sendsTo", uriTools.relativeUriForBean(link.getSendsTo(),
+				link.getParent().getParent()));
+		if (link.getMergePosition() != null) {
+			l.put("mergePosition", link.getMergePosition());
+		}
+		return l;
+	}
+
+	public ObjectNode toJson(WorkflowBundle wfBundle) {
+
+		ObjectNode root = mapper.createObjectNode();
+		ArrayNode contextList = root.arrayNode();
+		root.put("@context", contextList);
+		ObjectNode context = root.objectNode();
+		contextList.add("https://w3id.org/scufl2/context");
+		contextList.add(context);
+		URI base = wfBundle.getGlobalBaseURI();
+		context.put("@base", base.toASCIIString());
+		root.put("id", base.toASCIIString());
+
+		// root.put("name", wfBundle.getName());
+		// root.put("revisions", toJson(wfBundle.getCurrentRevision()));
+
+		root.put("workflow", toJson(wfBundle.getMainWorkflow()));
+		root.put("profile", toJson(wfBundle.getMainProfile()));
+
+		return root;
+	}
+
+	private JsonNode toJson(Profile profile) {
+		ObjectNode pf = mapper.createObjectNode();
+
+		pf.putPOJO("id",
+				uriTools.relativeUriForBean(profile, profile.getParent()));
+		// TODO: Activities and configurations
+		return pf;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java
new file mode 100644
index 0000000..6ab14bc
--- /dev/null
+++ b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java
@@ -0,0 +1,66 @@
+package org.apache.taverna.tavlang.tools.convert;
+
+/*
+ * 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.
+ */
+
+
+import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.logging.ConsoleHandler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.apache.taverna.robundle.Bundle;
+import org.apache.taverna.robundle.Bundles;
+
+public class ToRobundle{
+
+	public ToRobundle(List<String> files, String out) throws Exception{
+		
+		Logger logger = Logger.getLogger("");
+		//logger.setLevel(Level.FINER);
+		ConsoleHandler console = new ConsoleHandler();
+		console.setLevel(Level.FINEST);
+		logger.addHandler(console);
+		Logger.getLogger("org.researchobject").setLevel(Level.FINEST);
+		
+		for(String f : files){
+			Path file = Paths.get(f);
+			convert(file);
+		}
+	}
+	
+	//Recursive conversion
+	public ToRobundle(String type, String in, String out) {
+		
+	}
+	
+	public void convert(Path file) throws IOException{
+		try (Bundle bundle = Bundles.openBundle(file)) {
+			
+//			System.out.println(bundle.getManifest().toString());
+			bundle.getManifest().writeAsJsonLD();
+			bundle.getManifest().writeAsCombineManifest();
+		}
+	}
+	
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java
new file mode 100644
index 0000000..f93aadc
--- /dev/null
+++ b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java
@@ -0,0 +1,169 @@
+package org.apache.taverna.tavlang.tools.inspect;
+
+/*
+ * 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.
+ */
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreeModel;
+import javax.xml.bind.JAXBException;
+
+import org.apache.taverna.scufl2.api.common.Scufl2Tools;
+import org.apache.taverna.scufl2.api.common.URITools;
+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.profiles.Profile;
+
+/*
+ * list the processor names used in the workflow.
+ * Supported formats: .t2flow, .wfbundle
+ * */
+
+public class ProcessorNames {
+	
+	private List<String> fileList;
+	
+	private String file2;
+	
+	private Scufl2Tools scufl2Tools = new Scufl2Tools();
+
+	private URITools uriTools = new URITools();
+
+	public ProcessorNames(List<String> fileList, String file) throws ReaderException, IOException, JAXBException{
+		this.fileList = fileList;
+		this.file2 = file;
+		this.show();
+	}
+	
+	public void show() throws ReaderException, IOException, JAXBException{
+		WorkflowBundleIO io = new WorkflowBundleIO();
+		StringBuilder sb = new StringBuilder();
+		
+		for(String file : this.fileList){
+			File file2 = new File(file);
+			if(file2.isDirectory()){
+				for(File f : file2.listFiles()){
+					WorkflowBundle wfb = io.readBundle(f, null);
+					System.out.println("Processor tree of "+ f.getName() +" \n" +this.showProcessorTree(wfb));
+					sb.append("Processor tree of "+ f.getName() +" \n" +this.showProcessorTree(wfb) + "\n");
+				}
+			}else{
+				WorkflowBundle wfb = io.readBundle(new File(file), null);
+				System.out.println("Processor tree of "+ file +" \n" +this.showProcessorTree(wfb));
+				sb.append("Processor tree of "+ file +" \n" +this.showProcessorTree(wfb) + "\n");
+			}
+			
+			
+		}
+		
+		if(this.file2!=null){
+			File log = new File(file2);
+			FileWriter fw = new FileWriter(log);
+			BufferedWriter bw = new BufferedWriter(fw);
+			bw.write(sb.toString());
+			bw.close();
+			fw.close();
+			System.out.println("Results were saved into " + file2);
+		}
+	}
+	
+	private Workflow findNestedWorkflow(Processor processor) {
+		Profile profile = processor.getParent().getParent().getMainProfile();
+		return scufl2Tools.nestedWorkflowForProcessor(processor, profile);
+	}
+
+	private void findProcessors(WorkflowBundle ro, Workflow workflow,
+			DefaultMutableTreeNode parent) {
+		for (Processor processor : workflow.getProcessors()) {
+			DefaultMutableTreeNode processorNode = new DefaultMutableTreeNode(
+					processor.getName());
+			parent.add(processorNode);
+			Workflow wf = findNestedWorkflow(processor);
+			if (wf != null) {
+				findProcessors(ro, wf, processorNode);
+			}
+		}
+
+	}
+
+	public TreeModel makeProcessorTree(WorkflowBundle workflowBundle)
+			throws JAXBException, IOException {
+		Workflow workflow = workflowBundle.getMainWorkflow();
+		TreeModel treeModel = new DefaultTreeModel(new DefaultMutableTreeNode(
+				workflow.getName()));
+		DefaultMutableTreeNode parent = (DefaultMutableTreeNode) treeModel
+				.getRoot();
+
+		findProcessors(workflowBundle, workflow, parent);
+		return treeModel;
+	}
+
+	public List<String> showProcessorNames(WorkflowBundle ro)
+			throws JAXBException, IOException {
+		ArrayList<String> names = new ArrayList<String>();
+		for (Processor processor : ro.getMainWorkflow().getProcessors()) {
+			names.add(processor.getName());
+		}
+		Collections.sort(names);
+		return names;
+	}
+
+	public String showProcessorTree(WorkflowBundle ro) throws JAXBException,
+			IOException {
+		TreeModel treeModel = makeProcessorTree(ro);
+		return treeModelAsString(treeModel);
+	}
+
+	public String treeModelAsString(TreeModel treeModel) {
+		StringBuffer sb = new StringBuffer();
+		Object root = treeModel.getRoot();
+		treeModelAsString(treeModel, root, sb, "");
+		return sb.toString();
+	}
+
+	protected void treeModelAsString(TreeModel treeModel, Object parent,
+			StringBuffer sb, String indentation) {
+		sb.append(indentation);
+		int childCount = treeModel.getChildCount(parent);
+		if (childCount == 0) {
+			sb.append("- ");
+		} else {
+			sb.append("+ ");
+			indentation = indentation + "  ";
+		}
+		sb.append(parent);
+		sb.append("\n");
+		for (int i = 0; i < childCount; i++) {
+			Object child = treeModel.getChild(parent, i);
+			treeModelAsString(treeModel, child, sb, indentation);
+		}
+	}
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java
new file mode 100644
index 0000000..ddff2ab
--- /dev/null
+++ b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java
@@ -0,0 +1,112 @@
+package org.apache.taverna.tavlang.tools.inspect;
+
+
+/*
+ * 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.
+ */
+
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
+import org.apache.taverna.scufl2.api.activity.Activity;
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+import org.apache.taverna.scufl2.api.io.ReaderException;
+import org.apache.taverna.scufl2.api.profiles.Profile;
+
+/*
+ * List the service types used in workflow.
+ * Supported file formats : .wfbundle, .t2flow
+ * */
+
+public class ServiceTypes {
+	
+	private List<String> filesList;
+	private Set<String> types = new LinkedHashSet<String>();
+	private String save;
+	
+	public ServiceTypes(List<String> filesList, String file) throws IOException, ReaderException{
+		this.filesList = filesList;
+		this.save = file;
+		this.service();
+		
+	}
+	
+	public void service() throws ReaderException, IOException{
+		WorkflowBundleIO io = new WorkflowBundleIO();
+		StringBuilder sb = new StringBuilder();
+		
+		for (String filepath : filesList) {
+			File file = new File(filepath);
+			
+			if(file.isDirectory()){
+				for(File f : file.listFiles()){
+				WorkflowBundle wfBundle = io.readBundle(f, null);
+				System.out.println("Service types used in " + f.getCanonicalPath() + " :" +"\n");
+				sb.append("Service types used in " + f.getCanonicalPath() + " :");
+				for (Profile profile : wfBundle.getProfiles()) {
+					for (Activity activity : profile.getActivities()) {
+						this.types.add(activity.getType().toASCIIString());
+					}
+				}
+				for(String t : types){
+					System.out.println(t);
+					sb.append(t + "\n");
+				}
+				System.out.println("\n**************************************************\n");
+				sb.append("\n**************************************************\n");
+				}
+			}else{
+			// mediaType = null  --> guess
+				WorkflowBundle wfBundle = io.readBundle(file, null);
+				System.out.println("Service types used in " + file.getCanonicalPath() + " :" + "\n");
+				sb.append("Service types used in " + file.getCanonicalPath() + " :");
+				for (Profile profile : wfBundle.getProfiles()) {
+					for (Activity activity : profile.getActivities()) {
+						this.types.add(activity.getType().toASCIIString());
+					}
+				}
+				for(String t : types){
+					System.out.println(t);
+					sb.append(t + "\n");
+				}
+				
+				System.out.println("\n**************************************************\n");
+				sb.append("\n**************************************************\n");
+			}
+		}
+		
+		if(save!=null){
+			File log = new File(save);
+			FileWriter fw = new FileWriter(log);
+			BufferedWriter bw = new BufferedWriter(fw);
+			bw.write(sb.toString());
+			bw.close();
+			fw.close();
+			System.out.println("Results were saved into " + save);
+		}
+		
+	}
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/stats/GetWfStat.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/stats/GetWfStat.java b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/stats/GetWfStat.java
new file mode 100644
index 0000000..7daa38e
--- /dev/null
+++ b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/stats/GetWfStat.java
@@ -0,0 +1,193 @@
+package org.apache.taverna.tavlang.tools.stats;
+
+/*
+ * 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.
+ */
+
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.taverna.scufl2.api.common.NamedSet;
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+import org.apache.taverna.scufl2.api.core.ControlLink;
+import org.apache.taverna.scufl2.api.core.DataLink;
+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.port.InputPort;
+import org.apache.taverna.scufl2.api.port.OutputPort;
+
+public class GetWfStat {
+	
+	private NamedSet<Workflow> set;
+	private String logFile;
+	private boolean verbose;
+	private StringBuilder str_verb = new StringBuilder();
+	private StringBuilder str_nverb = new StringBuilder();
+	
+	
+	//If given file is a workflow file
+	public GetWfStat(List<String> wf_files, String log, boolean verbose){
+		this.logFile = log;
+		this.verbose = verbose;
+		
+		for(String files : wf_files){
+			File f = new File(files);
+			if(f.isFile()){
+				this.read(f);
+				
+			}else{
+				System.err.println("Error reading the file " + f.getName());
+			}
+		}
+		
+		this.isVerbose();
+		
+		if(log!=null){
+			this.writefile(this.str_verb.toString(), this.logFile);
+		}
+	}
+	
+	//Read the workflow file and extract the resources.
+	//And append them to a String builder
+	public void read(File file){
+		WorkflowBundleIO io = new WorkflowBundleIO();
+		try {
+			WorkflowBundle wf = io.readBundle(file, null);
+			this.set = wf.getWorkflows();
+
+			//String to be written to a file.
+			this.str_nverb.append(">>> Statistics of the workflow bundle: " + file.getName() + " <<<\n");
+			this.str_verb.append(">>> Statistics of the workflow bundle: " + file.getName() + " <<<\n");
+			
+			for(Workflow wrf : set){
+				//TODO :- Take each type of resource and make a system to view them to the user.
+				String name = "Name of the workflow = " + wrf.getName();
+				this.str_verb.append(name + "\n");
+				this.str_nverb.append(name + "\n");
+
+				
+				String noP = "  |--> Number of Processors = " + wrf.getProcessors().size();
+				this.str_verb.append(noP + "\n");
+				this.str_nverb.append(noP + "\n");
+				
+				if(this.verbose && wrf.getProcessors().size()!=0){
+					this.str_verb.append("  |     |--> Processors: " + "\n");
+					
+					for(Processor p : wrf.getProcessors()){
+						this.str_verb.append("  |          |--> " + p.getName() + "\n");
+					}
+					this.str_verb.append("  |" + "\n");
+				}
+				
+				this.str_verb.append("  |--> Number of Data Links = " + wrf.getDataLinks().size() + "\n");
+				this.str_nverb.append("  |--> Number of Data Links = " + wrf.getDataLinks().size() + "\n");
+				
+				if(this.verbose && wrf.getDataLinks().size()!=0){
+					this.str_verb.append("  |     |--> Data Links" + "\n");
+					
+					for(DataLink link : wrf.getDataLinks()){
+						this.str_verb.append("  |          |--> " + link + "\n");
+					}
+					this.str_verb.append("  |" + "\n");
+				}
+				
+				this.str_nverb.append("  |--> Number of Control Links = " + wrf.getControlLinks().size() + "\n");
+				this.str_verb.append("  |--> Number of Control Links = " + wrf.getControlLinks().size() + "\n");
+				
+				
+				if(this.verbose && wrf.getControlLinks().size()!=0){
+					this.str_verb.append("  |     |--> Control Links\n");
+					for(ControlLink link : wrf.getControlLinks()){
+						this.str_verb.append("  |          |--> " + link + "\n");
+					}
+					this.str_verb.append("  |\n");
+				}
+				
+				this.str_nverb.append("  |--> Number of Input ports = " + wrf.getInputPorts().size()+"\n");
+				this.str_verb.append("  |--> Number of Input ports = " + wrf.getInputPorts().size()+"\n");
+				
+				
+				if(this.verbose && wrf.getInputPorts().size()!=0){
+					this.str_verb.append("  |     |--> Input Ports\n");
+					for(InputPort iport : wrf.getInputPorts()){
+						this.str_verb.append("  |          |--> " + iport.toString()+"\n");
+					}
+					this.str_verb.append("  |\n");
+				}
+			
+				this.str_nverb.append("  |--> Number of Output Ports = " + wrf.getOutputPorts().size()+"\n");
+				this.str_verb.append("  |--> Number of Output Ports = " + wrf.getOutputPorts().size()+"\n");
+				
+				if(this.verbose && wrf.getOutputPorts().size()!=0){
+					this.str_verb.append("  |     |--> Output Ports\n");
+					for(OutputPort o_port : wrf.getOutputPorts()){
+						this.str_verb.append("  |          |--> " + o_port.toString()+"\n");
+					}
+					
+					this.str_verb.append("\n");
+				}
+				
+				this.str_nverb.append("\n");
+				this.str_verb.append("\n");
+			}
+			
+		} catch (ReaderException | IOException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	
+	//Saving the output into a log
+	public void writefile(String report, String url){
+		
+			File file = new File(url);
+			
+			if(!file.isFile()){
+				System.err.println("Error in writing the log file...");
+			}
+			
+			FileWriter writer;
+			BufferedWriter bfw;
+			try {
+				writer = new FileWriter(file);
+				bfw = new BufferedWriter(writer);
+				bfw.write(report);
+				bfw.close();
+				writer.close();
+				System.out.println("Results were saved into " + file.getPath());
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		
+	}
+		
+	public void isVerbose(){
+		if(verbose)
+			System.out.println(this.str_verb.toString());
+		else 
+			System.out.println(this.str_nverb.toString());
+	}
+	
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java
new file mode 100644
index 0000000..fc05e3b
--- /dev/null
+++ b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java
@@ -0,0 +1,151 @@
+package org.apache.taverna.tavlang.tools.validate;
+
+/*
+ * 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.
+ */
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+import org.apache.taverna.scufl2.api.io.ReaderException;
+import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
+import org.apache.taverna.scufl2.validation.correctness.CorrectnessValidationListener;
+import org.apache.taverna.scufl2.validation.correctness.CorrectnessValidator;
+import org.apache.taverna.scufl2.validation.correctness.ReportCorrectnessValidationListener;
+
+/*
+ * Takes .wfbundle/ .t2flow as the input
+ * */
+public class Validate {
+
+	private String logfile;
+	private String nonVerbose = "";
+	private String finalrep = "";
+	private boolean verbose;
+	private boolean check = false;
+	
+
+	public Validate(List<String> files, String file, boolean verbose) {
+		this.verbose = verbose;
+		this.logfile = file;
+		System.out.println("Validation started....");
+		for (String f : files) {
+			System.out.println("Validating " + f);
+			File wfile = new File(f);
+			read(wfile);
+			
+		}
+		System.out.println("Validation completed.......");
+		
+		
+		if (this.logfile != null) {
+			saveToLog(this.finalrep);
+		}
+	}
+
+	public void read(File file) {
+		WorkflowBundleIO io = new WorkflowBundleIO();
+		try {
+			this.finalrep += validate(io.readBundle(file, null), file.getName());
+			
+		} catch (ReaderException e) {
+			System.err.println(e.getMessage());
+
+		} catch (IOException e) {
+			System.err.println("Workflow bundle not found!");
+			System.err.println(e.getMessage());
+
+		}
+	}
+
+	public String validate(WorkflowBundle wfb, String file) {
+		
+		StringBuilder report2 = new StringBuilder();
+		CorrectnessValidationListener correctnessValidationListener = new ReportCorrectnessValidationListener();
+		CorrectnessValidator correctnessValidator = new CorrectnessValidator();
+		correctnessValidationListener = correctnessValidator.validate(wfb);
+		String report = correctnessValidationListener.toString().replace(
+				"ReportCorrectnessValidationListener [", "");
+
+		String[] sections = report.split(", ");
+
+		
+		
+		boolean detect = correctnessValidationListener.detectedProblems();
+		if (!detect){
+			report2.append("The workflow " + file + " has no errors. \n\n");
+			this.nonVerbose = "The workflow " + file + " has no errors. \n";
+		}
+			
+		
+//		System.out.println("The validation report for " + file);
+		report2.append("The validation report for " + file + "......\n");
+		report2.append("-------------------------------------------------------------------------------- \n");
+		for (int i = 0; i < sections.length; i++) {
+			String line = "-->"+sections[i].split("=")[0].replace("()", "").replace(
+					"get", "")
+					+ ":- ";
+			report2.append(line);
+			String line2 =  sections[i].split("=")[1].replace("[", "").replace("]","");
+			if(line2.equals("")) report2.append("null \n\n");
+			else report2.append("\t").append(line2).append("\n");
+			
+		
+		}
+		report2.append("--------------------------------------------------------------------------------- \n\n");
+		
+		if(detect){
+			System.out.println("The workflow bundle has following problems: \n"+report2.toString());
+			check = true;
+		}
+		
+		if(verbose){
+			System.out.println(report2.toString());
+		}else{
+			System.out.println(this.nonVerbose);
+		}
+		
+		return report2.toString();
+
+	}
+
+	public void saveToLog(String s) {
+		File logFile = new File(this.logfile);
+		FileWriter logwriter;
+		try {
+			logwriter = new FileWriter(logFile);
+			BufferedWriter blw = new BufferedWriter(logwriter);
+			blw.write(s);
+			blw.close();
+			logwriter.close();
+			System.out.println("Results were saved into " + logFile.getPath());
+		} catch (IOException e) {
+			System.err.println("Error writing to the file \n" + e.getMessage());
+		}
+
+	}
+	
+	public boolean getCheck(){
+		return this.check;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/src/main/resources/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/resources/.gitignore b/taverna-tavlangtool/src/main/resources/.gitignore
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/src/main/resources/META-INF/NOTICE
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/resources/META-INF/NOTICE b/taverna-tavlangtool/src/main/resources/META-INF/NOTICE
new file mode 100644
index 0000000..370a8fc
--- /dev/null
+++ b/taverna-tavlangtool/src/main/resources/META-INF/NOTICE
@@ -0,0 +1,7 @@
+Apache Taverna Language
+Copyright 2010-2014 University of Manchester, UK
+Copyright 2014-2015 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/src/test/java/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/test/java/.gitignore b/taverna-tavlangtool/src/test/java/.gitignore
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/CommandLineTest.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/CommandLineTest.java b/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/CommandLineTest.java
new file mode 100644
index 0000000..6beaa8e
--- /dev/null
+++ b/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/CommandLineTest.java
@@ -0,0 +1,43 @@
+package org.apache.taverna.tavlang.test;
+
+/*
+ * 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.
+ */
+
+
+import org.apache.taverna.tavlang.CommandLineTool;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class CommandLineTest {
+	CommandLineTool commandLineTool = new CommandLineTool();
+	
+	@Test
+	public void testHelp(){
+		commandLineTool.parse();
+		commandLineTool.parse("version");
+		commandLineTool.parse("help");
+		commandLineTool.parse("help", "convert");
+		commandLineTool.parse("help", "inspect");
+		commandLineTool.parse("help", "validate");
+		commandLineTool.parse("help", "help");
+	}
+	
+	
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestConvert.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestConvert.java b/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestConvert.java
new file mode 100644
index 0000000..a920db2
--- /dev/null
+++ b/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestConvert.java
@@ -0,0 +1,34 @@
+package org.apache.taverna.tavlang.test;
+
+/*
+ * 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.
+ */
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class TestConvert{
+
+	@Test
+	public void testConvertS() {
+//		fail("Not yet implemented");
+		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1e13219f/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestStats.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestStats.java b/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestStats.java
new file mode 100644
index 0000000..4c22377
--- /dev/null
+++ b/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestStats.java
@@ -0,0 +1,34 @@
+package org.apache.taverna.tavlang.test;
+
+/*
+ * 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.
+ */
+
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class TestStats {
+
+	@Test
+	public void test() {
+//		fail("Not yet implemented");
+	}
+
+}



[08/11] incubator-taverna-language git commit: taverna-tavlangtool module removed

Posted by st...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestTools.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestTools.java b/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestTools.java
deleted file mode 100644
index 483d4c3..0000000
--- a/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestTools.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.apache.taverna.tavlang.test;
-
-/*
- * 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.
- */
-
-import static org.junit.Assert.*;
-
-import java.util.HashMap;
-
-import org.apache.taverna.tavlang.tools.Tools.ConvertionTools;
-import org.junit.Test;
-import org.junit.*;
-
-/*
- * Test cases for the Tools Class.
- * Input :- The output file format
- * Output:- The relevant writer media type for that file format
- * 
- * */
-
-public class TestTools {
-
-	private ConvertionTools tools;
-	private HashMap<String, String> map = new HashMap<>();
-	
-	 
-	@Before
-	public void setMap(){
-		this.map.put("wfdesc", "text/vnd.wf4ever.wfdesc+turtle");
-		this.map.put("iwir", "application/vnd.shiwa.iwir+xml");
-		this.map.put("json", "application/ld+json");
-		this.map.put("wfbundle", "application/vnd.taverna.scufl2.workflow-bundle");
-		this.map.put("robundle", null);
-	}
-	
-	
-	@Test
-	public void testWfdesc() {
-		assertEquals(map.get("wfdesc"), ConvertionTools.valueOf("wfdesc").getMediaType(tools));
-	}
-
-	@Test
-	public void testIwir() {
-		assertEquals(map.get("iwir"), ConvertionTools.valueOf("iwir").getMediaType(tools));
-	}
-
-	@Test
-	public void testJson() {
-		assertEquals(map.get("json"), ConvertionTools.valueOf("json").getMediaType(tools));
-	}
-
-
-	@Test
-	public void testWfbundle() {
-		assertEquals(map.get("wfbundle"), ConvertionTools.valueOf("wfbundle").getMediaType(tools));
-	}
-	
-	
-	@Test
-	public void testRobundle() {
-		assertEquals(map.get("robundle"), ConvertionTools.valueOf("robundle").getMediaType(tools));
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestValidate.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestValidate.java b/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestValidate.java
deleted file mode 100644
index 58e0d3f..0000000
--- a/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestValidate.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.apache.taverna.tavlang.test;
-
-/*
- * 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.
- */
-
-
-import static org.junit.Assert.*;
-
-import java.awt.List;
-import java.util.ArrayList;
-
-import org.apache.taverna.robundle.Bundle;
-import org.apache.taverna.tavlang.tools.validate.Validate;
-import org.junit.Assert;
-import org.junit.Test;
-
-import com.google.common.collect.Lists;
-
-public class TestValidate {
-
-	
-	
-	@Test
-	public void test() {
-		ArrayList<String> list = Lists.newArrayList();
-		list.add("src/test/resources/workflows/t2flow/as.t2flow");
-		Validate val = new Validate(list, null, false);
-		
-		assertEquals(false, val.getCheck());
-		
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/src/test/resources/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/test/resources/.gitignore b/taverna-tavlangtool/src/test/resources/.gitignore
deleted file mode 100644
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/src/test/resources/workflows/t2flow/as.t2flow
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/test/resources/workflows/t2flow/as.t2flow b/taverna-tavlangtool/src/test/resources/workflows/t2flow/as.t2flow
deleted file mode 100644
index 2d9f127..0000000
--- a/taverna-tavlangtool/src/test/resources/workflows/t2flow/as.t2flow
+++ /dev/null
@@ -1,1674 +0,0 @@
-<?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
-
-       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.
--->
-<workflow xmlns="http://taverna.sf.net/2008/xml/t2flow" version="1" producedBy="taverna-2.1.0">
-  <dataflow id="92c5e8d5-8360-4f86-a845-09c9849cbdc5" role="top">
-    <name>Workflow1</name>
-    <inputPorts />
-    <outputPorts>
-      <port>
-        <name>asdasd</name>
-        <annotations />
-      </port>
-    </outputPorts>
-    <processors>
-      <processor>
-        <name>Workflow19</name>
-        <inputPorts>
-          <port>
-            <name>lk</name>
-            <depth>0</depth>
-          </port>
-        </inputPorts>
-        <outputPorts>
-          <port>
-            <name>kk</name>
-            <depth>0</depth>
-            <granularDepth>0</granularDepth>
-          </port>
-          <port>
-            <name>String_constant_value</name>
-            <depth>0</depth>
-            <granularDepth>0</granularDepth>
-          </port>
-        </outputPorts>
-        <annotations />
-        <activities>
-          <activity>
-            <raven>
-              <group>net.sf.taverna.t2.activities</group>
-              <artifact>dataflow-activity</artifact>
-              <version>1.0</version>
-            </raven>
-            <class>net.sf.taverna.t2.activities.dataflow.DataflowActivity</class>
-            <inputMap>
-              <map from="lk" to="lk" />
-            </inputMap>
-            <outputMap>
-              <map from="String_constant_value" to="String_constant_value" />
-              <map from="kk" to="kk" />
-            </outputMap>
-            <configBean encoding="dataflow">
-              <dataflow ref="c451b1cf-1c95-47e5-b89c-537a5501a1ef" />
-            </configBean>
-            <annotations />
-          </activity>
-        </activities>
-        <dispatchStack>
-          <dispatchLayer>
-            <raven>
-              <group>net.sf.taverna.t2.core</group>
-              <artifact>workflowmodel-impl</artifact>
-              <version>1.0</version>
-            </raven>
-            <class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-            <configBean encoding="xstream">
-              <net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-                <maxJobs>1</maxJobs>
-              </net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-            </configBean>
-          </dispatchLayer>
-          <dispatchLayer>
-            <raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy>
-<cross>
-<port name="lk" depth="0" />
-</cross>
-</strategy>
-</iteration>
-</iterationStrategyStack>
-</processor>
-<processor>
-<name>Concatenate_two_strings</name>
-<inputPorts>
-<port>
-<name>string2</name>
-<depth>0</depth>
-</port>
-<port>
-<name>string1</name>
-<depth>0</depth>
-</port>
-</inputPorts>
-<outputPorts>
-<port>
-<name>output</name>
-<depth>0</depth>
-<granularDepth>0</granularDepth>
-</port>
-</outputPorts>
-<annotations />
-<activities>
-<activity>
-<raven>
-<group>net.sf.taverna.t2.activities</group>
-<artifact>localworker-activity</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
-<inputMap>
-<map from="string2" to="string2" />
-<map from="string1" to="string1" />
-</inputMap>
-<outputMap>
-<map from="output" to="output" />
-</outputMap>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
-  <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
-  <script>output = string1 + string2;</script>
-  <dependencies />
-  <classLoaderSharing>workflow</classLoaderSharing>
-  <localDependencies />
-  <artifactDependencies />
-  <inputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>java.lang.String</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>string1</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>java.lang.String</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>string2</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-  </inputs>
-  <outputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-      <granularDepth>0</granularDepth>
-      <name>output</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-  </outputs>
-</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
-</configBean>
-<annotations />
-</activity>
-</activities>
-<dispatchStack>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-  <maxJobs>1</maxJobs>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy>
-<cross>
-<port name="string2" depth="0" />
-<port name="string1" depth="0" />
-</cross>
-</strategy>
-</iteration>
-</iterationStrategyStack>
-</processor>
-<processor>
-<name>Concatenate_two_strings_2</name>
-<inputPorts>
-<port>
-<name>string2</name>
-<depth>0</depth>
-</port>
-<port>
-<name>string1</name>
-<depth>0</depth>
-</port>
-</inputPorts>
-<outputPorts>
-<port>
-<name>output</name>
-<depth>0</depth>
-<granularDepth>0</granularDepth>
-</port>
-</outputPorts>
-<annotations />
-<activities>
-<activity>
-<raven>
-<group>net.sf.taverna.t2.activities</group>
-<artifact>localworker-activity</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
-<inputMap>
-<map from="string2" to="string2" />
-<map from="string1" to="string1" />
-</inputMap>
-<outputMap>
-<map from="output" to="output" />
-</outputMap>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
-  <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
-  <script>output = string1 + string2;</script>
-  <dependencies />
-  <classLoaderSharing>workflow</classLoaderSharing>
-  <localDependencies />
-  <artifactDependencies />
-  <inputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>java.lang.String</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>string1</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>java.lang.String</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>string2</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-  </inputs>
-  <outputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-      <granularDepth>0</granularDepth>
-      <name>output</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-  </outputs>
-</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
-</configBean>
-<annotations />
-</activity>
-</activities>
-<dispatchStack>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-  <maxJobs>1</maxJobs>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy>
-<cross>
-<port name="string2" depth="0" />
-<port name="string1" depth="0" />
-</cross>
-</strategy>
-</iteration>
-</iterationStrategyStack>
-</processor>
-<processor>
-<name>Create_Lots_Of_Strings</name>
-<inputPorts />
-<outputPorts>
-<port>
-<name>strings</name>
-<depth>1</depth>
-<granularDepth>1</granularDepth>
-</port>
-</outputPorts>
-<annotations />
-<activities>
-<activity>
-<raven>
-<group>net.sf.taverna.t2.activities</group>
-<artifact>localworker-activity</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
-<inputMap />
-<outputMap>
-<map from="strings" to="strings" />
-</outputMap>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
-  <localworkerName>org.embl.ebi.escience.scuflworkers.java.EmitLotsOfStrings</localworkerName>
-  <script>List strings = new ArrayList();
-for (int i = 0; i &lt; 40; i++) {
-	strings.add("String" + i);
-}
-</script>
-  <dependencies />
-  <classLoaderSharing>workflow</classLoaderSharing>
-  <localDependencies />
-  <artifactDependencies />
-  <inputs />
-  <outputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-      <granularDepth>1</granularDepth>
-      <name>strings</name>
-      <depth>1</depth>
-      <mimeTypes>
-        <string>l('text/plain')</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-  </outputs>
-</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
-</configBean>
-<annotations />
-</activity>
-</activities>
-<dispatchStack>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-  <maxJobs>1</maxJobs>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy />
-</iteration>
-</iterationStrategyStack>
-</processor>
-<processor>
-<name>Concatenate_two_strings_3</name>
-<inputPorts>
-<port>
-<name>string1</name>
-<depth>0</depth>
-</port>
-<port>
-<name>string2</name>
-<depth>0</depth>
-</port>
-</inputPorts>
-<outputPorts>
-<port>
-<name>output</name>
-<depth>0</depth>
-<granularDepth>0</granularDepth>
-</port>
-</outputPorts>
-<annotations />
-<activities>
-<activity>
-<raven>
-<group>net.sf.taverna.t2.activities</group>
-<artifact>localworker-activity</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
-<inputMap>
-<map from="string2" to="string2" />
-<map from="string1" to="string1" />
-</inputMap>
-<outputMap>
-<map from="output" to="output" />
-</outputMap>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
-  <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
-  <script>output = string1 + string2;</script>
-  <dependencies />
-  <classLoaderSharing>workflow</classLoaderSharing>
-  <localDependencies />
-  <artifactDependencies />
-  <inputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>java.lang.String</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>string1</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>java.lang.String</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>string2</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-  </inputs>
-  <outputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-      <granularDepth>0</granularDepth>
-      <name>output</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-  </outputs>
-</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
-</configBean>
-<annotations />
-</activity>
-</activities>
-<dispatchStack>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-  <maxJobs>1</maxJobs>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy>
-<cross>
-<port name="string1" depth="0" />
-<port name="string2" depth="0" />
-</cross>
-</strategy>
-</iteration>
-</iterationStrategyStack>
-</processor>
-<processor>
-<name>String_constant</name>
-<inputPorts />
-<outputPorts>
-<port>
-<name>value</name>
-<depth>0</depth>
-<granularDepth>0</granularDepth>
-</port>
-</outputPorts>
-<annotations />
-<activities>
-<activity>
-<raven>
-<group>net.sf.taverna.t2.activities</group>
-<artifact>stringconstant-activity</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.activities.stringconstant.StringConstantActivity</class>
-<inputMap />
-<outputMap>
-<map from="value" to="value" />
-</outputMap>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean xmlns="">
-  <value>Add your own value here</value>
-</net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean>
-</configBean>
-<annotations />
-</activity>
-</activities>
-<dispatchStack>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-  <maxJobs>1</maxJobs>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy />
-</iteration>
-</iterationStrategyStack>
-</processor>
-<processor>
-<name>Concatenate_two_strings_4</name>
-<inputPorts>
-<port>
-<name>string1</name>
-<depth>0</depth>
-</port>
-<port>
-<name>string2</name>
-<depth>0</depth>
-</port>
-</inputPorts>
-<outputPorts>
-<port>
-<name>output</name>
-<depth>0</depth>
-<granularDepth>0</granularDepth>
-</port>
-</outputPorts>
-<annotations />
-<activities>
-<activity>
-<raven>
-<group>net.sf.taverna.t2.activities</group>
-<artifact>localworker-activity</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
-<inputMap>
-<map from="string2" to="string2" />
-<map from="string1" to="string1" />
-</inputMap>
-<outputMap>
-<map from="output" to="output" />
-</outputMap>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
-  <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
-  <script>output = string1 + string2;</script>
-  <dependencies />
-  <classLoaderSharing>workflow</classLoaderSharing>
-  <localDependencies />
-  <artifactDependencies />
-  <inputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>java.lang.String</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>string1</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>java.lang.String</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>string2</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-  </inputs>
-  <outputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-      <granularDepth>0</granularDepth>
-      <name>output</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-  </outputs>
-</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
-</configBean>
-<annotations />
-</activity>
-</activities>
-<dispatchStack>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-  <maxJobs>1</maxJobs>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy>
-<cross>
-<port name="string1" depth="0" />
-<port name="string2" depth="0" />
-</cross>
-</strategy>
-</iteration>
-</iterationStrategyStack>
-</processor>
-<processor>
-<name>Echo_List</name>
-<inputPorts>
-<port>
-<name>inputlist</name>
-<depth>1</depth>
-</port>
-</inputPorts>
-<outputPorts>
-<port>
-<name>outputlist</name>
-<depth>1</depth>
-<granularDepth>1</granularDepth>
-</port>
-</outputPorts>
-<annotations />
-<activities>
-<activity>
-<raven>
-<group>net.sf.taverna.t2.activities</group>
-<artifact>localworker-activity</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
-<inputMap>
-<map from="inputlist" to="inputlist" />
-</inputMap>
-<outputMap>
-<map from="outputlist" to="outputlist" />
-</outputMap>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
-  <localworkerName>org.embl.ebi.escience.scuflworkers.java.EchoList</localworkerName>
-  <script>outputlist = inputlist;</script>
-  <dependencies />
-  <classLoaderSharing>workflow</classLoaderSharing>
-  <localDependencies />
-  <artifactDependencies />
-  <inputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>[B</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>inputlist</name>
-      <depth>1</depth>
-      <mimeTypes>
-        <string>l('')</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-  </inputs>
-  <outputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-      <granularDepth>1</granularDepth>
-      <name>outputlist</name>
-      <depth>1</depth>
-      <mimeTypes>
-        <string>l('')</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-  </outputs>
-</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
-</configBean>
-<annotations />
-</activity>
-</activities>
-<dispatchStack>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-  <maxJobs>1</maxJobs>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy>
-<cross>
-<port name="inputlist" depth="1" />
-</cross>
-</strategy>
-</iteration>
-</iterationStrategyStack>
-</processor>
-</processors>
-<conditions />
-<datalinks>
-<datalink>
-<sink type="processor">
-<processor>Workflow19</processor>
-<port>lk</port>
-</sink>
-<source type="processor">
-<processor>Concatenate_two_strings</processor>
-<port>output</port>
-</source>
-</datalink>
-<datalink>
-<sink type="processor">
-<processor>Concatenate_two_strings</processor>
-<port>string2</port>
-</sink>
-<source type="processor">
-<processor>Concatenate_two_strings_2</processor>
-<port>output</port>
-</source>
-</datalink>
-<datalink>
-<sink type="processor">
-<processor>Concatenate_two_strings</processor>
-<port>string1</port>
-</sink>
-<source type="processor">
-<processor>Create_Lots_Of_Strings</processor>
-<port>strings</port>
-</source>
-</datalink>
-<datalink>
-<sink type="processor">
-<processor>Concatenate_two_strings_2</processor>
-<port>string2</port>
-</sink>
-<source type="processor">
-<processor>Create_Lots_Of_Strings</processor>
-<port>strings</port>
-</source>
-</datalink>
-<datalink>
-<sink type="processor">
-<processor>Concatenate_two_strings_2</processor>
-<port>string1</port>
-</sink>
-<source type="processor">
-<processor>Create_Lots_Of_Strings</processor>
-<port>strings</port>
-</source>
-</datalink>
-<datalink>
-<sink type="processor">
-<processor>Concatenate_two_strings_3</processor>
-<port>string1</port>
-</sink>
-<source type="processor">
-<processor>Workflow19</processor>
-<port>kk</port>
-</source>
-</datalink>
-<datalink>
-<sink type="processor">
-<processor>Concatenate_two_strings_3</processor>
-<port>string2</port>
-</sink>
-<source type="processor">
-<processor>String_constant</processor>
-<port>value</port>
-</source>
-</datalink>
-<datalink>
-<sink type="processor">
-<processor>Concatenate_two_strings_4</processor>
-<port>string1</port>
-</sink>
-<source type="processor">
-<processor>String_constant</processor>
-<port>value</port>
-</source>
-</datalink>
-<datalink>
-<sink type="processor">
-<processor>Concatenate_two_strings_4</processor>
-<port>string2</port>
-</sink>
-<source type="processor">
-<processor>Workflow19</processor>
-<port>String_constant_value</port>
-</source>
-</datalink>
-<datalink>
-<sink type="merge">
-<processor>Echo_List</processor>
-<port>inputlist</port>
-</sink>
-<source type="processor">
-<processor>Concatenate_two_strings_4</processor>
-<port>output</port>
-</source>
-</datalink>
-<datalink>
-<sink type="merge">
-<processor>Echo_List</processor>
-<port>inputlist</port>
-</sink>
-<source type="processor">
-<processor>Concatenate_two_strings_3</processor>
-<port>output</port>
-</source>
-</datalink>
-<datalink>
-<sink type="dataflow">
-<port>asdasd</port>
-</sink>
-<source type="processor">
-<processor>Echo_List</processor>
-<port>outputlist</port>
-</source>
-</datalink>
-</datalinks>
-<annotations />
-</dataflow>
-<dataflow id="c451b1cf-1c95-47e5-b89c-537a5501a1ef" role="nested">
-<name>Workflow19</name>
-<inputPorts>
-<port>
-<name>lk</name>
-<depth>0</depth>
-<granularDepth>0</granularDepth>
-<annotations />
-</port>
-</inputPorts>
-<outputPorts>
-<port>
-<name>kk</name>
-<annotations />
-</port>
-<port>
-<name>String_constant_value</name>
-<annotations />
-</port>
-</outputPorts>
-<processors>
-<processor>
-<name>Concatenate_two_strings</name>
-<inputPorts>
-<port>
-<name>string1</name>
-<depth>0</depth>
-</port>
-<port>
-<name>string2</name>
-<depth>0</depth>
-</port>
-</inputPorts>
-<outputPorts>
-<port>
-<name>output</name>
-<depth>0</depth>
-<granularDepth>0</granularDepth>
-</port>
-</outputPorts>
-<annotations />
-<activities>
-<activity>
-<raven>
-<group>net.sf.taverna.t2.activities</group>
-<artifact>localworker-activity</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
-<inputMap>
-<map from="string2" to="string2" />
-<map from="string1" to="string1" />
-</inputMap>
-<outputMap>
-<map from="output" to="output" />
-</outputMap>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
-  <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
-  <script>output = string1 + string2;</script>
-  <dependencies />
-  <classLoaderSharing>workflow</classLoaderSharing>
-  <localDependencies />
-  <artifactDependencies />
-  <inputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>java.lang.String</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>string1</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>java.lang.String</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>string2</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-  </inputs>
-  <outputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-      <granularDepth>0</granularDepth>
-      <name>output</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-  </outputs>
-</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
-</configBean>
-<annotations />
-</activity>
-</activities>
-<dispatchStack>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-  <maxJobs>1</maxJobs>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy>
-<cross>
-<port name="string1" depth="0" />
-<port name="string2" depth="0" />
-</cross>
-</strategy>
-</iteration>
-</iterationStrategyStack>
-</processor>
-<processor>
-<name>string1_value</name>
-<inputPorts />
-<outputPorts>
-<port>
-<name>value</name>
-<depth>0</depth>
-<granularDepth>0</granularDepth>
-</port>
-</outputPorts>
-<annotations />
-<activities>
-<activity>
-<raven>
-<group>net.sf.taverna.t2.activities</group>
-<artifact>stringconstant-activity</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.activities.stringconstant.StringConstantActivity</class>
-<inputMap />
-<outputMap>
-<map from="value" to="value" />
-</outputMap>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean xmlns="">
-  <value>kjkj</value>
-</net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean>
-</configBean>
-<annotations />
-</activity>
-</activities>
-<dispatchStack>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-  <maxJobs>1</maxJobs>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy />
-</iteration>
-</iterationStrategyStack>
-</processor>
-<processor>
-<name>String_constant</name>
-<inputPorts />
-<outputPorts>
-<port>
-<name>value</name>
-<depth>0</depth>
-<granularDepth>0</granularDepth>
-</port>
-</outputPorts>
-<annotations />
-<activities>
-<activity>
-<raven>
-<group>net.sf.taverna.t2.activities</group>
-<artifact>stringconstant-activity</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.activities.stringconstant.StringConstantActivity</class>
-<inputMap />
-<outputMap>
-<map from="value" to="value" />
-</outputMap>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean xmlns="">
-  <value>Add your own value here</value>
-</net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean>
-</configBean>
-<annotations />
-</activity>
-</activities>
-<dispatchStack>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-  <maxJobs>1</maxJobs>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy />
-</iteration>
-</iterationStrategyStack>
-</processor>
-</processors>
-<conditions>
-<condition control="Concatenate_two_strings" target="String_constant" />
-</conditions>
-<datalinks>
-<datalink>
-<sink type="processor">
-<processor>Concatenate_two_strings</processor>
-<port>string1</port>
-</sink>
-<source type="processor">
-<processor>string1_value</processor>
-<port>value</port>
-</source>
-</datalink>
-<datalink>
-<sink type="processor">
-<processor>Concatenate_two_strings</processor>
-<port>string2</port>
-</sink>
-<source type="dataflow">
-<port>lk</port>
-</source>
-</datalink>
-<datalink>
-<sink type="dataflow">
-<port>kk</port>
-</sink>
-<source type="processor">
-<processor>Concatenate_two_strings</processor>
-<port>output</port>
-</source>
-</datalink>
-<datalink>
-<sink type="dataflow">
-<port>String_constant_value</port>
-</sink>
-<source type="processor">
-<processor>String_constant</processor>
-<port>value</port>
-</source>
-</datalink>
-</datalinks>
-<annotations />
-</dataflow>
-</workflow>
\ No newline at end of file


[09/11] incubator-taverna-language git commit: taverna-tavlangtool module removed

Posted by st...@apache.org.
taverna-tavlangtool module removed

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

Branch: refs/heads/master
Commit: 6e2aa825256b26d1622ed9b6f6b8319d3620b3cc
Parents: 3aa91bf
Author: Menaka Madushanka <me...@gmail.com>
Authored: Tue Feb 2 12:00:44 2016 +0530
Committer: Menaka Madushanka <me...@gmail.com>
Committed: Tue Feb 2 12:00:44 2016 +0530

----------------------------------------------------------------------
 taverna-tavlangtool/README.md                   |  425 -----
 taverna-tavlangtool/pom.xml                     |  213 ---
 taverna-tavlangtool/src/main/java/.gitignore    |    0
 .../apache/taverna/tavlang/CommandLineTool.java |  350 ----
 .../taverna/tavlang/TavernaCommandline.java     |   29 -
 .../org/apache/taverna/tavlang/tools/Tools.java |   88 -
 .../tavlang/tools/convert/Scufl2Convert.java    |  206 ---
 .../taverna/tavlang/tools/convert/ToJson.java   |  298 ----
 .../tavlang/tools/convert/ToRobundle.java       |   66 -
 .../tavlang/tools/inspect/ProcessorNames.java   |  169 --
 .../tavlang/tools/inspect/ServiceTypes.java     |  112 --
 .../taverna/tavlang/tools/stats/GetWfStat.java  |  193 --
 .../tavlang/tools/validate/Validate.java        |  151 --
 .../src/main/resources/.gitignore               |    0
 .../src/main/resources/META-INF/NOTICE          |    7 -
 taverna-tavlangtool/src/test/java/.gitignore    |    0
 .../taverna/tavlang/test/CommandLineTest.java   |   43 -
 .../taverna/tavlang/test/TestConvert.java       |   34 -
 .../apache/taverna/tavlang/test/TestStats.java  |   34 -
 .../apache/taverna/tavlang/test/TestTools.java  |   80 -
 .../taverna/tavlang/test/TestValidate.java      |   49 -
 .../src/test/resources/.gitignore               |    0
 .../test/resources/workflows/t2flow/as.t2flow   | 1674 ------------------
 23 files changed, 4221 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/README.md
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/README.md b/taverna-tavlangtool/README.md
deleted file mode 100644
index e76cbcd..0000000
--- a/taverna-tavlangtool/README.md
+++ /dev/null
@@ -1,425 +0,0 @@
-<!--
-   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.
--->
-
-# Apache Taverna Language Command Line
-
-
-This is planned as a command line for the
-[Apache Taverna Language](https://github.com/apache/incubator-taverna-language/),
-an API for the 
-[Apache Taverna](http://taverna.incubator.apache.org/) workflows.
-
-This module is a **work in progress** as part of Google Summer of Code 2015.
-
-
-
-## License
-
-(c) 2015 Apache Software Foundation
-
-This product includes software developed at The [Apache Software
-Foundation](http://www.apache.org/).
-
-Licensed under the [Apache License
-2.0](https://www.apache.org/licenses/LICENSE-2.0), see the file
-[../LICENSE](../LICENSE) for details.
-
-The file [NOTICE](src/main/resources/NOTICE) contains any additional attributions and
-details about embedded third-party libraries and source code.
-
-
-# Contribute
-
-Please subscribe to and contact the 
-[dev@taverna](http://taverna.incubator.apache.org/community/lists#dev%20mailing%20list)
-for any questions, suggestions and discussions about 
-Apache Taverna Language Commandline.
-
-Bugs and planned features are tracked in the Jira
-[Issue tracker](https://issues.apache.org/jira/browse/TAVERNA/component/12326903)
-under the `TAVERNA` component _GSOC Taverna Language Command line_. Feel free
-to add an issue!
-
-To suggest changes to this source code, feel free to raise a 
-[GitHub pull request](https://github.com/apache/incubator-taverna-mobile/pulls).
-Any contributions received are assumed to be covered by the [Apache License
-2.0](https://www.apache.org/licenses/LICENSE-2.0). We might ask you 
-to sign a [Contributor License Agreement](https://www.apache.org/licenses/#clas)
-before accepting a larger contribution.
-
-
-# Building and install requirements
-
-## Requisites
-
-* Java 1.7 or newer
-* [Apache Maven](https://maven.apache.org/download.html) 3.2.5 or newer (older
-  versions probably also work)
-
-
-## Building
-
-To build, run:
-
-    mvn clean install
-
-
-# Usage
-
-	usage: tavlang <command> [<args>]
-	
-	The most commonly used tavlang commands are:
-	    convert    Convert the given workflow
-	    help       Display help information about Tvarna
-	    inspect    Inspect the given workflow and show the results on the terminal
-	    validate   Validate the given workflow
-	    version    Show version informantion
-	
-	See 'tavlang help <command>' for more information on a specific command.
-
-# Documentation
-
-The Taverna language command line tool is for accessing the features of the Taverna language modules. 
-The tool has the following functions:
-
-* Conversion
-* Inspection
-* Validation
-* Viewing workflow statistics.
-	
-## Command line structure 
-	
-	$tavlang <command> <options> [arguments and parameters]
-	
-Each command has its own set of options.
-
-###Commands and Options
-The tool has the following major commands:
-
-* convert: Options {-r -- recursive, -i --input, -o --output,}
-* inspect: Options {-l --log}
-* validate: Options {-l --log, -v --verbose}
-* stats: Options {-l --log, -v --verbose}
-
-## Commands in detail
-
-### convert ------------------------------------------------------
-
-Convert the given workflow file/s into a specified output format.
-
-Usage:
-	
-	tavlang convert (--output_fomat) ([[options] [arguments]]|files...)
-	
- Supported output formats are,
- 
- * wfbundle
- * iwir
- * json
- * robundle
- * structure
- 
-Options:
-
- * -r, --recursive : Convert all workflow files in a given directory recursively
- * -i, --input     : Used with recursive case. Specify the input directory
- * -o, --output    : Specify the out put directory 
-
-*The tool can only convert into one format at a time
-
-There are two methods for using the conversion command.
-
-####  1. Non-recursive method
-
-Usage: 
-
-	$tavlang convert (--output_format) [options] [arguments] 
-	
-####### Example 1: Without specifying any options
-	
-	$tavlang convert --structure /helloworld.t2flow
-	
-Output:
-
-	/converted/helloworld.structure is created
-
-Convert the helloworld.t2flow into helloworld.structure format and store in the /converted directory
-
-###### Example 2: Convert multiple workflows
-	
-	$tavlang convert --json /helloworld.t2flow /hello.t2flow
-	
-Output:
-	
-	/converted/helloworld.json is created
-	/converted/hello.json is created
-	
-Convert both workflow files and store them in /converted directory
-
-###### Example 3: with options and arguments
-
-	$tavlang convert --wfbundle /helloworld.t2flow -o /output/workflows
-	
-Output:
-	
-	/output/workflows/helloworld.wfbundle is created
-	
-Convert the workflow file/s and store them in the specified output directory
-
-####  2. Recursive method
-
-If there are many workflows in a directory, which are needed to be converted into one single format use this method.
-	
-Usage: 
-	
-	$tavlang convert -r (--output_format) -i workflow_src_dir <options> [arguments]
-
-###### Example 4: Without options and arguments
-
-	$tavlang convert -r --json -i /home/user/workflows
-	
-Convert all the workflows in the input directory into the specified format and store them in the "/home/user/workflows/converted" directory.
-
-Output: Suppose that there are 2 workflow files in the dir 1.t2flow and 2.t2flow
-
-	/home/workflows/converted/1.json is created
-	/home/workflows/converted/2.json is created
-
-###### Example 5: with output dir is specified
-
-	$tavlang convert -r --iwir -i /home/workflows -o /home/final
-	
-Convert all the workflows in the input directory and store them in /home/final directory
-
-Output:
-
-	/home/final/1.iwir is created
-	/home/final/2.iwir is created
-	
-### inspect -----------------------------------------------------------------
-
-Inspect the given workflow file/s and give the inspection report. 
-Supported workflow bundle formats: .wfbundle, .t2flow
-
-Usage:-
-	
-	$tavlang inspect (--inspection_options) <-other-options> [arguments] workflow_undles_to_be_inspected
-	
-Inspection options: 
-
- * --servicetypes :- List all the service-types used in the workflow
- * --processornames :- List the tree of the processor names used in the workflow
- 
-Other Options:
-
- * -l, --log :- save the inspection report in a text file 
- 
-###### Example 1: Without any other-options
-
-1. Inspection result for Service types
-
-
-	$tavlang inspect --servicetypes helloworld.wfbundle
-	Service types used in helloworld.wfbundle :
-
-	http://ns.taverna.org.uk/2010/activity/constant
-	**************************************************
-
-2. inspection result for Processor names
-	
-	
-	$tavlang inspect --processornames helloworld.wfbundle
-	Processor tree of helloworld.wfbundle 
-	+ Hello_World
-	  - hello
-	
-###### Example 2: With other options
-The output is the same but the results will be saved in the given file.
-
-	$tavlang inspect --processornames helloworld.wfbundle -l results.txt
-	Processor tree of helloworld.wfbundle 
-	+ Hello_World
-	 - hello
-
-
-The output will be saved in results.txt in the same format.
-
-### validate ----------------------------------------------------------------------
-
-Validates the given workflow file or files and gives the validation report. 
-Validate tool checks for the following problematic conditions.
-
- * Empty Iteration Strategy Top-Node Problems
- * Mismatch Configurable Type Problems
- * Non-Absolute URI Problems
- * Null Field Problems
- * Out-Of-Scope Value Problems
- * Port Mentioned Twice Problems
- * Port Missing From Iteration Strategy Stack Problems
- * Wrong Parent Problems
- * Incompatible Granular Depth Problems
- 
-Usage:-
-
-	$tavlang validate [options][arguments] input_files
-
-Options:- 
-
- * -l, --log: Save the validation report in a text file
- * -v, --verbose: Verbose mode
-
-Supported workflow bundle formats: .t2flow and .wfbundle
-
-###### Example 1: Normal mode
-
-  Validate one workflow bundle
-
-	$tavlang validate helloworld.t2flow
-	
-Output: 
-	
-	Validation started....
-	Validating helloworld.t2flow
-	The workflow helloworld.t2flow has no errors. 
-
-	Validation completed.......
- 
-  Validate more than one workflow bundles
- 
-	$tavlang validate ../../workflow2.t2flow ../../workflow3.wfbundle
-
-	Validation started....
-	Validating ../../workflow2.t2flow
-	The workflow workflow2.t2flow has no errors. 
-
-	Validating ../../workflow3.wfbundle
-	The workflow workflow3.t2flow has no errors. 
-
-	Validation completed.......
-
-
-###### Example 2: Verbose mode
-
-The report is more explanatory.
-
-	$tavlang validate -v ../../workflow2.t2flow
-
-	Validation started....
-	Validating ../../workflow2.t2flow
-	The workflow workflow2.t2flow has no errors. 
-
-	The validation report for defaultActivitiesTaverna2.wfbundle......
-	-------------------------------------------------------------------------------- 
-	-->NegativeValueProblems:- null 
-	
-	-->EmptyIterationStrategyTopNodeProblems:- null 
-
-	-->MismatchConfigurableTypeProblems:- null 
-
-	-->NonAbsoluteURIProblems:- null 
-
-	-->NullFieldProblems:- null 
-
-	-->OutOfScopeValueProblems:- null 
-
-	-->PortMentionedTwiceProblems:- null 
-
-	-->PortMissingFromIterationStrategyStackProblems:- null 
-
-	-->WrongParentProblems:- null 
-
-	-->IncompatibleGranularDepthProblems:- null 
-
-	---------------------------------------------------------------------------------
-
-###### Example 3: Saving results to a file
-
-	$tavlang validate workflow2.t2flow -l log2.txt 
-	Validation started.... 
-	Validating workflow2.t2flow 
-	The workflow helloworld.wfbundle has no errors. 
-	Validation completed....... 
-	
-	Results were saved into log2.txt
-
-### stats ----------------------------------------------------------------------------------
-
-A workflow contains several resources.
-
-* Processors
-* Input ports
-* Output ports
-* Data links
-* Control links
-
-The stats command gives a report of the resources used in the workflow.
-
-Usage:- 
-
-	$tavlang stats <options>[arguments] input_files...
-	
-Options:- 
-
- * -l, – – log : Save results in a log file
- * -v, – – verbose : verbose mode
- 
-Supported workflow bundle formats:- .t2flow, .wfbundle
-
-###### Example 1: Normal mode
-
-	$tavlang helloworld.wfbundle
-	>>> Statistics of the workflow bundle: helloworld.wfbundle <<<
-	Name of the workflow = Hello_World
-	 |--> Number of Processors = 1
-	 |--> Number of Data Links = 1
-	 |--> Number of Control Links = 0
-	 |--> Number of Input ports = 0
-	 |--> Number of Output Ports = 1
- 
-###### Example 2: Verbose mode 
-
-	$tavlang -v ../../../helloworld.wfbundle
-	>>> Statistics of the workflow bundle: helloworld.wfbundle <<<
-	Name of the workflow = Hello_World
-	 |--> Number of Processors = 1
-	 | |--> Processors: 
-	 |      |--> hello
-	 |
-	 |--> Number of Data Links = 1
-	 | |--> Data Links
-	 |      |--> DataLink value=>greeting
-	 |
-	 |--> Number of Control Links = 0
-	 |--> Number of Input ports = 0
-	 |--> Number of Output Ports = 1
-	 | |--> Output Ports
-	 |      |--> OutputWorkflowPort "greeting"
-	 
-###### Example 3: Saving results in a file 
-
-	$tavlang -l ../../results.txt ../../../helloworld.wfbundle
-	>>> Statistics of the workflow bundle: helloworld.wfbundle <<<
-	Name of the workflow = Hello_World
-	 |--> Number of Processors = 1
-	 |--> Number of Data Links = 1
-	 |--> Number of Control Links = 0
-	 |--> Number of Input ports = 0
-	 |--> Number of Output Ports = 1
-
-	Results were saved into ../../results.txt
-	
------------------------------------------------------------------------------------------------------------------------------------------
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/pom.xml
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/pom.xml b/taverna-tavlangtool/pom.xml
deleted file mode 100644
index c23c35f..0000000
--- a/taverna-tavlangtool/pom.xml
+++ /dev/null
@@ -1,213 +0,0 @@
-<?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
-
-       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>taverna-language</artifactId>
-      	<version>0.15.1-incubating-SNAPSHOT</version>
-    </parent>
-    <artifactId>taverna-tavlangtool</artifactId>
-    <name>Apache Taverna Language Commandline</name>
-    <description>Command line for Taverna Language (experimental)</description>
-
-	
-    <dependencies>
-    
-    	<dependency>
-			<groupId>commons-io</groupId>
-			<artifactId>commons-io</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>${project.parent.groupId}</groupId>
-			<artifactId>taverna-scufl2-api</artifactId>
-			<version>${project.parent.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>${project.groupId}</groupId>
-			<artifactId>taverna-scufl2-wfbundle</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>${project.groupId}</groupId>
-			<artifactId>taverna-scufl2-t2flow</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-
-<!-- 		<dependency> -->
-<!-- 			<groupId>org.shiwa.iwir</groupId> -->
-<!-- 			<artifactId>iwir</artifactId> -->
-<!-- 			<version>1.1.4</version> -->
-<!-- 			<scope>optional</scope> -->
-<!-- 			<systemPath>${project.build.directory}/taverna-language-commandline/lib/</systemPath> -->
-<!-- 		</dependency> -->
-		
-   	 <dependency>
-		<groupId>no.s11.scufl2</groupId>
-		<artifactId>scufl2-iwir</artifactId>
-		<version>0.2-SNAPSHOT</version>
-        <optional>true</optional>
-    </dependency>
-
- 
-		
-		<dependency>
-			<groupId>com.thoughtworks.xstream</groupId>
-			<artifactId>xstream</artifactId>
-			<version>1.4.8</version>
-		</dependency>
-
-
-		<!-- <dependency> <groupId>${project.groupId}</groupId> <artifactId>taverna-scufl2-wfdesc</artifactId> 
-			<version>${project.version}</version> <optional>true</optional> </dependency> -->
-		<!-- <dependency> <groupId>org.purl.wf4ever</groupId> <artifactId>scufl2-wfdesc</artifactId> 
-			<version>0.3.7</version> </dependency> -->
-		<dependency>
-			<groupId>com.fasterxml.jackson.core</groupId>
-			<artifactId>jackson-core</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>com.fasterxml.jackson.core</groupId>
-			<artifactId>jackson-databind</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>${project.groupId}</groupId>
-			<artifactId>taverna-scufl2-ucfpackage</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>${project.groupId}</groupId>
-			<artifactId>taverna-robundle</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<scope>test</scope>
-		</dependency>
-
-		<dependency>
-			<groupId>io.airlift</groupId>
-			<artifactId>airline</artifactId>
-			<!-- <version>${io.airlift.airline.version}</version> -->
-			<version>0.7</version>
-		</dependency>
-
-
-	</dependencies>
-
-	<build>
-		<!-- TODO: plugins for launchers and executable jar files? -->
-		<plugins>
-
-			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>appassembler-maven-plugin</artifactId>
-				<version>1.1.1</version>
-				<executions>
-					<execution>
-						<id>assemble</id>
-						<phase>package</phase>
-						<goals>
-							<goal>assemble</goal>
-						</goals>
-					</execution>
-				</executions>
-				<configuration>
-					<repositoryLayout>flat</repositoryLayout>
-					<repositoryName>lib</repositoryName>
-					<assembleDirectory>${project.build.directory}/${project.artifactId}</assembleDirectory>
-					<programs>
-						<program>
-							<mainClass>org.apache.taverna.tavlang.TavernaCommandline</mainClass>
-							<name>tavlang</name>
-						</program>
-					</programs>
-				</configuration>
-			</plugin>
-
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-shade-plugin</artifactId>
-				<version>2.3</version>
-				<executions>
-					<execution>
-						<phase>package</phase>
-						<goals>
-							<goal>shade</goal>
-						</goals>
-						<configuration>
-							<transformers>
-								<transformer
-									implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
-								<transformer
-									implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
-									<mainClass>org.apache.taverna.tavlang.TavernaCommandline</mainClass>
-								</transformer>
-								<transformer implementation="org.apache.maven.plugins.shade.resource.ApacheNoticeResourceTransformer">
-                    			<addHeader>false</addHeader>
-                    			</transformer>
-							</transformers>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-
-
-		</plugins>
-	</build>
-
-	<repositories>
-		<repository>
-			<releases>
-				<enabled>false</enabled>
-			</releases>
-			<snapshots />
-			<id>mygrid-repository</id>
-			<name>myGrid Repository</name>
-			<url>http://www.mygrid.org.uk/maven/repository</url>
-		</repository>
-		
-		<repository>
-			<id>mygrid-snapshot-repository</id>
-			<name>myGrid Snapshot Repository</name>
-			<url>http://www.mygrid.org.uk/maven/snapshot-repository</url>
-			<releases>
-				<enabled>false</enabled>
-			</releases>
-			<snapshots />
-		</repository>
-
-		<repository>
-			<id>apache.snapshots</id>
-			<name>Apache Snapshot Repository</name>
-			<url>http://repository.apache.org/snapshots</url>
-			<releases>
-				<enabled>false</enabled>
-			</releases>
-		</repository>
-	</repositories>
-
-</project>

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/src/main/java/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/.gitignore b/taverna-tavlangtool/src/main/java/.gitignore
deleted file mode 100644
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java
deleted file mode 100644
index 068c933..0000000
--- a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java
+++ /dev/null
@@ -1,350 +0,0 @@
-package org.apache.taverna.tavlang;
-
-/*
- * 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.
- */
-
-import io.airlift.airline.Arguments;
-import io.airlift.airline.Cli;
-import io.airlift.airline.Cli.CliBuilder;
-import io.airlift.airline.Command;
-import io.airlift.airline.Help;
-import io.airlift.airline.Option;
-
-import java.io.IOException;
-import java.util.List;
-
-import javax.inject.Inject;
-import javax.xml.bind.JAXBException;
-
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.tavlang.tools.convert.Scufl2Convert;
-import org.apache.taverna.tavlang.tools.convert.ToRobundle;
-import org.apache.taverna.tavlang.tools.inspect.ProcessorNames;
-import org.apache.taverna.tavlang.tools.inspect.ServiceTypes;
-import org.apache.taverna.tavlang.tools.stats.GetWfStat;
-import org.apache.taverna.tavlang.tools.validate.Validate;
-
-import com.google.common.collect.Lists;
-
-/*
- * The command line options for convert, validate and inspect workflows.
- * Use the airlift/airline library
- * */
-
-public class CommandLineTool {
-
-	private static Cli<TvnLangTool> parser() {
-		CliBuilder<TvnLangTool> build = Cli.<TvnLangTool> builder("tavlang")
-				.withDescription("Convert, manage workflows")
-				.withDefaultCommand(HelpCommand.class)
-				.withCommand(CommandConvert.class) // Conversion
-				.withCommand(HelpCommand.class) // Help
-				.withCommand(CommandInspect.class) // Inspect
-				.withCommand(CommandValidate.class) // Validate
-				.withCommand(CommandVersion.class) // Version
-				.withCommand(CommandStat.class); // Statistics
-
-		return build.build();
-	}
-
-	public CommandLineTool() {
-	};
-
-	public void parse(String... args) {
-		TvnLangTool command = parser().parse(args);
-		command.execute();
-		System.out.println();
-	}
-
-	public static abstract class TvnLangTool {
-
-		public abstract void execute();
-	}
-
-	// placeholder for output file types
-	public static class Filetypes {
-		@Option(name = "--wfdesc", description = "Convert the workflow file to wfdesc-turtle")
-		public static boolean isWfdesc = false;
-
-		@Option(name = "--wfbundle", description = "Convert the workflow file to wfbundle")
-		public static boolean isWfbundle = false;
-
-		@Option(name = "--robundle", description = "Convert given bundle in to Research Object bundle")
-		public static boolean isRo = false;
-
-		@Option(name = "--structure", description = "Convert the workflow into *.structure")
-		public static boolean isStructure = false;
-
-		@Option(name = "--json", description = "Convert the workflow into json")
-		public static boolean isJson = false;
-
-		
-		@Option(name = "--iwir", description = "Convert scufl2 workflows into IWIR 1.1 specification")
-		public static boolean isIwir = false;
-		
-		
-		// The tool can only handle one output format at a time.
-		// Return the file type which is selected
-		public static String isTrue() {
-			if (isWfdesc)
-				return "wfdesc";
-			else if (isWfbundle)
-				return "wfbundle";
-			else if (isRo)
-				return "robundle";
-			else if (isStructure)
-				return "structure";
-			else if (isJson)
-				return "json";
-			
-			else if (isIwir)
-				return "iwir";
-				
-			
-			else{
-				System.out.println("Invalid argument....");
-				TvnLangTool command = parser().parse("help", "convert");
-				command.execute();
-				return null;
-			}
-				
-		}
-
-	}
-
-	public static class Inspect {
-		@Option(name = "--servicetypes", description = "List the service types used in workflow")
-		public static boolean servicetypes = false;
-
-		@Option(name = "--processornames", description = "List a tree of processor names used in workflow")
-		public static boolean processor = false;
-
-		public String getWay() {
-			if (servicetypes)
-				return "servicetypes";
-			else if (processor)
-				return "processornames";
-			else{
-				System.out.println("Invalid argument....");
-				TvnLangTool command = parser().parse("help", "inspect");
-				command.execute();
-				return null;
-				
-			}
-				
-		}
-
-	}
-
-	// Placeholder for optional parameters: Ex: -i, -o
-	public static class Optional {
-
-		// The input file or directory
-		@Option(name = { "-i", "--input" }, description = "Input file/ file dir for conversion")
-		public static String in_file_dir;
-
-		// The out put file or directory. When this is set, all the converted
-		// files will be saved into the directory that specified.
-		@Option(name = { "-o", "--output" }, description = "Output file/ directory")
-		public static String out_file_dir;
-
-		public static String getInFile() {
-			return in_file_dir;
-		}
-
-		public static String getOutFile() {
-			return out_file_dir;
-		}
-
-	}
-
-	@Command(name = "help", description = "Display help information about Tvarna")
-	public static class HelpCommand extends TvnLangTool {
-		@Inject
-		public Help help;
-
-		@Override
-		public void execute() {
-			help.call();
-		}
-	}
-
-	// Command for convert workflows
-	@Command(name = "convert", description = "Convert the given workflow")
-	public static class CommandConvert extends TvnLangTool {
-		@Inject
-		Optional optional = new Optional();
-
-		@Inject
-		Filetypes filetypes = new Filetypes();
-
-		@Arguments(usage = "<output format> <input files> ", description = "List of files to be converted.\n "
-				+ "Give the list of files to be converted without -i/-o and the converted files will be saved in to /converted folder in the same dir")
-		public final List<String> files = Lists.newArrayList();
-
-		// When this is true, the command will run recursively in a directory.
-		@Option(name = { "-r", "--recursive" }, description = "Execute the command recursively")
-		public boolean recurse = false;
-
-		// Option for validate the given workflow when converting
-		@Option(name = { "-V", "--validate" }, description = "Validate the workflow before convert")
-		public boolean validate = false;
-
-		@Override
-		public void execute() {
-			
-			//Validate before convert
-			if(validate){
-				Validate validate = new Validate(files, null, false);
-				if(validate.getCheck()){
-					System.out.println("Conversion failed...! Workflow bundle has errors");
-					return;
-				}else{
-					runcommand();
-				}
-			}
-		}
-			
-		public void runcommand(){
-			if (Filetypes.isRo) {
-				try {
-					new ToRobundle(files, Optional.getOutFile());
-				} catch (Exception e) {
-					e.printStackTrace();
-				}
-//				else if(Filetypes.isIwir || Filetypes.isJson || Filetypes.isStructure || Filetypes.isWfbundle || Filetypes.isWfdesc)
-			} else if(Filetypes.isIwir || Filetypes.isJson || Filetypes.isStructure || Filetypes.isWfbundle || Filetypes.isWfdesc){
-				if (recurse) {
-					new Scufl2Convert(Filetypes.isTrue(),
-							Optional.getInFile(), Optional.getOutFile());
-				} else {
-					new Scufl2Convert(Filetypes.isTrue(), files,
-							Optional.getOutFile());
-				}
-			}else{
-				System.out.println("Invalid argument....");
-				TvnLangTool command = parser().parse("help", "convert");
-				command.execute();
-			}
-
-		}
-		
-		
-		
-	}
-
-	// Version command
-	@Command(name = "version", description = "Show version informantion")
-	public static class CommandVersion extends TvnLangTool {
-
-		@Override
-		public void execute() {
-			System.out.print(getClass().getPackage().getImplementationTitle());
-            System.out.println(" " + getClass().getPackage().getImplementationVersion());
-		}
-
-	}
-
-	// Command for inspection of workflows....!!
-	@Command(name = "inspect", description = "Inspect the given workflow and show the results on the terminal")
-	public static class CommandInspect extends TvnLangTool {
-
-		@Inject
-		Inspect inspect = new Inspect();
-
-		@Option(name = { "-l", "--log" }, description = "Specify the file name where results should be stored ([some dir]/log.txt)")
-		public String file;
-
-		@Arguments(usage = "<option> <input files>", description = "Inspect the given workflow")
-		public List<String> toInspect = Lists.newArrayList();
-
-		@Override
-		public void execute() {
-			if (Inspect.processor) {
-				try {
-					new ProcessorNames(toInspect, file);
-
-				} catch (ReaderException | IOException | JAXBException e) {
-					e.printStackTrace();
-				}
-			} else if (Inspect.servicetypes) {
-				try {
-					new ServiceTypes(toInspect, file);
-				} catch (IOException | ReaderException e) {
-					e.printStackTrace();
-				}
-
-			}else{
-				System.out.println("Invalid argument....");
-				TvnLangTool command = parser().parse("help", "inspect");
-				command.execute();
-			}
-
-		}
-
-	}
-
-	// Command for validation
-	@Command(name = "validate", description = "validate the given workflow")
-	public static class CommandValidate extends TvnLangTool{
-	
-		@Option(name = { "-l", "--log" }, description = "Specify the file name where results should be stored ([some dir]/log.txt)")
-		public String file;
-		
-		@Option(name = {"-v", "--verbose"}, description = "Verbose mode")
-		public boolean verbose;
-
-//		@Arguments(usage = "<option> <input files> <output dir>", description = "Validate the given workflow file/s")
-		@Arguments(usage = "input files", description = "Validate the given workflow file/s")
-		public List<String> toValidate = Lists.newArrayList();
-
-		@Override
-		public void execute() {
-		
-			Validate validate = new Validate(toValidate, file, verbose);
-			
-
-		}
-
-	}
-	
-	//Command for getting workflow stats
-	@Command (name = "stats", description = "Shows the workflow statistics")
-	public static class CommandStat extends TvnLangTool{
-
-		
-		@Option(name = {"-l", "--log"}, description ="Save the workflow statictics in a file")
-		public String file;
-		
-		@Option(name = {"-v", "--verbose"}, description = "Verbose mode")
-		public boolean verbose;
-		
-		@Arguments(usage="input files", description = "Enter the workflow bundle files")
-		public List<String> files;
-		
-		@Override
-		public void execute() {
-			
-			GetWfStat stat = new GetWfStat(files, file, verbose);
-			
-		}
-		
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java
deleted file mode 100644
index 016488c..0000000
--- a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.apache.taverna.tavlang;
-
-/*
- * 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.
- */
-
-public class TavernaCommandline {
-
-	public static void main(String args[]){
-		CommandLineTool tool = new CommandLineTool();
-		tool.parse(args);
-		
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/Tools.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/Tools.java b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/Tools.java
deleted file mode 100644
index c78c7a2..0000000
--- a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/Tools.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.apache.taverna.tavlang.tools;
-
-/*
- * 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.
- */
-
-
-
-public class Tools {
-	
-	public static enum ConvertionTools {
-		wfbundle{
-			public String mediaType = "application/vnd.taverna.scufl2.workflow-bundle";
-			
-
-			@Override
-			public String getMediaType(ConvertionTools t) {
-				return this.mediaType;
-			}
-		},
-		json{
-			public String mediaType = "application/ld+json";
-
-
-			@Override
-			public String getMediaType(ConvertionTools t) {
-				return mediaType;
-			}
-		},
-		wfdesc{
-			public String mediaType = "text/vnd.wf4ever.wfdesc+turtle";
-
-
-			@Override
-			public String getMediaType(ConvertionTools t) {
-				// TODO Auto-generated method stub
-//				System.out.println(mediaType);
-				return mediaType;
-			}
-		},
-		robundle{
-
-			@Override
-			public String getMediaType(ConvertionTools t) {
-				return null;
-			}
-		
-		},
-		structure{
-			public String mediaType = "text/vnd.taverna.scufl2.structure";
-			
-			@Override
-			public String getMediaType(ConvertionTools t) {
-				return mediaType;
-			}
-		},
-		
-		iwir{
-				public String mediaType = "application/vnd.shiwa.iwir+xml";
-				
-				@Override
-				public String getMediaType(ConvertionTools t) {
-					return mediaType;
-				}
-		};
-		
-		ConvertionTools(){}
-		
-		public abstract String getMediaType(ConvertionTools t);
-		
-	}
-	
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java
deleted file mode 100644
index da4dff0..0000000
--- a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java
+++ /dev/null
@@ -1,206 +0,0 @@
-package org.apache.taverna.tavlang.tools.convert;
-
-/*
- * 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.
- */
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.FilenameUtils;
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
-import org.apache.taverna.scufl2.api.io.WriterException;
-import org.apache.taverna.tavlang.tools.Tools.ConvertionTools;
-
-
-/*
- * Converts 
- * 	.t2flow --> .wfbundle
- * 	.t2flow --> .structure
- * 	.wfbundle --> .structure
- *  .wfbundle/ .t2flow -> .iwir
- * two constructors.
- * Scufl2Convert(List<String> list, String out) --> will save the converted files in 'out folder or a directory named /converted in the same folder.
- * Scufl2Convert(String in, String out) --> Will convert all the files in the 'in' folder and save them in 'out' folder --> -r must be true.
- * 
- * */
-public class Scufl2Convert{
-	
-	private ConvertionTools t;
-	private String MEDIA_TYPE;
-	private String input;
-	private String output;
-	private String type;
-	private List<String> filesList;
-	
-	public Scufl2Convert(String type, List<String> files, String out){
-		this.filesList = files;
-		this.output = out;
-		this.type = type.equals("wfdesc")?".wfdesc.ttl":"."+type;
-		this.MEDIA_TYPE = ConvertionTools.valueOf(type).getMediaType(t);
-		this.convert();
-	}
-	
-	//When recursive case is on....
-	public Scufl2Convert(String type, String in, String out){
-		this.input = in;
-		this.output = out;
-		this.type = type.equals("wfdesc")?".wfdesc.ttl":"."+type;
-		this.MEDIA_TYPE = ConvertionTools.valueOf(type).getMediaType(t);	//Determine the writer media type
-		
-		this.createdir();
-	}
-	
-	//Create the dir if not exists
-	public void createdir(){
-		if(output == null){
-			File outFile = new File(this.input, "converted");
-			try {
-				FileUtils.forceMkdir(outFile);
-				this.output = outFile.getAbsolutePath();
-			} catch (IOException e1) {
-				System.err.println("Error: The directory cannot be created...!!!!");
-				e1.printStackTrace();
-			}
-		}else{
-			File outFile = new File(this.output);
-			try {
-				FileUtils.forceMkdir(outFile);
-				
-			} catch (IOException e1) {
-				System.err.println("Error: The directory cannot be created...!!!!");
-				e1.printStackTrace();
-			}
-		}
-		this.rec_convert(this.input);
-	}
-	
-	//Convert the given file. Return in case of an exception.
-	public boolean convert(){
-		
-		boolean check = false;
-		// If the output folder is given, save the converted files in to that folder.
-		 
-		if(this.filesList.size()>0 && this.output != null){
-			File outFile = new File(this.output);
-			try {
-				FileUtils.forceMkdir(outFile);
-			} catch (IOException e1) {
-				System.err.println("Error: The directory cannot be created...!!!");
-			}
-			for(String file : this.filesList){
-				File t2File = new File(file);
-				
-				convertFile(t2File, outFile);
-				
-			}
-			
-		}
-		
-		 /* If the output file is not given, save the converted files in 
-		  *  '/converted' folder.
-		  */
-		 
-		else if(this.filesList.size()>0 && this.output == null){
-			for(String file : this.filesList){
-				File t2File = new File(file);
-				
-				File outFile = new File(t2File.getParentFile(), "converted");
-				try {
-					FileUtils.forceMkdir(outFile);
-				} catch (IOException e1) {
-					System.err.println("Error: The directory cannot be created...!!!");
-				}
-				
-				convertFile(t2File, outFile);
-				
-			}
-		}else{
-			System.err.println("Error: Argument mismatch");
-			check = false;
-		}
-		
-		return check;
-	}
-	
-	//Convert the files in a given directory and save the converted files in to specified dir or /converted folder.
-	//Recursive conversion
-	public void rec_convert(String dir){
-			
-			File parent = new File(this.input);
-			if(!parent.exists()){
-				System.err.println("Error: Input directory not found");
-			}else{
-				for(File file : parent.listFiles()){
-					if(!file.isDirectory())
-					{
-						File outFile = new File(this.output);
-						convertFile(file, outFile);
-					}
-				}
-			}
-	}
-	
-	//Convert the file
-	public void convertFile(File t2File, File outFile){
-		
-		//Check weather the input files are in valid format...!!!
-		String ext = FilenameUtils.getExtension(t2File.getName());
-		if(!ext.equalsIgnoreCase("t2flow")&&!ext.equalsIgnoreCase("wfbundle")){
-			System.err.println("Error: Invalid input file format...!!!");
-			return;
-		}
-		
-		WorkflowBundleIO wfbio = new WorkflowBundleIO();
-		String filename = t2File.getName();
-		filename = filename.replaceFirst("\\..*", this.type);
-		File scufl2File = new File(outFile.getAbsolutePath(), filename);
-		
-		WorkflowBundle wfBundle;
-		try {
-			wfBundle = wfbio.readBundle(t2File, null);// null --> will guess the media type for reading.
-			
-//			if(this.type.equals(".iwir")){
-//				IwirWriter iww = new IwirWriter();
-//				iww.writeBundle(wfBundle, scufl2File, this.MEDIA_TYPE);
-//			}else
-			
-			if(this.type.equals(".json")){
-				ToJson toJ = new ToJson();
-				toJ.convert(t2File, outFile);
-			}
-			else{
-				wfbio.writeBundle(wfBundle, scufl2File, this.MEDIA_TYPE);
-			}
-			System.out.println(scufl2File.getPath() + " is created.");
-		}catch (ReaderException e){
-			System.err.println("Error: Connot read the file");
-		}catch(IOException e){
-			System.err.println("Error: File not found");
-		}catch(WriterException e) {
-			System.err.println("Error: Cannot write to the file");
-//			e.printStackTrace();
-		}
-	}
-
-	
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java
deleted file mode 100644
index f11424c..0000000
--- a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java
+++ /dev/null
@@ -1,298 +0,0 @@
-package org.apache.taverna.tavlang.tools.convert;
-
-/*
- * 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.
- */
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.net.URI;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.taverna.scufl2.api.annotation.Annotation;
-import org.apache.taverna.scufl2.api.annotation.Revision;
-import org.apache.taverna.scufl2.api.common.Child;
-import org.apache.taverna.scufl2.api.common.Ported;
-import org.apache.taverna.scufl2.api.common.Scufl2Tools;
-import org.apache.taverna.scufl2.api.common.URITools;
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.core.BlockingControlLink;
-import org.apache.taverna.scufl2.api.core.ControlLink;
-import org.apache.taverna.scufl2.api.core.DataLink;
-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.WorkflowBundleWriter;
-import org.apache.taverna.scufl2.api.io.WriterException;
-import org.apache.taverna.scufl2.api.port.DepthPort;
-import org.apache.taverna.scufl2.api.port.GranularDepthPort;
-import org.apache.taverna.scufl2.api.port.Port;
-import org.apache.taverna.scufl2.api.profiles.Profile;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.fasterxml.jackson.databind.util.ISO8601DateFormat;
-
-public class ToJson {
-	public class JsonWriter implements WorkflowBundleWriter {
-
-		@Override
-		public Set<String> getMediaTypes() {
-			return new HashSet<String>(Arrays.asList("application/ld+json",
-					"application/json"));
-		}
-
-		@Override
-		public void writeBundle(WorkflowBundle wfBundle, File destination,
-				String mediaType) throws WriterException, IOException {
-			ObjectNode json = toJson(wfBundle);
-			mapper.writeValue(destination, json);
-		}
-
-		@Override
-		public void writeBundle(WorkflowBundle wfBundle, OutputStream output,
-				String mediaType) throws WriterException, IOException {
-			ObjectNode json = toJson(wfBundle);
-			mapper.writeValue(output, json);
-		}
-
-	}
-
-	
-	private WorkflowBundleIO io = new WorkflowBundleIO();;
-
-	private WorkflowBundleWriter jsonWriter = new JsonWriter();
-
-	private ObjectMapper mapper = new ObjectMapper();
-
-	private Scufl2Tools scufl2Tools = new Scufl2Tools();
-
-	private URITools uriTools = new URITools();
-
-	public ToJson() {
-		mapper.enable(SerializationFeature.INDENT_OUTPUT);
-		mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
-		mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
-
-		mapper.setDateFormat(new ISO8601DateFormat());
-
-		// Adding custom writer dynamically
-		List<WorkflowBundleWriter> writers = io.getWriters();
-		writers.add(jsonWriter);
-		io.setWriters(writers);
-	}
-
-	protected void addPorts(Ported ported, ObjectNode p) {
-		ArrayNode inputs = mapper.createArrayNode();
-		for (Port port : ported.getInputPorts()) {
-			inputs.add(toJson(port));
-		}
-		p.put("inputs", inputs);
-
-		ArrayNode outputs = mapper.createArrayNode();
-		for (Port port : ported.getOutputPorts()) {
-			outputs.add(toJson(port));
-			// FIXME: Do we need the id for ports? Needed if we add datalinks
-		}
-		p.put("outputs", outputs);
-	}
-
-	protected ObjectNode annotations(Child<?> bean) {
-		ObjectNode node = mapper.createObjectNode();
-		for (Annotation ann : scufl2Tools.annotationsFor(bean)) {
-			URI annUri = uriTools.uriForBean(ann);
-
-			// TODO: include annotation body?
-		}
-		return node;
-	}
-
-	public void convert(File in, File out) throws ReaderException, IOException,
-			WriterException {
-		String filename = in.getName();
-		filename = filename.replaceFirst("\\..*", ".json");
-		File workflowFile = new File(out.getAbsolutePath(), filename);
-
-		WorkflowBundle wfBundle = io.readBundle(in, null);
-		io.writeBundle(wfBundle, workflowFile, "application/ld+json");
-//		System.out.println(workflowFile);
-
-	}
-
-	protected ObjectNode toJson(Port port) {
-		ObjectNode p = mapper.createObjectNode();
-		p.put("name", port.getName());
-		p.putPOJO("id",
-				uriTools.relativeUriForBean(port, scufl2Tools.findParent(
-						WorkflowBundle.class, ((Child<?>) port))));
-
-		if (port instanceof DepthPort) {
-			DepthPort depthPort = (DepthPort) port;
-			if (depthPort.getDepth() != null) {
-				p.put("depth", depthPort.getDepth());
-			}
-		}
-		if (port instanceof GranularDepthPort) {
-			GranularDepthPort granularDepthPort = (GranularDepthPort) port;
-			if (granularDepthPort.getGranularDepth() != null
-					&& !granularDepthPort.getGranularDepth().equals(
-							granularDepthPort.getDepth())) {
-				p.put("granularDepth", granularDepthPort.getGranularDepth());
-			}
-		}
-		p.putAll(annotations((Child<?>) port));
-		return p;
-	}
-
-	protected JsonNode toJson(Processor proc) {
-		ObjectNode p = mapper.createObjectNode();
-		p.putPOJO("id",
-				uriTools.relativeUriForBean(proc, proc.getParent().getParent()));
-		p.put("name", proc.getName());
-		addPorts(proc, p);
-		p.putAll(annotations(proc));
-
-		List<Workflow> nested = scufl2Tools.nestedWorkflowsForProcessor(proc,
-				proc.getParent().getParent().getMainProfile());
-		if (!nested.isEmpty()) {
-			if (nested.size() == 1) {
-				p.put("nestedWorkflow", toJson(nested.iterator().next()));
-			} else {
-				ArrayNode list = mapper.createArrayNode();
-				for (Workflow w : nested) {
-					list.add(toJson(w));
-				}
-				p.put("nestedWorkflow", list);
-			}
-		}
-		return p;
-	}
-
-	protected JsonNode toJson(Revision currentRevision) {
-		ArrayNode revisions = mapper.createArrayNode();
-		while (currentRevision != null) {
-			ObjectNode rev = mapper.createObjectNode();
-			rev.putPOJO("id", currentRevision.getIdentifier());
-			if (currentRevision.getGeneratedAtTime() != null) {
-				rev.putPOJO("generatedAtTime",
-						currentRevision.getGeneratedAtTime());
-			}
-			currentRevision = currentRevision.getPreviousRevision();
-			if (currentRevision != null) {
-				rev.putPOJO("wasRevisionOf", currentRevision.getIdentifier());
-			}
-			revisions.add(rev);
-		}
-		return revisions;
-	}
-
-	protected ObjectNode toJson(Workflow workflow) {
-		ObjectNode wf = mapper.createObjectNode();
-
-		wf.putPOJO("id",
-				uriTools.relativeUriForBean(workflow, workflow.getParent()));
-
-		wf.put("name", workflow.getName());
-		wf.put("revisions", toJson(workflow.getCurrentRevision()));
-
-		ArrayNode processors = mapper.createArrayNode();
-		for (Processor p : workflow.getProcessors()) {
-			processors.add(toJson(p));
-		}
-		addPorts(workflow, wf);
-		wf.put("processors", processors);
-
-		ArrayNode datalinks = mapper.createArrayNode();
-		for (DataLink link : workflow.getDataLinks()) {
-			datalinks.add(toJson(link));
-		}
-		wf.put("datalinks", datalinks);
-
-		ArrayNode controlLinks = mapper.createArrayNode();
-		for (ControlLink link : workflow.getControlLinks()) {
-			controlLinks.add(toJson(link));
-		}
-		wf.put("controllinks", controlLinks);
-
-		wf.putAll(annotations(workflow));
-
-		return wf;
-	}
-
-	protected JsonNode toJson(ControlLink link) {
-		ObjectNode l = mapper.createObjectNode();
-		if (link instanceof BlockingControlLink) {
-			BlockingControlLink controlLink = (BlockingControlLink) link;
-			l.putPOJO("block", uriTools.relativeUriForBean(
-					controlLink.getBlock(), link.getParent().getParent()));
-			l.putPOJO("untilFinished", uriTools.relativeUriForBean(controlLink
-					.getUntilFinished(), link.getParent().getParent()));
-		}
-		return l;
-	}
-
-	protected JsonNode toJson(DataLink link) {
-		ObjectNode l = mapper.createObjectNode();
-		l.putPOJO("receivesFrom", uriTools.relativeUriForBean(
-				link.getReceivesFrom(), link.getParent().getParent()));
-		l.putPOJO("sendsTo", uriTools.relativeUriForBean(link.getSendsTo(),
-				link.getParent().getParent()));
-		if (link.getMergePosition() != null) {
-			l.put("mergePosition", link.getMergePosition());
-		}
-		return l;
-	}
-
-	public ObjectNode toJson(WorkflowBundle wfBundle) {
-
-		ObjectNode root = mapper.createObjectNode();
-		ArrayNode contextList = root.arrayNode();
-		root.put("@context", contextList);
-		ObjectNode context = root.objectNode();
-		contextList.add("https://w3id.org/scufl2/context");
-		contextList.add(context);
-		URI base = wfBundle.getGlobalBaseURI();
-		context.put("@base", base.toASCIIString());
-		root.put("id", base.toASCIIString());
-
-		// root.put("name", wfBundle.getName());
-		// root.put("revisions", toJson(wfBundle.getCurrentRevision()));
-
-		root.put("workflow", toJson(wfBundle.getMainWorkflow()));
-		root.put("profile", toJson(wfBundle.getMainProfile()));
-
-		return root;
-	}
-
-	private JsonNode toJson(Profile profile) {
-		ObjectNode pf = mapper.createObjectNode();
-
-		pf.putPOJO("id",
-				uriTools.relativeUriForBean(profile, profile.getParent()));
-		// TODO: Activities and configurations
-		return pf;
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java
deleted file mode 100644
index 6ab14bc..0000000
--- a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.apache.taverna.tavlang.tools.convert;
-
-/*
- * 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.
- */
-
-
-import java.io.IOException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.List;
-import java.util.logging.ConsoleHandler;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.apache.taverna.robundle.Bundle;
-import org.apache.taverna.robundle.Bundles;
-
-public class ToRobundle{
-
-	public ToRobundle(List<String> files, String out) throws Exception{
-		
-		Logger logger = Logger.getLogger("");
-		//logger.setLevel(Level.FINER);
-		ConsoleHandler console = new ConsoleHandler();
-		console.setLevel(Level.FINEST);
-		logger.addHandler(console);
-		Logger.getLogger("org.researchobject").setLevel(Level.FINEST);
-		
-		for(String f : files){
-			Path file = Paths.get(f);
-			convert(file);
-		}
-	}
-	
-	//Recursive conversion
-	public ToRobundle(String type, String in, String out) {
-		
-	}
-	
-	public void convert(Path file) throws IOException{
-		try (Bundle bundle = Bundles.openBundle(file)) {
-			
-//			System.out.println(bundle.getManifest().toString());
-			bundle.getManifest().writeAsJsonLD();
-			bundle.getManifest().writeAsCombineManifest();
-		}
-	}
-	
-	
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java
deleted file mode 100644
index f93aadc..0000000
--- a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package org.apache.taverna.tavlang.tools.inspect;
-
-/*
- * 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.
- */
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.TreeModel;
-import javax.xml.bind.JAXBException;
-
-import org.apache.taverna.scufl2.api.common.Scufl2Tools;
-import org.apache.taverna.scufl2.api.common.URITools;
-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.profiles.Profile;
-
-/*
- * list the processor names used in the workflow.
- * Supported formats: .t2flow, .wfbundle
- * */
-
-public class ProcessorNames {
-	
-	private List<String> fileList;
-	
-	private String file2;
-	
-	private Scufl2Tools scufl2Tools = new Scufl2Tools();
-
-	private URITools uriTools = new URITools();
-
-	public ProcessorNames(List<String> fileList, String file) throws ReaderException, IOException, JAXBException{
-		this.fileList = fileList;
-		this.file2 = file;
-		this.show();
-	}
-	
-	public void show() throws ReaderException, IOException, JAXBException{
-		WorkflowBundleIO io = new WorkflowBundleIO();
-		StringBuilder sb = new StringBuilder();
-		
-		for(String file : this.fileList){
-			File file2 = new File(file);
-			if(file2.isDirectory()){
-				for(File f : file2.listFiles()){
-					WorkflowBundle wfb = io.readBundle(f, null);
-					System.out.println("Processor tree of "+ f.getName() +" \n" +this.showProcessorTree(wfb));
-					sb.append("Processor tree of "+ f.getName() +" \n" +this.showProcessorTree(wfb) + "\n");
-				}
-			}else{
-				WorkflowBundle wfb = io.readBundle(new File(file), null);
-				System.out.println("Processor tree of "+ file +" \n" +this.showProcessorTree(wfb));
-				sb.append("Processor tree of "+ file +" \n" +this.showProcessorTree(wfb) + "\n");
-			}
-			
-			
-		}
-		
-		if(this.file2!=null){
-			File log = new File(file2);
-			FileWriter fw = new FileWriter(log);
-			BufferedWriter bw = new BufferedWriter(fw);
-			bw.write(sb.toString());
-			bw.close();
-			fw.close();
-			System.out.println("Results were saved into " + file2);
-		}
-	}
-	
-	private Workflow findNestedWorkflow(Processor processor) {
-		Profile profile = processor.getParent().getParent().getMainProfile();
-		return scufl2Tools.nestedWorkflowForProcessor(processor, profile);
-	}
-
-	private void findProcessors(WorkflowBundle ro, Workflow workflow,
-			DefaultMutableTreeNode parent) {
-		for (Processor processor : workflow.getProcessors()) {
-			DefaultMutableTreeNode processorNode = new DefaultMutableTreeNode(
-					processor.getName());
-			parent.add(processorNode);
-			Workflow wf = findNestedWorkflow(processor);
-			if (wf != null) {
-				findProcessors(ro, wf, processorNode);
-			}
-		}
-
-	}
-
-	public TreeModel makeProcessorTree(WorkflowBundle workflowBundle)
-			throws JAXBException, IOException {
-		Workflow workflow = workflowBundle.getMainWorkflow();
-		TreeModel treeModel = new DefaultTreeModel(new DefaultMutableTreeNode(
-				workflow.getName()));
-		DefaultMutableTreeNode parent = (DefaultMutableTreeNode) treeModel
-				.getRoot();
-
-		findProcessors(workflowBundle, workflow, parent);
-		return treeModel;
-	}
-
-	public List<String> showProcessorNames(WorkflowBundle ro)
-			throws JAXBException, IOException {
-		ArrayList<String> names = new ArrayList<String>();
-		for (Processor processor : ro.getMainWorkflow().getProcessors()) {
-			names.add(processor.getName());
-		}
-		Collections.sort(names);
-		return names;
-	}
-
-	public String showProcessorTree(WorkflowBundle ro) throws JAXBException,
-			IOException {
-		TreeModel treeModel = makeProcessorTree(ro);
-		return treeModelAsString(treeModel);
-	}
-
-	public String treeModelAsString(TreeModel treeModel) {
-		StringBuffer sb = new StringBuffer();
-		Object root = treeModel.getRoot();
-		treeModelAsString(treeModel, root, sb, "");
-		return sb.toString();
-	}
-
-	protected void treeModelAsString(TreeModel treeModel, Object parent,
-			StringBuffer sb, String indentation) {
-		sb.append(indentation);
-		int childCount = treeModel.getChildCount(parent);
-		if (childCount == 0) {
-			sb.append("- ");
-		} else {
-			sb.append("+ ");
-			indentation = indentation + "  ";
-		}
-		sb.append(parent);
-		sb.append("\n");
-		for (int i = 0; i < childCount; i++) {
-			Object child = treeModel.getChild(parent, i);
-			treeModelAsString(treeModel, child, sb, indentation);
-		}
-	}
-	
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java
deleted file mode 100644
index ddff2ab..0000000
--- a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package org.apache.taverna.tavlang.tools.inspect;
-
-
-/*
- * 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.
- */
-
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
-import org.apache.taverna.scufl2.api.activity.Activity;
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.api.profiles.Profile;
-
-/*
- * List the service types used in workflow.
- * Supported file formats : .wfbundle, .t2flow
- * */
-
-public class ServiceTypes {
-	
-	private List<String> filesList;
-	private Set<String> types = new LinkedHashSet<String>();
-	private String save;
-	
-	public ServiceTypes(List<String> filesList, String file) throws IOException, ReaderException{
-		this.filesList = filesList;
-		this.save = file;
-		this.service();
-		
-	}
-	
-	public void service() throws ReaderException, IOException{
-		WorkflowBundleIO io = new WorkflowBundleIO();
-		StringBuilder sb = new StringBuilder();
-		
-		for (String filepath : filesList) {
-			File file = new File(filepath);
-			
-			if(file.isDirectory()){
-				for(File f : file.listFiles()){
-				WorkflowBundle wfBundle = io.readBundle(f, null);
-				System.out.println("Service types used in " + f.getCanonicalPath() + " :" +"\n");
-				sb.append("Service types used in " + f.getCanonicalPath() + " :");
-				for (Profile profile : wfBundle.getProfiles()) {
-					for (Activity activity : profile.getActivities()) {
-						this.types.add(activity.getType().toASCIIString());
-					}
-				}
-				for(String t : types){
-					System.out.println(t);
-					sb.append(t + "\n");
-				}
-				System.out.println("\n**************************************************\n");
-				sb.append("\n**************************************************\n");
-				}
-			}else{
-			// mediaType = null  --> guess
-				WorkflowBundle wfBundle = io.readBundle(file, null);
-				System.out.println("Service types used in " + file.getCanonicalPath() + " :" + "\n");
-				sb.append("Service types used in " + file.getCanonicalPath() + " :");
-				for (Profile profile : wfBundle.getProfiles()) {
-					for (Activity activity : profile.getActivities()) {
-						this.types.add(activity.getType().toASCIIString());
-					}
-				}
-				for(String t : types){
-					System.out.println(t);
-					sb.append(t + "\n");
-				}
-				
-				System.out.println("\n**************************************************\n");
-				sb.append("\n**************************************************\n");
-			}
-		}
-		
-		if(save!=null){
-			File log = new File(save);
-			FileWriter fw = new FileWriter(log);
-			BufferedWriter bw = new BufferedWriter(fw);
-			bw.write(sb.toString());
-			bw.close();
-			fw.close();
-			System.out.println("Results were saved into " + save);
-		}
-		
-	}
-	
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/stats/GetWfStat.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/stats/GetWfStat.java b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/stats/GetWfStat.java
deleted file mode 100644
index 7daa38e..0000000
--- a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/stats/GetWfStat.java
+++ /dev/null
@@ -1,193 +0,0 @@
-package org.apache.taverna.tavlang.tools.stats;
-
-/*
- * 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.
- */
-
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.List;
-
-import org.apache.taverna.scufl2.api.common.NamedSet;
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.core.ControlLink;
-import org.apache.taverna.scufl2.api.core.DataLink;
-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.port.InputPort;
-import org.apache.taverna.scufl2.api.port.OutputPort;
-
-public class GetWfStat {
-	
-	private NamedSet<Workflow> set;
-	private String logFile;
-	private boolean verbose;
-	private StringBuilder str_verb = new StringBuilder();
-	private StringBuilder str_nverb = new StringBuilder();
-	
-	
-	//If given file is a workflow file
-	public GetWfStat(List<String> wf_files, String log, boolean verbose){
-		this.logFile = log;
-		this.verbose = verbose;
-		
-		for(String files : wf_files){
-			File f = new File(files);
-			if(f.isFile()){
-				this.read(f);
-				
-			}else{
-				System.err.println("Error reading the file " + f.getName());
-			}
-		}
-		
-		this.isVerbose();
-		
-		if(log!=null){
-			this.writefile(this.str_verb.toString(), this.logFile);
-		}
-	}
-	
-	//Read the workflow file and extract the resources.
-	//And append them to a String builder
-	public void read(File file){
-		WorkflowBundleIO io = new WorkflowBundleIO();
-		try {
-			WorkflowBundle wf = io.readBundle(file, null);
-			this.set = wf.getWorkflows();
-
-			//String to be written to a file.
-			this.str_nverb.append(">>> Statistics of the workflow bundle: " + file.getName() + " <<<\n");
-			this.str_verb.append(">>> Statistics of the workflow bundle: " + file.getName() + " <<<\n");
-			
-			for(Workflow wrf : set){
-				//TODO :- Take each type of resource and make a system to view them to the user.
-				String name = "Name of the workflow = " + wrf.getName();
-				this.str_verb.append(name + "\n");
-				this.str_nverb.append(name + "\n");
-
-				
-				String noP = "  |--> Number of Processors = " + wrf.getProcessors().size();
-				this.str_verb.append(noP + "\n");
-				this.str_nverb.append(noP + "\n");
-				
-				if(this.verbose && wrf.getProcessors().size()!=0){
-					this.str_verb.append("  |     |--> Processors: " + "\n");
-					
-					for(Processor p : wrf.getProcessors()){
-						this.str_verb.append("  |          |--> " + p.getName() + "\n");
-					}
-					this.str_verb.append("  |" + "\n");
-				}
-				
-				this.str_verb.append("  |--> Number of Data Links = " + wrf.getDataLinks().size() + "\n");
-				this.str_nverb.append("  |--> Number of Data Links = " + wrf.getDataLinks().size() + "\n");
-				
-				if(this.verbose && wrf.getDataLinks().size()!=0){
-					this.str_verb.append("  |     |--> Data Links" + "\n");
-					
-					for(DataLink link : wrf.getDataLinks()){
-						this.str_verb.append("  |          |--> " + link + "\n");
-					}
-					this.str_verb.append("  |" + "\n");
-				}
-				
-				this.str_nverb.append("  |--> Number of Control Links = " + wrf.getControlLinks().size() + "\n");
-				this.str_verb.append("  |--> Number of Control Links = " + wrf.getControlLinks().size() + "\n");
-				
-				
-				if(this.verbose && wrf.getControlLinks().size()!=0){
-					this.str_verb.append("  |     |--> Control Links\n");
-					for(ControlLink link : wrf.getControlLinks()){
-						this.str_verb.append("  |          |--> " + link + "\n");
-					}
-					this.str_verb.append("  |\n");
-				}
-				
-				this.str_nverb.append("  |--> Number of Input ports = " + wrf.getInputPorts().size()+"\n");
-				this.str_verb.append("  |--> Number of Input ports = " + wrf.getInputPorts().size()+"\n");
-				
-				
-				if(this.verbose && wrf.getInputPorts().size()!=0){
-					this.str_verb.append("  |     |--> Input Ports\n");
-					for(InputPort iport : wrf.getInputPorts()){
-						this.str_verb.append("  |          |--> " + iport.toString()+"\n");
-					}
-					this.str_verb.append("  |\n");
-				}
-			
-				this.str_nverb.append("  |--> Number of Output Ports = " + wrf.getOutputPorts().size()+"\n");
-				this.str_verb.append("  |--> Number of Output Ports = " + wrf.getOutputPorts().size()+"\n");
-				
-				if(this.verbose && wrf.getOutputPorts().size()!=0){
-					this.str_verb.append("  |     |--> Output Ports\n");
-					for(OutputPort o_port : wrf.getOutputPorts()){
-						this.str_verb.append("  |          |--> " + o_port.toString()+"\n");
-					}
-					
-					this.str_verb.append("\n");
-				}
-				
-				this.str_nverb.append("\n");
-				this.str_verb.append("\n");
-			}
-			
-		} catch (ReaderException | IOException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	
-	//Saving the output into a log
-	public void writefile(String report, String url){
-		
-			File file = new File(url);
-			
-			if(!file.isFile()){
-				System.err.println("Error in writing the log file...");
-			}
-			
-			FileWriter writer;
-			BufferedWriter bfw;
-			try {
-				writer = new FileWriter(file);
-				bfw = new BufferedWriter(writer);
-				bfw.write(report);
-				bfw.close();
-				writer.close();
-				System.out.println("Results were saved into " + file.getPath());
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		
-	}
-		
-	public void isVerbose(){
-		if(verbose)
-			System.out.println(this.str_verb.toString());
-		else 
-			System.out.println(this.str_nverb.toString());
-	}
-	
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java b/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java
deleted file mode 100644
index fc05e3b..0000000
--- a/taverna-tavlangtool/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package org.apache.taverna.tavlang.tools.validate;
-
-/*
- * 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.
- */
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.List;
-
-import org.apache.taverna.scufl2.api.container.WorkflowBundle;
-import org.apache.taverna.scufl2.api.io.ReaderException;
-import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
-import org.apache.taverna.scufl2.validation.correctness.CorrectnessValidationListener;
-import org.apache.taverna.scufl2.validation.correctness.CorrectnessValidator;
-import org.apache.taverna.scufl2.validation.correctness.ReportCorrectnessValidationListener;
-
-/*
- * Takes .wfbundle/ .t2flow as the input
- * */
-public class Validate {
-
-	private String logfile;
-	private String nonVerbose = "";
-	private String finalrep = "";
-	private boolean verbose;
-	private boolean check = false;
-	
-
-	public Validate(List<String> files, String file, boolean verbose) {
-		this.verbose = verbose;
-		this.logfile = file;
-		System.out.println("Validation started....");
-		for (String f : files) {
-			System.out.println("Validating " + f);
-			File wfile = new File(f);
-			read(wfile);
-			
-		}
-		System.out.println("Validation completed.......");
-		
-		
-		if (this.logfile != null) {
-			saveToLog(this.finalrep);
-		}
-	}
-
-	public void read(File file) {
-		WorkflowBundleIO io = new WorkflowBundleIO();
-		try {
-			this.finalrep += validate(io.readBundle(file, null), file.getName());
-			
-		} catch (ReaderException e) {
-			System.err.println(e.getMessage());
-
-		} catch (IOException e) {
-			System.err.println("Workflow bundle not found!");
-			System.err.println(e.getMessage());
-
-		}
-	}
-
-	public String validate(WorkflowBundle wfb, String file) {
-		
-		StringBuilder report2 = new StringBuilder();
-		CorrectnessValidationListener correctnessValidationListener = new ReportCorrectnessValidationListener();
-		CorrectnessValidator correctnessValidator = new CorrectnessValidator();
-		correctnessValidationListener = correctnessValidator.validate(wfb);
-		String report = correctnessValidationListener.toString().replace(
-				"ReportCorrectnessValidationListener [", "");
-
-		String[] sections = report.split(", ");
-
-		
-		
-		boolean detect = correctnessValidationListener.detectedProblems();
-		if (!detect){
-			report2.append("The workflow " + file + " has no errors. \n\n");
-			this.nonVerbose = "The workflow " + file + " has no errors. \n";
-		}
-			
-		
-//		System.out.println("The validation report for " + file);
-		report2.append("The validation report for " + file + "......\n");
-		report2.append("-------------------------------------------------------------------------------- \n");
-		for (int i = 0; i < sections.length; i++) {
-			String line = "-->"+sections[i].split("=")[0].replace("()", "").replace(
-					"get", "")
-					+ ":- ";
-			report2.append(line);
-			String line2 =  sections[i].split("=")[1].replace("[", "").replace("]","");
-			if(line2.equals("")) report2.append("null \n\n");
-			else report2.append("\t").append(line2).append("\n");
-			
-		
-		}
-		report2.append("--------------------------------------------------------------------------------- \n\n");
-		
-		if(detect){
-			System.out.println("The workflow bundle has following problems: \n"+report2.toString());
-			check = true;
-		}
-		
-		if(verbose){
-			System.out.println(report2.toString());
-		}else{
-			System.out.println(this.nonVerbose);
-		}
-		
-		return report2.toString();
-
-	}
-
-	public void saveToLog(String s) {
-		File logFile = new File(this.logfile);
-		FileWriter logwriter;
-		try {
-			logwriter = new FileWriter(logFile);
-			BufferedWriter blw = new BufferedWriter(logwriter);
-			blw.write(s);
-			blw.close();
-			logwriter.close();
-			System.out.println("Results were saved into " + logFile.getPath());
-		} catch (IOException e) {
-			System.err.println("Error writing to the file \n" + e.getMessage());
-		}
-
-	}
-	
-	public boolean getCheck(){
-		return this.check;
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/src/main/resources/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/resources/.gitignore b/taverna-tavlangtool/src/main/resources/.gitignore
deleted file mode 100644
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/src/main/resources/META-INF/NOTICE
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/main/resources/META-INF/NOTICE b/taverna-tavlangtool/src/main/resources/META-INF/NOTICE
deleted file mode 100644
index 370a8fc..0000000
--- a/taverna-tavlangtool/src/main/resources/META-INF/NOTICE
+++ /dev/null
@@ -1,7 +0,0 @@
-Apache Taverna Language
-Copyright 2010-2014 University of Manchester, UK
-Copyright 2014-2015 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/src/test/java/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/test/java/.gitignore b/taverna-tavlangtool/src/test/java/.gitignore
deleted file mode 100644
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/CommandLineTest.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/CommandLineTest.java b/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/CommandLineTest.java
deleted file mode 100644
index 6beaa8e..0000000
--- a/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/CommandLineTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.apache.taverna.tavlang.test;
-
-/*
- * 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.
- */
-
-
-import org.apache.taverna.tavlang.CommandLineTool;
-import org.junit.Assert;
-import org.junit.Test;
-
-public class CommandLineTest {
-	CommandLineTool commandLineTool = new CommandLineTool();
-	
-	@Test
-	public void testHelp(){
-		commandLineTool.parse();
-		commandLineTool.parse("version");
-		commandLineTool.parse("help");
-		commandLineTool.parse("help", "convert");
-		commandLineTool.parse("help", "inspect");
-		commandLineTool.parse("help", "validate");
-		commandLineTool.parse("help", "help");
-	}
-	
-	
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestConvert.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestConvert.java b/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestConvert.java
deleted file mode 100644
index a920db2..0000000
--- a/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestConvert.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.apache.taverna.tavlang.test;
-
-/*
- * 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.
- */
-
-import static org.junit.Assert.*;
-
-import org.junit.Test;
-
-public class TestConvert{
-
-	@Test
-	public void testConvertS() {
-//		fail("Not yet implemented");
-		
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/6e2aa825/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestStats.java
----------------------------------------------------------------------
diff --git a/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestStats.java b/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestStats.java
deleted file mode 100644
index 4c22377..0000000
--- a/taverna-tavlangtool/src/test/java/org/apache/taverna/tavlang/test/TestStats.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.apache.taverna.tavlang.test;
-
-/*
- * 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.
- */
-
-
-import static org.junit.Assert.*;
-
-import org.junit.Test;
-
-public class TestStats {
-
-	@Test
-	public void test() {
-//		fail("Not yet implemented");
-	}
-
-}



[11/11] incubator-taverna-language git commit: Merge remote-tracking branch 'menaka/master'

Posted by st...@apache.org.
Merge remote-tracking branch 'menaka/master'

This closes #30


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

Branch: refs/heads/master
Commit: 92ccd6b3cd8cd9b8dcb7029766005766616e4d10
Parents: 99156bd 2f6f465
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Tue Feb 2 21:57:35 2016 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Tue Feb 2 21:57:35 2016 +0000

----------------------------------------------------------------------
 pom.xml                                         |    2 +-
 taverna-language-commandline/.gitignore         |    1 -
 taverna-language-commandline/README.md          |  425 -----
 taverna-language-commandline/pom.xml            |  213 ---
 .../src/main/java/.gitignore                    |    0
 .../apache/taverna/tavlang/CommandLineTool.java |  350 ----
 .../taverna/tavlang/TavernaCommandline.java     |   29 -
 .../org/apache/taverna/tavlang/tools/Tools.java |   88 -
 .../tavlang/tools/convert/Scufl2Convert.java    |  206 ---
 .../taverna/tavlang/tools/convert/ToJson.java   |  298 ----
 .../tavlang/tools/convert/ToRobundle.java       |   66 -
 .../tavlang/tools/inspect/ProcessorNames.java   |  169 --
 .../tavlang/tools/inspect/ServiceTypes.java     |  112 --
 .../taverna/tavlang/tools/stats/GetWfStat.java  |  193 --
 .../tavlang/tools/validate/Validate.java        |  151 --
 .../src/main/resources/.gitignore               |    0
 .../src/main/resources/META-INF/NOTICE          |    7 -
 .../src/test/java/.gitignore                    |    0
 .../taverna/tavlang/test/CommandLineTest.java   |   43 -
 .../taverna/tavlang/test/TestConvert.java       |   34 -
 .../apache/taverna/tavlang/test/TestStats.java  |   34 -
 .../apache/taverna/tavlang/test/TestTools.java  |   80 -
 .../taverna/tavlang/test/TestValidate.java      |   49 -
 .../src/test/resources/.gitignore               |    0
 .../test/resources/workflows/t2flow/as.t2flow   | 1674 ------------------
 taverna-tavlang-tool/.gitignore                 |    1 +
 taverna-tavlang-tool/README.md                  |  425 +++++
 taverna-tavlang-tool/pom.xml                    |  213 +++
 taverna-tavlang-tool/src/main/java/.gitignore   |    0
 .../apache/taverna/tavlang/CommandLineTool.java |  350 ++++
 .../taverna/tavlang/TavernaCommandline.java     |   29 +
 .../org/apache/taverna/tavlang/tools/Tools.java |   88 +
 .../tavlang/tools/convert/Scufl2Convert.java    |  206 +++
 .../taverna/tavlang/tools/convert/ToJson.java   |  298 ++++
 .../tavlang/tools/convert/ToRobundle.java       |   66 +
 .../tavlang/tools/inspect/ProcessorNames.java   |  169 ++
 .../tavlang/tools/inspect/ServiceTypes.java     |  112 ++
 .../taverna/tavlang/tools/stats/GetWfStat.java  |  193 ++
 .../tavlang/tools/validate/Validate.java        |  151 ++
 .../src/main/resources/.gitignore               |    0
 .../src/main/resources/META-INF/NOTICE          |    7 +
 taverna-tavlang-tool/src/test/java/.gitignore   |    0
 .../taverna/tavlang/test/CommandLineTest.java   |   43 +
 .../taverna/tavlang/test/TestConvert.java       |   34 +
 .../apache/taverna/tavlang/test/TestStats.java  |   34 +
 .../apache/taverna/tavlang/test/TestTools.java  |   80 +
 .../taverna/tavlang/test/TestValidate.java      |   49 +
 .../src/test/resources/.gitignore               |    0
 .../test/resources/workflows/t2flow/as.t2flow   | 1674 ++++++++++++++++++
 49 files changed, 4223 insertions(+), 4223 deletions(-)
----------------------------------------------------------------------



[07/11] incubator-taverna-language git commit: Module rename : added -

Posted by st...@apache.org.
Module rename : added -

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

Branch: refs/heads/master
Commit: 3aa91bf883dc3b112a7e7b9a8b2154c43c8e3957
Parents: 66a8cfd
Author: Menaka Madushanka <me...@gmail.com>
Authored: Tue Feb 2 11:59:55 2016 +0530
Committer: Menaka Madushanka <me...@gmail.com>
Committed: Tue Feb 2 11:59:55 2016 +0530

----------------------------------------------------------------------
 taverna-tavlang-tool/.gitignore                 |    1 +
 taverna-tavlang-tool/README.md                  |  425 +++++
 taverna-tavlang-tool/pom.xml                    |  213 +++
 taverna-tavlang-tool/src/main/java/.gitignore   |    0
 .../apache/taverna/tavlang/CommandLineTool.java |  350 ++++
 .../taverna/tavlang/TavernaCommandline.java     |   29 +
 .../org/apache/taverna/tavlang/tools/Tools.java |   88 +
 .../tavlang/tools/convert/Scufl2Convert.java    |  206 +++
 .../taverna/tavlang/tools/convert/ToJson.java   |  298 ++++
 .../tavlang/tools/convert/ToRobundle.java       |   66 +
 .../tavlang/tools/inspect/ProcessorNames.java   |  169 ++
 .../tavlang/tools/inspect/ServiceTypes.java     |  112 ++
 .../taverna/tavlang/tools/stats/GetWfStat.java  |  193 ++
 .../tavlang/tools/validate/Validate.java        |  151 ++
 .../src/main/resources/.gitignore               |    0
 .../src/main/resources/META-INF/NOTICE          |    7 +
 taverna-tavlang-tool/src/test/java/.gitignore   |    0
 .../taverna/tavlang/test/CommandLineTest.java   |   43 +
 .../taverna/tavlang/test/TestConvert.java       |   34 +
 .../apache/taverna/tavlang/test/TestStats.java  |   34 +
 .../apache/taverna/tavlang/test/TestTools.java  |   80 +
 .../taverna/tavlang/test/TestValidate.java      |   49 +
 .../src/test/resources/.gitignore               |    0
 .../test/resources/workflows/t2flow/as.t2flow   | 1674 ++++++++++++++++++
 24 files changed, 4222 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/.gitignore b/taverna-tavlang-tool/.gitignore
new file mode 100644
index 0000000..916e17c
--- /dev/null
+++ b/taverna-tavlang-tool/.gitignore
@@ -0,0 +1 @@
+dependency-reduced-pom.xml

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/README.md
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/README.md b/taverna-tavlang-tool/README.md
new file mode 100644
index 0000000..e76cbcd
--- /dev/null
+++ b/taverna-tavlang-tool/README.md
@@ -0,0 +1,425 @@
+<!--
+   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.
+-->
+
+# Apache Taverna Language Command Line
+
+
+This is planned as a command line for the
+[Apache Taverna Language](https://github.com/apache/incubator-taverna-language/),
+an API for the 
+[Apache Taverna](http://taverna.incubator.apache.org/) workflows.
+
+This module is a **work in progress** as part of Google Summer of Code 2015.
+
+
+
+## License
+
+(c) 2015 Apache Software Foundation
+
+This product includes software developed at The [Apache Software
+Foundation](http://www.apache.org/).
+
+Licensed under the [Apache License
+2.0](https://www.apache.org/licenses/LICENSE-2.0), see the file
+[../LICENSE](../LICENSE) for details.
+
+The file [NOTICE](src/main/resources/NOTICE) contains any additional attributions and
+details about embedded third-party libraries and source code.
+
+
+# Contribute
+
+Please subscribe to and contact the 
+[dev@taverna](http://taverna.incubator.apache.org/community/lists#dev%20mailing%20list)
+for any questions, suggestions and discussions about 
+Apache Taverna Language Commandline.
+
+Bugs and planned features are tracked in the Jira
+[Issue tracker](https://issues.apache.org/jira/browse/TAVERNA/component/12326903)
+under the `TAVERNA` component _GSOC Taverna Language Command line_. Feel free
+to add an issue!
+
+To suggest changes to this source code, feel free to raise a 
+[GitHub pull request](https://github.com/apache/incubator-taverna-mobile/pulls).
+Any contributions received are assumed to be covered by the [Apache License
+2.0](https://www.apache.org/licenses/LICENSE-2.0). We might ask you 
+to sign a [Contributor License Agreement](https://www.apache.org/licenses/#clas)
+before accepting a larger contribution.
+
+
+# Building and install requirements
+
+## Requisites
+
+* Java 1.7 or newer
+* [Apache Maven](https://maven.apache.org/download.html) 3.2.5 or newer (older
+  versions probably also work)
+
+
+## Building
+
+To build, run:
+
+    mvn clean install
+
+
+# Usage
+
+	usage: tavlang <command> [<args>]
+	
+	The most commonly used tavlang commands are:
+	    convert    Convert the given workflow
+	    help       Display help information about Tvarna
+	    inspect    Inspect the given workflow and show the results on the terminal
+	    validate   Validate the given workflow
+	    version    Show version informantion
+	
+	See 'tavlang help <command>' for more information on a specific command.
+
+# Documentation
+
+The Taverna language command line tool is for accessing the features of the Taverna language modules. 
+The tool has the following functions:
+
+* Conversion
+* Inspection
+* Validation
+* Viewing workflow statistics.
+	
+## Command line structure 
+	
+	$tavlang <command> <options> [arguments and parameters]
+	
+Each command has its own set of options.
+
+###Commands and Options
+The tool has the following major commands:
+
+* convert: Options {-r -- recursive, -i --input, -o --output,}
+* inspect: Options {-l --log}
+* validate: Options {-l --log, -v --verbose}
+* stats: Options {-l --log, -v --verbose}
+
+## Commands in detail
+
+### convert ------------------------------------------------------
+
+Convert the given workflow file/s into a specified output format.
+
+Usage:
+	
+	tavlang convert (--output_fomat) ([[options] [arguments]]|files...)
+	
+ Supported output formats are,
+ 
+ * wfbundle
+ * iwir
+ * json
+ * robundle
+ * structure
+ 
+Options:
+
+ * -r, --recursive : Convert all workflow files in a given directory recursively
+ * -i, --input     : Used with recursive case. Specify the input directory
+ * -o, --output    : Specify the out put directory 
+
+*The tool can only convert into one format at a time
+
+There are two methods for using the conversion command.
+
+####  1. Non-recursive method
+
+Usage: 
+
+	$tavlang convert (--output_format) [options] [arguments] 
+	
+####### Example 1: Without specifying any options
+	
+	$tavlang convert --structure /helloworld.t2flow
+	
+Output:
+
+	/converted/helloworld.structure is created
+
+Convert the helloworld.t2flow into helloworld.structure format and store in the /converted directory
+
+###### Example 2: Convert multiple workflows
+	
+	$tavlang convert --json /helloworld.t2flow /hello.t2flow
+	
+Output:
+	
+	/converted/helloworld.json is created
+	/converted/hello.json is created
+	
+Convert both workflow files and store them in /converted directory
+
+###### Example 3: with options and arguments
+
+	$tavlang convert --wfbundle /helloworld.t2flow -o /output/workflows
+	
+Output:
+	
+	/output/workflows/helloworld.wfbundle is created
+	
+Convert the workflow file/s and store them in the specified output directory
+
+####  2. Recursive method
+
+If there are many workflows in a directory, which are needed to be converted into one single format use this method.
+	
+Usage: 
+	
+	$tavlang convert -r (--output_format) -i workflow_src_dir <options> [arguments]
+
+###### Example 4: Without options and arguments
+
+	$tavlang convert -r --json -i /home/user/workflows
+	
+Convert all the workflows in the input directory into the specified format and store them in the "/home/user/workflows/converted" directory.
+
+Output: Suppose that there are 2 workflow files in the dir 1.t2flow and 2.t2flow
+
+	/home/workflows/converted/1.json is created
+	/home/workflows/converted/2.json is created
+
+###### Example 5: with output dir is specified
+
+	$tavlang convert -r --iwir -i /home/workflows -o /home/final
+	
+Convert all the workflows in the input directory and store them in /home/final directory
+
+Output:
+
+	/home/final/1.iwir is created
+	/home/final/2.iwir is created
+	
+### inspect -----------------------------------------------------------------
+
+Inspect the given workflow file/s and give the inspection report. 
+Supported workflow bundle formats: .wfbundle, .t2flow
+
+Usage:-
+	
+	$tavlang inspect (--inspection_options) <-other-options> [arguments] workflow_undles_to_be_inspected
+	
+Inspection options: 
+
+ * --servicetypes :- List all the service-types used in the workflow
+ * --processornames :- List the tree of the processor names used in the workflow
+ 
+Other Options:
+
+ * -l, --log :- save the inspection report in a text file 
+ 
+###### Example 1: Without any other-options
+
+1. Inspection result for Service types
+
+
+	$tavlang inspect --servicetypes helloworld.wfbundle
+	Service types used in helloworld.wfbundle :
+
+	http://ns.taverna.org.uk/2010/activity/constant
+	**************************************************
+
+2. inspection result for Processor names
+	
+	
+	$tavlang inspect --processornames helloworld.wfbundle
+	Processor tree of helloworld.wfbundle 
+	+ Hello_World
+	  - hello
+	
+###### Example 2: With other options
+The output is the same but the results will be saved in the given file.
+
+	$tavlang inspect --processornames helloworld.wfbundle -l results.txt
+	Processor tree of helloworld.wfbundle 
+	+ Hello_World
+	 - hello
+
+
+The output will be saved in results.txt in the same format.
+
+### validate ----------------------------------------------------------------------
+
+Validates the given workflow file or files and gives the validation report. 
+Validate tool checks for the following problematic conditions.
+
+ * Empty Iteration Strategy Top-Node Problems
+ * Mismatch Configurable Type Problems
+ * Non-Absolute URI Problems
+ * Null Field Problems
+ * Out-Of-Scope Value Problems
+ * Port Mentioned Twice Problems
+ * Port Missing From Iteration Strategy Stack Problems
+ * Wrong Parent Problems
+ * Incompatible Granular Depth Problems
+ 
+Usage:-
+
+	$tavlang validate [options][arguments] input_files
+
+Options:- 
+
+ * -l, --log: Save the validation report in a text file
+ * -v, --verbose: Verbose mode
+
+Supported workflow bundle formats: .t2flow and .wfbundle
+
+###### Example 1: Normal mode
+
+  Validate one workflow bundle
+
+	$tavlang validate helloworld.t2flow
+	
+Output: 
+	
+	Validation started....
+	Validating helloworld.t2flow
+	The workflow helloworld.t2flow has no errors. 
+
+	Validation completed.......
+ 
+  Validate more than one workflow bundles
+ 
+	$tavlang validate ../../workflow2.t2flow ../../workflow3.wfbundle
+
+	Validation started....
+	Validating ../../workflow2.t2flow
+	The workflow workflow2.t2flow has no errors. 
+
+	Validating ../../workflow3.wfbundle
+	The workflow workflow3.t2flow has no errors. 
+
+	Validation completed.......
+
+
+###### Example 2: Verbose mode
+
+The report is more explanatory.
+
+	$tavlang validate -v ../../workflow2.t2flow
+
+	Validation started....
+	Validating ../../workflow2.t2flow
+	The workflow workflow2.t2flow has no errors. 
+
+	The validation report for defaultActivitiesTaverna2.wfbundle......
+	-------------------------------------------------------------------------------- 
+	-->NegativeValueProblems:- null 
+	
+	-->EmptyIterationStrategyTopNodeProblems:- null 
+
+	-->MismatchConfigurableTypeProblems:- null 
+
+	-->NonAbsoluteURIProblems:- null 
+
+	-->NullFieldProblems:- null 
+
+	-->OutOfScopeValueProblems:- null 
+
+	-->PortMentionedTwiceProblems:- null 
+
+	-->PortMissingFromIterationStrategyStackProblems:- null 
+
+	-->WrongParentProblems:- null 
+
+	-->IncompatibleGranularDepthProblems:- null 
+
+	---------------------------------------------------------------------------------
+
+###### Example 3: Saving results to a file
+
+	$tavlang validate workflow2.t2flow -l log2.txt 
+	Validation started.... 
+	Validating workflow2.t2flow 
+	The workflow helloworld.wfbundle has no errors. 
+	Validation completed....... 
+	
+	Results were saved into log2.txt
+
+### stats ----------------------------------------------------------------------------------
+
+A workflow contains several resources.
+
+* Processors
+* Input ports
+* Output ports
+* Data links
+* Control links
+
+The stats command gives a report of the resources used in the workflow.
+
+Usage:- 
+
+	$tavlang stats <options>[arguments] input_files...
+	
+Options:- 
+
+ * -l, – – log : Save results in a log file
+ * -v, – – verbose : verbose mode
+ 
+Supported workflow bundle formats:- .t2flow, .wfbundle
+
+###### Example 1: Normal mode
+
+	$tavlang helloworld.wfbundle
+	>>> Statistics of the workflow bundle: helloworld.wfbundle <<<
+	Name of the workflow = Hello_World
+	 |--> Number of Processors = 1
+	 |--> Number of Data Links = 1
+	 |--> Number of Control Links = 0
+	 |--> Number of Input ports = 0
+	 |--> Number of Output Ports = 1
+ 
+###### Example 2: Verbose mode 
+
+	$tavlang -v ../../../helloworld.wfbundle
+	>>> Statistics of the workflow bundle: helloworld.wfbundle <<<
+	Name of the workflow = Hello_World
+	 |--> Number of Processors = 1
+	 | |--> Processors: 
+	 |      |--> hello
+	 |
+	 |--> Number of Data Links = 1
+	 | |--> Data Links
+	 |      |--> DataLink value=>greeting
+	 |
+	 |--> Number of Control Links = 0
+	 |--> Number of Input ports = 0
+	 |--> Number of Output Ports = 1
+	 | |--> Output Ports
+	 |      |--> OutputWorkflowPort "greeting"
+	 
+###### Example 3: Saving results in a file 
+
+	$tavlang -l ../../results.txt ../../../helloworld.wfbundle
+	>>> Statistics of the workflow bundle: helloworld.wfbundle <<<
+	Name of the workflow = Hello_World
+	 |--> Number of Processors = 1
+	 |--> Number of Data Links = 1
+	 |--> Number of Control Links = 0
+	 |--> Number of Input ports = 0
+	 |--> Number of Output Ports = 1
+
+	Results were saved into ../../results.txt
+	
+-----------------------------------------------------------------------------------------------------------------------------------------
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/pom.xml
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/pom.xml b/taverna-tavlang-tool/pom.xml
new file mode 100644
index 0000000..369dbf4
--- /dev/null
+++ b/taverna-tavlang-tool/pom.xml
@@ -0,0 +1,213 @@
+<?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
+
+       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>taverna-language</artifactId>
+      	<version>0.15.1-incubating-SNAPSHOT</version>
+    </parent>
+    <artifactId>taverna-tavlang-tool</artifactId>
+    <name>Apache Taverna Language Commandline</name>
+    <description>Command line for Taverna Language (experimental)</description>
+
+	
+    <dependencies>
+    
+    	<dependency>
+			<groupId>commons-io</groupId>
+			<artifactId>commons-io</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>taverna-scufl2-api</artifactId>
+			<version>${project.parent.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>taverna-scufl2-wfbundle</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>taverna-scufl2-t2flow</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+
+<!-- 		<dependency> -->
+<!-- 			<groupId>org.shiwa.iwir</groupId> -->
+<!-- 			<artifactId>iwir</artifactId> -->
+<!-- 			<version>1.1.4</version> -->
+<!-- 			<scope>optional</scope> -->
+<!-- 			<systemPath>${project.build.directory}/taverna-language-commandline/lib/</systemPath> -->
+<!-- 		</dependency> -->
+		
+   	 <dependency>
+		<groupId>no.s11.scufl2</groupId>
+		<artifactId>scufl2-iwir</artifactId>
+		<version>0.2-SNAPSHOT</version>
+        <optional>true</optional>
+    </dependency>
+
+ 
+		
+		<dependency>
+			<groupId>com.thoughtworks.xstream</groupId>
+			<artifactId>xstream</artifactId>
+			<version>1.4.8</version>
+		</dependency>
+
+
+		<!-- <dependency> <groupId>${project.groupId}</groupId> <artifactId>taverna-scufl2-wfdesc</artifactId> 
+			<version>${project.version}</version> <optional>true</optional> </dependency> -->
+		<!-- <dependency> <groupId>org.purl.wf4ever</groupId> <artifactId>scufl2-wfdesc</artifactId> 
+			<version>0.3.7</version> </dependency> -->
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-core</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-databind</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>taverna-scufl2-ucfpackage</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>taverna-robundle</artifactId>
+			<version>${project.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>io.airlift</groupId>
+			<artifactId>airline</artifactId>
+			<!-- <version>${io.airlift.airline.version}</version> -->
+			<version>0.7</version>
+		</dependency>
+
+
+	</dependencies>
+
+	<build>
+		<!-- TODO: plugins for launchers and executable jar files? -->
+		<plugins>
+
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>appassembler-maven-plugin</artifactId>
+				<version>1.1.1</version>
+				<executions>
+					<execution>
+						<id>assemble</id>
+						<phase>package</phase>
+						<goals>
+							<goal>assemble</goal>
+						</goals>
+					</execution>
+				</executions>
+				<configuration>
+					<repositoryLayout>flat</repositoryLayout>
+					<repositoryName>lib</repositoryName>
+					<assembleDirectory>${project.build.directory}/${project.artifactId}</assembleDirectory>
+					<programs>
+						<program>
+							<mainClass>org.apache.taverna.tavlang.TavernaCommandline</mainClass>
+							<name>tavlang</name>
+						</program>
+					</programs>
+				</configuration>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-shade-plugin</artifactId>
+				<version>2.3</version>
+				<executions>
+					<execution>
+						<phase>package</phase>
+						<goals>
+							<goal>shade</goal>
+						</goals>
+						<configuration>
+							<transformers>
+								<transformer
+									implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
+								<transformer
+									implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+									<mainClass>org.apache.taverna.tavlang.TavernaCommandline</mainClass>
+								</transformer>
+								<transformer implementation="org.apache.maven.plugins.shade.resource.ApacheNoticeResourceTransformer">
+                    			<addHeader>false</addHeader>
+                    			</transformer>
+							</transformers>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+
+
+		</plugins>
+	</build>
+
+	<repositories>
+		<repository>
+			<releases>
+				<enabled>false</enabled>
+			</releases>
+			<snapshots />
+			<id>mygrid-repository</id>
+			<name>myGrid Repository</name>
+			<url>http://www.mygrid.org.uk/maven/repository</url>
+		</repository>
+		
+		<repository>
+			<id>mygrid-snapshot-repository</id>
+			<name>myGrid Snapshot Repository</name>
+			<url>http://www.mygrid.org.uk/maven/snapshot-repository</url>
+			<releases>
+				<enabled>false</enabled>
+			</releases>
+			<snapshots />
+		</repository>
+
+		<repository>
+			<id>apache.snapshots</id>
+			<name>Apache Snapshot Repository</name>
+			<url>http://repository.apache.org/snapshots</url>
+			<releases>
+				<enabled>false</enabled>
+			</releases>
+		</repository>
+	</repositories>
+
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/java/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/main/java/.gitignore b/taverna-tavlang-tool/src/main/java/.gitignore
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java
new file mode 100644
index 0000000..068c933
--- /dev/null
+++ b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/CommandLineTool.java
@@ -0,0 +1,350 @@
+package org.apache.taverna.tavlang;
+
+/*
+ * 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.
+ */
+
+import io.airlift.airline.Arguments;
+import io.airlift.airline.Cli;
+import io.airlift.airline.Cli.CliBuilder;
+import io.airlift.airline.Command;
+import io.airlift.airline.Help;
+import io.airlift.airline.Option;
+
+import java.io.IOException;
+import java.util.List;
+
+import javax.inject.Inject;
+import javax.xml.bind.JAXBException;
+
+import org.apache.taverna.scufl2.api.io.ReaderException;
+import org.apache.taverna.tavlang.tools.convert.Scufl2Convert;
+import org.apache.taverna.tavlang.tools.convert.ToRobundle;
+import org.apache.taverna.tavlang.tools.inspect.ProcessorNames;
+import org.apache.taverna.tavlang.tools.inspect.ServiceTypes;
+import org.apache.taverna.tavlang.tools.stats.GetWfStat;
+import org.apache.taverna.tavlang.tools.validate.Validate;
+
+import com.google.common.collect.Lists;
+
+/*
+ * The command line options for convert, validate and inspect workflows.
+ * Use the airlift/airline library
+ * */
+
+public class CommandLineTool {
+
+	private static Cli<TvnLangTool> parser() {
+		CliBuilder<TvnLangTool> build = Cli.<TvnLangTool> builder("tavlang")
+				.withDescription("Convert, manage workflows")
+				.withDefaultCommand(HelpCommand.class)
+				.withCommand(CommandConvert.class) // Conversion
+				.withCommand(HelpCommand.class) // Help
+				.withCommand(CommandInspect.class) // Inspect
+				.withCommand(CommandValidate.class) // Validate
+				.withCommand(CommandVersion.class) // Version
+				.withCommand(CommandStat.class); // Statistics
+
+		return build.build();
+	}
+
+	public CommandLineTool() {
+	};
+
+	public void parse(String... args) {
+		TvnLangTool command = parser().parse(args);
+		command.execute();
+		System.out.println();
+	}
+
+	public static abstract class TvnLangTool {
+
+		public abstract void execute();
+	}
+
+	// placeholder for output file types
+	public static class Filetypes {
+		@Option(name = "--wfdesc", description = "Convert the workflow file to wfdesc-turtle")
+		public static boolean isWfdesc = false;
+
+		@Option(name = "--wfbundle", description = "Convert the workflow file to wfbundle")
+		public static boolean isWfbundle = false;
+
+		@Option(name = "--robundle", description = "Convert given bundle in to Research Object bundle")
+		public static boolean isRo = false;
+
+		@Option(name = "--structure", description = "Convert the workflow into *.structure")
+		public static boolean isStructure = false;
+
+		@Option(name = "--json", description = "Convert the workflow into json")
+		public static boolean isJson = false;
+
+		
+		@Option(name = "--iwir", description = "Convert scufl2 workflows into IWIR 1.1 specification")
+		public static boolean isIwir = false;
+		
+		
+		// The tool can only handle one output format at a time.
+		// Return the file type which is selected
+		public static String isTrue() {
+			if (isWfdesc)
+				return "wfdesc";
+			else if (isWfbundle)
+				return "wfbundle";
+			else if (isRo)
+				return "robundle";
+			else if (isStructure)
+				return "structure";
+			else if (isJson)
+				return "json";
+			
+			else if (isIwir)
+				return "iwir";
+				
+			
+			else{
+				System.out.println("Invalid argument....");
+				TvnLangTool command = parser().parse("help", "convert");
+				command.execute();
+				return null;
+			}
+				
+		}
+
+	}
+
+	public static class Inspect {
+		@Option(name = "--servicetypes", description = "List the service types used in workflow")
+		public static boolean servicetypes = false;
+
+		@Option(name = "--processornames", description = "List a tree of processor names used in workflow")
+		public static boolean processor = false;
+
+		public String getWay() {
+			if (servicetypes)
+				return "servicetypes";
+			else if (processor)
+				return "processornames";
+			else{
+				System.out.println("Invalid argument....");
+				TvnLangTool command = parser().parse("help", "inspect");
+				command.execute();
+				return null;
+				
+			}
+				
+		}
+
+	}
+
+	// Placeholder for optional parameters: Ex: -i, -o
+	public static class Optional {
+
+		// The input file or directory
+		@Option(name = { "-i", "--input" }, description = "Input file/ file dir for conversion")
+		public static String in_file_dir;
+
+		// The out put file or directory. When this is set, all the converted
+		// files will be saved into the directory that specified.
+		@Option(name = { "-o", "--output" }, description = "Output file/ directory")
+		public static String out_file_dir;
+
+		public static String getInFile() {
+			return in_file_dir;
+		}
+
+		public static String getOutFile() {
+			return out_file_dir;
+		}
+
+	}
+
+	@Command(name = "help", description = "Display help information about Tvarna")
+	public static class HelpCommand extends TvnLangTool {
+		@Inject
+		public Help help;
+
+		@Override
+		public void execute() {
+			help.call();
+		}
+	}
+
+	// Command for convert workflows
+	@Command(name = "convert", description = "Convert the given workflow")
+	public static class CommandConvert extends TvnLangTool {
+		@Inject
+		Optional optional = new Optional();
+
+		@Inject
+		Filetypes filetypes = new Filetypes();
+
+		@Arguments(usage = "<output format> <input files> ", description = "List of files to be converted.\n "
+				+ "Give the list of files to be converted without -i/-o and the converted files will be saved in to /converted folder in the same dir")
+		public final List<String> files = Lists.newArrayList();
+
+		// When this is true, the command will run recursively in a directory.
+		@Option(name = { "-r", "--recursive" }, description = "Execute the command recursively")
+		public boolean recurse = false;
+
+		// Option for validate the given workflow when converting
+		@Option(name = { "-V", "--validate" }, description = "Validate the workflow before convert")
+		public boolean validate = false;
+
+		@Override
+		public void execute() {
+			
+			//Validate before convert
+			if(validate){
+				Validate validate = new Validate(files, null, false);
+				if(validate.getCheck()){
+					System.out.println("Conversion failed...! Workflow bundle has errors");
+					return;
+				}else{
+					runcommand();
+				}
+			}
+		}
+			
+		public void runcommand(){
+			if (Filetypes.isRo) {
+				try {
+					new ToRobundle(files, Optional.getOutFile());
+				} catch (Exception e) {
+					e.printStackTrace();
+				}
+//				else if(Filetypes.isIwir || Filetypes.isJson || Filetypes.isStructure || Filetypes.isWfbundle || Filetypes.isWfdesc)
+			} else if(Filetypes.isIwir || Filetypes.isJson || Filetypes.isStructure || Filetypes.isWfbundle || Filetypes.isWfdesc){
+				if (recurse) {
+					new Scufl2Convert(Filetypes.isTrue(),
+							Optional.getInFile(), Optional.getOutFile());
+				} else {
+					new Scufl2Convert(Filetypes.isTrue(), files,
+							Optional.getOutFile());
+				}
+			}else{
+				System.out.println("Invalid argument....");
+				TvnLangTool command = parser().parse("help", "convert");
+				command.execute();
+			}
+
+		}
+		
+		
+		
+	}
+
+	// Version command
+	@Command(name = "version", description = "Show version informantion")
+	public static class CommandVersion extends TvnLangTool {
+
+		@Override
+		public void execute() {
+			System.out.print(getClass().getPackage().getImplementationTitle());
+            System.out.println(" " + getClass().getPackage().getImplementationVersion());
+		}
+
+	}
+
+	// Command for inspection of workflows....!!
+	@Command(name = "inspect", description = "Inspect the given workflow and show the results on the terminal")
+	public static class CommandInspect extends TvnLangTool {
+
+		@Inject
+		Inspect inspect = new Inspect();
+
+		@Option(name = { "-l", "--log" }, description = "Specify the file name where results should be stored ([some dir]/log.txt)")
+		public String file;
+
+		@Arguments(usage = "<option> <input files>", description = "Inspect the given workflow")
+		public List<String> toInspect = Lists.newArrayList();
+
+		@Override
+		public void execute() {
+			if (Inspect.processor) {
+				try {
+					new ProcessorNames(toInspect, file);
+
+				} catch (ReaderException | IOException | JAXBException e) {
+					e.printStackTrace();
+				}
+			} else if (Inspect.servicetypes) {
+				try {
+					new ServiceTypes(toInspect, file);
+				} catch (IOException | ReaderException e) {
+					e.printStackTrace();
+				}
+
+			}else{
+				System.out.println("Invalid argument....");
+				TvnLangTool command = parser().parse("help", "inspect");
+				command.execute();
+			}
+
+		}
+
+	}
+
+	// Command for validation
+	@Command(name = "validate", description = "validate the given workflow")
+	public static class CommandValidate extends TvnLangTool{
+	
+		@Option(name = { "-l", "--log" }, description = "Specify the file name where results should be stored ([some dir]/log.txt)")
+		public String file;
+		
+		@Option(name = {"-v", "--verbose"}, description = "Verbose mode")
+		public boolean verbose;
+
+//		@Arguments(usage = "<option> <input files> <output dir>", description = "Validate the given workflow file/s")
+		@Arguments(usage = "input files", description = "Validate the given workflow file/s")
+		public List<String> toValidate = Lists.newArrayList();
+
+		@Override
+		public void execute() {
+		
+			Validate validate = new Validate(toValidate, file, verbose);
+			
+
+		}
+
+	}
+	
+	//Command for getting workflow stats
+	@Command (name = "stats", description = "Shows the workflow statistics")
+	public static class CommandStat extends TvnLangTool{
+
+		
+		@Option(name = {"-l", "--log"}, description ="Save the workflow statictics in a file")
+		public String file;
+		
+		@Option(name = {"-v", "--verbose"}, description = "Verbose mode")
+		public boolean verbose;
+		
+		@Arguments(usage="input files", description = "Enter the workflow bundle files")
+		public List<String> files;
+		
+		@Override
+		public void execute() {
+			
+			GetWfStat stat = new GetWfStat(files, file, verbose);
+			
+		}
+		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java
new file mode 100644
index 0000000..016488c
--- /dev/null
+++ b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/TavernaCommandline.java
@@ -0,0 +1,29 @@
+package org.apache.taverna.tavlang;
+
+/*
+ * 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.
+ */
+
+public class TavernaCommandline {
+
+	public static void main(String args[]){
+		CommandLineTool tool = new CommandLineTool();
+		tool.parse(args);
+		
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/Tools.java
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/Tools.java b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/Tools.java
new file mode 100644
index 0000000..c78c7a2
--- /dev/null
+++ b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/Tools.java
@@ -0,0 +1,88 @@
+package org.apache.taverna.tavlang.tools;
+
+/*
+ * 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.
+ */
+
+
+
+public class Tools {
+	
+	public static enum ConvertionTools {
+		wfbundle{
+			public String mediaType = "application/vnd.taverna.scufl2.workflow-bundle";
+			
+
+			@Override
+			public String getMediaType(ConvertionTools t) {
+				return this.mediaType;
+			}
+		},
+		json{
+			public String mediaType = "application/ld+json";
+
+
+			@Override
+			public String getMediaType(ConvertionTools t) {
+				return mediaType;
+			}
+		},
+		wfdesc{
+			public String mediaType = "text/vnd.wf4ever.wfdesc+turtle";
+
+
+			@Override
+			public String getMediaType(ConvertionTools t) {
+				// TODO Auto-generated method stub
+//				System.out.println(mediaType);
+				return mediaType;
+			}
+		},
+		robundle{
+
+			@Override
+			public String getMediaType(ConvertionTools t) {
+				return null;
+			}
+		
+		},
+		structure{
+			public String mediaType = "text/vnd.taverna.scufl2.structure";
+			
+			@Override
+			public String getMediaType(ConvertionTools t) {
+				return mediaType;
+			}
+		},
+		
+		iwir{
+				public String mediaType = "application/vnd.shiwa.iwir+xml";
+				
+				@Override
+				public String getMediaType(ConvertionTools t) {
+					return mediaType;
+				}
+		};
+		
+		ConvertionTools(){}
+		
+		public abstract String getMediaType(ConvertionTools t);
+		
+	}
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java
new file mode 100644
index 0000000..da4dff0
--- /dev/null
+++ b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/Scufl2Convert.java
@@ -0,0 +1,206 @@
+package org.apache.taverna.tavlang.tools.convert;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+import org.apache.taverna.scufl2.api.io.ReaderException;
+import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
+import org.apache.taverna.scufl2.api.io.WriterException;
+import org.apache.taverna.tavlang.tools.Tools.ConvertionTools;
+
+
+/*
+ * Converts 
+ * 	.t2flow --> .wfbundle
+ * 	.t2flow --> .structure
+ * 	.wfbundle --> .structure
+ *  .wfbundle/ .t2flow -> .iwir
+ * two constructors.
+ * Scufl2Convert(List<String> list, String out) --> will save the converted files in 'out folder or a directory named /converted in the same folder.
+ * Scufl2Convert(String in, String out) --> Will convert all the files in the 'in' folder and save them in 'out' folder --> -r must be true.
+ * 
+ * */
+public class Scufl2Convert{
+	
+	private ConvertionTools t;
+	private String MEDIA_TYPE;
+	private String input;
+	private String output;
+	private String type;
+	private List<String> filesList;
+	
+	public Scufl2Convert(String type, List<String> files, String out){
+		this.filesList = files;
+		this.output = out;
+		this.type = type.equals("wfdesc")?".wfdesc.ttl":"."+type;
+		this.MEDIA_TYPE = ConvertionTools.valueOf(type).getMediaType(t);
+		this.convert();
+	}
+	
+	//When recursive case is on....
+	public Scufl2Convert(String type, String in, String out){
+		this.input = in;
+		this.output = out;
+		this.type = type.equals("wfdesc")?".wfdesc.ttl":"."+type;
+		this.MEDIA_TYPE = ConvertionTools.valueOf(type).getMediaType(t);	//Determine the writer media type
+		
+		this.createdir();
+	}
+	
+	//Create the dir if not exists
+	public void createdir(){
+		if(output == null){
+			File outFile = new File(this.input, "converted");
+			try {
+				FileUtils.forceMkdir(outFile);
+				this.output = outFile.getAbsolutePath();
+			} catch (IOException e1) {
+				System.err.println("Error: The directory cannot be created...!!!!");
+				e1.printStackTrace();
+			}
+		}else{
+			File outFile = new File(this.output);
+			try {
+				FileUtils.forceMkdir(outFile);
+				
+			} catch (IOException e1) {
+				System.err.println("Error: The directory cannot be created...!!!!");
+				e1.printStackTrace();
+			}
+		}
+		this.rec_convert(this.input);
+	}
+	
+	//Convert the given file. Return in case of an exception.
+	public boolean convert(){
+		
+		boolean check = false;
+		// If the output folder is given, save the converted files in to that folder.
+		 
+		if(this.filesList.size()>0 && this.output != null){
+			File outFile = new File(this.output);
+			try {
+				FileUtils.forceMkdir(outFile);
+			} catch (IOException e1) {
+				System.err.println("Error: The directory cannot be created...!!!");
+			}
+			for(String file : this.filesList){
+				File t2File = new File(file);
+				
+				convertFile(t2File, outFile);
+				
+			}
+			
+		}
+		
+		 /* If the output file is not given, save the converted files in 
+		  *  '/converted' folder.
+		  */
+		 
+		else if(this.filesList.size()>0 && this.output == null){
+			for(String file : this.filesList){
+				File t2File = new File(file);
+				
+				File outFile = new File(t2File.getParentFile(), "converted");
+				try {
+					FileUtils.forceMkdir(outFile);
+				} catch (IOException e1) {
+					System.err.println("Error: The directory cannot be created...!!!");
+				}
+				
+				convertFile(t2File, outFile);
+				
+			}
+		}else{
+			System.err.println("Error: Argument mismatch");
+			check = false;
+		}
+		
+		return check;
+	}
+	
+	//Convert the files in a given directory and save the converted files in to specified dir or /converted folder.
+	//Recursive conversion
+	public void rec_convert(String dir){
+			
+			File parent = new File(this.input);
+			if(!parent.exists()){
+				System.err.println("Error: Input directory not found");
+			}else{
+				for(File file : parent.listFiles()){
+					if(!file.isDirectory())
+					{
+						File outFile = new File(this.output);
+						convertFile(file, outFile);
+					}
+				}
+			}
+	}
+	
+	//Convert the file
+	public void convertFile(File t2File, File outFile){
+		
+		//Check weather the input files are in valid format...!!!
+		String ext = FilenameUtils.getExtension(t2File.getName());
+		if(!ext.equalsIgnoreCase("t2flow")&&!ext.equalsIgnoreCase("wfbundle")){
+			System.err.println("Error: Invalid input file format...!!!");
+			return;
+		}
+		
+		WorkflowBundleIO wfbio = new WorkflowBundleIO();
+		String filename = t2File.getName();
+		filename = filename.replaceFirst("\\..*", this.type);
+		File scufl2File = new File(outFile.getAbsolutePath(), filename);
+		
+		WorkflowBundle wfBundle;
+		try {
+			wfBundle = wfbio.readBundle(t2File, null);// null --> will guess the media type for reading.
+			
+//			if(this.type.equals(".iwir")){
+//				IwirWriter iww = new IwirWriter();
+//				iww.writeBundle(wfBundle, scufl2File, this.MEDIA_TYPE);
+//			}else
+			
+			if(this.type.equals(".json")){
+				ToJson toJ = new ToJson();
+				toJ.convert(t2File, outFile);
+			}
+			else{
+				wfbio.writeBundle(wfBundle, scufl2File, this.MEDIA_TYPE);
+			}
+			System.out.println(scufl2File.getPath() + " is created.");
+		}catch (ReaderException e){
+			System.err.println("Error: Connot read the file");
+		}catch(IOException e){
+			System.err.println("Error: File not found");
+		}catch(WriterException e) {
+			System.err.println("Error: Cannot write to the file");
+//			e.printStackTrace();
+		}
+	}
+
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java
new file mode 100644
index 0000000..f11424c
--- /dev/null
+++ b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToJson.java
@@ -0,0 +1,298 @@
+package org.apache.taverna.tavlang.tools.convert;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URI;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.taverna.scufl2.api.annotation.Annotation;
+import org.apache.taverna.scufl2.api.annotation.Revision;
+import org.apache.taverna.scufl2.api.common.Child;
+import org.apache.taverna.scufl2.api.common.Ported;
+import org.apache.taverna.scufl2.api.common.Scufl2Tools;
+import org.apache.taverna.scufl2.api.common.URITools;
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+import org.apache.taverna.scufl2.api.core.BlockingControlLink;
+import org.apache.taverna.scufl2.api.core.ControlLink;
+import org.apache.taverna.scufl2.api.core.DataLink;
+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.WorkflowBundleWriter;
+import org.apache.taverna.scufl2.api.io.WriterException;
+import org.apache.taverna.scufl2.api.port.DepthPort;
+import org.apache.taverna.scufl2.api.port.GranularDepthPort;
+import org.apache.taverna.scufl2.api.port.Port;
+import org.apache.taverna.scufl2.api.profiles.Profile;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.fasterxml.jackson.databind.util.ISO8601DateFormat;
+
+public class ToJson {
+	public class JsonWriter implements WorkflowBundleWriter {
+
+		@Override
+		public Set<String> getMediaTypes() {
+			return new HashSet<String>(Arrays.asList("application/ld+json",
+					"application/json"));
+		}
+
+		@Override
+		public void writeBundle(WorkflowBundle wfBundle, File destination,
+				String mediaType) throws WriterException, IOException {
+			ObjectNode json = toJson(wfBundle);
+			mapper.writeValue(destination, json);
+		}
+
+		@Override
+		public void writeBundle(WorkflowBundle wfBundle, OutputStream output,
+				String mediaType) throws WriterException, IOException {
+			ObjectNode json = toJson(wfBundle);
+			mapper.writeValue(output, json);
+		}
+
+	}
+
+	
+	private WorkflowBundleIO io = new WorkflowBundleIO();;
+
+	private WorkflowBundleWriter jsonWriter = new JsonWriter();
+
+	private ObjectMapper mapper = new ObjectMapper();
+
+	private Scufl2Tools scufl2Tools = new Scufl2Tools();
+
+	private URITools uriTools = new URITools();
+
+	public ToJson() {
+		mapper.enable(SerializationFeature.INDENT_OUTPUT);
+		mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
+		mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+
+		mapper.setDateFormat(new ISO8601DateFormat());
+
+		// Adding custom writer dynamically
+		List<WorkflowBundleWriter> writers = io.getWriters();
+		writers.add(jsonWriter);
+		io.setWriters(writers);
+	}
+
+	protected void addPorts(Ported ported, ObjectNode p) {
+		ArrayNode inputs = mapper.createArrayNode();
+		for (Port port : ported.getInputPorts()) {
+			inputs.add(toJson(port));
+		}
+		p.put("inputs", inputs);
+
+		ArrayNode outputs = mapper.createArrayNode();
+		for (Port port : ported.getOutputPorts()) {
+			outputs.add(toJson(port));
+			// FIXME: Do we need the id for ports? Needed if we add datalinks
+		}
+		p.put("outputs", outputs);
+	}
+
+	protected ObjectNode annotations(Child<?> bean) {
+		ObjectNode node = mapper.createObjectNode();
+		for (Annotation ann : scufl2Tools.annotationsFor(bean)) {
+			URI annUri = uriTools.uriForBean(ann);
+
+			// TODO: include annotation body?
+		}
+		return node;
+	}
+
+	public void convert(File in, File out) throws ReaderException, IOException,
+			WriterException {
+		String filename = in.getName();
+		filename = filename.replaceFirst("\\..*", ".json");
+		File workflowFile = new File(out.getAbsolutePath(), filename);
+
+		WorkflowBundle wfBundle = io.readBundle(in, null);
+		io.writeBundle(wfBundle, workflowFile, "application/ld+json");
+//		System.out.println(workflowFile);
+
+	}
+
+	protected ObjectNode toJson(Port port) {
+		ObjectNode p = mapper.createObjectNode();
+		p.put("name", port.getName());
+		p.putPOJO("id",
+				uriTools.relativeUriForBean(port, scufl2Tools.findParent(
+						WorkflowBundle.class, ((Child<?>) port))));
+
+		if (port instanceof DepthPort) {
+			DepthPort depthPort = (DepthPort) port;
+			if (depthPort.getDepth() != null) {
+				p.put("depth", depthPort.getDepth());
+			}
+		}
+		if (port instanceof GranularDepthPort) {
+			GranularDepthPort granularDepthPort = (GranularDepthPort) port;
+			if (granularDepthPort.getGranularDepth() != null
+					&& !granularDepthPort.getGranularDepth().equals(
+							granularDepthPort.getDepth())) {
+				p.put("granularDepth", granularDepthPort.getGranularDepth());
+			}
+		}
+		p.putAll(annotations((Child<?>) port));
+		return p;
+	}
+
+	protected JsonNode toJson(Processor proc) {
+		ObjectNode p = mapper.createObjectNode();
+		p.putPOJO("id",
+				uriTools.relativeUriForBean(proc, proc.getParent().getParent()));
+		p.put("name", proc.getName());
+		addPorts(proc, p);
+		p.putAll(annotations(proc));
+
+		List<Workflow> nested = scufl2Tools.nestedWorkflowsForProcessor(proc,
+				proc.getParent().getParent().getMainProfile());
+		if (!nested.isEmpty()) {
+			if (nested.size() == 1) {
+				p.put("nestedWorkflow", toJson(nested.iterator().next()));
+			} else {
+				ArrayNode list = mapper.createArrayNode();
+				for (Workflow w : nested) {
+					list.add(toJson(w));
+				}
+				p.put("nestedWorkflow", list);
+			}
+		}
+		return p;
+	}
+
+	protected JsonNode toJson(Revision currentRevision) {
+		ArrayNode revisions = mapper.createArrayNode();
+		while (currentRevision != null) {
+			ObjectNode rev = mapper.createObjectNode();
+			rev.putPOJO("id", currentRevision.getIdentifier());
+			if (currentRevision.getGeneratedAtTime() != null) {
+				rev.putPOJO("generatedAtTime",
+						currentRevision.getGeneratedAtTime());
+			}
+			currentRevision = currentRevision.getPreviousRevision();
+			if (currentRevision != null) {
+				rev.putPOJO("wasRevisionOf", currentRevision.getIdentifier());
+			}
+			revisions.add(rev);
+		}
+		return revisions;
+	}
+
+	protected ObjectNode toJson(Workflow workflow) {
+		ObjectNode wf = mapper.createObjectNode();
+
+		wf.putPOJO("id",
+				uriTools.relativeUriForBean(workflow, workflow.getParent()));
+
+		wf.put("name", workflow.getName());
+		wf.put("revisions", toJson(workflow.getCurrentRevision()));
+
+		ArrayNode processors = mapper.createArrayNode();
+		for (Processor p : workflow.getProcessors()) {
+			processors.add(toJson(p));
+		}
+		addPorts(workflow, wf);
+		wf.put("processors", processors);
+
+		ArrayNode datalinks = mapper.createArrayNode();
+		for (DataLink link : workflow.getDataLinks()) {
+			datalinks.add(toJson(link));
+		}
+		wf.put("datalinks", datalinks);
+
+		ArrayNode controlLinks = mapper.createArrayNode();
+		for (ControlLink link : workflow.getControlLinks()) {
+			controlLinks.add(toJson(link));
+		}
+		wf.put("controllinks", controlLinks);
+
+		wf.putAll(annotations(workflow));
+
+		return wf;
+	}
+
+	protected JsonNode toJson(ControlLink link) {
+		ObjectNode l = mapper.createObjectNode();
+		if (link instanceof BlockingControlLink) {
+			BlockingControlLink controlLink = (BlockingControlLink) link;
+			l.putPOJO("block", uriTools.relativeUriForBean(
+					controlLink.getBlock(), link.getParent().getParent()));
+			l.putPOJO("untilFinished", uriTools.relativeUriForBean(controlLink
+					.getUntilFinished(), link.getParent().getParent()));
+		}
+		return l;
+	}
+
+	protected JsonNode toJson(DataLink link) {
+		ObjectNode l = mapper.createObjectNode();
+		l.putPOJO("receivesFrom", uriTools.relativeUriForBean(
+				link.getReceivesFrom(), link.getParent().getParent()));
+		l.putPOJO("sendsTo", uriTools.relativeUriForBean(link.getSendsTo(),
+				link.getParent().getParent()));
+		if (link.getMergePosition() != null) {
+			l.put("mergePosition", link.getMergePosition());
+		}
+		return l;
+	}
+
+	public ObjectNode toJson(WorkflowBundle wfBundle) {
+
+		ObjectNode root = mapper.createObjectNode();
+		ArrayNode contextList = root.arrayNode();
+		root.put("@context", contextList);
+		ObjectNode context = root.objectNode();
+		contextList.add("https://w3id.org/scufl2/context");
+		contextList.add(context);
+		URI base = wfBundle.getGlobalBaseURI();
+		context.put("@base", base.toASCIIString());
+		root.put("id", base.toASCIIString());
+
+		// root.put("name", wfBundle.getName());
+		// root.put("revisions", toJson(wfBundle.getCurrentRevision()));
+
+		root.put("workflow", toJson(wfBundle.getMainWorkflow()));
+		root.put("profile", toJson(wfBundle.getMainProfile()));
+
+		return root;
+	}
+
+	private JsonNode toJson(Profile profile) {
+		ObjectNode pf = mapper.createObjectNode();
+
+		pf.putPOJO("id",
+				uriTools.relativeUriForBean(profile, profile.getParent()));
+		// TODO: Activities and configurations
+		return pf;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java
new file mode 100644
index 0000000..6ab14bc
--- /dev/null
+++ b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/convert/ToRobundle.java
@@ -0,0 +1,66 @@
+package org.apache.taverna.tavlang.tools.convert;
+
+/*
+ * 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.
+ */
+
+
+import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.logging.ConsoleHandler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.apache.taverna.robundle.Bundle;
+import org.apache.taverna.robundle.Bundles;
+
+public class ToRobundle{
+
+	public ToRobundle(List<String> files, String out) throws Exception{
+		
+		Logger logger = Logger.getLogger("");
+		//logger.setLevel(Level.FINER);
+		ConsoleHandler console = new ConsoleHandler();
+		console.setLevel(Level.FINEST);
+		logger.addHandler(console);
+		Logger.getLogger("org.researchobject").setLevel(Level.FINEST);
+		
+		for(String f : files){
+			Path file = Paths.get(f);
+			convert(file);
+		}
+	}
+	
+	//Recursive conversion
+	public ToRobundle(String type, String in, String out) {
+		
+	}
+	
+	public void convert(Path file) throws IOException{
+		try (Bundle bundle = Bundles.openBundle(file)) {
+			
+//			System.out.println(bundle.getManifest().toString());
+			bundle.getManifest().writeAsJsonLD();
+			bundle.getManifest().writeAsCombineManifest();
+		}
+	}
+	
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java
new file mode 100644
index 0000000..f93aadc
--- /dev/null
+++ b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ProcessorNames.java
@@ -0,0 +1,169 @@
+package org.apache.taverna.tavlang.tools.inspect;
+
+/*
+ * 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.
+ */
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreeModel;
+import javax.xml.bind.JAXBException;
+
+import org.apache.taverna.scufl2.api.common.Scufl2Tools;
+import org.apache.taverna.scufl2.api.common.URITools;
+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.profiles.Profile;
+
+/*
+ * list the processor names used in the workflow.
+ * Supported formats: .t2flow, .wfbundle
+ * */
+
+public class ProcessorNames {
+	
+	private List<String> fileList;
+	
+	private String file2;
+	
+	private Scufl2Tools scufl2Tools = new Scufl2Tools();
+
+	private URITools uriTools = new URITools();
+
+	public ProcessorNames(List<String> fileList, String file) throws ReaderException, IOException, JAXBException{
+		this.fileList = fileList;
+		this.file2 = file;
+		this.show();
+	}
+	
+	public void show() throws ReaderException, IOException, JAXBException{
+		WorkflowBundleIO io = new WorkflowBundleIO();
+		StringBuilder sb = new StringBuilder();
+		
+		for(String file : this.fileList){
+			File file2 = new File(file);
+			if(file2.isDirectory()){
+				for(File f : file2.listFiles()){
+					WorkflowBundle wfb = io.readBundle(f, null);
+					System.out.println("Processor tree of "+ f.getName() +" \n" +this.showProcessorTree(wfb));
+					sb.append("Processor tree of "+ f.getName() +" \n" +this.showProcessorTree(wfb) + "\n");
+				}
+			}else{
+				WorkflowBundle wfb = io.readBundle(new File(file), null);
+				System.out.println("Processor tree of "+ file +" \n" +this.showProcessorTree(wfb));
+				sb.append("Processor tree of "+ file +" \n" +this.showProcessorTree(wfb) + "\n");
+			}
+			
+			
+		}
+		
+		if(this.file2!=null){
+			File log = new File(file2);
+			FileWriter fw = new FileWriter(log);
+			BufferedWriter bw = new BufferedWriter(fw);
+			bw.write(sb.toString());
+			bw.close();
+			fw.close();
+			System.out.println("Results were saved into " + file2);
+		}
+	}
+	
+	private Workflow findNestedWorkflow(Processor processor) {
+		Profile profile = processor.getParent().getParent().getMainProfile();
+		return scufl2Tools.nestedWorkflowForProcessor(processor, profile);
+	}
+
+	private void findProcessors(WorkflowBundle ro, Workflow workflow,
+			DefaultMutableTreeNode parent) {
+		for (Processor processor : workflow.getProcessors()) {
+			DefaultMutableTreeNode processorNode = new DefaultMutableTreeNode(
+					processor.getName());
+			parent.add(processorNode);
+			Workflow wf = findNestedWorkflow(processor);
+			if (wf != null) {
+				findProcessors(ro, wf, processorNode);
+			}
+		}
+
+	}
+
+	public TreeModel makeProcessorTree(WorkflowBundle workflowBundle)
+			throws JAXBException, IOException {
+		Workflow workflow = workflowBundle.getMainWorkflow();
+		TreeModel treeModel = new DefaultTreeModel(new DefaultMutableTreeNode(
+				workflow.getName()));
+		DefaultMutableTreeNode parent = (DefaultMutableTreeNode) treeModel
+				.getRoot();
+
+		findProcessors(workflowBundle, workflow, parent);
+		return treeModel;
+	}
+
+	public List<String> showProcessorNames(WorkflowBundle ro)
+			throws JAXBException, IOException {
+		ArrayList<String> names = new ArrayList<String>();
+		for (Processor processor : ro.getMainWorkflow().getProcessors()) {
+			names.add(processor.getName());
+		}
+		Collections.sort(names);
+		return names;
+	}
+
+	public String showProcessorTree(WorkflowBundle ro) throws JAXBException,
+			IOException {
+		TreeModel treeModel = makeProcessorTree(ro);
+		return treeModelAsString(treeModel);
+	}
+
+	public String treeModelAsString(TreeModel treeModel) {
+		StringBuffer sb = new StringBuffer();
+		Object root = treeModel.getRoot();
+		treeModelAsString(treeModel, root, sb, "");
+		return sb.toString();
+	}
+
+	protected void treeModelAsString(TreeModel treeModel, Object parent,
+			StringBuffer sb, String indentation) {
+		sb.append(indentation);
+		int childCount = treeModel.getChildCount(parent);
+		if (childCount == 0) {
+			sb.append("- ");
+		} else {
+			sb.append("+ ");
+			indentation = indentation + "  ";
+		}
+		sb.append(parent);
+		sb.append("\n");
+		for (int i = 0; i < childCount; i++) {
+			Object child = treeModel.getChild(parent, i);
+			treeModelAsString(treeModel, child, sb, indentation);
+		}
+	}
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java
new file mode 100644
index 0000000..ddff2ab
--- /dev/null
+++ b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/inspect/ServiceTypes.java
@@ -0,0 +1,112 @@
+package org.apache.taverna.tavlang.tools.inspect;
+
+
+/*
+ * 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.
+ */
+
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
+import org.apache.taverna.scufl2.api.activity.Activity;
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+import org.apache.taverna.scufl2.api.io.ReaderException;
+import org.apache.taverna.scufl2.api.profiles.Profile;
+
+/*
+ * List the service types used in workflow.
+ * Supported file formats : .wfbundle, .t2flow
+ * */
+
+public class ServiceTypes {
+	
+	private List<String> filesList;
+	private Set<String> types = new LinkedHashSet<String>();
+	private String save;
+	
+	public ServiceTypes(List<String> filesList, String file) throws IOException, ReaderException{
+		this.filesList = filesList;
+		this.save = file;
+		this.service();
+		
+	}
+	
+	public void service() throws ReaderException, IOException{
+		WorkflowBundleIO io = new WorkflowBundleIO();
+		StringBuilder sb = new StringBuilder();
+		
+		for (String filepath : filesList) {
+			File file = new File(filepath);
+			
+			if(file.isDirectory()){
+				for(File f : file.listFiles()){
+				WorkflowBundle wfBundle = io.readBundle(f, null);
+				System.out.println("Service types used in " + f.getCanonicalPath() + " :" +"\n");
+				sb.append("Service types used in " + f.getCanonicalPath() + " :");
+				for (Profile profile : wfBundle.getProfiles()) {
+					for (Activity activity : profile.getActivities()) {
+						this.types.add(activity.getType().toASCIIString());
+					}
+				}
+				for(String t : types){
+					System.out.println(t);
+					sb.append(t + "\n");
+				}
+				System.out.println("\n**************************************************\n");
+				sb.append("\n**************************************************\n");
+				}
+			}else{
+			// mediaType = null  --> guess
+				WorkflowBundle wfBundle = io.readBundle(file, null);
+				System.out.println("Service types used in " + file.getCanonicalPath() + " :" + "\n");
+				sb.append("Service types used in " + file.getCanonicalPath() + " :");
+				for (Profile profile : wfBundle.getProfiles()) {
+					for (Activity activity : profile.getActivities()) {
+						this.types.add(activity.getType().toASCIIString());
+					}
+				}
+				for(String t : types){
+					System.out.println(t);
+					sb.append(t + "\n");
+				}
+				
+				System.out.println("\n**************************************************\n");
+				sb.append("\n**************************************************\n");
+			}
+		}
+		
+		if(save!=null){
+			File log = new File(save);
+			FileWriter fw = new FileWriter(log);
+			BufferedWriter bw = new BufferedWriter(fw);
+			bw.write(sb.toString());
+			bw.close();
+			fw.close();
+			System.out.println("Results were saved into " + save);
+		}
+		
+	}
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/stats/GetWfStat.java
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/stats/GetWfStat.java b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/stats/GetWfStat.java
new file mode 100644
index 0000000..7daa38e
--- /dev/null
+++ b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/stats/GetWfStat.java
@@ -0,0 +1,193 @@
+package org.apache.taverna.tavlang.tools.stats;
+
+/*
+ * 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.
+ */
+
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.taverna.scufl2.api.common.NamedSet;
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+import org.apache.taverna.scufl2.api.core.ControlLink;
+import org.apache.taverna.scufl2.api.core.DataLink;
+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.port.InputPort;
+import org.apache.taverna.scufl2.api.port.OutputPort;
+
+public class GetWfStat {
+	
+	private NamedSet<Workflow> set;
+	private String logFile;
+	private boolean verbose;
+	private StringBuilder str_verb = new StringBuilder();
+	private StringBuilder str_nverb = new StringBuilder();
+	
+	
+	//If given file is a workflow file
+	public GetWfStat(List<String> wf_files, String log, boolean verbose){
+		this.logFile = log;
+		this.verbose = verbose;
+		
+		for(String files : wf_files){
+			File f = new File(files);
+			if(f.isFile()){
+				this.read(f);
+				
+			}else{
+				System.err.println("Error reading the file " + f.getName());
+			}
+		}
+		
+		this.isVerbose();
+		
+		if(log!=null){
+			this.writefile(this.str_verb.toString(), this.logFile);
+		}
+	}
+	
+	//Read the workflow file and extract the resources.
+	//And append them to a String builder
+	public void read(File file){
+		WorkflowBundleIO io = new WorkflowBundleIO();
+		try {
+			WorkflowBundle wf = io.readBundle(file, null);
+			this.set = wf.getWorkflows();
+
+			//String to be written to a file.
+			this.str_nverb.append(">>> Statistics of the workflow bundle: " + file.getName() + " <<<\n");
+			this.str_verb.append(">>> Statistics of the workflow bundle: " + file.getName() + " <<<\n");
+			
+			for(Workflow wrf : set){
+				//TODO :- Take each type of resource and make a system to view them to the user.
+				String name = "Name of the workflow = " + wrf.getName();
+				this.str_verb.append(name + "\n");
+				this.str_nverb.append(name + "\n");
+
+				
+				String noP = "  |--> Number of Processors = " + wrf.getProcessors().size();
+				this.str_verb.append(noP + "\n");
+				this.str_nverb.append(noP + "\n");
+				
+				if(this.verbose && wrf.getProcessors().size()!=0){
+					this.str_verb.append("  |     |--> Processors: " + "\n");
+					
+					for(Processor p : wrf.getProcessors()){
+						this.str_verb.append("  |          |--> " + p.getName() + "\n");
+					}
+					this.str_verb.append("  |" + "\n");
+				}
+				
+				this.str_verb.append("  |--> Number of Data Links = " + wrf.getDataLinks().size() + "\n");
+				this.str_nverb.append("  |--> Number of Data Links = " + wrf.getDataLinks().size() + "\n");
+				
+				if(this.verbose && wrf.getDataLinks().size()!=0){
+					this.str_verb.append("  |     |--> Data Links" + "\n");
+					
+					for(DataLink link : wrf.getDataLinks()){
+						this.str_verb.append("  |          |--> " + link + "\n");
+					}
+					this.str_verb.append("  |" + "\n");
+				}
+				
+				this.str_nverb.append("  |--> Number of Control Links = " + wrf.getControlLinks().size() + "\n");
+				this.str_verb.append("  |--> Number of Control Links = " + wrf.getControlLinks().size() + "\n");
+				
+				
+				if(this.verbose && wrf.getControlLinks().size()!=0){
+					this.str_verb.append("  |     |--> Control Links\n");
+					for(ControlLink link : wrf.getControlLinks()){
+						this.str_verb.append("  |          |--> " + link + "\n");
+					}
+					this.str_verb.append("  |\n");
+				}
+				
+				this.str_nverb.append("  |--> Number of Input ports = " + wrf.getInputPorts().size()+"\n");
+				this.str_verb.append("  |--> Number of Input ports = " + wrf.getInputPorts().size()+"\n");
+				
+				
+				if(this.verbose && wrf.getInputPorts().size()!=0){
+					this.str_verb.append("  |     |--> Input Ports\n");
+					for(InputPort iport : wrf.getInputPorts()){
+						this.str_verb.append("  |          |--> " + iport.toString()+"\n");
+					}
+					this.str_verb.append("  |\n");
+				}
+			
+				this.str_nverb.append("  |--> Number of Output Ports = " + wrf.getOutputPorts().size()+"\n");
+				this.str_verb.append("  |--> Number of Output Ports = " + wrf.getOutputPorts().size()+"\n");
+				
+				if(this.verbose && wrf.getOutputPorts().size()!=0){
+					this.str_verb.append("  |     |--> Output Ports\n");
+					for(OutputPort o_port : wrf.getOutputPorts()){
+						this.str_verb.append("  |          |--> " + o_port.toString()+"\n");
+					}
+					
+					this.str_verb.append("\n");
+				}
+				
+				this.str_nverb.append("\n");
+				this.str_verb.append("\n");
+			}
+			
+		} catch (ReaderException | IOException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	
+	//Saving the output into a log
+	public void writefile(String report, String url){
+		
+			File file = new File(url);
+			
+			if(!file.isFile()){
+				System.err.println("Error in writing the log file...");
+			}
+			
+			FileWriter writer;
+			BufferedWriter bfw;
+			try {
+				writer = new FileWriter(file);
+				bfw = new BufferedWriter(writer);
+				bfw.write(report);
+				bfw.close();
+				writer.close();
+				System.out.println("Results were saved into " + file.getPath());
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		
+	}
+		
+	public void isVerbose(){
+		if(verbose)
+			System.out.println(this.str_verb.toString());
+		else 
+			System.out.println(this.str_nverb.toString());
+	}
+	
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java
new file mode 100644
index 0000000..fc05e3b
--- /dev/null
+++ b/taverna-tavlang-tool/src/main/java/org/apache/taverna/tavlang/tools/validate/Validate.java
@@ -0,0 +1,151 @@
+package org.apache.taverna.tavlang.tools.validate;
+
+/*
+ * 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.
+ */
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+import org.apache.taverna.scufl2.api.io.ReaderException;
+import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
+import org.apache.taverna.scufl2.validation.correctness.CorrectnessValidationListener;
+import org.apache.taverna.scufl2.validation.correctness.CorrectnessValidator;
+import org.apache.taverna.scufl2.validation.correctness.ReportCorrectnessValidationListener;
+
+/*
+ * Takes .wfbundle/ .t2flow as the input
+ * */
+public class Validate {
+
+	private String logfile;
+	private String nonVerbose = "";
+	private String finalrep = "";
+	private boolean verbose;
+	private boolean check = false;
+	
+
+	public Validate(List<String> files, String file, boolean verbose) {
+		this.verbose = verbose;
+		this.logfile = file;
+		System.out.println("Validation started....");
+		for (String f : files) {
+			System.out.println("Validating " + f);
+			File wfile = new File(f);
+			read(wfile);
+			
+		}
+		System.out.println("Validation completed.......");
+		
+		
+		if (this.logfile != null) {
+			saveToLog(this.finalrep);
+		}
+	}
+
+	public void read(File file) {
+		WorkflowBundleIO io = new WorkflowBundleIO();
+		try {
+			this.finalrep += validate(io.readBundle(file, null), file.getName());
+			
+		} catch (ReaderException e) {
+			System.err.println(e.getMessage());
+
+		} catch (IOException e) {
+			System.err.println("Workflow bundle not found!");
+			System.err.println(e.getMessage());
+
+		}
+	}
+
+	public String validate(WorkflowBundle wfb, String file) {
+		
+		StringBuilder report2 = new StringBuilder();
+		CorrectnessValidationListener correctnessValidationListener = new ReportCorrectnessValidationListener();
+		CorrectnessValidator correctnessValidator = new CorrectnessValidator();
+		correctnessValidationListener = correctnessValidator.validate(wfb);
+		String report = correctnessValidationListener.toString().replace(
+				"ReportCorrectnessValidationListener [", "");
+
+		String[] sections = report.split(", ");
+
+		
+		
+		boolean detect = correctnessValidationListener.detectedProblems();
+		if (!detect){
+			report2.append("The workflow " + file + " has no errors. \n\n");
+			this.nonVerbose = "The workflow " + file + " has no errors. \n";
+		}
+			
+		
+//		System.out.println("The validation report for " + file);
+		report2.append("The validation report for " + file + "......\n");
+		report2.append("-------------------------------------------------------------------------------- \n");
+		for (int i = 0; i < sections.length; i++) {
+			String line = "-->"+sections[i].split("=")[0].replace("()", "").replace(
+					"get", "")
+					+ ":- ";
+			report2.append(line);
+			String line2 =  sections[i].split("=")[1].replace("[", "").replace("]","");
+			if(line2.equals("")) report2.append("null \n\n");
+			else report2.append("\t").append(line2).append("\n");
+			
+		
+		}
+		report2.append("--------------------------------------------------------------------------------- \n\n");
+		
+		if(detect){
+			System.out.println("The workflow bundle has following problems: \n"+report2.toString());
+			check = true;
+		}
+		
+		if(verbose){
+			System.out.println(report2.toString());
+		}else{
+			System.out.println(this.nonVerbose);
+		}
+		
+		return report2.toString();
+
+	}
+
+	public void saveToLog(String s) {
+		File logFile = new File(this.logfile);
+		FileWriter logwriter;
+		try {
+			logwriter = new FileWriter(logFile);
+			BufferedWriter blw = new BufferedWriter(logwriter);
+			blw.write(s);
+			blw.close();
+			logwriter.close();
+			System.out.println("Results were saved into " + logFile.getPath());
+		} catch (IOException e) {
+			System.err.println("Error writing to the file \n" + e.getMessage());
+		}
+
+	}
+	
+	public boolean getCheck(){
+		return this.check;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/resources/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/main/resources/.gitignore b/taverna-tavlang-tool/src/main/resources/.gitignore
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/main/resources/META-INF/NOTICE
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/main/resources/META-INF/NOTICE b/taverna-tavlang-tool/src/main/resources/META-INF/NOTICE
new file mode 100644
index 0000000..370a8fc
--- /dev/null
+++ b/taverna-tavlang-tool/src/main/resources/META-INF/NOTICE
@@ -0,0 +1,7 @@
+Apache Taverna Language
+Copyright 2010-2014 University of Manchester, UK
+Copyright 2014-2015 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/test/java/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/test/java/.gitignore b/taverna-tavlang-tool/src/test/java/.gitignore
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/CommandLineTest.java
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/CommandLineTest.java b/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/CommandLineTest.java
new file mode 100644
index 0000000..6beaa8e
--- /dev/null
+++ b/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/CommandLineTest.java
@@ -0,0 +1,43 @@
+package org.apache.taverna.tavlang.test;
+
+/*
+ * 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.
+ */
+
+
+import org.apache.taverna.tavlang.CommandLineTool;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class CommandLineTest {
+	CommandLineTool commandLineTool = new CommandLineTool();
+	
+	@Test
+	public void testHelp(){
+		commandLineTool.parse();
+		commandLineTool.parse("version");
+		commandLineTool.parse("help");
+		commandLineTool.parse("help", "convert");
+		commandLineTool.parse("help", "inspect");
+		commandLineTool.parse("help", "validate");
+		commandLineTool.parse("help", "help");
+	}
+	
+	
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestConvert.java
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestConvert.java b/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestConvert.java
new file mode 100644
index 0000000..a920db2
--- /dev/null
+++ b/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestConvert.java
@@ -0,0 +1,34 @@
+package org.apache.taverna.tavlang.test;
+
+/*
+ * 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.
+ */
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class TestConvert{
+
+	@Test
+	public void testConvertS() {
+//		fail("Not yet implemented");
+		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestStats.java
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestStats.java b/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestStats.java
new file mode 100644
index 0000000..4c22377
--- /dev/null
+++ b/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestStats.java
@@ -0,0 +1,34 @@
+package org.apache.taverna.tavlang.test;
+
+/*
+ * 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.
+ */
+
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class TestStats {
+
+	@Test
+	public void test() {
+//		fail("Not yet implemented");
+	}
+
+}



[04/11] incubator-taverna-language git commit: Command line module removed

Posted by st...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/src/test/java/org/apache/taverna/tavlang/test/TestTools.java
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/test/java/org/apache/taverna/tavlang/test/TestTools.java b/taverna-language-commandline/src/test/java/org/apache/taverna/tavlang/test/TestTools.java
deleted file mode 100644
index 483d4c3..0000000
--- a/taverna-language-commandline/src/test/java/org/apache/taverna/tavlang/test/TestTools.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.apache.taverna.tavlang.test;
-
-/*
- * 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.
- */
-
-import static org.junit.Assert.*;
-
-import java.util.HashMap;
-
-import org.apache.taverna.tavlang.tools.Tools.ConvertionTools;
-import org.junit.Test;
-import org.junit.*;
-
-/*
- * Test cases for the Tools Class.
- * Input :- The output file format
- * Output:- The relevant writer media type for that file format
- * 
- * */
-
-public class TestTools {
-
-	private ConvertionTools tools;
-	private HashMap<String, String> map = new HashMap<>();
-	
-	 
-	@Before
-	public void setMap(){
-		this.map.put("wfdesc", "text/vnd.wf4ever.wfdesc+turtle");
-		this.map.put("iwir", "application/vnd.shiwa.iwir+xml");
-		this.map.put("json", "application/ld+json");
-		this.map.put("wfbundle", "application/vnd.taverna.scufl2.workflow-bundle");
-		this.map.put("robundle", null);
-	}
-	
-	
-	@Test
-	public void testWfdesc() {
-		assertEquals(map.get("wfdesc"), ConvertionTools.valueOf("wfdesc").getMediaType(tools));
-	}
-
-	@Test
-	public void testIwir() {
-		assertEquals(map.get("iwir"), ConvertionTools.valueOf("iwir").getMediaType(tools));
-	}
-
-	@Test
-	public void testJson() {
-		assertEquals(map.get("json"), ConvertionTools.valueOf("json").getMediaType(tools));
-	}
-
-
-	@Test
-	public void testWfbundle() {
-		assertEquals(map.get("wfbundle"), ConvertionTools.valueOf("wfbundle").getMediaType(tools));
-	}
-	
-	
-	@Test
-	public void testRobundle() {
-		assertEquals(map.get("robundle"), ConvertionTools.valueOf("robundle").getMediaType(tools));
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/src/test/java/org/apache/taverna/tavlang/test/TestValidate.java
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/test/java/org/apache/taverna/tavlang/test/TestValidate.java b/taverna-language-commandline/src/test/java/org/apache/taverna/tavlang/test/TestValidate.java
deleted file mode 100644
index 58e0d3f..0000000
--- a/taverna-language-commandline/src/test/java/org/apache/taverna/tavlang/test/TestValidate.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.apache.taverna.tavlang.test;
-
-/*
- * 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.
- */
-
-
-import static org.junit.Assert.*;
-
-import java.awt.List;
-import java.util.ArrayList;
-
-import org.apache.taverna.robundle.Bundle;
-import org.apache.taverna.tavlang.tools.validate.Validate;
-import org.junit.Assert;
-import org.junit.Test;
-
-import com.google.common.collect.Lists;
-
-public class TestValidate {
-
-	
-	
-	@Test
-	public void test() {
-		ArrayList<String> list = Lists.newArrayList();
-		list.add("src/test/resources/workflows/t2flow/as.t2flow");
-		Validate val = new Validate(list, null, false);
-		
-		assertEquals(false, val.getCheck());
-		
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/src/test/resources/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/test/resources/.gitignore b/taverna-language-commandline/src/test/resources/.gitignore
deleted file mode 100644
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/66a8cfd1/taverna-language-commandline/src/test/resources/workflows/t2flow/as.t2flow
----------------------------------------------------------------------
diff --git a/taverna-language-commandline/src/test/resources/workflows/t2flow/as.t2flow b/taverna-language-commandline/src/test/resources/workflows/t2flow/as.t2flow
deleted file mode 100644
index fcb7d09..0000000
--- a/taverna-language-commandline/src/test/resources/workflows/t2flow/as.t2flow
+++ /dev/null
@@ -1,1674 +0,0 @@
-<?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
-
-       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.
--->
-<workflow xmlns="http://taverna.sf.net/2008/xml/t2flow" version="1" producedBy="taverna-2.1.0">
-  <dataflow id="92c5e8d5-8360-4f86-a845-09c9849cbdc5" role="top">
-    <name>Workflow1</name>
-    <inputPorts />
-    <outputPorts>
-      <port>
-        <name>asdasd</name>
-        <annotations />
-      </port>
-    </outputPorts>
-    <processors>
-      <processor>
-        <name>Workflow19</name>
-        <inputPorts>
-          <port>
-            <name>lk</name>
-            <depth>0</depth>
-          </port>
-        </inputPorts>
-        <outputPorts>
-          <port>
-            <name>kk</name>
-            <depth>0</depth>
-            <granularDepth>0</granularDepth>
-          </port>
-          <port>
-            <name>String_constant_value</name>
-            <depth>0</depth>
-            <granularDepth>0</granularDepth>
-          </port>
-        </outputPorts>
-        <annotations />
-        <activities>
-          <activity>
-            <raven>
-              <group>net.sf.taverna.t2.activities</group>
-              <artifact>dataflow-activity</artifact>
-              <version>1.0</version>
-            </raven>
-            <class>net.sf.taverna.t2.activities.dataflow.DataflowActivity</class>
-            <inputMap>
-              <map from="lk" to="lk" />
-            </inputMap>
-            <outputMap>
-              <map from="String_constant_value" to="String_constant_value" />
-              <map from="kk" to="kk" />
-            </outputMap>
-            <configBean encoding="dataflow">
-              <dataflow ref="c451b1cf-1c95-47e5-b89c-537a5501a1ef" />
-            </configBean>
-            <annotations />
-          </activity>
-        </activities>
-        <dispatchStack>
-          <dispatchLayer>
-            <raven>
-              <group>net.sf.taverna.t2.core</group>
-              <artifact>workflowmodel-impl</artifact>
-              <version>1.0</version>
-            </raven>
-            <class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-            <configBean encoding="xstream">
-              <net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-                <maxJobs>1</maxJobs>
-              </net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-            </configBean>
-          </dispatchLayer>
-          <dispatchLayer>
-            <raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy>
-<cross>
-<port name="lk" depth="0" />
-</cross>
-</strategy>
-</iteration>
-</iterationStrategyStack>
-</processor>
-<processor>
-<name>Concatenate_two_strings</name>
-<inputPorts>
-<port>
-<name>string2</name>
-<depth>0</depth>
-</port>
-<port>
-<name>string1</name>
-<depth>0</depth>
-</port>
-</inputPorts>
-<outputPorts>
-<port>
-<name>output</name>
-<depth>0</depth>
-<granularDepth>0</granularDepth>
-</port>
-</outputPorts>
-<annotations />
-<activities>
-<activity>
-<raven>
-<group>net.sf.taverna.t2.activities</group>
-<artifact>localworker-activity</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
-<inputMap>
-<map from="string2" to="string2" />
-<map from="string1" to="string1" />
-</inputMap>
-<outputMap>
-<map from="output" to="output" />
-</outputMap>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
-  <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
-  <script>output = string1 + string2;</script>
-  <dependencies />
-  <classLoaderSharing>workflow</classLoaderSharing>
-  <localDependencies />
-  <artifactDependencies />
-  <inputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>java.lang.String</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>string1</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>java.lang.String</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>string2</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-  </inputs>
-  <outputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-      <granularDepth>0</granularDepth>
-      <name>output</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-  </outputs>
-</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
-</configBean>
-<annotations />
-</activity>
-</activities>
-<dispatchStack>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-  <maxJobs>1</maxJobs>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy>
-<cross>
-<port name="string2" depth="0" />
-<port name="string1" depth="0" />
-</cross>
-</strategy>
-</iteration>
-</iterationStrategyStack>
-</processor>
-<processor>
-<name>Concatenate_two_strings_2</name>
-<inputPorts>
-<port>
-<name>string2</name>
-<depth>0</depth>
-</port>
-<port>
-<name>string1</name>
-<depth>0</depth>
-</port>
-</inputPorts>
-<outputPorts>
-<port>
-<name>output</name>
-<depth>0</depth>
-<granularDepth>0</granularDepth>
-</port>
-</outputPorts>
-<annotations />
-<activities>
-<activity>
-<raven>
-<group>net.sf.taverna.t2.activities</group>
-<artifact>localworker-activity</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
-<inputMap>
-<map from="string2" to="string2" />
-<map from="string1" to="string1" />
-</inputMap>
-<outputMap>
-<map from="output" to="output" />
-</outputMap>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
-  <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
-  <script>output = string1 + string2;</script>
-  <dependencies />
-  <classLoaderSharing>workflow</classLoaderSharing>
-  <localDependencies />
-  <artifactDependencies />
-  <inputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>java.lang.String</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>string1</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>java.lang.String</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>string2</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-  </inputs>
-  <outputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-      <granularDepth>0</granularDepth>
-      <name>output</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-  </outputs>
-</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
-</configBean>
-<annotations />
-</activity>
-</activities>
-<dispatchStack>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-  <maxJobs>1</maxJobs>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy>
-<cross>
-<port name="string2" depth="0" />
-<port name="string1" depth="0" />
-</cross>
-</strategy>
-</iteration>
-</iterationStrategyStack>
-</processor>
-<processor>
-<name>Create_Lots_Of_Strings</name>
-<inputPorts />
-<outputPorts>
-<port>
-<name>strings</name>
-<depth>1</depth>
-<granularDepth>1</granularDepth>
-</port>
-</outputPorts>
-<annotations />
-<activities>
-<activity>
-<raven>
-<group>net.sf.taverna.t2.activities</group>
-<artifact>localworker-activity</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
-<inputMap />
-<outputMap>
-<map from="strings" to="strings" />
-</outputMap>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
-  <localworkerName>org.embl.ebi.escience.scuflworkers.java.EmitLotsOfStrings</localworkerName>
-  <script>List strings = new ArrayList();
-for (int i = 0; i &lt; 40; i++) {
-	strings.add("String" + i);
-}
-</script>
-  <dependencies />
-  <classLoaderSharing>workflow</classLoaderSharing>
-  <localDependencies />
-  <artifactDependencies />
-  <inputs />
-  <outputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-      <granularDepth>1</granularDepth>
-      <name>strings</name>
-      <depth>1</depth>
-      <mimeTypes>
-        <string>l('text/plain')</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-  </outputs>
-</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
-</configBean>
-<annotations />
-</activity>
-</activities>
-<dispatchStack>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-  <maxJobs>1</maxJobs>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy />
-</iteration>
-</iterationStrategyStack>
-</processor>
-<processor>
-<name>Concatenate_two_strings_3</name>
-<inputPorts>
-<port>
-<name>string1</name>
-<depth>0</depth>
-</port>
-<port>
-<name>string2</name>
-<depth>0</depth>
-</port>
-</inputPorts>
-<outputPorts>
-<port>
-<name>output</name>
-<depth>0</depth>
-<granularDepth>0</granularDepth>
-</port>
-</outputPorts>
-<annotations />
-<activities>
-<activity>
-<raven>
-<group>net.sf.taverna.t2.activities</group>
-<artifact>localworker-activity</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
-<inputMap>
-<map from="string2" to="string2" />
-<map from="string1" to="string1" />
-</inputMap>
-<outputMap>
-<map from="output" to="output" />
-</outputMap>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
-  <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
-  <script>output = string1 + string2;</script>
-  <dependencies />
-  <classLoaderSharing>workflow</classLoaderSharing>
-  <localDependencies />
-  <artifactDependencies />
-  <inputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>java.lang.String</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>string1</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>java.lang.String</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>string2</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-  </inputs>
-  <outputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-      <granularDepth>0</granularDepth>
-      <name>output</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-  </outputs>
-</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
-</configBean>
-<annotations />
-</activity>
-</activities>
-<dispatchStack>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-  <maxJobs>1</maxJobs>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy>
-<cross>
-<port name="string1" depth="0" />
-<port name="string2" depth="0" />
-</cross>
-</strategy>
-</iteration>
-</iterationStrategyStack>
-</processor>
-<processor>
-<name>String_constant</name>
-<inputPorts />
-<outputPorts>
-<port>
-<name>value</name>
-<depth>0</depth>
-<granularDepth>0</granularDepth>
-</port>
-</outputPorts>
-<annotations />
-<activities>
-<activity>
-<raven>
-<group>net.sf.taverna.t2.activities</group>
-<artifact>stringconstant-activity</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.activities.stringconstant.StringConstantActivity</class>
-<inputMap />
-<outputMap>
-<map from="value" to="value" />
-</outputMap>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean xmlns="">
-  <value>Add your own value here</value>
-</net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean>
-</configBean>
-<annotations />
-</activity>
-</activities>
-<dispatchStack>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-  <maxJobs>1</maxJobs>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy />
-</iteration>
-</iterationStrategyStack>
-</processor>
-<processor>
-<name>Concatenate_two_strings_4</name>
-<inputPorts>
-<port>
-<name>string1</name>
-<depth>0</depth>
-</port>
-<port>
-<name>string2</name>
-<depth>0</depth>
-</port>
-</inputPorts>
-<outputPorts>
-<port>
-<name>output</name>
-<depth>0</depth>
-<granularDepth>0</granularDepth>
-</port>
-</outputPorts>
-<annotations />
-<activities>
-<activity>
-<raven>
-<group>net.sf.taverna.t2.activities</group>
-<artifact>localworker-activity</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
-<inputMap>
-<map from="string2" to="string2" />
-<map from="string1" to="string1" />
-</inputMap>
-<outputMap>
-<map from="output" to="output" />
-</outputMap>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
-  <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
-  <script>output = string1 + string2;</script>
-  <dependencies />
-  <classLoaderSharing>workflow</classLoaderSharing>
-  <localDependencies />
-  <artifactDependencies />
-  <inputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>java.lang.String</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>string1</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>java.lang.String</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>string2</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-  </inputs>
-  <outputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-      <granularDepth>0</granularDepth>
-      <name>output</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-  </outputs>
-</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
-</configBean>
-<annotations />
-</activity>
-</activities>
-<dispatchStack>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-  <maxJobs>1</maxJobs>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy>
-<cross>
-<port name="string1" depth="0" />
-<port name="string2" depth="0" />
-</cross>
-</strategy>
-</iteration>
-</iterationStrategyStack>
-</processor>
-<processor>
-<name>Echo_List</name>
-<inputPorts>
-<port>
-<name>inputlist</name>
-<depth>1</depth>
-</port>
-</inputPorts>
-<outputPorts>
-<port>
-<name>outputlist</name>
-<depth>1</depth>
-<granularDepth>1</granularDepth>
-</port>
-</outputPorts>
-<annotations />
-<activities>
-<activity>
-<raven>
-<group>net.sf.taverna.t2.activities</group>
-<artifact>localworker-activity</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
-<inputMap>
-<map from="inputlist" to="inputlist" />
-</inputMap>
-<outputMap>
-<map from="outputlist" to="outputlist" />
-</outputMap>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
-  <localworkerName>org.embl.ebi.escience.scuflworkers.java.EchoList</localworkerName>
-  <script>outputlist = inputlist;</script>
-  <dependencies />
-  <classLoaderSharing>workflow</classLoaderSharing>
-  <localDependencies />
-  <artifactDependencies />
-  <inputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>[B</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>inputlist</name>
-      <depth>1</depth>
-      <mimeTypes>
-        <string>l('')</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-  </inputs>
-  <outputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-      <granularDepth>1</granularDepth>
-      <name>outputlist</name>
-      <depth>1</depth>
-      <mimeTypes>
-        <string>l('')</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-  </outputs>
-</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
-</configBean>
-<annotations />
-</activity>
-</activities>
-<dispatchStack>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-  <maxJobs>1</maxJobs>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy>
-<cross>
-<port name="inputlist" depth="1" />
-</cross>
-</strategy>
-</iteration>
-</iterationStrategyStack>
-</processor>
-</processors>
-<conditions />
-<datalinks>
-<datalink>
-<sink type="processor">
-<processor>Workflow19</processor>
-<port>lk</port>
-</sink>
-<source type="processor">
-<processor>Concatenate_two_strings</processor>
-<port>output</port>
-</source>
-</datalink>
-<datalink>
-<sink type="processor">
-<processor>Concatenate_two_strings</processor>
-<port>string2</port>
-</sink>
-<source type="processor">
-<processor>Concatenate_two_strings_2</processor>
-<port>output</port>
-</source>
-</datalink>
-<datalink>
-<sink type="processor">
-<processor>Concatenate_two_strings</processor>
-<port>string1</port>
-</sink>
-<source type="processor">
-<processor>Create_Lots_Of_Strings</processor>
-<port>strings</port>
-</source>
-</datalink>
-<datalink>
-<sink type="processor">
-<processor>Concatenate_two_strings_2</processor>
-<port>string2</port>
-</sink>
-<source type="processor">
-<processor>Create_Lots_Of_Strings</processor>
-<port>strings</port>
-</source>
-</datalink>
-<datalink>
-<sink type="processor">
-<processor>Concatenate_two_strings_2</processor>
-<port>string1</port>
-</sink>
-<source type="processor">
-<processor>Create_Lots_Of_Strings</processor>
-<port>strings</port>
-</source>
-</datalink>
-<datalink>
-<sink type="processor">
-<processor>Concatenate_two_strings_3</processor>
-<port>string1</port>
-</sink>
-<source type="processor">
-<processor>Workflow19</processor>
-<port>kk</port>
-</source>
-</datalink>
-<datalink>
-<sink type="processor">
-<processor>Concatenate_two_strings_3</processor>
-<port>string2</port>
-</sink>
-<source type="processor">
-<processor>String_constant</processor>
-<port>value</port>
-</source>
-</datalink>
-<datalink>
-<sink type="processor">
-<processor>Concatenate_two_strings_4</processor>
-<port>string1</port>
-</sink>
-<source type="processor">
-<processor>String_constant</processor>
-<port>value</port>
-</source>
-</datalink>
-<datalink>
-<sink type="processor">
-<processor>Concatenate_two_strings_4</processor>
-<port>string2</port>
-</sink>
-<source type="processor">
-<processor>Workflow19</processor>
-<port>String_constant_value</port>
-</source>
-</datalink>
-<datalink>
-<sink type="merge">
-<processor>Echo_List</processor>
-<port>inputlist</port>
-</sink>
-<source type="processor">
-<processor>Concatenate_two_strings_4</processor>
-<port>output</port>
-</source>
-</datalink>
-<datalink>
-<sink type="merge">
-<processor>Echo_List</processor>
-<port>inputlist</port>
-</sink>
-<source type="processor">
-<processor>Concatenate_two_strings_3</processor>
-<port>output</port>
-</source>
-</datalink>
-<datalink>
-<sink type="dataflow">
-<port>asdasd</port>
-</sink>
-<source type="processor">
-<processor>Echo_List</processor>
-<port>outputlist</port>
-</source>
-</datalink>
-</datalinks>
-<annotations />
-</dataflow>
-<dataflow id="c451b1cf-1c95-47e5-b89c-537a5501a1ef" role="nested">
-<name>Workflow19</name>
-<inputPorts>
-<port>
-<name>lk</name>
-<depth>0</depth>
-<granularDepth>0</granularDepth>
-<annotations />
-</port>
-</inputPorts>
-<outputPorts>
-<port>
-<name>kk</name>
-<annotations />
-</port>
-<port>
-<name>String_constant_value</name>
-<annotations />
-</port>
-</outputPorts>
-<processors>
-<processor>
-<name>Concatenate_two_strings</name>
-<inputPorts>
-<port>
-<name>string1</name>
-<depth>0</depth>
-</port>
-<port>
-<name>string2</name>
-<depth>0</depth>
-</port>
-</inputPorts>
-<outputPorts>
-<port>
-<name>output</name>
-<depth>0</depth>
-<granularDepth>0</granularDepth>
-</port>
-</outputPorts>
-<annotations />
-<activities>
-<activity>
-<raven>
-<group>net.sf.taverna.t2.activities</group>
-<artifact>localworker-activity</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
-<inputMap>
-<map from="string2" to="string2" />
-<map from="string1" to="string1" />
-</inputMap>
-<outputMap>
-<map from="output" to="output" />
-</outputMap>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
-  <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
-  <script>output = string1 + string2;</script>
-  <dependencies />
-  <classLoaderSharing>workflow</classLoaderSharing>
-  <localDependencies />
-  <artifactDependencies />
-  <inputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>java.lang.String</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>string1</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-      <handledReferenceSchemes />
-      <translatedElementType>java.lang.String</translatedElementType>
-      <allowsLiteralValues>true</allowsLiteralValues>
-      <name>string2</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
-  </inputs>
-  <outputs>
-    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-      <granularDepth>0</granularDepth>
-      <name>output</name>
-      <depth>0</depth>
-      <mimeTypes>
-        <string>'text/plain'</string>
-      </mimeTypes>
-    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
-  </outputs>
-</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
-</configBean>
-<annotations />
-</activity>
-</activities>
-<dispatchStack>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-  <maxJobs>1</maxJobs>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy>
-<cross>
-<port name="string1" depth="0" />
-<port name="string2" depth="0" />
-</cross>
-</strategy>
-</iteration>
-</iterationStrategyStack>
-</processor>
-<processor>
-<name>string1_value</name>
-<inputPorts />
-<outputPorts>
-<port>
-<name>value</name>
-<depth>0</depth>
-<granularDepth>0</granularDepth>
-</port>
-</outputPorts>
-<annotations />
-<activities>
-<activity>
-<raven>
-<group>net.sf.taverna.t2.activities</group>
-<artifact>stringconstant-activity</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.activities.stringconstant.StringConstantActivity</class>
-<inputMap />
-<outputMap>
-<map from="value" to="value" />
-</outputMap>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean xmlns="">
-  <value>kjkj</value>
-</net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean>
-</configBean>
-<annotations />
-</activity>
-</activities>
-<dispatchStack>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-  <maxJobs>1</maxJobs>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy />
-</iteration>
-</iterationStrategyStack>
-</processor>
-<processor>
-<name>String_constant</name>
-<inputPorts />
-<outputPorts>
-<port>
-<name>value</name>
-<depth>0</depth>
-<granularDepth>0</granularDepth>
-</port>
-</outputPorts>
-<annotations />
-<activities>
-<activity>
-<raven>
-<group>net.sf.taverna.t2.activities</group>
-<artifact>stringconstant-activity</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.activities.stringconstant.StringConstantActivity</class>
-<inputMap />
-<outputMap>
-<map from="value" to="value" />
-</outputMap>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean xmlns="">
-  <value>Add your own value here</value>
-</net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean>
-</configBean>
-<annotations />
-</activity>
-</activities>
-<dispatchStack>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
-  <maxJobs>1</maxJobs>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
-<configBean encoding="xstream">
-<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
-  <backoffFactor>1.0</backoffFactor>
-  <initialDelay>1000</initialDelay>
-  <maxDelay>5000</maxDelay>
-  <maxRetries>0</maxRetries>
-</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
-</configBean>
-</dispatchLayer>
-<dispatchLayer>
-<raven>
-<group>net.sf.taverna.t2.core</group>
-<artifact>workflowmodel-impl</artifact>
-<version>1.0</version>
-</raven>
-<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
-<configBean encoding="xstream">
-<null xmlns="" />
-</configBean>
-</dispatchLayer>
-</dispatchStack>
-<iterationStrategyStack>
-<iteration>
-<strategy />
-</iteration>
-</iterationStrategyStack>
-</processor>
-</processors>
-<conditions>
-<condition control="Concatenate_two_strings" target="String_constant" />
-</conditions>
-<datalinks>
-<datalink>
-<sink type="processor">
-<processor>Concatenate_two_strings</processor>
-<port>string1</port>
-</sink>
-<source type="processor">
-<processor>string1_value</processor>
-<port>value</port>
-</source>
-</datalink>
-<datalink>
-<sink type="processor">
-<processor>Concatenate_two_strings</processor>
-<port>string2</port>
-</sink>
-<source type="dataflow">
-<port>lk</port>
-</source>
-</datalink>
-<datalink>
-<sink type="dataflow">
-<port>kk</port>
-</sink>
-<source type="processor">
-<processor>Concatenate_two_strings</processor>
-<port>output</port>
-</source>
-</datalink>
-<datalink>
-<sink type="dataflow">
-<port>String_constant_value</port>
-</sink>
-<source type="processor">
-<processor>String_constant</processor>
-<port>value</port>
-</source>
-</datalink>
-</datalinks>
-<annotations />
-</dataflow>
-</workflow>
\ No newline at end of file


[06/11] incubator-taverna-language git commit: Module rename : added -

Posted by st...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestTools.java
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestTools.java b/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestTools.java
new file mode 100644
index 0000000..483d4c3
--- /dev/null
+++ b/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestTools.java
@@ -0,0 +1,80 @@
+package org.apache.taverna.tavlang.test;
+
+/*
+ * 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.
+ */
+
+import static org.junit.Assert.*;
+
+import java.util.HashMap;
+
+import org.apache.taverna.tavlang.tools.Tools.ConvertionTools;
+import org.junit.Test;
+import org.junit.*;
+
+/*
+ * Test cases for the Tools Class.
+ * Input :- The output file format
+ * Output:- The relevant writer media type for that file format
+ * 
+ * */
+
+public class TestTools {
+
+	private ConvertionTools tools;
+	private HashMap<String, String> map = new HashMap<>();
+	
+	 
+	@Before
+	public void setMap(){
+		this.map.put("wfdesc", "text/vnd.wf4ever.wfdesc+turtle");
+		this.map.put("iwir", "application/vnd.shiwa.iwir+xml");
+		this.map.put("json", "application/ld+json");
+		this.map.put("wfbundle", "application/vnd.taverna.scufl2.workflow-bundle");
+		this.map.put("robundle", null);
+	}
+	
+	
+	@Test
+	public void testWfdesc() {
+		assertEquals(map.get("wfdesc"), ConvertionTools.valueOf("wfdesc").getMediaType(tools));
+	}
+
+	@Test
+	public void testIwir() {
+		assertEquals(map.get("iwir"), ConvertionTools.valueOf("iwir").getMediaType(tools));
+	}
+
+	@Test
+	public void testJson() {
+		assertEquals(map.get("json"), ConvertionTools.valueOf("json").getMediaType(tools));
+	}
+
+
+	@Test
+	public void testWfbundle() {
+		assertEquals(map.get("wfbundle"), ConvertionTools.valueOf("wfbundle").getMediaType(tools));
+	}
+	
+	
+	@Test
+	public void testRobundle() {
+		assertEquals(map.get("robundle"), ConvertionTools.valueOf("robundle").getMediaType(tools));
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestValidate.java
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestValidate.java b/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestValidate.java
new file mode 100644
index 0000000..58e0d3f
--- /dev/null
+++ b/taverna-tavlang-tool/src/test/java/org/apache/taverna/tavlang/test/TestValidate.java
@@ -0,0 +1,49 @@
+package org.apache.taverna.tavlang.test;
+
+/*
+ * 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.
+ */
+
+
+import static org.junit.Assert.*;
+
+import java.awt.List;
+import java.util.ArrayList;
+
+import org.apache.taverna.robundle.Bundle;
+import org.apache.taverna.tavlang.tools.validate.Validate;
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.google.common.collect.Lists;
+
+public class TestValidate {
+
+	
+	
+	@Test
+	public void test() {
+		ArrayList<String> list = Lists.newArrayList();
+		list.add("src/test/resources/workflows/t2flow/as.t2flow");
+		Validate val = new Validate(list, null, false);
+		
+		assertEquals(false, val.getCheck());
+		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/test/resources/.gitignore
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/test/resources/.gitignore b/taverna-tavlang-tool/src/test/resources/.gitignore
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/3aa91bf8/taverna-tavlang-tool/src/test/resources/workflows/t2flow/as.t2flow
----------------------------------------------------------------------
diff --git a/taverna-tavlang-tool/src/test/resources/workflows/t2flow/as.t2flow b/taverna-tavlang-tool/src/test/resources/workflows/t2flow/as.t2flow
new file mode 100644
index 0000000..2d9f127
--- /dev/null
+++ b/taverna-tavlang-tool/src/test/resources/workflows/t2flow/as.t2flow
@@ -0,0 +1,1674 @@
+<?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
+
+       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.
+-->
+<workflow xmlns="http://taverna.sf.net/2008/xml/t2flow" version="1" producedBy="taverna-2.1.0">
+  <dataflow id="92c5e8d5-8360-4f86-a845-09c9849cbdc5" role="top">
+    <name>Workflow1</name>
+    <inputPorts />
+    <outputPorts>
+      <port>
+        <name>asdasd</name>
+        <annotations />
+      </port>
+    </outputPorts>
+    <processors>
+      <processor>
+        <name>Workflow19</name>
+        <inputPorts>
+          <port>
+            <name>lk</name>
+            <depth>0</depth>
+          </port>
+        </inputPorts>
+        <outputPorts>
+          <port>
+            <name>kk</name>
+            <depth>0</depth>
+            <granularDepth>0</granularDepth>
+          </port>
+          <port>
+            <name>String_constant_value</name>
+            <depth>0</depth>
+            <granularDepth>0</granularDepth>
+          </port>
+        </outputPorts>
+        <annotations />
+        <activities>
+          <activity>
+            <raven>
+              <group>net.sf.taverna.t2.activities</group>
+              <artifact>dataflow-activity</artifact>
+              <version>1.0</version>
+            </raven>
+            <class>net.sf.taverna.t2.activities.dataflow.DataflowActivity</class>
+            <inputMap>
+              <map from="lk" to="lk" />
+            </inputMap>
+            <outputMap>
+              <map from="String_constant_value" to="String_constant_value" />
+              <map from="kk" to="kk" />
+            </outputMap>
+            <configBean encoding="dataflow">
+              <dataflow ref="c451b1cf-1c95-47e5-b89c-537a5501a1ef" />
+            </configBean>
+            <annotations />
+          </activity>
+        </activities>
+        <dispatchStack>
+          <dispatchLayer>
+            <raven>
+              <group>net.sf.taverna.t2.core</group>
+              <artifact>workflowmodel-impl</artifact>
+              <version>1.0</version>
+            </raven>
+            <class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+            <configBean encoding="xstream">
+              <net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+                <maxJobs>1</maxJobs>
+              </net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+            </configBean>
+          </dispatchLayer>
+          <dispatchLayer>
+            <raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy>
+<cross>
+<port name="lk" depth="0" />
+</cross>
+</strategy>
+</iteration>
+</iterationStrategyStack>
+</processor>
+<processor>
+<name>Concatenate_two_strings</name>
+<inputPorts>
+<port>
+<name>string2</name>
+<depth>0</depth>
+</port>
+<port>
+<name>string1</name>
+<depth>0</depth>
+</port>
+</inputPorts>
+<outputPorts>
+<port>
+<name>output</name>
+<depth>0</depth>
+<granularDepth>0</granularDepth>
+</port>
+</outputPorts>
+<annotations />
+<activities>
+<activity>
+<raven>
+<group>net.sf.taverna.t2.activities</group>
+<artifact>localworker-activity</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
+<inputMap>
+<map from="string2" to="string2" />
+<map from="string1" to="string1" />
+</inputMap>
+<outputMap>
+<map from="output" to="output" />
+</outputMap>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
+  <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
+  <script>output = string1 + string2;</script>
+  <dependencies />
+  <classLoaderSharing>workflow</classLoaderSharing>
+  <localDependencies />
+  <artifactDependencies />
+  <inputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>java.lang.String</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>string1</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>java.lang.String</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>string2</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+  </inputs>
+  <outputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+      <granularDepth>0</granularDepth>
+      <name>output</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+  </outputs>
+</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
+</configBean>
+<annotations />
+</activity>
+</activities>
+<dispatchStack>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+  <maxJobs>1</maxJobs>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy>
+<cross>
+<port name="string2" depth="0" />
+<port name="string1" depth="0" />
+</cross>
+</strategy>
+</iteration>
+</iterationStrategyStack>
+</processor>
+<processor>
+<name>Concatenate_two_strings_2</name>
+<inputPorts>
+<port>
+<name>string2</name>
+<depth>0</depth>
+</port>
+<port>
+<name>string1</name>
+<depth>0</depth>
+</port>
+</inputPorts>
+<outputPorts>
+<port>
+<name>output</name>
+<depth>0</depth>
+<granularDepth>0</granularDepth>
+</port>
+</outputPorts>
+<annotations />
+<activities>
+<activity>
+<raven>
+<group>net.sf.taverna.t2.activities</group>
+<artifact>localworker-activity</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
+<inputMap>
+<map from="string2" to="string2" />
+<map from="string1" to="string1" />
+</inputMap>
+<outputMap>
+<map from="output" to="output" />
+</outputMap>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
+  <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
+  <script>output = string1 + string2;</script>
+  <dependencies />
+  <classLoaderSharing>workflow</classLoaderSharing>
+  <localDependencies />
+  <artifactDependencies />
+  <inputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>java.lang.String</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>string1</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>java.lang.String</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>string2</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+  </inputs>
+  <outputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+      <granularDepth>0</granularDepth>
+      <name>output</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+  </outputs>
+</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
+</configBean>
+<annotations />
+</activity>
+</activities>
+<dispatchStack>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+  <maxJobs>1</maxJobs>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy>
+<cross>
+<port name="string2" depth="0" />
+<port name="string1" depth="0" />
+</cross>
+</strategy>
+</iteration>
+</iterationStrategyStack>
+</processor>
+<processor>
+<name>Create_Lots_Of_Strings</name>
+<inputPorts />
+<outputPorts>
+<port>
+<name>strings</name>
+<depth>1</depth>
+<granularDepth>1</granularDepth>
+</port>
+</outputPorts>
+<annotations />
+<activities>
+<activity>
+<raven>
+<group>net.sf.taverna.t2.activities</group>
+<artifact>localworker-activity</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
+<inputMap />
+<outputMap>
+<map from="strings" to="strings" />
+</outputMap>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
+  <localworkerName>org.embl.ebi.escience.scuflworkers.java.EmitLotsOfStrings</localworkerName>
+  <script>List strings = new ArrayList();
+for (int i = 0; i &lt; 40; i++) {
+	strings.add("String" + i);
+}
+</script>
+  <dependencies />
+  <classLoaderSharing>workflow</classLoaderSharing>
+  <localDependencies />
+  <artifactDependencies />
+  <inputs />
+  <outputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+      <granularDepth>1</granularDepth>
+      <name>strings</name>
+      <depth>1</depth>
+      <mimeTypes>
+        <string>l('text/plain')</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+  </outputs>
+</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
+</configBean>
+<annotations />
+</activity>
+</activities>
+<dispatchStack>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+  <maxJobs>1</maxJobs>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy />
+</iteration>
+</iterationStrategyStack>
+</processor>
+<processor>
+<name>Concatenate_two_strings_3</name>
+<inputPorts>
+<port>
+<name>string1</name>
+<depth>0</depth>
+</port>
+<port>
+<name>string2</name>
+<depth>0</depth>
+</port>
+</inputPorts>
+<outputPorts>
+<port>
+<name>output</name>
+<depth>0</depth>
+<granularDepth>0</granularDepth>
+</port>
+</outputPorts>
+<annotations />
+<activities>
+<activity>
+<raven>
+<group>net.sf.taverna.t2.activities</group>
+<artifact>localworker-activity</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
+<inputMap>
+<map from="string2" to="string2" />
+<map from="string1" to="string1" />
+</inputMap>
+<outputMap>
+<map from="output" to="output" />
+</outputMap>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
+  <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
+  <script>output = string1 + string2;</script>
+  <dependencies />
+  <classLoaderSharing>workflow</classLoaderSharing>
+  <localDependencies />
+  <artifactDependencies />
+  <inputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>java.lang.String</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>string1</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>java.lang.String</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>string2</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+  </inputs>
+  <outputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+      <granularDepth>0</granularDepth>
+      <name>output</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+  </outputs>
+</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
+</configBean>
+<annotations />
+</activity>
+</activities>
+<dispatchStack>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+  <maxJobs>1</maxJobs>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy>
+<cross>
+<port name="string1" depth="0" />
+<port name="string2" depth="0" />
+</cross>
+</strategy>
+</iteration>
+</iterationStrategyStack>
+</processor>
+<processor>
+<name>String_constant</name>
+<inputPorts />
+<outputPorts>
+<port>
+<name>value</name>
+<depth>0</depth>
+<granularDepth>0</granularDepth>
+</port>
+</outputPorts>
+<annotations />
+<activities>
+<activity>
+<raven>
+<group>net.sf.taverna.t2.activities</group>
+<artifact>stringconstant-activity</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.activities.stringconstant.StringConstantActivity</class>
+<inputMap />
+<outputMap>
+<map from="value" to="value" />
+</outputMap>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean xmlns="">
+  <value>Add your own value here</value>
+</net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean>
+</configBean>
+<annotations />
+</activity>
+</activities>
+<dispatchStack>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+  <maxJobs>1</maxJobs>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy />
+</iteration>
+</iterationStrategyStack>
+</processor>
+<processor>
+<name>Concatenate_two_strings_4</name>
+<inputPorts>
+<port>
+<name>string1</name>
+<depth>0</depth>
+</port>
+<port>
+<name>string2</name>
+<depth>0</depth>
+</port>
+</inputPorts>
+<outputPorts>
+<port>
+<name>output</name>
+<depth>0</depth>
+<granularDepth>0</granularDepth>
+</port>
+</outputPorts>
+<annotations />
+<activities>
+<activity>
+<raven>
+<group>net.sf.taverna.t2.activities</group>
+<artifact>localworker-activity</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
+<inputMap>
+<map from="string2" to="string2" />
+<map from="string1" to="string1" />
+</inputMap>
+<outputMap>
+<map from="output" to="output" />
+</outputMap>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
+  <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
+  <script>output = string1 + string2;</script>
+  <dependencies />
+  <classLoaderSharing>workflow</classLoaderSharing>
+  <localDependencies />
+  <artifactDependencies />
+  <inputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>java.lang.String</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>string1</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>java.lang.String</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>string2</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+  </inputs>
+  <outputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+      <granularDepth>0</granularDepth>
+      <name>output</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+  </outputs>
+</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
+</configBean>
+<annotations />
+</activity>
+</activities>
+<dispatchStack>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+  <maxJobs>1</maxJobs>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy>
+<cross>
+<port name="string1" depth="0" />
+<port name="string2" depth="0" />
+</cross>
+</strategy>
+</iteration>
+</iterationStrategyStack>
+</processor>
+<processor>
+<name>Echo_List</name>
+<inputPorts>
+<port>
+<name>inputlist</name>
+<depth>1</depth>
+</port>
+</inputPorts>
+<outputPorts>
+<port>
+<name>outputlist</name>
+<depth>1</depth>
+<granularDepth>1</granularDepth>
+</port>
+</outputPorts>
+<annotations />
+<activities>
+<activity>
+<raven>
+<group>net.sf.taverna.t2.activities</group>
+<artifact>localworker-activity</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
+<inputMap>
+<map from="inputlist" to="inputlist" />
+</inputMap>
+<outputMap>
+<map from="outputlist" to="outputlist" />
+</outputMap>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
+  <localworkerName>org.embl.ebi.escience.scuflworkers.java.EchoList</localworkerName>
+  <script>outputlist = inputlist;</script>
+  <dependencies />
+  <classLoaderSharing>workflow</classLoaderSharing>
+  <localDependencies />
+  <artifactDependencies />
+  <inputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>[B</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>inputlist</name>
+      <depth>1</depth>
+      <mimeTypes>
+        <string>l('')</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+  </inputs>
+  <outputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+      <granularDepth>1</granularDepth>
+      <name>outputlist</name>
+      <depth>1</depth>
+      <mimeTypes>
+        <string>l('')</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+  </outputs>
+</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
+</configBean>
+<annotations />
+</activity>
+</activities>
+<dispatchStack>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+  <maxJobs>1</maxJobs>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy>
+<cross>
+<port name="inputlist" depth="1" />
+</cross>
+</strategy>
+</iteration>
+</iterationStrategyStack>
+</processor>
+</processors>
+<conditions />
+<datalinks>
+<datalink>
+<sink type="processor">
+<processor>Workflow19</processor>
+<port>lk</port>
+</sink>
+<source type="processor">
+<processor>Concatenate_two_strings</processor>
+<port>output</port>
+</source>
+</datalink>
+<datalink>
+<sink type="processor">
+<processor>Concatenate_two_strings</processor>
+<port>string2</port>
+</sink>
+<source type="processor">
+<processor>Concatenate_two_strings_2</processor>
+<port>output</port>
+</source>
+</datalink>
+<datalink>
+<sink type="processor">
+<processor>Concatenate_two_strings</processor>
+<port>string1</port>
+</sink>
+<source type="processor">
+<processor>Create_Lots_Of_Strings</processor>
+<port>strings</port>
+</source>
+</datalink>
+<datalink>
+<sink type="processor">
+<processor>Concatenate_two_strings_2</processor>
+<port>string2</port>
+</sink>
+<source type="processor">
+<processor>Create_Lots_Of_Strings</processor>
+<port>strings</port>
+</source>
+</datalink>
+<datalink>
+<sink type="processor">
+<processor>Concatenate_two_strings_2</processor>
+<port>string1</port>
+</sink>
+<source type="processor">
+<processor>Create_Lots_Of_Strings</processor>
+<port>strings</port>
+</source>
+</datalink>
+<datalink>
+<sink type="processor">
+<processor>Concatenate_two_strings_3</processor>
+<port>string1</port>
+</sink>
+<source type="processor">
+<processor>Workflow19</processor>
+<port>kk</port>
+</source>
+</datalink>
+<datalink>
+<sink type="processor">
+<processor>Concatenate_two_strings_3</processor>
+<port>string2</port>
+</sink>
+<source type="processor">
+<processor>String_constant</processor>
+<port>value</port>
+</source>
+</datalink>
+<datalink>
+<sink type="processor">
+<processor>Concatenate_two_strings_4</processor>
+<port>string1</port>
+</sink>
+<source type="processor">
+<processor>String_constant</processor>
+<port>value</port>
+</source>
+</datalink>
+<datalink>
+<sink type="processor">
+<processor>Concatenate_two_strings_4</processor>
+<port>string2</port>
+</sink>
+<source type="processor">
+<processor>Workflow19</processor>
+<port>String_constant_value</port>
+</source>
+</datalink>
+<datalink>
+<sink type="merge">
+<processor>Echo_List</processor>
+<port>inputlist</port>
+</sink>
+<source type="processor">
+<processor>Concatenate_two_strings_4</processor>
+<port>output</port>
+</source>
+</datalink>
+<datalink>
+<sink type="merge">
+<processor>Echo_List</processor>
+<port>inputlist</port>
+</sink>
+<source type="processor">
+<processor>Concatenate_two_strings_3</processor>
+<port>output</port>
+</source>
+</datalink>
+<datalink>
+<sink type="dataflow">
+<port>asdasd</port>
+</sink>
+<source type="processor">
+<processor>Echo_List</processor>
+<port>outputlist</port>
+</source>
+</datalink>
+</datalinks>
+<annotations />
+</dataflow>
+<dataflow id="c451b1cf-1c95-47e5-b89c-537a5501a1ef" role="nested">
+<name>Workflow19</name>
+<inputPorts>
+<port>
+<name>lk</name>
+<depth>0</depth>
+<granularDepth>0</granularDepth>
+<annotations />
+</port>
+</inputPorts>
+<outputPorts>
+<port>
+<name>kk</name>
+<annotations />
+</port>
+<port>
+<name>String_constant_value</name>
+<annotations />
+</port>
+</outputPorts>
+<processors>
+<processor>
+<name>Concatenate_two_strings</name>
+<inputPorts>
+<port>
+<name>string1</name>
+<depth>0</depth>
+</port>
+<port>
+<name>string2</name>
+<depth>0</depth>
+</port>
+</inputPorts>
+<outputPorts>
+<port>
+<name>output</name>
+<depth>0</depth>
+<granularDepth>0</granularDepth>
+</port>
+</outputPorts>
+<annotations />
+<activities>
+<activity>
+<raven>
+<group>net.sf.taverna.t2.activities</group>
+<artifact>localworker-activity</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.activities.localworker.LocalworkerActivity</class>
+<inputMap>
+<map from="string2" to="string2" />
+<map from="string1" to="string1" />
+</inputMap>
+<outputMap>
+<map from="output" to="output" />
+</outputMap>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean xmlns="">
+  <localworkerName>org.embl.ebi.escience.scuflworkers.java.StringConcat</localworkerName>
+  <script>output = string1 + string2;</script>
+  <dependencies />
+  <classLoaderSharing>workflow</classLoaderSharing>
+  <localDependencies />
+  <artifactDependencies />
+  <inputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>java.lang.String</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>string1</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+      <handledReferenceSchemes />
+      <translatedElementType>java.lang.String</translatedElementType>
+      <allowsLiteralValues>true</allowsLiteralValues>
+      <name>string2</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean>
+  </inputs>
+  <outputs>
+    <net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+      <granularDepth>0</granularDepth>
+      <name>output</name>
+      <depth>0</depth>
+      <mimeTypes>
+        <string>'text/plain'</string>
+      </mimeTypes>
+    </net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean>
+  </outputs>
+</net.sf.taverna.t2.activities.localworker.LocalworkerActivityConfigurationBean>
+</configBean>
+<annotations />
+</activity>
+</activities>
+<dispatchStack>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+  <maxJobs>1</maxJobs>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy>
+<cross>
+<port name="string1" depth="0" />
+<port name="string2" depth="0" />
+</cross>
+</strategy>
+</iteration>
+</iterationStrategyStack>
+</processor>
+<processor>
+<name>string1_value</name>
+<inputPorts />
+<outputPorts>
+<port>
+<name>value</name>
+<depth>0</depth>
+<granularDepth>0</granularDepth>
+</port>
+</outputPorts>
+<annotations />
+<activities>
+<activity>
+<raven>
+<group>net.sf.taverna.t2.activities</group>
+<artifact>stringconstant-activity</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.activities.stringconstant.StringConstantActivity</class>
+<inputMap />
+<outputMap>
+<map from="value" to="value" />
+</outputMap>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean xmlns="">
+  <value>kjkj</value>
+</net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean>
+</configBean>
+<annotations />
+</activity>
+</activities>
+<dispatchStack>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+  <maxJobs>1</maxJobs>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy />
+</iteration>
+</iterationStrategyStack>
+</processor>
+<processor>
+<name>String_constant</name>
+<inputPorts />
+<outputPorts>
+<port>
+<name>value</name>
+<depth>0</depth>
+<granularDepth>0</granularDepth>
+</port>
+</outputPorts>
+<annotations />
+<activities>
+<activity>
+<raven>
+<group>net.sf.taverna.t2.activities</group>
+<artifact>stringconstant-activity</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.activities.stringconstant.StringConstantActivity</class>
+<inputMap />
+<outputMap>
+<map from="value" to="value" />
+</outputMap>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean xmlns="">
+  <value>Add your own value here</value>
+</net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean>
+</configBean>
+<annotations />
+</activity>
+</activities>
+<dispatchStack>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Parallelize</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig xmlns="">
+  <maxJobs>1</maxJobs>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ParallelizeConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.ErrorBounce</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Failover</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Retry</class>
+<configBean encoding="xstream">
+<net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig xmlns="">
+  <backoffFactor>1.0</backoffFactor>
+  <initialDelay>1000</initialDelay>
+  <maxDelay>5000</maxDelay>
+  <maxRetries>0</maxRetries>
+</net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.RetryConfig>
+</configBean>
+</dispatchLayer>
+<dispatchLayer>
+<raven>
+<group>net.sf.taverna.t2.core</group>
+<artifact>workflowmodel-impl</artifact>
+<version>1.0</version>
+</raven>
+<class>net.sf.taverna.t2.workflowmodel.processor.dispatch.layers.Invoke</class>
+<configBean encoding="xstream">
+<null xmlns="" />
+</configBean>
+</dispatchLayer>
+</dispatchStack>
+<iterationStrategyStack>
+<iteration>
+<strategy />
+</iteration>
+</iterationStrategyStack>
+</processor>
+</processors>
+<conditions>
+<condition control="Concatenate_two_strings" target="String_constant" />
+</conditions>
+<datalinks>
+<datalink>
+<sink type="processor">
+<processor>Concatenate_two_strings</processor>
+<port>string1</port>
+</sink>
+<source type="processor">
+<processor>string1_value</processor>
+<port>value</port>
+</source>
+</datalink>
+<datalink>
+<sink type="processor">
+<processor>Concatenate_two_strings</processor>
+<port>string2</port>
+</sink>
+<source type="dataflow">
+<port>lk</port>
+</source>
+</datalink>
+<datalink>
+<sink type="dataflow">
+<port>kk</port>
+</sink>
+<source type="processor">
+<processor>Concatenate_two_strings</processor>
+<port>output</port>
+</source>
+</datalink>
+<datalink>
+<sink type="dataflow">
+<port>String_constant_value</port>
+</sink>
+<source type="processor">
+<processor>String_constant</processor>
+<port>value</port>
+</source>
+</datalink>
+</datalinks>
+<annotations />
+</dataflow>
+</workflow>
\ No newline at end of file