Author: tallison Date: Fri Feb 20 19:29:42 2015 New Revision: 1661200 URL: http://svn.apache.org/r1661200 Log: TIKA-1556 clean up whitespace in tika-server
Modified: tika/trunk/tika-server/src/main/java/org/apache/tika/server/CSVMessageBodyWriter.java tika/trunk/tika-server/src/main/java/org/apache/tika/server/DetectorResource.java tika/trunk/tika-server/src/main/java/org/apache/tika/server/HTMLHelper.java tika/trunk/tika-server/src/main/java/org/apache/tika/server/JSONMessageBodyWriter.java tika/trunk/tika-server/src/main/java/org/apache/tika/server/MetadataListMessageBodyWriter.java tika/trunk/tika-server/src/main/java/org/apache/tika/server/MetadataResource.java tika/trunk/tika-server/src/main/java/org/apache/tika/server/RecursiveMetadataResource.java tika/trunk/tika-server/src/main/java/org/apache/tika/server/RichTextContentHandler.java tika/trunk/tika-server/src/main/java/org/apache/tika/server/TarWriter.java tika/trunk/tika-server/src/main/java/org/apache/tika/server/TextMessageBodyWriter.java tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaDetectors.java tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaLoggingFilter.java tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaMimeTypes.java tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaParsers.java tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaResource.java tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaServerCli.java tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaServerParseExceptionMapper.java tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaVersion.java tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaWelcome.java tika/trunk/tika-server/src/main/java/org/apache/tika/server/UnpackerResource.java tika/trunk/tika-server/src/main/java/org/apache/tika/server/XMPMessageBodyWriter.java tika/trunk/tika-server/src/main/java/org/apache/tika/server/ZipWriter.java tika/trunk/tika-server/src/test/java/org/apache/tika/server/CXFTestBase.java tika/trunk/tika-server/src/test/java/org/apache/tika/server/DetectorResourceTest.java tika/trunk/tika-server/src/test/java/org/apache/tika/server/MetadataResourceTest.java tika/trunk/tika-server/src/test/java/org/apache/tika/server/RecursiveMetadataResourceTest.java tika/trunk/tika-server/src/test/java/org/apache/tika/server/StackTraceOffTest.java tika/trunk/tika-server/src/test/java/org/apache/tika/server/StackTraceTest.java tika/trunk/tika-server/src/test/java/org/apache/tika/server/TikaDetectorsTest.java tika/trunk/tika-server/src/test/java/org/apache/tika/server/TikaMimeTypesTest.java tika/trunk/tika-server/src/test/java/org/apache/tika/server/TikaParsersTest.java tika/trunk/tika-server/src/test/java/org/apache/tika/server/TikaResourceTest.java tika/trunk/tika-server/src/test/java/org/apache/tika/server/TikaVersionTest.java tika/trunk/tika-server/src/test/java/org/apache/tika/server/TikaWelcomeTest.java tika/trunk/tika-server/src/test/java/org/apache/tika/server/UnpackerResourceTest.java Modified: tika/trunk/tika-server/src/main/java/org/apache/tika/server/CSVMessageBodyWriter.java URL: http://svn.apache.org/viewvc/tika/trunk/tika-server/src/main/java/org/apache/tika/server/CSVMessageBodyWriter.java?rev=1661200&r1=1661199&r2=1661200&view=diff ============================================================================== --- tika/trunk/tika-server/src/main/java/org/apache/tika/server/CSVMessageBodyWriter.java (original) +++ tika/trunk/tika-server/src/main/java/org/apache/tika/server/CSVMessageBodyWriter.java Fri Feb 20 19:29:42 2015 @@ -37,34 +37,34 @@ import org.apache.tika.io.IOUtils; import org.apache.tika.metadata.Metadata; @Provider -@Produces("text/csv") -public class CSVMessageBodyWriter implements MessageBodyWriter<Metadata> { - - public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { - return Metadata.class.isAssignableFrom(type); - } - - public long getSize(Metadata data, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { - return -1; - } - - @Override - @SuppressWarnings("resource") - public void writeTo(Metadata metadata, Class<?> type, Type genericType, Annotation[] annotations, - MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, - WebApplicationException { - - CSVWriter writer = new CSVWriter(new OutputStreamWriter(entityStream, IOUtils.UTF_8)); - - for (String name : metadata.names()) { - String[] values = metadata.getValues(name); - ArrayList<String> list = new ArrayList<String>(values.length + 1); - list.add(name); - list.addAll(Arrays.asList(values)); - writer.writeNext(list.toArray(values)); - } - - // Don't close, just flush the stream - writer.flush(); - } -} +@Produces("text/csv") +public class CSVMessageBodyWriter implements MessageBodyWriter<Metadata> { + + public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { + return Metadata.class.isAssignableFrom(type); + } + + public long getSize(Metadata data, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { + return -1; + } + + @Override + @SuppressWarnings("resource") + public void writeTo(Metadata metadata, Class<?> type, Type genericType, Annotation[] annotations, + MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, + WebApplicationException { + + CSVWriter writer = new CSVWriter(new OutputStreamWriter(entityStream, IOUtils.UTF_8)); + + for (String name : metadata.names()) { + String[] values = metadata.getValues(name); + ArrayList<String> list = new ArrayList<String>(values.length + 1); + list.add(name); + list.addAll(Arrays.asList(values)); + writer.writeNext(list.toArray(values)); + } + + // Don't close, just flush the stream + writer.flush(); + } +} Modified: tika/trunk/tika-server/src/main/java/org/apache/tika/server/DetectorResource.java URL: http://svn.apache.org/viewvc/tika/trunk/tika-server/src/main/java/org/apache/tika/server/DetectorResource.java?rev=1661200&r1=1661199&r2=1661200&view=diff ============================================================================== --- tika/trunk/tika-server/src/main/java/org/apache/tika/server/DetectorResource.java (original) +++ tika/trunk/tika-server/src/main/java/org/apache/tika/server/DetectorResource.java Fri Feb 20 19:29:42 2015 @@ -14,59 +14,59 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -package org.apache.tika.server; - -import java.io.IOException; -import java.io.InputStream; - -import javax.ws.rs.Consumes; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; + +package org.apache.tika.server; + +import javax.ws.rs.Consumes; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.UriInfo; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.UriInfo; + +import java.io.IOException; +import java.io.InputStream; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.tika.config.TikaConfig; import org.apache.tika.io.TikaInputStream; import org.apache.tika.metadata.Metadata; import org.apache.tika.mime.MediaType; -@Path("/detect") -public class DetectorResource { - - private static final Log logger = LogFactory.getLog(DetectorResource.class - .getName()); - - private TikaConfig config = null; - - public DetectorResource(TikaConfig config) { - this.config = config; - } - - @PUT - @Path("stream") - @Consumes("*/*") - @Produces("text/plain") - public String detect(final InputStream is, - @Context HttpHeaders httpHeaders, @Context final UriInfo info) { - Metadata met = new Metadata(); - TikaInputStream tis = TikaInputStream.get(is); - String filename = TikaResource.detectFilename(httpHeaders - .getRequestHeaders()); - logger.info("Detecting media type for Filename: " + filename); - met.add(Metadata.RESOURCE_NAME_KEY, filename); - try { - return this.config.getDetector().detect(tis, met).toString(); - } catch (IOException e) { - logger.warn("Unable to detect MIME type for file. Reason: " - + e.getMessage()); - e.printStackTrace(); - return MediaType.OCTET_STREAM.toString(); - } - } - -} +@Path("/detect") +public class DetectorResource { + + private static final Log logger = LogFactory.getLog(DetectorResource.class + .getName()); + + private TikaConfig config = null; + + public DetectorResource(TikaConfig config) { + this.config = config; + } + + @PUT + @Path("stream") + @Consumes("*/*") + @Produces("text/plain") + public String detect(final InputStream is, + @Context HttpHeaders httpHeaders, @Context final UriInfo info) { + Metadata met = new Metadata(); + TikaInputStream tis = TikaInputStream.get(is); + String filename = TikaResource.detectFilename(httpHeaders + .getRequestHeaders()); + logger.info("Detecting media type for Filename: " + filename); + met.add(Metadata.RESOURCE_NAME_KEY, filename); + try { + return this.config.getDetector().detect(tis, met).toString(); + } catch (IOException e) { + logger.warn("Unable to detect MIME type for file. Reason: " + + e.getMessage()); + e.printStackTrace(); + return MediaType.OCTET_STREAM.toString(); + } + } + +} Modified: tika/trunk/tika-server/src/main/java/org/apache/tika/server/HTMLHelper.java URL: http://svn.apache.org/viewvc/tika/trunk/tika-server/src/main/java/org/apache/tika/server/HTMLHelper.java?rev=1661200&r1=1661199&r2=1661200&view=diff ============================================================================== --- tika/trunk/tika-server/src/main/java/org/apache/tika/server/HTMLHelper.java (original) +++ tika/trunk/tika-server/src/main/java/org/apache/tika/server/HTMLHelper.java Fri Feb 20 19:29:42 2015 @@ -21,22 +21,22 @@ import java.io.IOException; import java.io.InputStream; import org.apache.tika.io.IOUtils; - -/** - * Helps produce user facing HTML output. - * - * TODO Decide if this would be better done as a MessageBodyWriter - */ -public class HTMLHelper { + +/** + * Helps produce user facing HTML output. + * <p/> + * TODO Decide if this would be better done as a MessageBodyWriter + */ +public class HTMLHelper { private static final String PATH = "/tikaserver-template.html"; private static final String TITLE_VAR = "[[TITLE]]"; - private static final String BODY_VAR = "[[BODY]]"; - private String PRE_BODY; - private String POST_BODY; - - public HTMLHelper() { - InputStream htmlStr = getClass().getResourceAsStream(PATH); - if (htmlStr == null) { + private static final String BODY_VAR = "[[BODY]]"; + private String PRE_BODY; + private String POST_BODY; + + public HTMLHelper() { + InputStream htmlStr = getClass().getResourceAsStream(PATH); + if (htmlStr == null) { throw new IllegalArgumentException("Template Not Found - " + PATH); } try { @@ -45,18 +45,18 @@ public class HTMLHelper { PRE_BODY = html.substring(0, bodyAt); POST_BODY = html.substring(bodyAt + BODY_VAR.length()); } catch (IOException e) { - throw new IllegalStateException("Unable to read template"); - } - } - - /** - * Generates the HTML Header for the user facing page, adding - * in the given title as required - */ - public void generateHeader(StringBuffer html, String title) { - html.append(PRE_BODY.replace(TITLE_VAR, title)); - } - public void generateFooter(StringBuffer html) { - html.append(POST_BODY); - } -} \ No newline at end of file + throw new IllegalStateException("Unable to read template"); + } + } + + /** + * Generates the HTML Header for the user facing page, adding + * in the given title as required + */ + public void generateHeader(StringBuffer html, String title) { + html.append(PRE_BODY.replace(TITLE_VAR, title)); + } + + public void generateFooter(StringBuffer html) { + html.append(POST_BODY); + }} \ No newline at end of file Modified: tika/trunk/tika-server/src/main/java/org/apache/tika/server/JSONMessageBodyWriter.java URL: http://svn.apache.org/viewvc/tika/trunk/tika-server/src/main/java/org/apache/tika/server/JSONMessageBodyWriter.java?rev=1661200&r1=1661199&r2=1661200&view=diff ============================================================================== --- tika/trunk/tika-server/src/main/java/org/apache/tika/server/JSONMessageBodyWriter.java (original) +++ tika/trunk/tika-server/src/main/java/org/apache/tika/server/JSONMessageBodyWriter.java Fri Feb 20 19:29:42 2015 @@ -37,28 +37,28 @@ import org.apache.tika.metadata.Metadata import org.apache.tika.metadata.serialization.JsonMetadata; @Provider -@Produces(MediaType.APPLICATION_JSON) -public class JSONMessageBodyWriter implements MessageBodyWriter<Metadata> { - - public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { - return Metadata.class.isAssignableFrom(type); - } - - public long getSize(Metadata data, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { - return -1; - } - - @Override - public void writeTo(Metadata metadata, Class<?> type, Type genericType, Annotation[] annotations, - MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, - WebApplicationException { - try { - Writer writer = new OutputStreamWriter(entityStream, IOUtils.UTF_8); - JsonMetadata.toJson(metadata, writer); +@Produces(MediaType.APPLICATION_JSON) +public class JSONMessageBodyWriter implements MessageBodyWriter<Metadata> { + + public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { + return Metadata.class.isAssignableFrom(type); + } + + public long getSize(Metadata data, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { + return -1; + } + + @Override + public void writeTo(Metadata metadata, Class<?> type, Type genericType, Annotation[] annotations, + MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, + WebApplicationException { + try { + Writer writer = new OutputStreamWriter(entityStream, IOUtils.UTF_8); + JsonMetadata.toJson(metadata, writer); writer.flush(); } catch (TikaException e) { - throw new IOException(e); - } - entityStream.flush(); - } -} + throw new IOException(e); + } + entityStream.flush(); + } +} Modified: tika/trunk/tika-server/src/main/java/org/apache/tika/server/MetadataListMessageBodyWriter.java URL: http://svn.apache.org/viewvc/tika/trunk/tika-server/src/main/java/org/apache/tika/server/MetadataListMessageBodyWriter.java?rev=1661200&r1=1661199&r2=1661200&view=diff ============================================================================== --- tika/trunk/tika-server/src/main/java/org/apache/tika/server/MetadataListMessageBodyWriter.java (original) +++ tika/trunk/tika-server/src/main/java/org/apache/tika/server/MetadataListMessageBodyWriter.java Fri Feb 20 19:29:42 2015 @@ -36,31 +36,31 @@ import org.apache.tika.io.IOUtils; import org.apache.tika.metadata.serialization.JsonMetadataList; @Provider -@Produces(MediaType.APPLICATION_JSON) -public class MetadataListMessageBodyWriter implements MessageBodyWriter<MetadataList> { - - public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { - if (! MediaType.APPLICATION_JSON_TYPE.equals(mediaType) ){ - return false; - } - return type.isAssignableFrom(MetadataList.class); - } - - public long getSize(MetadataList data, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { - return -1; - } - - @Override - public void writeTo(MetadataList list, Class<?> type, Type genericType, Annotation[] annotations, - MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, - WebApplicationException { - try { - Writer writer = new OutputStreamWriter(entityStream, IOUtils.UTF_8); - JsonMetadataList.toJson(list.getMetadata(), writer); +@Produces(MediaType.APPLICATION_JSON) +public class MetadataListMessageBodyWriter implements MessageBodyWriter<MetadataList> { + + public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { + if (!MediaType.APPLICATION_JSON_TYPE.equals(mediaType)) { + return false; + } + return type.isAssignableFrom(MetadataList.class); + } + + public long getSize(MetadataList data, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { + return -1; + } + + @Override + public void writeTo(MetadataList list, Class<?> type, Type genericType, Annotation[] annotations, + MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, + WebApplicationException { + try { + Writer writer = new OutputStreamWriter(entityStream, IOUtils.UTF_8); + JsonMetadataList.toJson(list.getMetadata(), writer); writer.flush(); } catch (TikaException e) { - throw new IOException(e); - } - entityStream.flush(); - } -} + throw new IOException(e); + } + entityStream.flush(); + } +} Modified: tika/trunk/tika-server/src/main/java/org/apache/tika/server/MetadataResource.java URL: http://svn.apache.org/viewvc/tika/trunk/tika-server/src/main/java/org/apache/tika/server/MetadataResource.java?rev=1661200&r1=1661199&r2=1661200&view=diff ============================================================================== --- tika/trunk/tika-server/src/main/java/org/apache/tika/server/MetadataResource.java (original) +++ tika/trunk/tika-server/src/main/java/org/apache/tika/server/MetadataResource.java Fri Feb 20 19:29:42 2015 @@ -44,93 +44,93 @@ import org.xml.sax.helpers.DefaultHandle @Path("/meta") public class MetadataResource { - private static final Log logger = LogFactory.getLog(MetadataResource.class); + private static final Log logger = LogFactory.getLog(MetadataResource.class); - private TikaConfig tikaConfig; + private TikaConfig tikaConfig; - public MetadataResource(TikaConfig tikaConfig) { - this.tikaConfig = tikaConfig; - } - - @POST - @Consumes("multipart/form-data") - @Produces({"text/csv", "application/json", "application/rdf+xml"}) - @Path("form") - public Response getMetadataFromMultipart(Attachment att, @Context UriInfo info) throws Exception { - return Response.ok( - parseMetadata(att.getObject(InputStream.class), att.getHeaders(), info)).build(); - } - - @PUT - @Produces({"text/csv", "application/json", "application/rdf+xml"}) - public Response getMetadata(InputStream is, @Context HttpHeaders httpHeaders, @Context UriInfo info) throws Exception { - return Response.ok( - parseMetadata(is, httpHeaders.getRequestHeaders(), info)).build(); - } - - /** - * Get a specific metadata field. If the input stream cannot be parsed, but a - * value was found for the given metadata field, then the value of the field - * is returned as part of a 200 OK response; otherwise a - * {@link javax.ws.rs.core.Response.Status#BAD_REQUEST} is generated. If the stream was successfully - * parsed but the specific metadata field was not found, then a - * {@link javax.ws.rs.core.Response.Status#NOT_FOUND} is returned. - * <p> - * Note that this method handles multivalue fields and returns possibly more - * metadata value than requested. - * <p> - * If you want XMP, you must be careful to specify the exact XMP key. - * For example, "Author" will return nothing, but "dc:creator" will return the correct value. - * - * @param is inputstream - * @param httpHeaders httpheaders - * @param info info - * @param field the tika metadata field name - * @return one of {@link javax.ws.rs.core.Response.Status#OK}, {@link javax.ws.rs.core.Response.Status#NOT_FOUND}, or - * {@link javax.ws.rs.core.Response.Status#BAD_REQUEST} - * @throws Exception - */ - @PUT - @Path("{field}") - @Produces({"text/csv", "application/json", "application/rdf+xml", "text/plain"}) - public Response getMetadataField(InputStream is, @Context HttpHeaders httpHeaders, - @Context UriInfo info, @PathParam("field") String field) throws Exception { - - // use BAD request to indicate that we may not have had enough data to - // process the request - Response.Status defaultErrorResponse = Response.Status.BAD_REQUEST; - Metadata metadata = null; - try { - metadata = parseMetadata(is, httpHeaders.getRequestHeaders(), info); - // once we've parsed the document successfully, we should use NOT_FOUND - // if we did not see the field - defaultErrorResponse = Response.Status.NOT_FOUND; - } catch (Exception e) { - logger.info("Failed to process field " + field, e); + public MetadataResource(TikaConfig tikaConfig) { + this.tikaConfig = tikaConfig; } - if (metadata == null || metadata.get(field) == null) { - return Response.status(defaultErrorResponse).entity("Failed to get metadata field " + field).build(); + @POST + @Consumes("multipart/form-data") + @Produces({"text/csv", "application/json", "application/rdf+xml"}) + @Path("form") + public Response getMetadataFromMultipart(Attachment att, @Context UriInfo info) throws Exception { + return Response.ok( + parseMetadata(att.getObject(InputStream.class), att.getHeaders(), info)).build(); } - // remove fields we don't care about for the response - for (String name : metadata.names()) { - if (!field.equals(name)) { - metadata.remove(name); - } + @PUT + @Produces({"text/csv", "application/json", "application/rdf+xml"}) + public Response getMetadata(InputStream is, @Context HttpHeaders httpHeaders, @Context UriInfo info) throws Exception { + return Response.ok( + parseMetadata(is, httpHeaders.getRequestHeaders(), info)).build(); } - return Response.ok(metadata).build(); - } - private Metadata parseMetadata(InputStream is, - MultivaluedMap<String, String> httpHeaders, UriInfo info) throws IOException { - final Metadata metadata = new Metadata(); - final ParseContext context = new ParseContext(); - AutoDetectParser parser = TikaResource.createParser(tikaConfig); - TikaResource.fillMetadata(parser, metadata, context, httpHeaders); - TikaResource.fillParseContext(context, httpHeaders); - TikaResource.logRequest(logger, info, metadata); - TikaResource.parse(parser, logger, info.getPath(), is, new DefaultHandler(), metadata, context); - return metadata; - } + /** + * Get a specific metadata field. If the input stream cannot be parsed, but a + * value was found for the given metadata field, then the value of the field + * is returned as part of a 200 OK response; otherwise a + * {@link javax.ws.rs.core.Response.Status#BAD_REQUEST} is generated. If the stream was successfully + * parsed but the specific metadata field was not found, then a + * {@link javax.ws.rs.core.Response.Status#NOT_FOUND} is returned. + * <p/> + * Note that this method handles multivalue fields and returns possibly more + * metadata value than requested. + * <p/> + * If you want XMP, you must be careful to specify the exact XMP key. + * For example, "Author" will return nothing, but "dc:creator" will return the correct value. + * + * @param is inputstream + * @param httpHeaders httpheaders + * @param info info + * @param field the tika metadata field name + * @return one of {@link javax.ws.rs.core.Response.Status#OK}, {@link javax.ws.rs.core.Response.Status#NOT_FOUND}, or + * {@link javax.ws.rs.core.Response.Status#BAD_REQUEST} + * @throws Exception + */ + @PUT + @Path("{field}") + @Produces({"text/csv", "application/json", "application/rdf+xml", "text/plain"}) + public Response getMetadataField(InputStream is, @Context HttpHeaders httpHeaders, + @Context UriInfo info, @PathParam("field") String field) throws Exception { + + // use BAD request to indicate that we may not have had enough data to + // process the request + Response.Status defaultErrorResponse = Response.Status.BAD_REQUEST; + Metadata metadata = null; + try { + metadata = parseMetadata(is, httpHeaders.getRequestHeaders(), info); + // once we've parsed the document successfully, we should use NOT_FOUND + // if we did not see the field + defaultErrorResponse = Response.Status.NOT_FOUND; + } catch (Exception e) { + logger.info("Failed to process field " + field, e); + } + + if (metadata == null || metadata.get(field) == null) { + return Response.status(defaultErrorResponse).entity("Failed to get metadata field " + field).build(); + } + + // remove fields we don't care about for the response + for (String name : metadata.names()) { + if (!field.equals(name)) { + metadata.remove(name); + } + } + return Response.ok(metadata).build(); + } + + private Metadata parseMetadata(InputStream is, + MultivaluedMap<String, String> httpHeaders, UriInfo info) throws IOException { + final Metadata metadata = new Metadata(); + final ParseContext context = new ParseContext(); + AutoDetectParser parser = TikaResource.createParser(tikaConfig); + TikaResource.fillMetadata(parser, metadata, context, httpHeaders); + TikaResource.fillParseContext(context, httpHeaders); + TikaResource.logRequest(logger, info, metadata); + TikaResource.parse(parser, logger, info.getPath(), is, new DefaultHandler(), metadata, context); + return metadata; + } } Modified: tika/trunk/tika-server/src/main/java/org/apache/tika/server/RecursiveMetadataResource.java URL: http://svn.apache.org/viewvc/tika/trunk/tika-server/src/main/java/org/apache/tika/server/RecursiveMetadataResource.java?rev=1661200&r1=1661199&r2=1661200&view=diff ============================================================================== --- tika/trunk/tika-server/src/main/java/org/apache/tika/server/RecursiveMetadataResource.java (original) +++ tika/trunk/tika-server/src/main/java/org/apache/tika/server/RecursiveMetadataResource.java Fri Feb 20 19:29:42 2015 @@ -43,43 +43,43 @@ import org.xml.sax.helpers.DefaultHandle @Path("/rmeta") public class RecursiveMetadataResource { - private static final Log logger = LogFactory.getLog(RecursiveMetadataResource.class); - - private TikaConfig tikaConfig; - - public RecursiveMetadataResource(TikaConfig tikaConfig) { - this.tikaConfig = tikaConfig; - } - - @POST - @Consumes("multipart/form-data") - @Produces({"text/csv", "application/json"}) - @Path("form") - public Response getMetadataFromMultipart(Attachment att, @Context UriInfo info) throws Exception { - return Response.ok( - parseMetadata(att.getObject(InputStream.class), att.getHeaders(), info)).build(); - } - - @PUT - @Produces("application/json") - public Response getMetadata(InputStream is, @Context HttpHeaders httpHeaders, @Context UriInfo info) throws Exception { - return Response.ok( - parseMetadata(is, httpHeaders.getRequestHeaders(), info)).build(); - } - - private MetadataList parseMetadata(InputStream is, - MultivaluedMap<String, String> httpHeaders, UriInfo info) throws Exception { - final Metadata metadata = new Metadata(); - final ParseContext context = new ParseContext(); - AutoDetectParser parser = TikaResource.createParser(tikaConfig); - //TODO: parameterize choice of handler and max chars? - BasicContentHandlerFactory.HANDLER_TYPE type = BasicContentHandlerFactory.HANDLER_TYPE.TEXT; - RecursiveParserWrapper wrapper = new RecursiveParserWrapper(parser, - new BasicContentHandlerFactory(type, -1)); - TikaResource.fillMetadata(parser, metadata, context, httpHeaders); - TikaResource.fillParseContext(context, httpHeaders); - TikaResource.logRequest(logger, info, metadata); - TikaResource.parse(wrapper, logger, info.getPath(), is, new DefaultHandler(), metadata, context); - return new MetadataList(wrapper.getMetadata()); - } + private static final Log logger = LogFactory.getLog(RecursiveMetadataResource.class); + + private TikaConfig tikaConfig; + + public RecursiveMetadataResource(TikaConfig tikaConfig) { + this.tikaConfig = tikaConfig; + } + + @POST + @Consumes("multipart/form-data") + @Produces({"text/csv", "application/json"}) + @Path("form") + public Response getMetadataFromMultipart(Attachment att, @Context UriInfo info) throws Exception { + return Response.ok( + parseMetadata(att.getObject(InputStream.class), att.getHeaders(), info)).build(); + } + + @PUT + @Produces("application/json") + public Response getMetadata(InputStream is, @Context HttpHeaders httpHeaders, @Context UriInfo info) throws Exception { + return Response.ok( + parseMetadata(is, httpHeaders.getRequestHeaders(), info)).build(); + } + + private MetadataList parseMetadata(InputStream is, + MultivaluedMap<String, String> httpHeaders, UriInfo info) throws Exception { + final Metadata metadata = new Metadata(); + final ParseContext context = new ParseContext(); + AutoDetectParser parser = TikaResource.createParser(tikaConfig); + //TODO: parameterize choice of handler and max chars? + BasicContentHandlerFactory.HANDLER_TYPE type = BasicContentHandlerFactory.HANDLER_TYPE.TEXT; + RecursiveParserWrapper wrapper = new RecursiveParserWrapper(parser, + new BasicContentHandlerFactory(type, -1)); + TikaResource.fillMetadata(parser, metadata, context, httpHeaders); + TikaResource.fillParseContext(context, httpHeaders); + TikaResource.logRequest(logger, info, metadata); + TikaResource.parse(wrapper, logger, info.getPath(), is, new DefaultHandler(), metadata, context); + return new MetadataList(wrapper.getMetadata()); + } } Modified: tika/trunk/tika-server/src/main/java/org/apache/tika/server/RichTextContentHandler.java URL: http://svn.apache.org/viewvc/tika/trunk/tika-server/src/main/java/org/apache/tika/server/RichTextContentHandler.java?rev=1661200&r1=1661199&r2=1661200&view=diff ============================================================================== --- tika/trunk/tika-server/src/main/java/org/apache/tika/server/RichTextContentHandler.java (original) +++ tika/trunk/tika-server/src/main/java/org/apache/tika/server/RichTextContentHandler.java Fri Feb 20 19:29:42 2015 @@ -14,34 +14,34 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -package org.apache.tika.server; - -import org.apache.tika.sax.WriteOutContentHandler; -import org.xml.sax.Attributes; -import org.xml.sax.SAXException; - -import java.io.Writer; - -class RichTextContentHandler extends WriteOutContentHandler { - public RichTextContentHandler(Writer writer) { - super(writer); - } - - @Override - public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { - super.startElement(uri, localName, qName, attributes); - - if ("img".equals(localName) && attributes.getValue("alt")!=null) { - String nfo = "[image: "+attributes.getValue("alt")+ ']'; - - characters(nfo.toCharArray(), 0, nfo.length()); - } - - if ("a".equals(localName) && attributes.getValue("name")!=null) { - String nfo = "[bookmark: "+attributes.getValue("name")+ ']'; - - characters(nfo.toCharArray(), 0, nfo.length()); - } - } -} + +package org.apache.tika.server; + +import java.io.Writer; + +import org.apache.tika.sax.WriteOutContentHandler; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +class RichTextContentHandler extends WriteOutContentHandler { + public RichTextContentHandler(Writer writer) { + super(writer); + } + + @Override + public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { + super.startElement(uri, localName, qName, attributes); + + if ("img".equals(localName) && attributes.getValue("alt") != null) { + String nfo = "[image: " + attributes.getValue("alt") + ']'; + + characters(nfo.toCharArray(), 0, nfo.length()); + } + + if ("a".equals(localName) && attributes.getValue("name") != null) { + String nfo = "[bookmark: " + attributes.getValue("name") + ']'; + + characters(nfo.toCharArray(), 0, nfo.length()); + } + } +} Modified: tika/trunk/tika-server/src/main/java/org/apache/tika/server/TarWriter.java URL: http://svn.apache.org/viewvc/tika/trunk/tika-server/src/main/java/org/apache/tika/server/TarWriter.java?rev=1661200&r1=1661199&r2=1661200&view=diff ============================================================================== --- tika/trunk/tika-server/src/main/java/org/apache/tika/server/TarWriter.java (original) +++ tika/trunk/tika-server/src/main/java/org/apache/tika/server/TarWriter.java Fri Feb 20 19:29:42 2015 @@ -14,54 +14,55 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -package org.apache.tika.server; - -import org.apache.commons.compress.archivers.tar.TarArchiveEntry; -import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; - -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyWriter; -import javax.ws.rs.ext.Provider; -import java.io.IOException; -import java.io.OutputStream; -import java.lang.annotation.Annotation; -import java.lang.reflect.Type; -import java.util.Map; - -@Provider -@Produces("application/x-tar") -public class TarWriter implements MessageBodyWriter<Map<String, byte[]>> { - private static void tarStoreBuffer(TarArchiveOutputStream zip, String name, byte[] dataBuffer) throws IOException { - TarArchiveEntry entry = new TarArchiveEntry(name); - - entry.setSize(dataBuffer.length); - - zip.putArchiveEntry(entry); - - zip.write(dataBuffer); - - zip.closeArchiveEntry(); - } - - public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { - return Map.class.isAssignableFrom(type); - } - - public long getSize(Map<String, byte[]> stringMap, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { - return -1; - } - - public void writeTo(Map<String, byte[]> parts, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException { - TarArchiveOutputStream zip = new TarArchiveOutputStream(entityStream); - - for (Map.Entry<String, byte[]> entry : parts.entrySet()) { - tarStoreBuffer(zip, entry.getKey(), entry.getValue()); - } - - zip.close(); - } -} + +package org.apache.tika.server; + +import javax.ws.rs.Produces; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.ext.MessageBodyWriter; +import javax.ws.rs.ext.Provider; + +import java.io.IOException; +import java.io.OutputStream; +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; +import java.util.Map; + +import org.apache.commons.compress.archivers.tar.TarArchiveEntry; +import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; + +@Provider +@Produces("application/x-tar") +public class TarWriter implements MessageBodyWriter<Map<String, byte[]>> { + private static void tarStoreBuffer(TarArchiveOutputStream zip, String name, byte[] dataBuffer) throws IOException { + TarArchiveEntry entry = new TarArchiveEntry(name); + + entry.setSize(dataBuffer.length); + + zip.putArchiveEntry(entry); + + zip.write(dataBuffer); + + zip.closeArchiveEntry(); + } + + public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { + return Map.class.isAssignableFrom(type); + } + + public long getSize(Map<String, byte[]> stringMap, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { + return -1; + } + + public void writeTo(Map<String, byte[]> parts, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException { + TarArchiveOutputStream zip = new TarArchiveOutputStream(entityStream); + + for (Map.Entry<String, byte[]> entry : parts.entrySet()) { + tarStoreBuffer(zip, entry.getKey(), entry.getValue()); + } + + zip.close(); + } +} Modified: tika/trunk/tika-server/src/main/java/org/apache/tika/server/TextMessageBodyWriter.java URL: http://svn.apache.org/viewvc/tika/trunk/tika-server/src/main/java/org/apache/tika/server/TextMessageBodyWriter.java?rev=1661200&r1=1661199&r2=1661200&view=diff ============================================================================== --- tika/trunk/tika-server/src/main/java/org/apache/tika/server/TextMessageBodyWriter.java (original) +++ tika/trunk/tika-server/src/main/java/org/apache/tika/server/TextMessageBodyWriter.java Fri Feb 20 19:29:42 2015 @@ -35,41 +35,41 @@ import org.apache.tika.io.IOUtils; import org.apache.tika.metadata.Metadata; /** - * Returns simple text string for a particular metadata value. - * This assumes that the metadata object only has one key; - * if there is more than one key or no keys, this will throw a webapp exception. - * <p> - * This will choose the first value returned for the one key. - */ -@Provider -@Produces(MediaType.TEXT_PLAIN) -public class TextMessageBodyWriter implements MessageBodyWriter<Metadata> { - - public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { - return mediaType.equals(MediaType.TEXT_PLAIN_TYPE) && Metadata.class.isAssignableFrom(type); - } - - public long getSize(Metadata data, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { - return -1; - } - - @Override - @SuppressWarnings("resource") - public void writeTo(Metadata metadata, Class<?> type, Type genericType, Annotation[] annotations, - MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, - WebApplicationException { - - if (metadata.names().length != 1) { - throw new WebApplicationException("Metadata object must only have one entry!"); - } - Writer writer = new OutputStreamWriter(entityStream, IOUtils.UTF_8); - - for (String name : metadata.names()) { - writer.write(metadata.get(name)); - } - - // Don't close, just flush the stream - writer.flush(); - } -} - + * Returns simple text string for a particular metadata value. + * This assumes that the metadata object only has one key; + * if there is more than one key or no keys, this will throw a webapp exception. + * <p/> + * This will choose the first value returned for the one key. + */ +@Provider +@Produces(MediaType.TEXT_PLAIN) +public class TextMessageBodyWriter implements MessageBodyWriter<Metadata> { + + public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { + return mediaType.equals(MediaType.TEXT_PLAIN_TYPE) && Metadata.class.isAssignableFrom(type); + } + + public long getSize(Metadata data, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { + return -1; + } + + @Override + @SuppressWarnings("resource") + public void writeTo(Metadata metadata, Class<?> type, Type genericType, Annotation[] annotations, + MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, + WebApplicationException { + + if (metadata.names().length != 1) { + throw new WebApplicationException("Metadata object must only have one entry!"); + } + Writer writer = new OutputStreamWriter(entityStream, IOUtils.UTF_8); + + for (String name : metadata.names()) { + writer.write(metadata.get(name)); + } + + // Don't close, just flush the stream + writer.flush(); + } +} + Modified: tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaDetectors.java URL: http://svn.apache.org/viewvc/tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaDetectors.java?rev=1661200&r1=1661199&r2=1661200&view=diff ============================================================================== --- tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaDetectors.java (original) +++ tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaDetectors.java Fri Feb 20 19:29:42 2015 @@ -13,113 +13,115 @@ * 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.tika.server; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; - -import org.apache.tika.config.TikaConfig; -import org.apache.tika.detect.CompositeDetector; -import org.apache.tika.detect.Detector; + */ +package org.apache.tika.server; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.tika.config.TikaConfig; +import org.apache.tika.detect.CompositeDetector; +import org.apache.tika.detect.Detector; import org.eclipse.jetty.util.ajax.JSON; - -/** - * <p>Provides details of all the {@link Detector}s registered with - * Apache Tika, similar to <em>--list-detectors</em> with the Tika CLI. - */ -@Path("/detectors") -public class TikaDetectors { - private TikaConfig tika; - private HTMLHelper html; - - public TikaDetectors(TikaConfig tika) { - this.tika = tika; - this.html = new HTMLHelper(); - } - - @GET - @Produces("text/html") - public String getDectorsHTML() { + +/** + * <p>Provides details of all the {@link Detector}s registered with + * Apache Tika, similar to <em>--list-detectors</em> with the Tika CLI. + */ +@Path("/detectors") +public class TikaDetectors { + private TikaConfig tika; + private HTMLHelper html; + + public TikaDetectors(TikaConfig tika) { + this.tika = tika; + this.html = new HTMLHelper(); + } + + @GET + @Produces("text/html") + public String getDectorsHTML() { StringBuffer h = new StringBuffer(); html.generateHeader(h, "Detectors available to Apache Tika"); detectorAsHTML(tika.getDetector(), h, 2); - html.generateFooter(h); - return h.toString(); - } - private void detectorAsHTML(Detector d, StringBuffer html, int level) { - html.append("<h"); - html.append(level); - html.append(">"); - String name = d.getClass().getName(); - html.append(name.substring(name.lastIndexOf('.')+1)); - html.append("</h"); - html.append(level); - html.append(">"); + html.generateFooter(h); + return h.toString(); + } + + private void detectorAsHTML(Detector d, StringBuffer html, int level) { + html.append("<h"); + html.append(level); + html.append(">"); + String name = d.getClass().getName(); + html.append(name.substring(name.lastIndexOf('.') + 1)); + html.append("</h"); + html.append(level); + html.append(">"); html.append("<p>Class: "); html.append(name); - html.append("</p>"); - if (d instanceof CompositeDetector) { - html.append("<p>Composite Detector</p>"); - for (Detector cd : ((CompositeDetector)d).getDetectors()) { - detectorAsHTML(cd, html, level+1); - } - } - } - - @GET - @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON) - public String getDetectorsJSON() { - Map<String,Object> details = new HashMap<String, Object>(); - detectorAsMap(tika.getDetector(), details); - return JSON.toString(details); - } - private void detectorAsMap(Detector d, Map<String, Object> details) { - details.put("name", d.getClass().getName()); - - boolean isComposite = (d instanceof CompositeDetector); - details.put("composite", isComposite); - if (isComposite) { - List<Map<String, Object>> c = new ArrayList<Map<String,Object>>(); - for (Detector cd : ((CompositeDetector)d).getDetectors()) { - Map<String,Object> cdet = new HashMap<String, Object>(); - detectorAsMap(cd, cdet); - c.add(cdet); - } - details.put("children", c); - } - } - - @GET - @Produces("text/plain") - public String getDetectorsPlain() { + html.append("</p>"); + if (d instanceof CompositeDetector) { + html.append("<p>Composite Detector</p>"); + for (Detector cd : ((CompositeDetector) d).getDetectors()) { + detectorAsHTML(cd, html, level + 1); + } + } + } + + @GET + @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON) + public String getDetectorsJSON() { + Map<String, Object> details = new HashMap<String, Object>(); + detectorAsMap(tika.getDetector(), details); + return JSON.toString(details); + } + + private void detectorAsMap(Detector d, Map<String, Object> details) { + details.put("name", d.getClass().getName()); + + boolean isComposite = (d instanceof CompositeDetector); + details.put("composite", isComposite); + if (isComposite) { + List<Map<String, Object>> c = new ArrayList<Map<String, Object>>(); + for (Detector cd : ((CompositeDetector) d).getDetectors()) { + Map<String, Object> cdet = new HashMap<String, Object>(); + detectorAsMap(cd, cdet); + c.add(cdet); + } + details.put("children", c); + } + } + + @GET + @Produces("text/plain") + public String getDetectorsPlain() { StringBuffer text = new StringBuffer(); - renderDetector(tika.getDetector(), text, 0); - return text.toString(); - } - private void renderDetector(Detector d, StringBuffer text, int indent) { - boolean isComposite = (d instanceof CompositeDetector); - String name = d.getClass().getName(); - - for (int i=0; i<indent; i++) { - text.append(" "); - } - text.append(name); - if (isComposite) { - text.append(" (Composite Detector):\n"); - - List<Detector> subDetectors = ((CompositeDetector)d).getDetectors(); - for(Detector sd : subDetectors) { - renderDetector(sd, text, indent+1); - } - } else { - text.append("\n"); - } + renderDetector(tika.getDetector(), text, 0); + return text.toString(); + } + + private void renderDetector(Detector d, StringBuffer text, int indent) { + boolean isComposite = (d instanceof CompositeDetector); + String name = d.getClass().getName(); + + for (int i = 0; i < indent; i++) { + text.append(" "); + } + text.append(name); + if (isComposite) { + text.append(" (Composite Detector):\n"); + + List<Detector> subDetectors = ((CompositeDetector) d).getDetectors(); + for (Detector sd : subDetectors) { + renderDetector(sd, text, indent + 1); + } + } else { + text.append("\n"); } } } \ No newline at end of file Modified: tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaLoggingFilter.java URL: http://svn.apache.org/viewvc/tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaLoggingFilter.java?rev=1661200&r1=1661199&r2=1661200&view=diff ============================================================================== --- tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaLoggingFilter.java (original) +++ tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaLoggingFilter.java Fri Feb 20 19:29:42 2015 @@ -17,33 +17,35 @@ package org.apache.tika.server; -import java.io.IOException; - import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerRequestFilter; import javax.ws.rs.container.PreMatching; import javax.ws.rs.ext.Provider; +import java.io.IOException; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @Provider @PreMatching public class TikaLoggingFilter implements ContainerRequestFilter { - private static final Log logger = LogFactory.getLog(TikaLoggingFilter.class); - private boolean infoLevel; - public TikaLoggingFilter(boolean infoLevel) { - this.infoLevel = infoLevel; - } - @Override - public void filter(ContainerRequestContext requestContext) throws IOException { - String requestUri = requestContext.getUriInfo().getRequestUri().toString(); - String logMessage = "Request URI: " + requestUri; - if (infoLevel) { - logger.info(logMessage); - } else { - logger.debug(logMessage); - } - } - + private static final Log logger = LogFactory.getLog(TikaLoggingFilter.class); + private boolean infoLevel; + + public TikaLoggingFilter(boolean infoLevel) { + this.infoLevel = infoLevel; + } + + @Override + public void filter(ContainerRequestContext requestContext) throws IOException { + String requestUri = requestContext.getUriInfo().getRequestUri().toString(); + String logMessage = "Request URI: " + requestUri; + if (infoLevel) { + logger.info(logMessage); + } else { + logger.debug(logMessage); + } + } + } 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=1661200&r1=1661199&r2=1661200&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 Fri Feb 20 19:29:42 2015 @@ -13,163 +13,163 @@ * 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.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; -import javax.ws.rs.Produces; - -import org.apache.tika.config.TikaConfig; -import org.apache.tika.mime.MediaType; + */ +package org.apache.tika.server; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; + +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 org.apache.tika.config.TikaConfig; +import org.apache.tika.mime.MediaType; import org.apache.tika.mime.MediaTypeRegistry; import org.apache.tika.parser.CompositeParser; import org.apache.tika.parser.Parser; import org.eclipse.jetty.util.ajax.JSON; - -/** - * <p>Provides details of all the mimetypes known to Apache Tika, - * similar to <em>--list-supported-types</em> with the Tika CLI. - */ -@Path("/mime-types") -public class TikaMimeTypes { - private TikaConfig tika; - private HTMLHelper html; - - public TikaMimeTypes(TikaConfig tika) { - this.tika = tika; - this.html = new HTMLHelper(); - } - - @GET - @Produces("text/html") - public String getMimeTypesHTML() { - StringBuffer h = new StringBuffer(); - html.generateHeader(h, "Apache Tika Supported Mime Types"); - - // 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()); - } - } + +/** + * <p>Provides details of all the mimetypes known to Apache Tika, + * similar to <em>--list-supported-types</em> with the Tika CLI. + */ +@Path("/mime-types") +public class TikaMimeTypes { + private TikaConfig tika; + private HTMLHelper html; + + public TikaMimeTypes(TikaConfig tika) { + this.tika = tika; + this.html = new HTMLHelper(); + } + + @GET + @Produces("text/html") + public String getMimeTypesHTML() { + StringBuffer h = new StringBuffer(); + html.generateHeader(h, "Apache Tika Supported Mime Types"); + + // 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()); + } + } h.append("<ul>"); for (String section : firstType.keySet()) { - h.append("<li><a href=\"#").append(firstType.get(section)).append("\">").append(section).append("</a></li>\n"); - } - h.append("</ul>"); - - // Output all of them - for (MediaTypeDetails type : types) { - h.append("<a name=\"").append(type.type).append("\"></a>\n"); - h.append("<h2>").append(type.type).append("</h2>\n"); - - for (MediaType alias : type.aliases) { - h.append("<div>Alias: ").append(alias).append("</div>\n"); - } - if (type.supertype != null) { - h.append("<div>Super Type: <a href=\"#").append(type.supertype).append("\">").append(type.supertype).append("</a></div>\n"); - } - - if (type.parser != null) { - h.append("<div>Parser: ").append(type.parser).append("</div>\n"); - } - } - - html.generateFooter(h); - return h.toString(); - } - - @GET - @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON) - public String getMimeTypesJSON() { - Map<String,Object> details = new HashMap<String, Object>(); - - for (MediaTypeDetails type : getMediaTypes()) { - Map<String,Object> typeDets = new HashMap<String, Object>(); - - typeDets.put("alias", type.aliases); - if (type.supertype != null) { + h.append("<li><a href=\"#").append(firstType.get(section)).append("\">").append(section).append("</a></li>\n"); + } + h.append("</ul>"); + + // Output all of them + for (MediaTypeDetails type : types) { + h.append("<a name=\"").append(type.type).append("\"></a>\n"); + h.append("<h2>").append(type.type).append("</h2>\n"); + + for (MediaType alias : type.aliases) { + h.append("<div>Alias: ").append(alias).append("</div>\n"); + } + if (type.supertype != null) { + h.append("<div>Super Type: <a href=\"#").append(type.supertype).append("\">").append(type.supertype).append("</a></div>\n"); + } + + if (type.parser != null) { + h.append("<div>Parser: ").append(type.parser).append("</div>\n"); + } + } + + html.generateFooter(h); + return h.toString(); + } + + @GET + @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON) + public String getMimeTypesJSON() { + Map<String, Object> details = new HashMap<String, Object>(); + + for (MediaTypeDetails type : getMediaTypes()) { + Map<String, Object> typeDets = new HashMap<String, Object>(); + + typeDets.put("alias", type.aliases); + if (type.supertype != null) { typeDets.put("supertype", type.supertype); } if (type.parser != null) { typeDets.put("parser", type.parser); } - - details.put(type.type.toString(), typeDets); - } - - return JSON.toString(details); - } - - @GET - @Produces("text/plain") - 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: ").append(alias).append("\n"); - } - if (type.supertype != null) { - text.append(" supertype: ").append(type.supertype.toString()).append("\n"); - } - - if (type.parser != null) { - text.append(" parser: ").append(type.parser).append("\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()) { - MediaTypeDetails details = new MediaTypeDetails(); - details.type = type; - details.aliases = registry.getAliases(type).toArray(new MediaType[0]); - - MediaType supertype = registry.getSupertype(type); - if (supertype != null && !MediaType.OCTET_STREAM.equals(supertype)) { - details.supertype = supertype; - } - - Parser p = parsers.get(type); - if (p != null) { - if (p instanceof CompositeParser) { - p = ((CompositeParser)p).getParsers().get(type); - } - details.parser = p.getClass().getName(); - } - - types.add(details); - } - - return types; - } - - private static class MediaTypeDetails { - private MediaType type; - private MediaType[] aliases; + + details.put(type.type.toString(), typeDets); + } + + return JSON.toString(details); + } + + @GET + @Produces("text/plain") + 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: ").append(alias).append("\n"); + } + if (type.supertype != null) { + text.append(" supertype: ").append(type.supertype.toString()).append("\n"); + } + + if (type.parser != null) { + text.append(" parser: ").append(type.parser).append("\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()) { + MediaTypeDetails details = new MediaTypeDetails(); + details.type = type; + details.aliases = registry.getAliases(type).toArray(new MediaType[0]); + + MediaType supertype = registry.getSupertype(type); + if (supertype != null && !MediaType.OCTET_STREAM.equals(supertype)) { + details.supertype = supertype; + } + + Parser p = parsers.get(type); + if (p != null) { + if (p instanceof CompositeParser) { + p = ((CompositeParser) p).getParsers().get(type); + } + details.parser = p.getClass().getName(); + } + + types.add(details); + } + + return types; + } + + private static class MediaTypeDetails { + private MediaType type; + private MediaType[] aliases; private MediaType supertype; private String parser; } Modified: tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaParsers.java URL: http://svn.apache.org/viewvc/tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaParsers.java?rev=1661200&r1=1661199&r2=1661200&view=diff ============================================================================== --- tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaParsers.java (original) +++ tika/trunk/tika-server/src/main/java/org/apache/tika/server/TikaParsers.java Fri Feb 20 19:29:42 2015 @@ -13,69 +13,72 @@ * 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.tika.server; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; + */ +package org.apache.tika.server; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; - -import org.apache.tika.config.TikaConfig; -import org.apache.tika.mime.MediaType; -import org.apache.tika.parser.CompositeParser; +import java.util.Map; +import java.util.Set; + +import org.apache.tika.config.TikaConfig; +import org.apache.tika.mime.MediaType; +import org.apache.tika.parser.CompositeParser; import org.apache.tika.parser.ParseContext; import org.apache.tika.parser.Parser; import org.apache.tika.parser.ParserDecorator; import org.eclipse.jetty.util.ajax.JSON; - -/** - * <p>Provides details of all the {@link Parser}s registered with - * Apache Tika, similar to <em>--list-parsers</em> and - * <em>--list-parser-details</em> within the Tika CLI. - */ -@Path("/parsers") -public class TikaParsers { - private static final ParseContext EMPTY_PC = new ParseContext(); - private TikaConfig tika; - private HTMLHelper html; - - public TikaParsers(TikaConfig tika) { - this.tika = tika; - this.html = new HTMLHelper(); - } - - @GET - @Path("/details") - @Produces("text/html") - public String getParserDetailsHTML() { - return getParsersHTML(true); - } - @GET - @Produces("text/html") - public String getParsersHTML() { - return getParsersHTML(false); - } - protected String getParsersHTML(boolean withMimeTypes) { - ParserDetails p = new ParserDetails(tika.getParser()); - - StringBuffer h = new StringBuffer(); - html.generateHeader(h, "Parsers available to Apache Tika"); - parserAsHTML(p, withMimeTypes, h, 2); - html.generateFooter(h); - return h.toString(); - } - private void parserAsHTML(ParserDetails p, boolean withMimeTypes, StringBuffer html, int level) { - html.append("<h"); - html.append(level); + +/** + * <p>Provides details of all the {@link Parser}s registered with + * Apache Tika, similar to <em>--list-parsers</em> and + * <em>--list-parser-details</em> within the Tika CLI. + */ +@Path("/parsers") +public class TikaParsers { + private static final ParseContext EMPTY_PC = new ParseContext(); + private TikaConfig tika; + private HTMLHelper html; + + public TikaParsers(TikaConfig tika) { + this.tika = tika; + this.html = new HTMLHelper(); + } + + @GET + @Path("/details") + @Produces("text/html") + public String getParserDetailsHTML() { + return getParsersHTML(true); + } + + @GET + @Produces("text/html") + public String getParsersHTML() { + return getParsersHTML(false); + } + + protected String getParsersHTML(boolean withMimeTypes) { + ParserDetails p = new ParserDetails(tika.getParser()); + + StringBuffer h = new StringBuffer(); + html.generateHeader(h, "Parsers available to Apache Tika"); + parserAsHTML(p, withMimeTypes, h, 2); + html.generateFooter(h); + return h.toString(); + } + + private void parserAsHTML(ParserDetails p, boolean withMimeTypes, StringBuffer html, int level) { + html.append("<h"); + html.append(level); html.append(">"); html.append(p.shortName); html.append("</h"); @@ -87,13 +90,13 @@ public class TikaParsers { if (p.isDecorated) { html.append("<p>Decorated Parser</p>"); } - if (p.isComposite) { - html.append("<p>Composite Parser</p>"); - for (Parser cp : p.childParsers) { - parserAsHTML(new ParserDetails(cp), withMimeTypes, html, level+1); - } - } else if (withMimeTypes) { - html.append("<p>Mime Types:"); + if (p.isComposite) { + html.append("<p>Composite Parser</p>"); + for (Parser cp : p.childParsers) { + parserAsHTML(new ParserDetails(cp), withMimeTypes, html, level + 1); + } + } else if (withMimeTypes) { + html.append("<p>Mime Types:"); html.append("<ul>"); for (MediaType mt : p.supportedTypes) { html.append("<li>"); @@ -101,70 +104,76 @@ public class TikaParsers { html.append("</li>"); } html.append("</ul>"); - html.append("</p>"); - } - } - - @GET - @Path("/details") - @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON) - public String getParserDetailsJSON() { - return getParsersJSON(true); - } - @GET - @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON) - public String getParsersJSON() { - return getParsersJSON(false); - } - protected String getParsersJSON(boolean withMimeTypes) { - Map<String,Object> details = new HashMap<String, Object>(); - parserAsMap(new ParserDetails(tika.getParser()), withMimeTypes, details); - return JSON.toString(details); - } - private void parserAsMap(ParserDetails p, boolean withMimeTypes, Map<String, Object> details) { - details.put("name", p.className); - details.put("composite", p.isComposite); - details.put("decorated", p.isDecorated); - - if (p.isComposite) { - List<Map<String, Object>> c = new ArrayList<Map<String,Object>>(); - for (Parser cp : p.childParsers) { - Map<String,Object> cdet = new HashMap<String, Object>(); - parserAsMap(new ParserDetails(cp), withMimeTypes, cdet); - c.add(cdet); - } + html.append("</p>"); + } + } + + @GET + @Path("/details") + @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON) + public String getParserDetailsJSON() { + return getParsersJSON(true); + } + + @GET + @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON) + public String getParsersJSON() { + return getParsersJSON(false); + } + + protected String getParsersJSON(boolean withMimeTypes) { + Map<String, Object> details = new HashMap<String, Object>(); + parserAsMap(new ParserDetails(tika.getParser()), withMimeTypes, details); + return JSON.toString(details); + } + + private void parserAsMap(ParserDetails p, boolean withMimeTypes, Map<String, Object> details) { + details.put("name", p.className); + details.put("composite", p.isComposite); + details.put("decorated", p.isDecorated); + + if (p.isComposite) { + List<Map<String, Object>> c = new ArrayList<Map<String, Object>>(); + for (Parser cp : p.childParsers) { + Map<String, Object> cdet = new HashMap<String, Object>(); + parserAsMap(new ParserDetails(cp), withMimeTypes, cdet); + c.add(cdet); + } details.put("children", c); } else if (withMimeTypes) { List<String> mts = new ArrayList<String>(p.supportedTypes.size()); for (MediaType mt : p.supportedTypes) { mts.add(mt.toString()); } - details.put("supportedTypes", mts); - } - } - - @GET - @Path("/details") - @Produces("text/plain") - public String getParserDetailssPlain() { - return getParsersPlain(true); - } - @GET - @Produces("text/plain") - public String getParsersPlain() { - return getParsersPlain(false); - } - protected String getParsersPlain(boolean withMimeTypes) { - StringBuffer text = new StringBuffer(); - renderParser(new ParserDetails(tika.getParser()), withMimeTypes, text, ""); - return text.toString(); - } - private void renderParser(ParserDetails p, boolean withMimeTypes, StringBuffer text, String indent) { - String nextIndent = indent + " "; - - text.append(indent); - text.append(p.className); - if (p.isDecorated) { + details.put("supportedTypes", mts); + } + } + + @GET + @Path("/details") + @Produces("text/plain") + public String getParserDetailssPlain() { + return getParsersPlain(true); + } + + @GET + @Produces("text/plain") + public String getParsersPlain() { + return getParsersPlain(false); + } + + protected String getParsersPlain(boolean withMimeTypes) { + StringBuffer text = new StringBuffer(); + renderParser(new ParserDetails(tika.getParser()), withMimeTypes, text, ""); + return text.toString(); + } + + private void renderParser(ParserDetails p, boolean withMimeTypes, StringBuffer text, String indent) { + String nextIndent = indent + " "; + + text.append(indent); + text.append(p.className); + if (p.isDecorated) { text.append(" (Decorated Parser)"); } if (p.isComposite) { @@ -182,38 +191,37 @@ public class TikaParsers { text.append(mt.toString()); text.append("\n"); } - } - } - } - - private static class ParserDetails { - private String className; - private String shortName; + } + } + } + + private static class ParserDetails { + private String className; + private String shortName; private boolean isComposite; - private boolean isDecorated; - private Set<MediaType> supportedTypes; - private List<Parser> childParsers; - - private ParserDetails(Parser p) { - if (p instanceof ParserDecorator) { - isDecorated = true; - p = ((ParserDecorator)p).getWrappedParser(); - } - - className = p.getClass().getName(); - shortName = className.substring(className.lastIndexOf('.')+1); - - if (p instanceof CompositeParser) { - isComposite = true; - supportedTypes = Collections.emptySet(); - - // Get the unique set of child parsers - Set<Parser> children = new HashSet<Parser>( - ((CompositeParser)p).getParsers(EMPTY_PC).values()); - // Sort it by class name - childParsers = new ArrayList<Parser>(children); - Collections.sort(childParsers, new Comparator<Parser>() { - @Override + private boolean isDecorated; + private Set<MediaType> supportedTypes; + private List<Parser> childParsers; + + private ParserDetails(Parser p) { + if (p instanceof ParserDecorator) { + isDecorated = true; + p = ((ParserDecorator) p).getWrappedParser(); + } + + className = p.getClass().getName(); + shortName = className.substring(className.lastIndexOf('.') + 1); + + if (p instanceof CompositeParser) { + isComposite = true; + supportedTypes = Collections.emptySet(); + + // Get the unique set of child parsers + Set<Parser> children = new HashSet<Parser>( + ((CompositeParser) p).getParsers(EMPTY_PC).values()); + // Sort it by class name + childParsers = new ArrayList<Parser>(children); + Collections.sort(childParsers, new Comparator<Parser>() { @Override public int compare(Parser p1, Parser p2) { return p1.getClass().getName().compareTo(p2.getClass().getName()); }