You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ni...@apache.org on 2012/01/12 15:58:18 UTC
svn commit: r1230576 - in /tika/trunk/tika-parsers/src:
main/java/org/apache/tika/parser/microsoft/ooxml/
test/java/org/apache/tika/parser/microsoft/ooxml/
Author: nick
Date: Thu Jan 12 14:58:18 2012
New Revision: 1230576
URL: http://svn.apache.org/viewvc?rev=1230576&view=rev
Log:
TIKA-695 Support some more OOXML custom property types, and expand the unit test coverage
Modified:
tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/MetadataExtractor.java
tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSLFPowerPointExtractorDecorator.java
tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSSFExcelExtractorDecorator.java
tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFWordExtractorDecorator.java
tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/OOXMLParserTest.java
Modified: tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/MetadataExtractor.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/MetadataExtractor.java?rev=1230576&r1=1230575&r2=1230576&view=diff
==============================================================================
--- tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/MetadataExtractor.java (original)
+++ tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/MetadataExtractor.java Thu Jan 12 14:58:18 2012
@@ -143,12 +143,61 @@ public class MetadataExtractor {
if (property.isSetLpwstr()) {
val = property.getLpwstr();
}
- else if (property.isSetFiletime()) {
- date = property.getFiletime().getTime();
+ else if (property.isSetLpstr()) {
+ val = property.getLpstr();
}
else if (property.isSetDate()) {
date = property.getDate().getTime();
}
+ else if (property.isSetFiletime()) {
+ date = property.getFiletime().getTime();
+ }
+
+ else if (property.isSetBool()) {
+ val = Boolean.toString( property.getBool() );
+ }
+
+ // Integers
+ else if (property.isSetI1()) {
+ val = Integer.toString(property.getI1());
+ }
+ else if (property.isSetI2()) {
+ val = Integer.toString(property.getI2());
+ }
+ else if (property.isSetI4()) {
+ val = Integer.toString(property.getI4());
+ }
+ else if (property.isSetI8()) {
+ val = Long.toString(property.getI8());
+ }
+ else if (property.isSetInt()) {
+ val = Integer.toString( property.getInt() );
+ }
+
+ // Unsigned Integers
+ else if (property.isSetUi1()) {
+ val = Integer.toString(property.getUi1());
+ }
+ else if (property.isSetUi2()) {
+ val = Integer.toString(property.getUi2());
+ }
+ else if (property.isSetUi4()) {
+ val = Long.toString(property.getUi4());
+ }
+ else if (property.isSetUi8()) {
+ val = property.getUi8().toString();
+ }
+ else if (property.isSetUint()) {
+ val = Long.toString(property.getUint());
+ }
+
+ // Reals
+ else if (property.isSetR4()) {
+ val = Float.toString( property.getR4() );
+ }
+ else if (property.isSetR8()) {
+ val = Double.toString( property.getR8() );
+ }
else if (property.isSetDecimal()) {
BigDecimal d = property.getDecimal();
if (d == null) {
@@ -157,19 +206,25 @@ public class MetadataExtractor {
val = d.toPlainString();
}
}
- else if (property.isSetBool()) {
- val = Boolean.toString( property.getBool() );
+
+ else if (property.isSetArray()) {
+ // TODO Fetch the array values and output
}
- else if (property.isSetInt()) {
- val = Integer.toString( property.getInt() );
+ else if (property.isSetVector()) {
+ // TODO Fetch the vector values and output
}
- else if (property.isSetLpstr()) {
- val = property.getLpstr();
+
+ else if (property.isSetBlob() || property.isSetOblob()) {
+ // TODO Decode, if possible
}
- else if (property.isSetI4()) {
- /* Int4 */
- val = Integer.toString(property.getI4());
+ else if (property.isSetStream() || property.isSetOstream() ||
+ property.isSetVstream()) {
+ // TODO Decode, if possible
}
+ else if (property.isSetStorage() || property.isSetOstorage()) {
+ // TODO Decode, if possible
+ }
+
else {
// This type isn't currently supported yet, skip the property
}
Modified: tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSLFPowerPointExtractorDecorator.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSLFPowerPointExtractorDecorator.java?rev=1230576&r1=1230575&r2=1230576&view=diff
==============================================================================
--- tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSLFPowerPointExtractorDecorator.java (original)
+++ tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSLFPowerPointExtractorDecorator.java Thu Jan 12 14:58:18 2012
@@ -45,9 +45,12 @@ import org.openxmlformats.schemas.presen
import org.xml.sax.SAXException;
public class XSLFPowerPointExtractorDecorator extends AbstractOOXMLExtractor {
+ // TODO Have this detected rather than hard coded
+ //private static final String TYPE = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
+ private static final String TYPE = null;
public XSLFPowerPointExtractorDecorator(ParseContext context, XSLFPowerPointExtractor extractor) {
- super(context, extractor, null);
+ super(context, extractor, TYPE);
}
/**
Modified: tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSSFExcelExtractorDecorator.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSSFExcelExtractorDecorator.java?rev=1230576&r1=1230575&r2=1230576&view=diff
==============================================================================
--- tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSSFExcelExtractorDecorator.java (original)
+++ tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSSFExcelExtractorDecorator.java Thu Jan 12 14:58:18 2012
@@ -65,6 +65,8 @@ public class XSSFExcelExtractorDecorator
private final DataFormatter formatter;
private final List<PackagePart> sheetParts = new ArrayList<PackagePart>();
private final List<Boolean> sheetProtected = new ArrayList<Boolean>();
+
+ // TODO Have this detected rather than hard coded
private static final String TYPE = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
public XSSFExcelExtractorDecorator(
Modified: tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFWordExtractorDecorator.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFWordExtractorDecorator.java?rev=1230576&r1=1230575&r2=1230576&view=diff
==============================================================================
--- tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFWordExtractorDecorator.java (original)
+++ tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFWordExtractorDecorator.java Thu Jan 12 14:58:18 2012
@@ -40,6 +40,7 @@ public class XWPFWordExtractorDecorator
private XWPFStyles styles;
public XWPFWordExtractorDecorator(ParseContext context, XWPFWordExtractor extractor) {
+ // TODO Have the type detected rather than hard coded
super(context, extractor, "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
document = (XWPFDocument) extractor.getDocument();
Modified: tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/OOXMLParserTest.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/OOXMLParserTest.java?rev=1230576&r1=1230575&r2=1230576&view=diff
==============================================================================
--- tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/OOXMLParserTest.java (original)
+++ tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/microsoft/ooxml/OOXMLParserTest.java Thu Jan 12 14:58:18 2012
@@ -699,4 +699,72 @@ public class OOXMLParserTest extends Tik
assertEquals("2010-12-30T22:00:00Z", metadata.get("custom:MyCustomDate"));
assertEquals("2010-12-29T22:00:00Z", metadata.get("custom:myCustomSecondDate"));
}
+ public void testWordCustomProperties() throws Exception {
+ InputStream input = OOXMLParserTest.class.getResourceAsStream(
+ "/test-documents/testWORD_custom_props.docx");
+ Metadata metadata = new Metadata();
+
+ try {
+ ContentHandler handler = new BodyContentHandler(-1);
+ ParseContext context = new ParseContext();
+ context.set(Locale.class, Locale.US);
+ new OOXMLParser().parse(input, handler, metadata, context);
+ } finally {
+ input.close();
+ }
+
+ assertEquals(
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
+ metadata.get(Metadata.CONTENT_TYPE));
+ assertEquals("EJ04325S", metadata.get(Metadata.AUTHOR));
+ assertEquals("Etienne Jouvin", metadata.get(Metadata.LAST_AUTHOR));
+ assertEquals("2011-07-29T16:52:00Z", metadata.get(Metadata.DATE));
+ assertEquals("2011-07-29T16:52:00Z", metadata.get(Metadata.CREATION_DATE));
+ assertEquals("2012-01-03T22:14:00Z", metadata.get(Metadata.LAST_MODIFIED));
+ assertEquals("Microsoft Office Word",metadata.get(Metadata.APPLICATION_NAME));
+ assertEquals("1", metadata.get(Metadata.PAGE_COUNT));
+ assertEquals("2", metadata.get(Metadata.WORD_COUNT));
+ assertEquals("My Title", metadata.get(Metadata.TITLE));
+ assertEquals("My Keyword", metadata.get(Metadata.KEYWORDS));
+ assertEquals("Normal.dotm", metadata.get(Metadata.TEMPLATE));
+ assertEquals("My subject", metadata.get(Metadata.SUBJECT));
+ assertEquals("EDF-DIT", metadata.get(Metadata.PUBLISHER));
+ assertEquals("true", metadata.get("custom:myCustomBoolean"));
+ assertEquals("3", metadata.get("custom:myCustomNumber"));
+ assertEquals("MyStringValue", metadata.get("custom:MyCustomString"));
+ assertEquals("2010-12-30T23:00:00Z", metadata.get("custom:MyCustomDate"));
+ assertEquals("2010-12-29T22:00:00Z", metadata.get("custom:myCustomSecondDate"));
+ }
+ public void testPowerPointCustomProperties() throws Exception {
+ InputStream input = OOXMLParserTest.class.getResourceAsStream(
+ "/test-documents/testPPT_custom_props.pptx");
+ Metadata metadata = new Metadata();
+
+ try {
+ ContentHandler handler = new BodyContentHandler(-1);
+ ParseContext context = new ParseContext();
+ context.set(Locale.class, Locale.US);
+ new OOXMLParser().parse(input, handler, metadata, context);
+ } finally {
+ input.close();
+ }
+
+ // When detection / type is fixed, re-enable this
+// assertEquals(
+// "application/vnd.openxmlformats-officedocument.presentationml.presentation",
+// metadata.get(Metadata.CONTENT_TYPE));
+ assertEquals("JOUVIN ETIENNE", metadata.get(Metadata.AUTHOR));
+ assertEquals("EJ04325S", metadata.get(Metadata.LAST_AUTHOR));
+ assertEquals("2011-08-22T13:30:53Z", metadata.get(Metadata.DATE));
+ assertEquals("2011-08-22T13:30:53Z", metadata.get(Metadata.CREATION_DATE));
+ assertEquals("2011-08-22T13:32:49Z", metadata.get(Metadata.LAST_MODIFIED));
+ assertEquals("1", metadata.get(Metadata.SLIDE_COUNT));
+ assertEquals("3", metadata.get(Metadata.WORD_COUNT));
+ assertEquals("Test extraction properties pptx", metadata.get(Metadata.TITLE));
+ assertEquals("true", metadata.get("custom:myCustomBoolean"));
+ assertEquals("3", metadata.get("custom:myCustomNumber"));
+ assertEquals("MyStringValue", metadata.get("custom:MyCustomString"));
+ assertEquals("2010-12-30T22:00:00Z", metadata.get("custom:MyCustomDate"));
+ assertEquals("2010-12-29T22:00:00Z", metadata.get("custom:myCustomSecondDate"));
+ }
}