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 2015/02/23 11:05:34 UTC
[49/79] [partial] incubator-taverna-language git commit: Revert
"temporarily empty repository"
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/c08405cb/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestDataBundles.java
----------------------------------------------------------------------
diff --git a/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestDataBundles.java b/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestDataBundles.java
new file mode 100644
index 0000000..c5d692d
--- /dev/null
+++ b/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestDataBundles.java
@@ -0,0 +1,815 @@
+package org.apache.taverna.databundle;
+/*
+ *
+ * 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.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.nio.charset.Charset;
+import java.nio.file.DirectoryStream;
+import java.nio.file.FileAlreadyExistsException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.taverna.databundle.DataBundles;
+import org.apache.taverna.databundle.ErrorDocument;
+import org.apache.taverna.robundle.Bundle;
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+//import com.fasterxml.jackson.core.JsonFactory;
+import com.fasterxml.jackson.databind.JsonNode;
+//import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+
+public class TestDataBundles {
+ private Bundle dataBundle;
+
+ protected void checkSignature(Path zip) throws IOException {
+ String MEDIATYPE = "application/vnd.wf4ever.robundle+zip";
+ /*
+ * Check position 30++ according to RO Bundle specification
+ * http://purl.org/wf4ever/ro-bundle#ucf
+ */
+ byte[] expected = ("mimetype" + MEDIATYPE + "PK").getBytes("ASCII");
+
+ try (InputStream in = Files.newInputStream(zip)) {
+ byte[] signature = new byte[expected.length];
+ int MIME_OFFSET = 30;
+ assertEquals(MIME_OFFSET, in.skip(MIME_OFFSET));
+ assertEquals(expected.length, in.read(signature));
+ assertArrayEquals(expected, signature);
+ }
+ }
+
+ @Before
+ public void createDataBundle() throws IOException {
+ dataBundle = DataBundles.createBundle();
+ }
+
+ @After
+ public void closeDataBundle() throws IOException {
+ dataBundle.close();
+ }
+
+ @Test
+ public void clear() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path file1 = inputs.resolve("file1");
+ Path file1Txt = inputs.resolve("file1.txt");
+ Path file1Png = inputs.resolve("file1.png");
+ Path file1Else = inputs.resolve("file1somethingelse.txt");
+
+ Files.createFile(file1);
+ Files.createFile(file1Txt);
+ Files.createFile(file1Png);
+ Files.createFile(file1Else);
+
+ DataBundles.deleteAllExtensions(file1);
+
+ assertFalse(Files.exists(file1));
+ assertFalse(Files.exists(file1Txt));
+ assertFalse(Files.exists(file1Png));
+ assertTrue(Files.exists(file1Else));
+ }
+
+
+ @Test
+ public void clearRecursive() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path file1 = inputs.resolve("file1");
+ Path file1Dir = inputs.resolve("file1.dir");
+
+ Files.createDirectory(file1);
+ Files.createDirectory(file1Dir);
+ Path nested = file1Dir.resolve("nested");
+ Files.createDirectory(nested);
+
+
+ Path filePng = file1Dir.resolve("file.png");
+ Path fileTxt = nested.resolve("file1somethingelse.txt");
+
+ Files.createFile(filePng);
+ Files.createFile(fileTxt);
+
+ DataBundles.deleteAllExtensions(file1);
+
+ assertFalse(Files.exists(file1));
+ assertFalse(Files.exists(nested));
+ assertFalse(Files.exists(file1Dir));
+ assertFalse(Files.exists(filePng));
+ assertFalse(Files.exists(fileTxt));
+ }
+
+
+ @Test
+ public void createList() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path list = DataBundles.getPort(inputs, "in1");
+ DataBundles.createList(list);
+ assertTrue(Files.isDirectory(list));
+ }
+
+ @Test
+ public void getError() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path portIn1 = DataBundles.getPort(inputs, "in1");
+ DataBundles.setError(portIn1, "Something did not work", "A very\n long\n error\n trace");
+
+ ErrorDocument error = DataBundles.getError(portIn1);
+ assertTrue(error.getCausedBy().isEmpty());
+
+ assertEquals("Something did not work", error.getMessage());
+ // Notice that the lack of trailing \n is preserved
+ assertEquals("A very\n long\n error\n trace", error.getTrace());
+
+ assertEquals(null, DataBundles.getError(null));
+ }
+
+ @Test
+ public void getErrorCause() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path portIn1 = DataBundles.getPort(inputs, "in1");
+ Path cause1 = DataBundles.setError(portIn1, "Something did not work", "A very\n long\n error\n trace");
+ Path portIn2 = DataBundles.getPort(inputs, "in2");
+ Path cause2 = DataBundles.setError(portIn2, "Something else did not work", "Shorter trace");
+
+
+ Path outputs = DataBundles.getOutputs(dataBundle);
+ Path portOut1 = DataBundles.getPort(outputs, "out1");
+ DataBundles.setError(portOut1, "Errors in input", "", cause1, cause2);
+
+ ErrorDocument error = DataBundles.getError(portOut1);
+ assertEquals("Errors in input", error.getMessage());
+ assertEquals("", error.getTrace());
+ assertEquals(2, error.getCausedBy().size());
+
+ assertTrue(Files.isSameFile(cause1, error.getCausedBy().get(0)));
+ assertTrue(Files.isSameFile(cause2, error.getCausedBy().get(1)));
+ }
+
+ @Test
+ public void getInputs() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ assertTrue(Files.isDirectory(inputs));
+ // Second time should not fail because it already exists
+ inputs = DataBundles.getInputs(dataBundle);
+ assertTrue(Files.isDirectory(inputs));
+ assertEquals(dataBundle.getRoot(), inputs.getParent());
+ }
+
+ @Test
+ public void getList() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path list = DataBundles.getPort(inputs, "in1");
+ DataBundles.createList(list);
+ for (int i = 0; i < 5; i++) {
+ Path item = DataBundles.newListItem(list);
+ DataBundles.setStringValue(item, "test" + i);
+ }
+ List<Path> paths = DataBundles.getList(list);
+ assertEquals(5, paths.size());
+ assertEquals("test0", DataBundles.getStringValue(paths.get(0)));
+ assertEquals("test4", DataBundles.getStringValue(paths.get(4)));
+
+ assertEquals(null, DataBundles.getList(null));
+ }
+
+ @Test
+ public void getListItem() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path list = DataBundles.getPort(inputs, "in1");
+ DataBundles.createList(list);
+ for (int i = 0; i < 5; i++) {
+ Path item = DataBundles.newListItem(list);
+ DataBundles.setStringValue(item, "item " + i);
+ }
+ // set at next available position
+ Path item5 = DataBundles.getListItem(list, 5);
+ assertTrue(item5.getFileName().toString().contains("5"));
+ DataBundles.setStringValue(item5, "item 5");
+
+
+ // set somewhere later
+ Path item8 = DataBundles.getListItem(list, 8);
+ assertTrue(item8.getFileName().toString().contains("8"));
+ DataBundles.setStringValue(item8, "item 8");
+
+ Path item7 = DataBundles.getListItem(list, 7);
+ assertFalse(Files.exists(item7));
+ assertFalse(DataBundles.isList(item7));
+ assertFalse(DataBundles.isError(item7));
+ assertFalse(DataBundles.isValue(item7));
+ // TODO: Is it really missing? item1337 is also missing..
+ assertTrue(DataBundles.isMissing(item7));
+
+
+ // overwrite #2
+ Path item2 = DataBundles.getListItem(list, 2);
+ DataBundles.setStringValue(item2, "replaced");
+
+
+ List<Path> listItems = DataBundles.getList(list);
+ assertEquals(9, listItems.size());
+ assertEquals("item 0", DataBundles.getStringValue(listItems.get(0)));
+ assertEquals("item 1", DataBundles.getStringValue(listItems.get(1)));
+ assertEquals("replaced", DataBundles.getStringValue(listItems.get(2)));
+ assertEquals("item 3", DataBundles.getStringValue(listItems.get(3)));
+ assertEquals("item 4", DataBundles.getStringValue(listItems.get(4)));
+ assertEquals("item 5", DataBundles.getStringValue(listItems.get(5)));
+ assertNull(listItems.get(6));
+ assertNull(listItems.get(7));
+ assertEquals("item 8", DataBundles.getStringValue(listItems.get(8)));
+
+ }
+
+ @Test
+ public void getListSize() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path list = DataBundles.getPort(inputs, "in1");
+ DataBundles.createList(list);
+ for (int i = 0; i < 5; i++) {
+ Path item = DataBundles.newListItem(list);
+ DataBundles.setStringValue(item, "item " + i);
+ }
+ assertEquals(5, DataBundles.getListSize(list));
+
+ // set at next available position
+ Path item5 = DataBundles.getListItem(list, 5);
+ assertTrue(item5.getFileName().toString().contains("5"));
+ DataBundles.setStringValue(item5, "item 5");
+ assertEquals(6, DataBundles.getListSize(list));
+
+ // set somewhere beyond the end
+ Path item8 = DataBundles.getListItem(list, 8);
+ assertTrue(item8.getFileName().toString().contains("8"));
+ DataBundles.setStringValue(item8, "item 8");
+ assertEquals(9, DataBundles.getListSize(list));
+
+ // Evil test - very high number
+ long highNumber = 3l * Integer.MAX_VALUE;
+ Path itemHigh = DataBundles.getListItem(list, highNumber);
+ assertTrue(itemHigh.getFileName().toString().contains(Long.toString(highNumber)));
+ DataBundles.setStringValue(itemHigh, "item 6442450941");
+ assertEquals(highNumber+1l, DataBundles.getListSize(list));
+ }
+
+ @Test
+ public void getListItemChecksExtension() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path portIn1 = DataBundles.getPort(inputs, "in1");
+ Path list = DataBundles.newListItem(portIn1);
+
+ Path item = DataBundles.newListItem(list);
+
+ Path ref = DataBundles.setReference(item, URI.create("http://example.com/"));
+ Path itemAgain = DataBundles.getListItem(list, 0);
+ assertEquals(ref, itemAgain);
+ assertFalse(itemAgain.equals(portIn1));
+ assertTrue(Files.exists(itemAgain));
+ }
+
+ @Test
+ public void getOutputs() throws Exception {
+ Path outputs = DataBundles.getOutputs(dataBundle);
+ assertTrue(Files.isDirectory(outputs));
+ // Second time should not fail because it already exists
+ outputs = DataBundles.getOutputs(dataBundle);
+ assertTrue(Files.isDirectory(outputs));
+ assertEquals(dataBundle.getRoot(), outputs.getParent());
+ }
+
+ @Test
+ public void getPort() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path portIn1 = DataBundles.getPort(inputs, "in1");
+ assertFalse(Files.exists(portIn1));
+ assertEquals(inputs, portIn1.getParent());
+ }
+
+ @Test
+ public void getPortChecksExtension() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path portIn1 = DataBundles.getPort(inputs, "in1");
+ assertFalse(Files.exists(portIn1));
+ Path ref = DataBundles.setReference(portIn1, URI.create("http://example.com/"));
+ Path portIn1Again = DataBundles.getPort(inputs, "in1");
+ assertEquals(ref, portIn1Again);
+ assertFalse(portIn1Again.equals(portIn1));
+ assertTrue(Files.exists(portIn1Again));
+ }
+
+ @Test
+ public void getPorts() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ DataBundles.createList(DataBundles.getPort(inputs, "in1"));
+ DataBundles.createList(DataBundles.getPort(inputs, "in2"));
+ DataBundles.setStringValue(DataBundles.getPort(inputs, "value"),
+ "A value");
+ Map<String, Path> ports = DataBundles.getPorts(DataBundles
+ .getInputs(dataBundle));
+ assertEquals(3, ports.size());
+// System.out.println(ports);
+ assertTrue(ports.containsKey("in1"));
+ assertTrue(ports.containsKey("in2"));
+ assertTrue(ports.containsKey("value"));
+
+ assertEquals("A value", DataBundles.getStringValue(ports.get("value")));
+
+ }
+
+ @Test
+ public void hasInputs() throws Exception {
+ assertFalse(DataBundles.hasInputs(dataBundle));
+ DataBundles.getInputs(dataBundle); // create on demand
+ assertTrue(DataBundles.hasInputs(dataBundle));
+ }
+
+ @Test
+ public void hasOutputs() throws Exception {
+ assertFalse(DataBundles.hasOutputs(dataBundle));
+ DataBundles.getInputs(dataBundle); // independent
+ assertFalse(DataBundles.hasOutputs(dataBundle));
+ DataBundles.getOutputs(dataBundle); // create on demand
+ assertTrue(DataBundles.hasOutputs(dataBundle));
+ }
+
+ @Test
+ public void isError() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path portIn1 = DataBundles.getPort(inputs, "in1");
+ DataBundles.setError(portIn1, "Something did not work", "A very\n long\n error\n trace");
+
+ assertFalse(DataBundles.isList(portIn1));
+ assertFalse(DataBundles.isValue(portIn1));
+ assertFalse(DataBundles.isMissing(portIn1));
+ assertFalse(DataBundles.isReference(portIn1));
+ assertTrue(DataBundles.isError(portIn1));
+ }
+
+ @Test
+ public void isList() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path list = DataBundles.getPort(inputs, "in1");
+ DataBundles.createList(list);
+ assertTrue(DataBundles.isList(list));
+ assertFalse(DataBundles.isValue(list));
+ assertFalse(DataBundles.isError(list));
+ assertFalse(DataBundles.isReference(list));
+ assertFalse(DataBundles.isMissing(list));
+ }
+
+ @Test
+ public void isMissing() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path portIn1 = DataBundles.getPort(inputs, "in1");
+
+ assertFalse(DataBundles.isList(portIn1));
+ assertFalse(DataBundles.isValue(portIn1));
+ assertFalse(DataBundles.isError(portIn1));
+ assertTrue(DataBundles.isMissing(portIn1));
+ assertFalse(DataBundles.isReference(portIn1));
+ }
+
+ @Test
+ public void isValueOnError() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ DataBundles.setError(DataBundles.getPort(inputs, "test"),
+ "error", "");
+ assertFalse(DataBundles.isValue(DataBundles.getPorts(inputs).get("test")));
+ }
+
+ @Test
+ public void isValueOnReference() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ DataBundles.setReference(DataBundles.getPort(inputs, "test"), URI.create("http://www.example.com/"));
+ assertFalse(DataBundles.isValue(DataBundles.getPorts(inputs).get("test")));
+ }
+
+ @Test
+ public void listOfLists() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path list = DataBundles.getPort(inputs, "in1");
+ DataBundles.createList(list);
+ Path sublist0 = DataBundles.newListItem(list);
+ DataBundles.createList(sublist0);
+
+ Path sublist1 = DataBundles.newListItem(list);
+ DataBundles.createList(sublist1);
+
+ assertEquals(Arrays.asList("0/", "1/"), ls(list));
+
+ DataBundles.setStringValue(DataBundles.newListItem(sublist1),
+ "Hello");
+
+ assertEquals(Arrays.asList("0"), ls(sublist1));
+
+ assertEquals("Hello",DataBundles.getStringValue(
+ DataBundles.getListItem(DataBundles.getListItem(list, 1), 0)));
+ }
+
+
+
+ protected List<String> ls(Path path) throws IOException {
+ List<String> paths = new ArrayList<>();
+ try (DirectoryStream<Path> ds = Files.newDirectoryStream(path)) {
+ for (Path p : ds) {
+ paths.add(p.getFileName() + "");
+ }
+ }
+ Collections.sort(paths);
+ return paths;
+ }
+
+ @Test(expected=FileAlreadyExistsException.class)
+ public void newListAlreadyExistsAsError() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path list = DataBundles.getPort(inputs, "in1");
+ Path err = DataBundles.setError(list, "a", "b");
+ assertFalse(Files.isRegularFile(list));
+ assertFalse(Files.isDirectory(list));
+ assertTrue(Files.isRegularFile(err));
+ DataBundles.createList(list);
+ }
+
+ @Test(expected=FileAlreadyExistsException.class)
+ public void newListAlreadyExistsAsFile() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path list = DataBundles.getPort(inputs, "in1");
+ DataBundles.setStringValue(list, "A string");
+ assertTrue(Files.isRegularFile(list));
+ assertFalse(Files.isDirectory(list));
+ DataBundles.createList(list);
+ }
+
+
+ @Test(expected=FileAlreadyExistsException.class)
+ public void newListAlreadyExistsAsReference() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path list = DataBundles.getPort(inputs, "in1");
+ Path ref = DataBundles.setReference(list, URI.create("http://example.com/"));
+ assertFalse(Files.isRegularFile(list));
+ assertFalse(Files.isDirectory(list));
+ assertTrue(Files.isRegularFile(ref));
+ DataBundles.createList(list);
+ }
+
+ @Test
+ public void newListItem() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path list = DataBundles.getPort(inputs, "in1");
+ DataBundles.createList(list);
+ Path item0 = DataBundles.newListItem(list);
+ assertEquals(list, item0.getParent());
+ assertTrue(item0.getFileName().toString().contains("0"));
+ assertFalse(Files.exists(item0));
+ DataBundles.setStringValue(item0, "test");
+
+ Path item1 = DataBundles.newListItem(list);
+ assertTrue(item1.getFileName().toString().contains("1"));
+ // Because we've not actually created item1 yet
+ assertEquals(item1, DataBundles.newListItem(list));
+ DataBundles.setStringValue(item1, "test");
+
+ // Check that DataBundles.newListItem can deal with gaps
+ Files.delete(item0);
+ Path item2 = DataBundles.newListItem(list);
+ assertTrue(item2.getFileName().toString().contains("2"));
+
+ // Check that non-numbers don't interfere
+ Path nonumber = list.resolve("nonumber");
+ Files.createFile(nonumber);
+ item2 = DataBundles.newListItem(list);
+ assertTrue(item2.getFileName().toString().contains("2"));
+
+ // Check that extension is stripped
+ Path five = list.resolve("5.txt");
+ Files.createFile(five);
+ Path item6 = DataBundles.newListItem(list);
+ assertTrue(item6.getFileName().toString().contains("6"));
+ }
+
+ @Test
+ public void setErrorArgs() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path portIn1 = DataBundles.getPort(inputs, "in1");
+ Path errorPath = DataBundles.setError(portIn1, "Something did not work", "A very\n long\n error\n trace");
+ assertEquals("in1.err", errorPath.getFileName().toString());
+
+ List<String> errLines = Files.readAllLines(errorPath, Charset.forName("UTF-8"));
+ assertEquals(6, errLines.size());
+ assertEquals("", errLines.get(0));
+ assertEquals("Something did not work", errLines.get(1));
+ assertEquals("A very", errLines.get(2));
+ assertEquals(" long", errLines.get(3));
+ assertEquals(" error", errLines.get(4));
+ assertEquals(" trace", errLines.get(5));
+ }
+
+ @Test
+ public void setErrorCause() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path portIn1 = DataBundles.getPort(inputs, "in1");
+ Path cause1 = DataBundles.setError(portIn1, "Something did not work", "A very\n long\n error\n trace");
+ Path portIn2 = DataBundles.getPort(inputs, "in2");
+ Path cause2 = DataBundles.setError(portIn2, "Something else did not work", "Shorter trace");
+
+
+ Path outputs = DataBundles.getOutputs(dataBundle);
+ Path portOut1 = DataBundles.getPort(outputs, "out1");
+ Path errorPath = DataBundles.setError(portOut1, "Errors in input", "", cause1, cause2);
+
+ List<String> errLines = Files.readAllLines(errorPath, Charset.forName("UTF-8"));
+ assertEquals("../inputs/in1.err", errLines.get(0));
+ assertEquals("../inputs/in2.err", errLines.get(1));
+ assertEquals("", errLines.get(2));
+ }
+
+ @Test
+ public void setErrorExistsAsError() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path in1 = DataBundles.getPort(inputs, "in1");
+ Path err = DataBundles.setError(in1, "a", "b");
+ assertFalse(Files.exists(in1));
+ assertTrue(Files.isRegularFile(err));
+ DataBundles.setError(in1, "c", "d");
+ assertEquals("c", DataBundles.getError(in1).getMessage());
+ }
+
+ @Test(expected=FileAlreadyExistsException.class)
+ public void setErrorExistsAsList() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path list = DataBundles.getPort(inputs, "in1");
+ DataBundles.createList(list);
+ assertFalse(Files.isRegularFile(list));
+ assertTrue(Files.isDirectory(list));
+ DataBundles.setError(list, "a", "b");
+ }
+
+ @Test(expected=FileAlreadyExistsException.class)
+ public void setErrorExistsAsReference() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path in1 = DataBundles.getPort(inputs, "in1");
+ Path ref = DataBundles.setReference(in1, URI.create("http://example.com/"));
+ assertFalse(Files.exists(in1));
+ assertTrue(Files.isRegularFile(ref));
+ DataBundles.setError(in1, "a", "b");
+ }
+
+ @Test(expected=FileAlreadyExistsException.class)
+ public void setErrorExistsAsValue() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path in1 = DataBundles.getPort(inputs, "in1");
+ DataBundles.setStringValue(in1, "test");
+ assertTrue(Files.isRegularFile(in1));
+ DataBundles.setError(in1, "a", "b");
+ }
+
+ @Test
+ public void setErrorObj() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+
+ Path portIn1 = DataBundles.getPort(inputs, "in1");
+ Path cause1 = DataBundles.setError(portIn1, "a", "b");
+ Path portIn2 = DataBundles.getPort(inputs, "in2");
+ Path cause2 = DataBundles.setError(portIn2, "c", "d");
+
+
+ Path outputs = DataBundles.getOutputs(dataBundle);
+ Path portOut1 = DataBundles.getPort(outputs, "out1");
+
+ ErrorDocument error = new ErrorDocument();
+ error.getCausedBy().add(cause1);
+ error.getCausedBy().add(cause2);
+
+ error.setMessage("Something did not work");
+ error.setTrace("Here\nis\nwhy\n");
+
+ Path errorPath = DataBundles.setError(portOut1, error);
+ assertEquals("out1.err", errorPath.getFileName().toString());
+
+ List<String> errLines = Files.readAllLines(errorPath, Charset.forName("UTF-8"));
+ assertEquals(8, errLines.size());
+ assertEquals("../inputs/in1.err", errLines.get(0));
+ assertEquals("../inputs/in2.err", errLines.get(1));
+ assertEquals("", errLines.get(2));
+ assertEquals("Something did not work", errLines.get(3));
+ assertEquals("Here", errLines.get(4));
+ assertEquals("is", errLines.get(5));
+ assertEquals("why", errLines.get(6));
+ assertEquals("", errLines.get(7));
+ }
+
+ @Test(expected = FileAlreadyExistsException.class)
+ public void setReferenceExistsAsError() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path in1 = DataBundles.getPort(inputs, "in1");
+ Path err = DataBundles.setError(in1, "a", "b");
+ assertFalse(Files.exists(in1));
+ assertTrue(Files.isRegularFile(err));
+ DataBundles.setReference(in1, URI.create("http://example.com/"));
+ }
+
+ @Test(expected = FileAlreadyExistsException.class)
+ public void setReferenceExistsAsList() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path in1 = DataBundles.getPort(inputs, "in1");
+ DataBundles.createList(in1);
+ assertTrue(Files.isDirectory(in1));
+ DataBundles.setReference(in1, URI.create("http://example.com/"));
+ }
+
+ @Test
+ public void setReferenceExistsAsReference() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path in1 = DataBundles.getPort(inputs, "in1");
+ Path ref = DataBundles.setReference(in1, URI.create("http://example.com/"));
+ assertFalse(Files.exists(in1));
+ assertTrue(Files.isRegularFile(ref));
+ DataBundles.setReference(in1, URI.create("http://example.com/"));
+ }
+
+
+ @Test(expected = FileAlreadyExistsException.class)
+ public void setReferenceExistsAsValue() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path in1 = DataBundles.getPort(inputs, "in1");
+ DataBundles.setStringValue(in1, "Hello");
+ assertTrue(Files.isRegularFile(in1));
+ DataBundles.setReference(in1, URI.create("http://example.com/"));
+ }
+
+ @Test(expected=FileAlreadyExistsException.class)
+ public void setStringExistsAsError() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path in1 = DataBundles.getPort(inputs, "in1");
+ Path err = DataBundles.setError(in1, "x", "X");
+ assertFalse(Files.exists(in1));
+ assertTrue(Files.isRegularFile(err));
+ DataBundles.setStringValue(in1, "Hello");
+ }
+
+
+ @Test(expected=FileAlreadyExistsException.class)
+ public void setStringExistsAsList() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path in1 = DataBundles.getPort(inputs, "in1");
+ DataBundles.createList(in1);
+ assertTrue(Files.isDirectory(in1));
+ DataBundles.setStringValue(in1, "Hello");
+ }
+
+
+
+ @Test(expected=FileAlreadyExistsException.class)
+ public void setStringExistsAsReference() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path in1 = DataBundles.getPort(inputs, "in1");
+ Path ref = DataBundles.setReference(in1, URI.create("http://example.com/"));
+ assertFalse(Files.exists(in1));
+ assertTrue(Files.isRegularFile(ref));
+ DataBundles.setStringValue(in1, "Hello");
+ }
+
+ @Test
+ public void setStringExistsAsString() throws Exception {
+ Path inputs = DataBundles.getInputs(dataBundle);
+ Path in1 = DataBundles.getPort(inputs, "in1");
+ DataBundles.setStringValue(in1, "A");
+ assertTrue(Files.isRegularFile(in1));
+ DataBundles.setStringValue(in1, "B");
+ assertEquals("B", DataBundles.getStringValue(in1));
+ }
+
+ @Test
+ public void getIntermediates() throws Exception {
+ Path intermediates = DataBundles.getIntermediates(dataBundle);
+ assertEquals("/intermediates", intermediates.toString());
+ assertTrue(Files.isDirectory(intermediates));
+ }
+
+
+ @Test(expected=FileAlreadyExistsException.class)
+ public void getIntermediatesFails() throws Exception {
+ Path intermediates = DataBundles.getIntermediates(dataBundle);
+ Files.delete(intermediates);
+ Files.createFile(intermediates);
+ DataBundles.getIntermediates(dataBundle);
+ }
+
+ @Test
+ public void getIntermediate() throws Exception {
+ UUID uuid = UUID.randomUUID();
+ Path inter = DataBundles.getIntermediate(dataBundle, uuid);
+ assertFalse(Files.exists(inter));
+ DataBundles.setStringValue(inter, "intermediate");
+ Path parent = inter.getParent();
+ assertEquals(dataBundle.getRoot().resolve("intermediates"), parent.getParent());
+ String parentName = parent.getFileName().toString();
+ assertEquals(2, parentName.length());
+ assertTrue(uuid.toString().startsWith(parentName));
+ // Filename is a valid string
+ String interFileName = inter.getFileName().toString();
+ assertTrue(interFileName.startsWith(parentName));
+ assertEquals(uuid, UUID.fromString(interFileName));
+ }
+
+ @Test
+ public void getWorkflow() throws Exception {
+ Path wf = DataBundles.getWorkflow(dataBundle);
+ assertEquals("/workflow", wf.toString());
+ }
+
+ @Test
+ public void setWorkflowBundle() throws Exception {
+ WorkflowBundleIO wfBundleIO = new WorkflowBundleIO();
+ WorkflowBundle wfBundle = wfBundleIO.createBundle();
+ DataBundles.setWorkflowBundle(dataBundle, wfBundle);
+
+ Path wf = DataBundles.getWorkflow(dataBundle);
+ assertEquals("/workflow.wfbundle", wf.toString());
+ assertEquals("application/vnd.taverna.scufl2.workflow-bundle",
+ Files.probeContentType(wf));
+ }
+
+ @Ignore
+ @Test
+ public void getWorkflowBundle() throws Exception {
+ WorkflowBundleIO wfBundleIO = new WorkflowBundleIO();
+ WorkflowBundle wfBundle = wfBundleIO.createBundle();
+
+ String name = wfBundle.getName();
+ String wfName = wfBundle.getMainWorkflow().getName();
+ URI id = wfBundle.getIdentifier();
+
+ DataBundles.setWorkflowBundle(dataBundle, wfBundle);
+
+ // Reload the bundle
+ wfBundle = DataBundles.getWorkflowBundle(dataBundle);
+ assertEquals(name, wfBundle.getName());
+ assertEquals(wfName, wfBundle.getMainWorkflow().getName());
+ assertEquals(id, wfBundle.getIdentifier());
+ }
+
+ @Test
+ public void getWorkflowReport() throws Exception {
+ Path runReport = DataBundles.getWorkflowRunReport(dataBundle);
+ assertEquals("/workflowrun.json", runReport.toString());
+ }
+
+ @Test
+ public void getWorkflowReportAsJson() throws Exception {
+ Path runReport = DataBundles.getWorkflowRunReport(dataBundle);
+ DataBundles.setStringValue(runReport, "{ \"valid\": \"not really\", \"number\": 1337 }");
+ JsonNode json = DataBundles.getWorkflowRunReportAsJson(dataBundle);
+ assertEquals("not really", json.path("valid").asText());
+ assertEquals(1337, json.path("number").asInt());
+ }
+
+ @Test
+ public void setWorkflowReport() throws Exception {
+ ObjectNode report = JsonNodeFactory.instance.objectNode();
+ report.put("number", 1337);
+ DataBundles.setWorkflowRunReport(dataBundle, report);
+ Path runReport = DataBundles.getWorkflowRunReport(dataBundle);
+ String json = DataBundles.getStringValue(runReport);
+ assertTrue(json.contains("number"));
+ assertTrue(json.contains("1337"));
+ }
+
+
+}
+
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/c08405cb/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestExample.java
----------------------------------------------------------------------
diff --git a/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestExample.java b/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestExample.java
new file mode 100644
index 0000000..f300b8b
--- /dev/null
+++ b/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestExample.java
@@ -0,0 +1,174 @@
+package org.apache.taverna.databundle;
+/*
+ *
+ * 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.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.awt.Desktop;
+import java.io.OutputStream;
+import java.net.URI;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
+import java.nio.file.StandardOpenOption;
+import java.util.List;
+import java.util.NavigableMap;
+
+import org.apache.taverna.databundle.DataBundles;
+import org.apache.taverna.databundle.ErrorDocument;
+import org.apache.taverna.robundle.Bundle;
+import org.junit.Test;
+
+public class TestExample {
+ @Test
+ public void example() throws Exception {
+ // Create a new (temporary) data bundle
+ Bundle dataBundle = DataBundles.createBundle();
+
+ // Get the inputs
+ Path inputs = DataBundles.getInputs(dataBundle);
+
+ // Get an input port:
+ Path portIn1 = DataBundles.getPort(inputs, "in1");
+
+ // Setting a string value for the input port:
+ DataBundles.setStringValue(portIn1, "Hello");
+
+ // And retrieving it
+ if (DataBundles.isValue(portIn1)) {
+ System.out.println(DataBundles.getStringValue(portIn1));
+ }
+
+ // Or just use the regular Files methods:
+ for (String line : Files
+ .readAllLines(portIn1, Charset.forName("UTF-8"))) {
+ System.out.println(line);
+ }
+
+ // Binaries and large files are done through the Files API
+ try (OutputStream out = Files.newOutputStream(portIn1,
+ StandardOpenOption.APPEND)) {
+ out.write(32);
+ }
+ // Or Java 7 style
+ Path localFile = Files.createTempFile("", ".txt");
+ Files.copy(portIn1, localFile, StandardCopyOption.REPLACE_EXISTING);
+ System.out.println("Written to: " + localFile);
+
+ // Either way works, of course
+ Path outputs = DataBundles.getOutputs(dataBundle);
+ Files.copy(localFile,
+ DataBundles.getPort(outputs, "out1"));
+
+
+ // When you get a port, it can become either a value or a list
+ Path port2 = DataBundles.getPort(inputs, "port2");
+ DataBundles.createList(port2); // empty list
+ if (DataBundles.isList(port2)) {
+ List<Path> list = DataBundles.getList(port2);
+ assertTrue(list.isEmpty());
+ }
+
+ // Adding items sequentially
+ Path item0 = DataBundles.newListItem(port2);
+ DataBundles.setStringValue(item0, "item 0");
+ DataBundles.setStringValue(DataBundles.newListItem(port2), "item 1");
+ DataBundles.setStringValue(DataBundles.newListItem(port2), "item 2");
+
+
+ // Set and get by explicit position:
+ DataBundles.setStringValue(DataBundles.getListItem(port2, 12), "item 12");
+ System.out.println(DataBundles.getStringValue(DataBundles.getListItem(port2, 2)));
+
+ // The list is sorted numerically (e.g. 2, 5, 10) and
+ // will contain nulls for empty slots
+ System.out.println(DataBundles.getList(port2));
+
+ // Ports can be browsed as a map by port name
+ NavigableMap<String, Path> ports = DataBundles.getPorts(inputs);
+ System.out.println(ports.keySet());
+
+ // Is there anything known about a port?
+ if (! DataBundles.isMissing(DataBundles.getPort(outputs, "out3"))) {
+ // DataBundles.getPorts(outputs).containsKey("out3")
+
+ }
+
+ // Representing errors
+ Path out2 = DataBundles.getPort(outputs, "out2");
+ DataBundles.setError(out2, "Something did not work", "A very\n long\n error\n trace");
+
+ // Retrieving errors
+ if (DataBundles.isError(out2)) {
+ ErrorDocument error = DataBundles.getError(out2);
+ System.out.println("Error: " + error.getMessage());
+ }
+
+ // Representing references
+ URI ref = URI.create("http://example.com/external.txt");
+ Path out3 = DataBundles.getPort(outputs, "out3");
+ System.out.println(DataBundles.setReference(out3, ref));
+ if (DataBundles.isReference(out3)) {
+ URI resolved = DataBundles.getReference(out3);
+ System.out.println(resolved);
+ }
+
+
+
+
+ // Saving a data bundle:
+ Path zip = Files.createTempFile("databundle", ".zip");
+ DataBundles.closeAndSaveBundle(dataBundle, zip);
+ // NOTE: From now dataBundle and its Path's are CLOSED
+ // and can no longer be accessed
+
+
+ System.out.println("Saved to " + zip);
+ if (Desktop.isDesktopSupported()) {
+ // Open ZIP file for browsing
+ Desktop.getDesktop().open(zip.toFile());
+ }
+
+ // Loading a data bundle back from disk
+ try (Bundle dataBundle2 = DataBundles.openBundle(zip)) {
+ assertEquals(zip, dataBundle2.getSource());
+ Path loadedInputs = DataBundles.getInputs(dataBundle2);
+
+ for (Path port : DataBundles.getPorts(loadedInputs).values()) {
+ if (DataBundles.isValue(port)) {
+ System.out.print("Value " + port + ": ");
+ System.out.println(DataBundles.getStringValue(port));
+ } else if (DataBundles.isList(port)) {
+ System.out.print("List " + port + ": ");
+ for (Path item : DataBundles.getList(port)) {
+ // We'll assume depth 1 here
+ System.out.print(DataBundles.getStringValue(item));
+ System.out.print(", ");
+ }
+ System.out.println();
+ }
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/c08405cb/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestFullExample.java
----------------------------------------------------------------------
diff --git a/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestFullExample.java b/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestFullExample.java
new file mode 100644
index 0000000..ca6e1e1
--- /dev/null
+++ b/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestFullExample.java
@@ -0,0 +1,163 @@
+package org.apache.taverna.databundle;
+/*
+ *
+ * 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.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.net.URL;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.UUID;
+
+import org.apache.taverna.databundle.DataBundles;
+import org.apache.taverna.robundle.Bundle;
+import org.apache.taverna.robundle.manifest.Manifest;
+import org.apache.taverna.scufl2.api.container.WorkflowBundle;
+import org.apache.taverna.scufl2.api.core.Processor;
+import org.apache.taverna.scufl2.api.core.Workflow;
+import org.apache.taverna.scufl2.api.io.WorkflowBundleIO;
+import org.junit.Test;
+
+
+public class TestFullExample {
+
+ private static String RUN = "/full-example/ebi-wfrun-2013-05-31/";
+
+ private static WorkflowBundleIO wfBundleIO = new WorkflowBundleIO();
+
+ @Test
+ public void writeExample() throws Exception {
+ // Create a new (temporary) data bundle
+ Bundle dataBundle = DataBundles.createBundle();
+
+ // The run as currently saved to a folder by prov-taverna 1.10
+ URL runResource = getClass().getResource(RUN);
+ Path runPath = Paths.get(runResource.toURI());
+
+ assertTrue(Files.isDirectory(runPath));
+
+ // In order to preserve existing file extensions we copy as files
+ // rather than using the higher-level methods like
+ // DataBundles.setStringValue()
+
+ // Inputs
+ Path inputs = DataBundles.getInputs(dataBundle);
+ for (String filename : Arrays.asList("email.txt", "sequence.txt")) {
+ Files.copy(runPath.resolve(filename), inputs.resolve(filename));
+ }
+
+ // Outputs
+ Path outputs = DataBundles.getOutputs(dataBundle);
+ for (String filename : Arrays.asList("getResult_3_output_output.xml",
+ "getResult_output_output.octet-stream", "Graphical_output.png",
+ "Workflow16_getStatus_output_status.txt")) {
+ Files.copy(runPath.resolve(filename), outputs.resolve(filename));
+ }
+
+ // Provenance
+ Files.copy(runPath.resolve("workflowrun.prov.ttl"),
+ DataBundles.getWorkflowRunProvenance(dataBundle));
+
+ // Workflow
+ WorkflowBundle wfBundle = wfBundleIO.readBundle(
+ runPath.resolveSibling(
+ "ebi_interproscan_newservices_900329.t2flow").toFile(),
+ null);
+ DataBundles.setWorkflowBundle(dataBundle, wfBundle);
+
+ // Intermediate values
+ DataBundles.copyRecursively(runPath.resolve("intermediates"),
+ DataBundles.getIntermediates(dataBundle),
+ StandardCopyOption.REPLACE_EXISTING);
+
+ // Generate Manifest
+ // TODO: This should be done automatically on close/save
+ Manifest manifest = new Manifest(dataBundle);
+ manifest.populateFromBundle();
+ manifest.writeAsJsonLD();
+
+ // Saving a data bundle:
+ Path zip = Files.createTempFile("databundle", ".zip");
+ DataBundles.closeAndSaveBundle(dataBundle, zip);
+ // NOTE: From now dataBundle and its Path's are CLOSED
+ // and can no longer be accessed
+
+ //System.out.println("Saved to " + zip);
+
+ // Loading a data bundle back from disk
+ try (Bundle dataBundle2 = DataBundles.openBundle(zip)) {
+ assertEquals(zip, dataBundle2.getSource());
+
+ List<String> s = new ArrayList<>(DataBundles.getPorts(
+ DataBundles.getInputs(dataBundle2)).keySet());
+ Collections.sort(s);
+ assertEquals("[email, sequence]", s.toString());
+ assertEquals(
+ "soiland-reyes@cs.manchester.ac.uk",
+ DataBundles.getStringValue(DataBundles.getPort(
+ DataBundles.getInputs(dataBundle2), "email")));
+ s = new ArrayList<>(DataBundles.getPorts(
+ DataBundles.getOutputs(dataBundle2)).keySet());
+ Collections.sort(s);
+ assertEquals(
+ "[Graphical_output, Workflow16_getStatus_output_status, "
+ + "getResult_3_output_output, getResult_output_output]",
+ s.toString());
+ assertEquals("FINISHED", DataBundles.getStringValue(DataBundles
+ .getPort(DataBundles.getOutputs(dataBundle2),
+ "Workflow16_getStatus_output_status")));
+
+ UUID uuid = UUID.fromString("1f536bcf-ba43-44ec-a983-b30a45f2b739");
+ Path intermediate = DataBundles.getIntermediate(dataBundle2, uuid);
+ String intermediateStr = DataBundles.getStringValue(intermediate);
+ assertTrue(intermediateStr.contains("<status>RUNNING</status>"));
+
+ Path prov = DataBundles.getWorkflowRunProvenance(dataBundle2);
+ List<String> provLines = Files.readAllLines(prov, Charset.forName("UTF8"));
+ assertEquals(" prov:startedAtTime \"2013-05-31T11:23:10.463+01:00\"^^xsd:dateTime ;",
+ provLines.get(15));
+
+ WorkflowBundle wfb = DataBundles.getWorkflowBundle(dataBundle2);
+ assertEquals("EBI_InterproScan_NewServices", wfb.getName());
+ s=new ArrayList<>();
+ for (Workflow w : wfb.getWorkflows()) {
+ for (Processor p : w.getProcessors()) {
+ s.add(p.getName());
+ }
+ }
+ Collections.sort(s);
+ assertEquals("[Status, getResult, getResult_graphic, getResult_graphic_input, "
+ + "getResult_graphic_output, getResult_input, getResult_output, getResult_xml, "
+ + "getResult_xml_input, getResult_xml_output, getStatus, getStatus_input, "
+ + "getStatus_output, run, run_input, run_input_2, run_output, text, visual_png, "
+ + "xml]", s.toString());
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/c08405cb/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/Graphical_output.png
----------------------------------------------------------------------
diff --git a/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/Graphical_output.png b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/Graphical_output.png
new file mode 100644
index 0000000..39a1065
Binary files /dev/null and b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/Graphical_output.png differ
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/c08405cb/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/Workflow16_getStatus_output_status.txt
----------------------------------------------------------------------
diff --git a/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/Workflow16_getStatus_output_status.txt b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/Workflow16_getStatus_output_status.txt
new file mode 100644
index 0000000..067b935
--- /dev/null
+++ b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/Workflow16_getStatus_output_status.txt
@@ -0,0 +1 @@
+FINISHED
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/c08405cb/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/email.txt
----------------------------------------------------------------------
diff --git a/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/email.txt b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/email.txt
new file mode 100644
index 0000000..9fa7ae4
--- /dev/null
+++ b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/email.txt
@@ -0,0 +1 @@
+soiland-reyes@cs.manchester.ac.uk
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/c08405cb/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/getResult_3_output_output.xml
----------------------------------------------------------------------
diff --git a/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/getResult_3_output_output.xml b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/getResult_3_output_output.xml
new file mode 100644
index 0000000..7c0d400
--- /dev/null
+++ b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/getResult_3_output_output.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<EBIInterProScanResults xmlns="http://www.ebi.ac.uk/Tools/common/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.ebi.ac.uk/Tools/common/schema/InterProScanResult.xsd">
+ <Header>
+ <program name="InterProScan" version="4.8" citation="PMID:11590104"/>
+ <parameters>
+ <sequences total="1"/>
+ <databases total="16">
+ <database number="1" name="PRODOM" type="sequences"/>
+ <database number="2" name="COIL" type="matrix"/>
+ <database number="3" name="PRINTS" type="matrix"/>
+ <database number="4" name="GENE3D" type="model"/>
+ <database number="5" name="HAMAP" type="strings"/>
+ <database number="6" name="PANTHER" type="model"/>
+ <database number="7" name="PFAM" type="model"/>
+ <database number="8" name="PIR" type="model"/>
+ <database number="9" name="SMART" type="model"/>
+ <database number="10" name="TIGRFAMs" type="model"/>
+ <database number="11" name="PROSITE" type="strings"/>
+ <database number="12" name="PROFILE" type="strings"/>
+ <database number="13" name="SEG" type="NA"/>
+ <database number="14" name="SIGNALP" type="model"/>
+ <database number="15" name="SUPERFAMILY" type="model"/>
+ <database number="16" name="TMHMM" type="model"/>
+ </databases>
+ </parameters>
+ </Header>
+<interpro_matches>
+
+ <protein id="TMM43_HUMAN" length="400" crc64="70FDDD4ED1AA11DF">
+ <interpro id="IPR012430" name="Transmembrane protein 43 family" type="Family">
+ <match id="PTHR13416" name="UNCHARACTERIZED" dbname="PANTHER">
+ <location start="1" end="400" score="2.8e-209" status="T" evidence="HMMPanther"/>
+ </match>
+ <match id="PF07787" name="DUF1625" dbname="PFAM">
+ <location start="121" end="373" score="5.2e-82" status="T" evidence="HMMPfam"/>
+ </match>
+ </interpro>
+ <interpro id="noIPR" name="unintegrated" type="unintegrated">
+ <match id="PTHR13416:SF0" name="SUBFAMILY NOT NAMED" dbname="PANTHER">
+ <location start="1" end="400" score="2.8e-209" status="T" evidence="HMMPanther"/>
+ </match>
+ <match id="tmhmm" name="transmembrane_regions" dbname="TMHMM">
+ <location start="33" end="51" score="NA" status="?" evidence="TMHMM"/>
+ <location start="313" end="331" score="NA" status="?" evidence="TMHMM"/>
+ <location start="350" end="370" score="NA" status="?" evidence="TMHMM"/>
+ <location start="375" end="395" score="NA" status="?" evidence="TMHMM"/>
+ </match>
+ </interpro>
+ </protein>
+
+</interpro_matches>
+</EBIInterProScanResults>
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/c08405cb/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/getResult_output_output.octet-stream
----------------------------------------------------------------------
diff --git a/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/getResult_output_output.octet-stream b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/getResult_output_output.octet-stream
new file mode 100644
index 0000000..778c00d
--- /dev/null
+++ b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/getResult_output_output.octet-stream
@@ -0,0 +1,12 @@
+Sequence "TMM43_HUMAN" crc64 checksum: 70FDDD4ED1AA11DF length: 400 aa.
+
+InterPro IPR012430 Transmembrane protein 43 family
+method AccNumber shortName location
+HMMPanther PTHR13416 UNCHARACTERIZED T[1-400] 2.8e-209
+HMMPfam PF07787 DUF1625 T[121-373] 5.2e-82
+
+InterPro NULL NULL
+method AccNumber shortName location
+HMMPanther PTHR13416:SF0 SUBFAMILY NOT NAMED T[1-400] 2.8e-209
+TMHMM tmhmm transmembrane_regions ?[33-51] NA ?[313-331] NA ?[350-370] NA ?[375-395] NA
+
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/c08405cb/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/00/00548907-43e1-4484-9582-bfa8727d44ca.txt
----------------------------------------------------------------------
diff --git a/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/00/00548907-43e1-4484-9582-bfa8727d44ca.txt b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/00/00548907-43e1-4484-9582-bfa8727d44ca.txt
new file mode 100644
index 0000000..0e5ea08
--- /dev/null
+++ b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/00/00548907-43e1-4484-9582-bfa8727d44ca.txt
@@ -0,0 +1 @@
+RUNNING
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/c08405cb/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/07/079d289b-796e-45cf-a759-82f91a0aa3d5.txt
----------------------------------------------------------------------
diff --git a/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/07/079d289b-796e-45cf-a759-82f91a0aa3d5.txt b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/07/079d289b-796e-45cf-a759-82f91a0aa3d5.txt
new file mode 100644
index 0000000..0e5ea08
--- /dev/null
+++ b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/07/079d289b-796e-45cf-a759-82f91a0aa3d5.txt
@@ -0,0 +1 @@
+RUNNING
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/c08405cb/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/0a/0a2b3aa2-5b11-433d-b48f-1009424bb486.txt
----------------------------------------------------------------------
diff --git a/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/0a/0a2b3aa2-5b11-433d-b48f-1009424bb486.txt b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/0a/0a2b3aa2-5b11-433d-b48f-1009424bb486.txt
new file mode 100644
index 0000000..7da8010
--- /dev/null
+++ b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/0a/0a2b3aa2-5b11-433d-b48f-1009424bb486.txt
@@ -0,0 +1 @@
+<parameters xmlns="http://soap.jdispatcher.ebi.ac.uk"><jobId xmlns="">iprscan-S20130531-112044-0159-59919420-oy</jobId></parameters>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/c08405cb/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/0b/0bd05e27-46d6-4de5-b76b-0988638f9231.txt
----------------------------------------------------------------------
diff --git a/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/0b/0bd05e27-46d6-4de5-b76b-0988638f9231.txt b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/0b/0bd05e27-46d6-4de5-b76b-0988638f9231.txt
new file mode 100644
index 0000000..6be3b40
--- /dev/null
+++ b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/0b/0bd05e27-46d6-4de5-b76b-0988638f9231.txt
@@ -0,0 +1,8 @@
+<parameters xmlns="http://soap.jdispatcher.ebi.ac.uk"><email xmlns="">soiland-reyes@cs.manchester.ac.uk</email><parameters xmlns=""><sequence>>sp|Q9BTV4|TMM43_HUMAN Transmembrane protein 43 OS=Homo sapiens GN=TMEM43 PE=1 SV=1
+MAANYSSTSTRREHVKVKTSSQPGFLERLSETSGGMFVGLMAFLLSFYLIFTNEGRALKT
+ATSLAEGLSLVVSPDSIHSVAPENEGRLVHIIGALRTSKLLSDPNYGVHLPAVKLRRHVE
+MYQWVETEESREYTEDGQVKKETRYSYNTEWRSEIINSKNFDREIGHKNPSAMAVESFMA
+TAPFVQIGRFFLSSGLIDKVDNFKSLSLSKLEDPHVDIIRRGDFFYHSENPKYPEVGDLR
+VSFSYAGLSGDDPDLGPAHVVTVIARQRGDQLVPFSTKSGDTLLLLHHGDFSAEEVFHRE
+LRSNSMKTWGLRAAGWMAMFMGLNLMTRILYTLVDWFPVFRDLVNIGLKAFAFCVATSLT
+LLTVAAGWLFYRPLWALLIAGLALVPILVARTRVPAKKLE</sequence></parameters></parameters>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/c08405cb/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/0c/0c29c209-b442-49c5-bee2-5b5efdacad0e.txt
----------------------------------------------------------------------
diff --git a/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/0c/0c29c209-b442-49c5-bee2-5b5efdacad0e.txt b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/0c/0c29c209-b442-49c5-bee2-5b5efdacad0e.txt
new file mode 100644
index 0000000..463be45
--- /dev/null
+++ b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/0c/0c29c209-b442-49c5-bee2-5b5efdacad0e.txt
@@ -0,0 +1 @@
+<ns2:runResponse xmlns:ns2="http://soap.jdispatcher.ebi.ac.uk"><jobId>iprscan-S20130531-112044-0159-59919420-oy</jobId></ns2:runResponse>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/c08405cb/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/0f/0f93d00f-131b-42ec-bbba-22b50582903e.txt
----------------------------------------------------------------------
diff --git a/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/0f/0f93d00f-131b-42ec-bbba-22b50582903e.txt b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/0f/0f93d00f-131b-42ec-bbba-22b50582903e.txt
new file mode 100644
index 0000000..7da8010
--- /dev/null
+++ b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/0f/0f93d00f-131b-42ec-bbba-22b50582903e.txt
@@ -0,0 +1 @@
+<parameters xmlns="http://soap.jdispatcher.ebi.ac.uk"><jobId xmlns="">iprscan-S20130531-112044-0159-59919420-oy</jobId></parameters>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/c08405cb/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/11/111e5771-37b7-4ef8-9888-e50eadbc2a5c.txt
----------------------------------------------------------------------
diff --git a/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/11/111e5771-37b7-4ef8-9888-e50eadbc2a5c.txt b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/11/111e5771-37b7-4ef8-9888-e50eadbc2a5c.txt
new file mode 100644
index 0000000..efe3c46
--- /dev/null
+++ b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/11/111e5771-37b7-4ef8-9888-e50eadbc2a5c.txt
@@ -0,0 +1 @@
+<ns2:getStatusResponse xmlns:ns2="http://soap.jdispatcher.ebi.ac.uk"><status>RUNNING</status></ns2:getStatusResponse>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/c08405cb/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/13/132a7e6c-1857-4ad6-8252-5f747f6f0feb.txt
----------------------------------------------------------------------
diff --git a/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/13/132a7e6c-1857-4ad6-8252-5f747f6f0feb.txt b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/13/132a7e6c-1857-4ad6-8252-5f747f6f0feb.txt
new file mode 100644
index 0000000..7da8010
--- /dev/null
+++ b/taverna-databundle/src/test/resources/full-example/ebi-wfrun-2013-05-31/intermediates/13/132a7e6c-1857-4ad6-8252-5f747f6f0feb.txt
@@ -0,0 +1 @@
+<parameters xmlns="http://soap.jdispatcher.ebi.ac.uk"><jobId xmlns="">iprscan-S20130531-112044-0159-59919420-oy</jobId></parameters>
\ No newline at end of file