]> source.dussan.org Git - poi.git/commitdiff
Tweak a few tests, and add in a few more chunk types
authorNick Burch <nick@apache.org>
Fri, 8 Jan 2010 12:08:35 +0000 (12:08 +0000)
committerNick Burch <nick@apache.org>
Fri, 8 Jan 2010 12:08:35 +0000 (12:08 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@897185 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hsmf/MAPIMessage.java
src/scratchpad/src/org/apache/poi/hsmf/datatypes/AttachmentChunks.java
src/scratchpad/src/org/apache/poi/hsmf/datatypes/Chunks.java
src/scratchpad/src/org/apache/poi/hsmf/datatypes/RecipientChunks.java
src/scratchpad/testcases/org/apache/poi/hsmf/TestFileWithAttachmentsRead.java
src/scratchpad/testcases/org/apache/poi/hsmf/parsers/TestPOIFSChunkParser.java

index 790669032cc5f297ecc7c5099893f1e65288799a..936715f2b5ccb464501c5ee3af98033b780cfe25 100644 (file)
@@ -35,8 +35,11 @@ import org.apache.poi.poifs.filesystem.POIFSFileSystem;
 
 /**
  * Reads an Outlook MSG File in and provides hooks into its data structure.
- *
- * @author Travis Ferguson
+ * 
+ * If you want to develop with HSMF, you might find it worth getting
+ *  some of the microsoft public documentation, such as:
+ *  
+ * [MS-OXCMSG]: Message and Attachment Object Protocol Specification
  */
 public class MAPIMessage {
        private POIFSFileSystem fs;
index c7ad005e747da59718b9ac8a14e48e3d4e625845..10984b9415972d1e09f6f04470709f0fadcfabe7 100644 (file)
@@ -27,9 +27,13 @@ public class AttachmentChunks implements ChunkGroup {
    
    /* String parts of Outlook Messages Attachments that are currently known */
    public static final int ATTACH_DATA          = 0x3701;
+   // 0x3702 might be "attach encoding"
    public static final int ATTACH_EXTENSION     = 0x3703;
    public static final int ATTACH_FILENAME      = 0x3704;
+   // 0x3705 might be "attach method"
    public static final int ATTACH_LONG_FILENAME = 0x3707;
+   public static final int ATTACH_RENDERING_WMF = 0x3709;
+   // 0x370B might be "rendering position"
    public static final int ATTACH_MIME_TAG      = 0x370E;
 
    public ByteChunk attachData;
@@ -37,6 +41,12 @@ public class AttachmentChunks implements ChunkGroup {
    public StringChunk attachFileName;
    public StringChunk attachLongFileName;
    public StringChunk attachMimeTag;
+   /** 
+    * This is in WMF Format. You'll probably want to pass it
+    *  to Apache Batik to turn it into a SVG that you can
+    *  then display. 
+    */
+   public ByteChunk attachRenderingWMF;
    
    /**
     * What the POIFS name of this attachment is.
@@ -82,6 +92,8 @@ public class AttachmentChunks implements ChunkGroup {
       case ATTACH_MIME_TAG:
          attachMimeTag = (StringChunk)chunk;
          break;
+      case ATTACH_RENDERING_WMF:
+         attachRenderingWMF = (ByteChunk)chunk;
       }
 
       // And add to the main list
index 9f68cc1670cec95f5cd3da7b38dbd0ee6a795b9b..d6b433c157c9769140ee11208483e134c21d26a1 100644 (file)
@@ -86,6 +86,7 @@ public final class Chunks implements ChunkGroup {
          subjectChunk = (StringChunk)chunk;
          break;
       case DATE:
+         // TODO - parse
          dateChunk = (ByteChunk)chunk;
          break;
       case CONVERSATION_TOPIC:
index b5157bb2c3ea7e4a69e7db14c6988c930d9b7fad..d03a96242f7a8013e5c13d0411b79131cbf961ed 100644 (file)
@@ -53,6 +53,7 @@ public final class RecipientChunks implements ChunkGroup {
    public void record(Chunk chunk) {
       switch(chunk.getChunkId()) {
       case RECIPIENT_SEARCH:
+         // TODO - parse
          recipientSearchChunk = (ByteChunk)chunk;
          break;
       case RECIPIENT_EMAIL:
index c3fcda741f574f87a7e1fdfb6efa0a6138218b09..cd8bfbf1107e2cbca7ea0d0157285e1221933ab3 100644 (file)
 
 package org.apache.poi.hsmf;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.util.Iterator;
-import java.util.Map;
 
 import junit.framework.TestCase;
 
-import org.apache.poi.hsmf.MAPIMessage;
+import org.apache.poi.POIDataSamples;
 import org.apache.poi.hsmf.datatypes.AttachmentChunks;
 import org.apache.poi.hsmf.exceptions.ChunkNotFoundException;
-import org.apache.poi.POIDataSamples;
 
 /**
  * Tests to verify that we can read attachments from msg file
@@ -36,50 +31,63 @@ import org.apache.poi.POIDataSamples;
  * @author Nicolas Bureau
  */
 public class TestFileWithAttachmentsRead extends TestCase {
-       private MAPIMessage mapiMessage;
+   private MAPIMessage mapiMessage;
 
-       /**
-        * Initialize this test, load up the attachment_test_msg.msg mapi message.
-        
-        * @throws Exception
-        */
-       public TestFileWithAttachmentsRead() throws IOException {
-        POIDataSamples samples = POIDataSamples.getHSMFInstance();
-               this.mapiMessage = new MAPIMessage(samples.openResourceAsStream("attachment_test_msg.msg"));
-       }
+   /**
+    * Initialize this test, load up the attachment_test_msg.msg mapi message.
+    * 
+    * @throws Exception
+    */
+   public TestFileWithAttachmentsRead() throws IOException {
+      POIDataSamples samples = POIDataSamples.getHSMFInstance();
+      this.mapiMessage = new MAPIMessage(samples.openResourceAsStream("attachment_test_msg.msg"));
+   }
 
-       /**
-        * Test to see if we can retrieve attachments.
-        * 
-        * @throws ChunkNotFoundException
-        * 
-        */
-       // public void testReadDisplayCC() throws ChunkNotFoundException {
-       public void testRetrieveAttachments() {
-               AttachmentChunks[] attachments = mapiMessage.getAttachmentFiles();
-               int obtained = attachments.length;
-               int expected = 2;
+   /**
+    * Test to see if we can retrieve attachments.
+    * 
+    * @throws ChunkNotFoundException
+    * 
+    */
+   public void testRetrieveAttachments() {
+      AttachmentChunks[] attachments = mapiMessage.getAttachmentFiles();
+      int obtained = attachments.length;
+      int expected = 2;
 
-               TestCase.assertEquals(obtained, expected);
-       }
+      TestCase.assertEquals(obtained, expected);
+   }
 
-       /**
-        * Test to see if attachments are not empty.
-        * 
-        * @throws ChunkNotFoundException
-        * 
-        */
-       public void testReadAttachments() throws IOException {
+   /**
+    * Test to see if attachments are not empty.
+    */
+   public void testReadAttachments() throws IOException {
       AttachmentChunks[] attachments = mapiMessage.getAttachmentFiles();
 
-               for (AttachmentChunks attachment : attachments) {
-                  assertTrue(attachment.attachFileName.getValue().length() > 0);
+      // Basic checks
+      for (AttachmentChunks attachment : attachments) {
+         assertTrue(attachment.attachFileName.getValue().length() > 0);
          assertTrue(attachment.attachLongFileName.getValue().length() > 0);
          assertTrue(attachment.attachExtension.getValue().length() > 0);
-         assertTrue(attachment.attachMimeTag.getValue().length() > 0);
-               }
-               
-               // TODO better checking
-       }
+         if(attachment.attachMimeTag != null) {
+            assertTrue(attachment.attachMimeTag.getValue().length() > 0);
+         }
+      }
+
+      AttachmentChunks attachment;
+
+      // Now check in detail
+      attachment = mapiMessage.getAttachmentFiles()[0];
+      assertEquals("TEST-U~1.DOC", attachment.attachFileName.toString());
+      assertEquals("test-unicode.doc", attachment.attachLongFileName.toString());
+      assertEquals(".doc", attachment.attachExtension.getValue());
+      assertEquals(null, attachment.attachMimeTag);
+      assertEquals(24064, attachment.attachData.getValue().length);
 
+      attachment = mapiMessage.getAttachmentFiles()[1];
+      assertEquals("pj1.txt", attachment.attachFileName.toString());
+      assertEquals("pj1.txt", attachment.attachLongFileName.toString());
+      assertEquals(".txt", attachment.attachExtension.getValue());
+      assertEquals(null, attachment.attachMimeTag);
+      assertEquals(89, attachment.attachData.getValue().length);
+   }
 }
index f379d8b2b4d6b9018698cf8eba95aa22bba47c03..5c9e55f96bf99de9deba11b7f724786e8dc0fe40 100644 (file)
@@ -20,7 +20,6 @@ package org.apache.poi.hsmf.parsers;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.nio.charset.Charset;
 
 import org.apache.poi.hsmf.MAPIMessage;
 import org.apache.poi.hsmf.datatypes.AttachmentChunks;