Depend on Tika for media type detection Unit tests are added for a couple of common formats. See src/test/resources/README.txt for details, these are all created by me, but on purpose don't have the ASF license header.
Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/commit/646e24ca Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/tree/646e24ca Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/diff/646e24ca Branch: refs/heads/master Commit: 646e24ca8f69db399113c6b751e8aaf2f0948cf2 Parents: d3efff9 Author: Stian Soiland-Reyes <[email protected]> Authored: Fri Aug 19 12:30:32 2016 +0100 Committer: Stian Soiland-Reyes <[email protected]> Committed: Fri Oct 21 09:17:18 2016 +0200 ---------------------------------------------------------------------- .../taverna/renderers/MediaTypeDetector.java | 50 ++++-- taverna-renderers-impl/pom.xml | 6 + .../renderers/impl/MediaTypeDetectorImpl.java | 63 +++++++- .../renderers/TestMediaTypeDetector.java | 159 +++++++++++++++++++ .../src/test/resources/README.txt | 21 +++ .../src/test/resources/test.csv | 3 + .../src/test/resources/test.docx | Bin 0 -> 4069 bytes .../src/test/resources/test.html | 9 ++ .../src/test/resources/test.jpeg | Bin 0 -> 3646 bytes .../src/test/resources/test.ods | Bin 0 -> 7597 bytes .../src/test/resources/test.odt | Bin 0 -> 8291 bytes .../src/test/resources/test.pdf | Bin 0 -> 9752 bytes .../src/test/resources/test.png | Bin 0 -> 2310 bytes .../src/test/resources/test.svg | 117 ++++++++++++++ .../src/test/resources/test.txt | 3 + .../src/test/resources/test.xlsx | Bin 0 -> 4826 bytes .../src/test/resources/test.xml | 4 + .../src/test/resources/test.zip | Bin 0 -> 1287 bytes 18 files changed, 417 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/646e24ca/taverna-renderers-api/src/main/java/org/apache/taverna/renderers/MediaTypeDetector.java ---------------------------------------------------------------------- diff --git a/taverna-renderers-api/src/main/java/org/apache/taverna/renderers/MediaTypeDetector.java b/taverna-renderers-api/src/main/java/org/apache/taverna/renderers/MediaTypeDetector.java index 585d351..db3c100 100644 --- a/taverna-renderers-api/src/main/java/org/apache/taverna/renderers/MediaTypeDetector.java +++ b/taverna-renderers-api/src/main/java/org/apache/taverna/renderers/MediaTypeDetector.java @@ -21,6 +21,7 @@ package org.apache.taverna.renderers; import java.io.IOException; import java.net.URI; import java.nio.file.Path; +import java.util.Collections; import java.util.List; public interface MediaTypeDetector { @@ -44,7 +45,7 @@ public interface MediaTypeDetector { public List<String> guessMediaTypes(Path path) throws IOException ; /** - * Guess the media types of a given {@link String}. + * Guess the media types of a given {@link String} value. * <p> * The media types in the list are ordered by decreasing likelihood, e.g. * the first item in the list is the most likely (in many cases most @@ -53,15 +54,15 @@ public interface MediaTypeDetector { * The returned list will never be empty, as it will always contain either * <code>text/plain</code>. * - * @param path - * A {@link Path} to be guessed. The file extension of the path - * MAY be taken into consideration. + * @param String + * A string to check, e.g. an XML document. Note that only the first + * few lines of the string to test is required. * @return A list of guessed media types */ public List<String> guessMediaTypes(String string); /** - * Guess the media types of a given {@link Path}. + * Guess the media types of a given byte array. * <p> * The media types in the list are ordered by decreasing likelihood, e.g. * the first item in the list is the most likely (in many cases most @@ -70,9 +71,9 @@ public interface MediaTypeDetector { * The returned list will never be empty, as it will always contain * <code>application/octet-stream</code> * - * @param path - * A {@link Path} to be guessed. The file extension of the path - * MAY be taken into consideration. + * @param bytes + * Bytes to check. Note that only the "first bits" of the + * resource is required, e.g. the initial 8192 bytes. * @return A list of guessed media types */ public List<String> guessMediaTypes(byte[] bytes); @@ -90,8 +91,8 @@ public interface MediaTypeDetector { * The returned list will never be empty, as it will always contain either * <code>text/plain</code> or <code>application/octet-stream</code> * - * @param path - * A {@link Path} to be guessed. Any file extension of the URL + * @param uri + * A {@link URI} to be guessed. Any file extension of the URL * MAY be taken into consideration. * @return A list of guessed media types * @throws IOException If the URL can't be accessed (e.g. a network issue) @@ -99,4 +100,33 @@ public interface MediaTypeDetector { public List<String> guessMediaTypes(URI uri) throws IOException; + /** + * Dummy MediaTypeDetector implementation + * <p> + * This can be used for test purposes which don't want to use + * MediaTypeDetectorImpl. + * <p> + * This class always return "application/octet-stream" as the media type. + * + */ + public static class Dummy implements MediaTypeDetector { + private static List<String> BINARY = Collections.singletonList("application/octet-stream"); + @Override + public List<String> guessMediaTypes(Path path) throws IOException { + return BINARY; + } + @Override + public List<String> guessMediaTypes(String string) { + return BINARY; + } + @Override + public List<String> guessMediaTypes(byte[] bytes) { + return BINARY; + } + @Override + public List<String> guessMediaTypes(URI uri) throws IOException { + return BINARY; + } + } + } http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/646e24ca/taverna-renderers-impl/pom.xml ---------------------------------------------------------------------- diff --git a/taverna-renderers-impl/pom.xml b/taverna-renderers-impl/pom.xml index 059e141..49a9333 100644 --- a/taverna-renderers-impl/pom.xml +++ b/taverna-renderers-impl/pom.xml @@ -72,6 +72,12 @@ <artifactId>com.springsource.org.jdom</artifactId> <version>${jdom.version}</version> </dependency> + <dependency> + <groupId>org.apache.tika</groupId> + <artifactId>tika-core</artifactId> + <version>1.13</version> + </dependency> + </dependencies> </project> http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/646e24ca/taverna-renderers-impl/src/main/java/org/apache/taverna/renderers/impl/MediaTypeDetectorImpl.java ---------------------------------------------------------------------- diff --git a/taverna-renderers-impl/src/main/java/org/apache/taverna/renderers/impl/MediaTypeDetectorImpl.java b/taverna-renderers-impl/src/main/java/org/apache/taverna/renderers/impl/MediaTypeDetectorImpl.java index c8b6fb7..f5cc70c 100644 --- a/taverna-renderers-impl/src/main/java/org/apache/taverna/renderers/impl/MediaTypeDetectorImpl.java +++ b/taverna-renderers-impl/src/main/java/org/apache/taverna/renderers/impl/MediaTypeDetectorImpl.java @@ -20,10 +20,13 @@ package org.apache.taverna.renderers.impl; import java.io.IOException; import java.net.URI; +import java.nio.charset.StandardCharsets; import java.nio.file.Path; +import java.util.ArrayList; import java.util.List; import org.apache.taverna.renderers.MediaTypeDetector; +import org.apache.tika.Tika; /** * Media Type detector that uses Apache Tika @@ -31,28 +34,72 @@ import org.apache.taverna.renderers.MediaTypeDetector; */ public class MediaTypeDetectorImpl implements MediaTypeDetector { + Tika tika = new Tika(); + String BINARY = "application/octet-stream"; + String TEXT_PLAIN = "text/plain"; + @Override public List<String> guessMediaTypes(Path path) throws IOException { - // TODO Auto-generated method stub - return null; + List<String> mediaTypes = new ArrayList<>(); + String detected = tika.detect(path); + if (detected != null) { + // Note: Tika does not return null, but its javadoc does not + // make such a promise + mediaTypes.add(detected); + } + if (! mediaTypes.contains(BINARY) && ! mediaTypes.contains(TEXT_PLAIN)) { + // This fallback will also make sure we never return an empty list + mediaTypes.add(BINARY); + } + return mediaTypes; } @Override public List<String> guessMediaTypes(String string) { - // TODO Auto-generated method stub - return null; + List<String> mediaTypes = new ArrayList<>(); + // We'll assume that as a String it can be detected from UTF_8 bytes, + // which makes sense for XML, JSON, SVG, etc + String mediaType = tika.detect(string.getBytes(StandardCharsets.UTF_8)); + if (mediaType != null) { + mediaTypes.add(mediaType); + } + + if (! mediaTypes.contains(BINARY) && ! mediaTypes.contains(TEXT_PLAIN)) { + mediaTypes.add(TEXT_PLAIN); + } + return mediaTypes; } @Override public List<String> guessMediaTypes(byte[] bytes) { - // TODO Auto-generated method stub - return null; + List<String> mediaTypes = new ArrayList<>(); + String detected = tika.detect(bytes); + if (detected != null) { + // Note: Tika does not return null, but its javadoc does not + // make such a promise + mediaTypes.add(detected); + } + if (! mediaTypes.contains(BINARY) && ! mediaTypes.contains(TEXT_PLAIN)) { + // This fallback will also make sure we never return an empty list + mediaTypes.add(BINARY); + } + return mediaTypes; } @Override public List<String> guessMediaTypes(URI uri) throws IOException { - // TODO Auto-generated method stub - return null; + List<String> mediaTypes = new ArrayList<>(); + String detected = tika.detect(uri.toURL()); + if (detected != null) { + // Note: Tika does not return null, but its javadoc does not + // make such a promise + mediaTypes.add(detected); + } + if (! mediaTypes.contains(BINARY) && ! mediaTypes.contains(TEXT_PLAIN)) { + // This fallback will also make sure we never return an empty list + mediaTypes.add(BINARY); + } + return mediaTypes; } } http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/646e24ca/taverna-renderers-impl/src/test/java/org/apache/taverna/renderers/TestMediaTypeDetector.java ---------------------------------------------------------------------- diff --git a/taverna-renderers-impl/src/test/java/org/apache/taverna/renderers/TestMediaTypeDetector.java b/taverna-renderers-impl/src/test/java/org/apache/taverna/renderers/TestMediaTypeDetector.java new file mode 100644 index 0000000..d5ad73b --- /dev/null +++ b/taverna-renderers-impl/src/test/java/org/apache/taverna/renderers/TestMediaTypeDetector.java @@ -0,0 +1,159 @@ +/* + * 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. + */ +package org.apache.taverna.renderers; + +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import org.apache.taverna.renderers.impl.MediaTypeDetectorImpl; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assume; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameter; +import org.junit.runners.Parameterized.Parameters; + +@RunWith(Parameterized.class) +public class TestMediaTypeDetector { + + public MediaTypeDetector detector = new MediaTypeDetectorImpl(); + + @Parameters(name = "{0}") + public static List<Object[]> expectedMediaTypes() { + // extension -> mediaType + // Each test is represented as "test.$extension" from src/test/resources + return Arrays.asList(new Object[][] { + // TODO: Re-enable ALL of the below and fix in Tika configuration + // (or upstream) - some of these fail in guessByAnonymousPath + // when they can't check the file extension + + // mis-matched as text/plain + //{ "csv", "text/csv" }, + // mis-matched as application/zip + //{ "docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document" }, + { "html", "text/html" }, + { "jpeg", "image/jpeg" }, + { "ods", "application/vnd.oasis.opendocument.spreadsheet" }, + { "odt", "application/vnd.oasis.opendocument.text" }, + { "pdf", "application/pdf" }, + { "png", "image/png" }, + // { "svg", "image/svg+xml" }, // Mis-matched as application/xml + { "txt", "text/plain" }, + // Mis-matched as application/zip + // { "xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" }, + { "xml", "application/xml" }, + { "zip", "application/zip" } + }); + } + + @Parameter(0) + public String extension; + + @Parameter(1) + public String expectedMediaType; + + private Path path; + + private Path anonymousPath; + + @Before + public void writePaths() throws IOException { + path = Files.createTempFile("test", "." + extension); + try (InputStream in = getClass().getResourceAsStream("/test." + extension)) { + Files.copy(in, path, StandardCopyOption.REPLACE_EXISTING); + } + anonymousPath = Files.createTempFile("test", ""); + Files.copy(path, anonymousPath, StandardCopyOption.REPLACE_EXISTING); + } + + @After + public void deletePaths() throws IOException { + Files.deleteIfExists(path); + Files.deleteIfExists(anonymousPath); + } + + @Test + public void guessByPath() throws Exception { + List<String> guess = detector.guessMediaTypes(path); + assertEquals(expectedMediaType, guess.get(0)); + } + + + @Test + public void guessByAnonymousPath() throws Exception { + List<String> guess = detector.guessMediaTypes(anonymousPath); + assertEquals(expectedMediaType, guess.get(0)); + } + + + @Test + public void guessByUrl() throws Exception { + List<String> guess = detector.guessMediaTypes(path.toUri()); + assertEquals(expectedMediaType, guess.get(0)); + } + + @Test + public void guessByAnonymousUrl() throws Exception { + List<String> guess = detector.guessMediaTypes(anonymousPath.toUri()); + assertEquals(expectedMediaType, guess.get(0)); + } + + @Test + public void guessByBytes() throws Exception { + // Our test-resources are deliberately small, so this won't + // consume too much memory. Normal use of the MediaTypeDetector + // would be to only read the first kilobytes of a file. + byte[] bytes = Files.readAllBytes(path); + List<String> guess = detector.guessMediaTypes(bytes); + assertEquals(expectedMediaType, guess.get(0)); + } + + @Test + public void guessByString() { + List<String> strings; + try { + strings = Files.readAllLines(path, StandardCharsets.UTF_8); + } catch (IOException e) { + Assume.assumeNoException(e); + return; + } + // NOTE: The below will join \r\n to \n + // We assume that any binary formats like PNG failed the above test, + // and that the remaining text-based formats support both kinds of newlines + String joined = strings.stream().limit(5). // first 5 lines + collect(Collectors.joining("\n")); + List<String> guess = detector.guessMediaTypes(joined); + assertEquals(expectedMediaType, guess.get(0)); + } + + +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/646e24ca/taverna-renderers-impl/src/test/resources/README.txt ---------------------------------------------------------------------- diff --git a/taverna-renderers-impl/src/test/resources/README.txt b/taverna-renderers-impl/src/test/resources/README.txt new file mode 100644 index 0000000..ff780ee --- /dev/null +++ b/taverna-renderers-impl/src/test/resources/README.txt @@ -0,0 +1,21 @@ + 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. + +Note that the test.* resources have all been created specifically for +Apache Taverna (incubating), and the above Apache License text applies. + +Note that for simplicity and to to avoid confusing the +underlying media type detector, the above file header should NOT be +added to these test files, even where possible. \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/646e24ca/taverna-renderers-impl/src/test/resources/test.csv ---------------------------------------------------------------------- diff --git a/taverna-renderers-impl/src/test/resources/test.csv b/taverna-renderers-impl/src/test/resources/test.csv new file mode 100644 index 0000000..a1bfca8 --- /dev/null +++ b/taverna-renderers-impl/src/test/resources/test.csv @@ -0,0 +1,3 @@ +"Column A","Column B","Column C" +"Hello","There","World" +"Extra","Row","Just in case" http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/646e24ca/taverna-renderers-impl/src/test/resources/test.docx ---------------------------------------------------------------------- diff --git a/taverna-renderers-impl/src/test/resources/test.docx b/taverna-renderers-impl/src/test/resources/test.docx new file mode 100644 index 0000000..8e5c1a6 Binary files /dev/null and b/taverna-renderers-impl/src/test/resources/test.docx differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/646e24ca/taverna-renderers-impl/src/test/resources/test.html ---------------------------------------------------------------------- diff --git a/taverna-renderers-impl/src/test/resources/test.html b/taverna-renderers-impl/src/test/resources/test.html new file mode 100644 index 0000000..ae0643c --- /dev/null +++ b/taverna-renderers-impl/src/test/resources/test.html @@ -0,0 +1,9 @@ +<!DOCTYPE html> +<html> + <head> + <title>The title</title> + </head> + <body> + <h1>Hello there!</h1> + </body> +</html> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/646e24ca/taverna-renderers-impl/src/test/resources/test.jpeg ---------------------------------------------------------------------- diff --git a/taverna-renderers-impl/src/test/resources/test.jpeg b/taverna-renderers-impl/src/test/resources/test.jpeg new file mode 100644 index 0000000..99aaa6f Binary files /dev/null and b/taverna-renderers-impl/src/test/resources/test.jpeg differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/646e24ca/taverna-renderers-impl/src/test/resources/test.ods ---------------------------------------------------------------------- diff --git a/taverna-renderers-impl/src/test/resources/test.ods b/taverna-renderers-impl/src/test/resources/test.ods new file mode 100644 index 0000000..33d9a7d Binary files /dev/null and b/taverna-renderers-impl/src/test/resources/test.ods differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/646e24ca/taverna-renderers-impl/src/test/resources/test.odt ---------------------------------------------------------------------- diff --git a/taverna-renderers-impl/src/test/resources/test.odt b/taverna-renderers-impl/src/test/resources/test.odt new file mode 100644 index 0000000..80785ce Binary files /dev/null and b/taverna-renderers-impl/src/test/resources/test.odt differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/646e24ca/taverna-renderers-impl/src/test/resources/test.pdf ---------------------------------------------------------------------- diff --git a/taverna-renderers-impl/src/test/resources/test.pdf b/taverna-renderers-impl/src/test/resources/test.pdf new file mode 100644 index 0000000..915d3f7 Binary files /dev/null and b/taverna-renderers-impl/src/test/resources/test.pdf differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/646e24ca/taverna-renderers-impl/src/test/resources/test.png ---------------------------------------------------------------------- diff --git a/taverna-renderers-impl/src/test/resources/test.png b/taverna-renderers-impl/src/test/resources/test.png new file mode 100644 index 0000000..6081152 Binary files /dev/null and b/taverna-renderers-impl/src/test/resources/test.png differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/646e24ca/taverna-renderers-impl/src/test/resources/test.svg ---------------------------------------------------------------------- diff --git a/taverna-renderers-impl/src/test/resources/test.svg b/taverna-renderers-impl/src/test/resources/test.svg new file mode 100644 index 0000000..9c61125 --- /dev/null +++ b/taverna-renderers-impl/src/test/resources/test.svg @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" + "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> +<svg width="596" height="843"> + <image id="image0" width="596" height="843" x="0" y="0" + xlink:href="data:image/png;base64,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 +J1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5Q +AXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXk +CRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdU +QJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5 +QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkV +kCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECe +UAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF +5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAn +VECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlAB +eUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJ +FZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RA +nlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlC +BeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQ +J1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5Q +AXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXk +CRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdU +QJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5 +QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkV +kCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECe +UAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF +5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAn +VECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlAB +eUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJ +FZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RA +nlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlC +BeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQ +J1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5Q +AXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXk +CRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdU +QJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5 +QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkV +kCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECe +UAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF +5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAn +VECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlAB +eUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJ +FZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RA +nlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlC +BeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQ +J1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5Q +AXlCBeQJFZAnVECeUAF5QgXkCRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeQJFZAnVECeUAF5QgXk +CRWQJ1RAnlABeUIF5AkVkCdUQJ5QAXlCBeT99oJ9P//sDw/8f9hZfvYnAHiCSz8gT6iAPKEC8oQK +yBMqIE+ogDyhAvKECsgTKiBPqIA8oQLyhArIEyogT6iAPKEC8oQKyBMqIE+ogDyhAvKECsgTKiBP +qIA8oQLyhArIEyogT6iAPKEC8oQKyPsvMe3mGp+1f7MAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYt +MDgtMTlUMTM6MDU6MDErMDE6MDCD0/d6AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA4LTE5VDEz +OjA1OjAxKzAxOjAw8o5PxgAAACB0RVh0cGRmOkhpUmVzQm91bmRpbmdCb3gANTk2eDg0MyswKzA/ +8kApAAAAFHRFWHRwZGY6VmVyc2lvbgBQREYtMS40IBxHOngAAAAASUVORK5CYII=" /> +</svg> http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/646e24ca/taverna-renderers-impl/src/test/resources/test.txt ---------------------------------------------------------------------- diff --git a/taverna-renderers-impl/src/test/resources/test.txt b/taverna-renderers-impl/src/test/resources/test.txt new file mode 100644 index 0000000..75a3747 --- /dev/null +++ b/taverna-renderers-impl/src/test/resources/test.txt @@ -0,0 +1,3 @@ +Hello there + +This is a text file \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/646e24ca/taverna-renderers-impl/src/test/resources/test.xlsx ---------------------------------------------------------------------- diff --git a/taverna-renderers-impl/src/test/resources/test.xlsx b/taverna-renderers-impl/src/test/resources/test.xlsx new file mode 100644 index 0000000..6fbc965 Binary files /dev/null and b/taverna-renderers-impl/src/test/resources/test.xlsx differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/646e24ca/taverna-renderers-impl/src/test/resources/test.xml ---------------------------------------------------------------------- diff --git a/taverna-renderers-impl/src/test/resources/test.xml b/taverna-renderers-impl/src/test/resources/test.xml new file mode 100644 index 0000000..f8a8e0b --- /dev/null +++ b/taverna-renderers-impl/src/test/resources/test.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<test> + <hello to="world" /> +</test> http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/646e24ca/taverna-renderers-impl/src/test/resources/test.zip ---------------------------------------------------------------------- diff --git a/taverna-renderers-impl/src/test/resources/test.zip b/taverna-renderers-impl/src/test/resources/test.zip new file mode 100644 index 0000000..31a659e Binary files /dev/null and b/taverna-renderers-impl/src/test/resources/test.zip differ
