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 < 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