Added MediaTypeDetector interface
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/1ff3b51d Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/tree/1ff3b51d Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/diff/1ff3b51d Branch: refs/heads/master Commit: 1ff3b51d2cc4a9f29951207c63eadd3ba28524d0 Parents: f3a2ba9 Author: Stian Soiland-Reyes <[email protected]> Authored: Fri Aug 19 12:29:13 2016 +0100 Committer: Stian Soiland-Reyes <[email protected]> Committed: Fri Oct 21 09:17:18 2016 +0200 ---------------------------------------------------------------------- .../taverna/renderers/MediaTypeDetector.java | 102 +++++++++++++++++++ .../taverna/renderers/RendererRegistry.java | 12 +++ .../renderers/impl/MediaTypeDetectorImpl.java | 58 +++++++++++ .../renderers/impl/RendererRegistryImpl.java | 7 ++ 4 files changed, 179 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/1ff3b51d/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 new file mode 100644 index 0000000..585d351 --- /dev/null +++ b/taverna-renderers-api/src/main/java/org/apache/taverna/renderers/MediaTypeDetector.java @@ -0,0 +1,102 @@ +/* + * 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 java.io.IOException; +import java.net.URI; +import java.nio.file.Path; +import java.util.List; + +public interface MediaTypeDetector { + + /** + * Guess the media types of a given {@link Path}. + * <p> + * The media types in the list are ordered by decreasing likelyhood, e.g. + * the first item in the list is the most likely (in many cases most + * specific) media type. + * <p> + * 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. The file extension of the path + * MAY be taken into consideration. + * @return A list of guessed media types + * @throws IOException If the path can't be accessed (e.g. lacking file permissions) + */ + public List<String> guessMediaTypes(Path path) throws IOException ; + + /** + * Guess the media types of a given {@link String}. + * <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 + * specific) media type. + * <p> + * 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. + * @return A list of guessed media types + */ + public List<String> guessMediaTypes(String string); + + /** + * Guess the media types of a given {@link Path}. + * <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 + * specific) media type. + * <p> + * 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. + * @return A list of guessed media types + */ + public List<String> guessMediaTypes(byte[] bytes); + + /** + * Guess the media types of a given {@link URI}. + * <p> + * The detector MAY try to retrieve the given URI, e.g. issuing a + * HTTP <code>HEAD</code> request. + * <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 + * specific) media type. + * <p> + * 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 + * 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) + */ + public List<String> guessMediaTypes(URI uri) throws IOException; + + +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/1ff3b51d/taverna-renderers-api/src/main/java/org/apache/taverna/renderers/RendererRegistry.java ---------------------------------------------------------------------- diff --git a/taverna-renderers-api/src/main/java/org/apache/taverna/renderers/RendererRegistry.java b/taverna-renderers-api/src/main/java/org/apache/taverna/renderers/RendererRegistry.java index a63a06a..1dec5df 100644 --- a/taverna-renderers-api/src/main/java/org/apache/taverna/renderers/RendererRegistry.java +++ b/taverna-renderers-api/src/main/java/org/apache/taverna/renderers/RendererRegistry.java @@ -43,4 +43,16 @@ public interface RendererRegistry { * @return all the renderers */ List<Renderer> getRenderers(); + + /** + * Return a mime type detector. + * <p> + * The detector can help guess the mime type of a given binary or String. + * <p> + * Note that the detector might also detect media types that do not have + * a corresponding renderer in {@link #getRenderersForMimeType(String)}. + * + * @return A mime type detector + */ + MediaTypeDetector getMimeTypeDetector(); } http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/1ff3b51d/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 new file mode 100644 index 0000000..c8b6fb7 --- /dev/null +++ b/taverna-renderers-impl/src/main/java/org/apache/taverna/renderers/impl/MediaTypeDetectorImpl.java @@ -0,0 +1,58 @@ +/* + * 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.impl; + +import java.io.IOException; +import java.net.URI; +import java.nio.file.Path; +import java.util.List; + +import org.apache.taverna.renderers.MediaTypeDetector; + +/** + * Media Type detector that uses Apache Tika + * + */ +public class MediaTypeDetectorImpl implements MediaTypeDetector { + + @Override + public List<String> guessMediaTypes(Path path) throws IOException { + // TODO Auto-generated method stub + return null; + } + + @Override + public List<String> guessMediaTypes(String string) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List<String> guessMediaTypes(byte[] bytes) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List<String> guessMediaTypes(URI uri) throws IOException { + // TODO Auto-generated method stub + return null; + } + +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/1ff3b51d/taverna-renderers-impl/src/main/java/org/apache/taverna/renderers/impl/RendererRegistryImpl.java ---------------------------------------------------------------------- diff --git a/taverna-renderers-impl/src/main/java/org/apache/taverna/renderers/impl/RendererRegistryImpl.java b/taverna-renderers-impl/src/main/java/org/apache/taverna/renderers/impl/RendererRegistryImpl.java index d83a7bb..8de768e 100644 --- a/taverna-renderers-impl/src/main/java/org/apache/taverna/renderers/impl/RendererRegistryImpl.java +++ b/taverna-renderers-impl/src/main/java/org/apache/taverna/renderers/impl/RendererRegistryImpl.java @@ -21,6 +21,7 @@ package org.apache.taverna.renderers.impl; import java.util.ArrayList; import java.util.List; +import org.apache.taverna.renderers.MediaTypeDetector; import org.apache.taverna.renderers.Renderer; import org.apache.taverna.renderers.RendererRegistry; @@ -49,4 +50,10 @@ public class RendererRegistryImpl implements RendererRegistry { public void setRenderers(List<Renderer> renderers) { this.renderers = renderers; } + + @Override + public MediaTypeDetector getMimeTypeDetector() { + // TODO: Should the below have any configuration loaded? + return new MediaTypeDetectorImpl(); + } }
