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:58:02 UTC

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

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