You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ni...@apache.org on 2014/04/17 13:26:42 UTC
svn commit: r1588214 - in /tika/trunk/tika-server/src:
main/java/org/apache/tika/server/TikaMimeTypes.java
test/java/org/apache/tika/server/TikaMimeTypesTest.java
Author: nick
Date: Thu Apr 17 11:26:42 2014
New Revision: 1588214
URL: http://svn.apache.org/r1588214
Log:
TIKA-1270 Move to a common set of logic to decide what to display, so the output type bit just deals with formatting it only, and add a browser friendly html view too
Modified:
tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaMimeTypes.java
tika/trunk/tika-server/src/test/java/org/apache/tika/server/TikaMimeTypesTest.java
Modified: tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaMimeTypes.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaMimeTypes.java?rev=1588214&r1=1588213&r2=1588214&view=diff
==============================================================================
--- tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaMimeTypes.java (original)
+++ tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaMimeTypes.java Thu Apr 17 11:26:42 2014
@@ -16,8 +16,12 @@
*/
package org.apache.tika.server;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import java.util.SortedMap;
+import java.util.TreeMap;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@@ -31,8 +35,7 @@ import org.apache.tika.parser.Parser;
import org.eclipse.jetty.util.ajax.JSON;
/*
- * TODO Reduce duplication between the two methods, by
- * returning structured info that gets encoded two ways
+ * TODO Provide better support for the HTML based outputs
*/
@Path("/mime-types")
public class TikaMimeTypes {
@@ -42,30 +45,68 @@ public class TikaMimeTypes {
}
@GET
+ @Produces("text/html")
+ public String getMimeTypesHTML() {
+ StringBuffer html = new StringBuffer();
+ html.append("<html><head><title>Tika Supported Mime Types</title></head>\n");
+ html.append("<body><h1>Tika Supported Mime Types</h1>\n");
+
+ // Get our types
+ List<MediaTypeDetails> types = getMediaTypes();
+
+ // Get the first type in each section
+ SortedMap<String,String> firstType = new TreeMap<String, String>();
+ for (MediaTypeDetails type : types) {
+ if (! firstType.containsKey(type.type.getType())) {
+ firstType.put(type.type.getType(), type.type.toString());
+ }
+ }
+ html.append("<ul>");
+ for (String section : firstType.keySet()) {
+ html.append("<li><a href=\"#" + firstType.get(section) + "\">" +
+ section + "</a></li>\n");
+ }
+ html.append("</ul>");
+
+ // Output all of them
+ for (MediaTypeDetails type : types) {
+ html.append("<a name=\"" + type.type + "\"></a>\n");
+ html.append("<h2>" + type.type + "</h2>\n");
+
+ for (MediaType alias : type.aliases) {
+ html.append("<div>Alias: " + alias + "</div>\n");
+ }
+ if (type.supertype != null) {
+ html.append("<div>Super Type: <a href=\"#" + type.supertype +
+ "\">" + type.supertype + "</a></div>\n");
+ }
+
+ if (type.parser != null) {
+ html.append("<div>Parser: " + type.parser + "</div>\n");
+ }
+ }
+
+ html.append("</body></html>\n");
+ return html.toString();
+ }
+
+ @GET
@Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)
public String getMimeTypesJSON() {
Map<String,Object> details = new HashMap<String, Object>();
- MediaTypeRegistry registry = tika.getMediaTypeRegistry();
- Map<MediaType, Parser> parsers = ((CompositeParser)tika.getParser()).getParsers();
-
- for (MediaType type : registry.getTypes()) {
+ for (MediaTypeDetails type : getMediaTypes()) {
Map<String,Object> typeDets = new HashMap<String, Object>();
- typeDets.put("alias", registry.getAliases(type));
- MediaType supertype = registry.getSupertype(type);
- if (supertype != null && !MediaType.OCTET_STREAM.equals(supertype)) {
- typeDets.put("supertype", supertype);
+ typeDets.put("alias", type.aliases);
+ if (type.supertype != null) {
+ typeDets.put("supertype", type.supertype);
}
- Parser p = parsers.get(type);
- if (p != null) {
- if (p instanceof CompositeParser) {
- p = ((CompositeParser)p).getParsers().get(type);
- }
- typeDets.put("parser", p.getClass().getName());
+ if (type.parser != null) {
+ typeDets.put("parser", type.parser);
}
- details.put(type.toString(), typeDets);
+ details.put(type.type.toString(), typeDets);
}
return JSON.toString(details);
@@ -76,21 +117,39 @@ public class TikaMimeTypes {
public String getMimeTypesPlain() {
StringBuffer text = new StringBuffer();
+ for (MediaTypeDetails type : getMediaTypes()) {
+ text.append(type.type.toString());
+ text.append("\n");
+
+ for (MediaType alias : type.aliases) {
+ text.append(" alias: " + alias + "\n");
+ }
+ if (type.supertype != null) {
+ text.append(" supertype: " + type.supertype.toString() + "\n");
+ }
+
+ if (type.parser != null) {
+ text.append(" parser: " + type.parser + "\n");
+ }
+ }
+
+ return text.toString();
+ }
+
+ protected List<MediaTypeDetails> getMediaTypes() {
MediaTypeRegistry registry = tika.getMediaTypeRegistry();
Map<MediaType, Parser> parsers = ((CompositeParser)tika.getParser()).getParsers();
+ List<MediaTypeDetails> types =
+ new ArrayList<TikaMimeTypes.MediaTypeDetails>(registry.getTypes().size());
for (MediaType type : registry.getTypes()) {
- text.append(type);
- text.append("\n");
+ MediaTypeDetails details = new MediaTypeDetails();
+ details.type = type;
+ details.aliases = registry.getAliases(type).toArray(new MediaType[0]);
- for (MediaType alias : registry.getAliases(type)) {
- text.append(" alias: " + alias);
- text.append("\n");
- }
MediaType supertype = registry.getSupertype(type);
if (supertype != null && !MediaType.OCTET_STREAM.equals(supertype)) {
- text.append(" supertype: " + supertype);
- text.append("\n");
+ details.supertype = supertype;
}
Parser p = parsers.get(type);
@@ -98,11 +157,19 @@ public class TikaMimeTypes {
if (p instanceof CompositeParser) {
p = ((CompositeParser)p).getParsers().get(type);
}
- text.append(" parser: " + p.getClass().getName());
- text.append("\n");
+ details.parser = p.getClass().getName();
}
+
+ types.add(details);
}
-
- return text.toString();
+
+ return types;
+ }
+
+ private static class MediaTypeDetails {
+ private MediaType type;
+ private MediaType[] aliases;
+ private MediaType supertype;
+ private String parser;
}
}
Modified: tika/trunk/tika-server/src/test/java/org/apache/tika/server/TikaMimeTypesTest.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-server/src/test/java/org/apache/tika/server/TikaMimeTypesTest.java?rev=1588214&r1=1588213&r2=1588214&view=diff
==============================================================================
--- tika/trunk/tika-server/src/test/java/org/apache/tika/server/TikaMimeTypesTest.java (original)
+++ tika/trunk/tika-server/src/test/java/org/apache/tika/server/TikaMimeTypesTest.java Thu Apr 17 11:26:42 2014
@@ -64,6 +64,27 @@ public class TikaMimeTypesTest extends C
}
@Test
+ public void testGetHTML() throws Exception {
+ Response response = WebClient
+ .create(endPoint + MIMETYPES_PATH)
+ .type("text/html")
+ .accept("text/html")
+ .get();
+
+ String text = getStringFromInputStream((InputStream) response.getEntity());
+ assertContains("text/plain", text);
+ assertContains("application/xml", text);
+ assertContains("video/x-ogm", text);
+
+ assertContains("<h2>text/plain", text);
+ assertContains("name=\"text/plain", text);
+
+ assertContains("Super Type: <a href=\"#video/ogg\">video/ogg", text);
+
+ assertContains("Alias: image/bmp", text);
+ }
+
+ @Test
@SuppressWarnings("unchecked")
public void testGetJSON() throws Exception {
Response response = WebClient