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());
}