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"));
+    }
 }