aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNick Burch <nick@apache.org>2010-01-08 12:08:35 +0000
committerNick Burch <nick@apache.org>2010-01-08 12:08:35 +0000
commit3f56b83377034474a824ba5a6850efe86b96917b (patch)
tree88a3c4d954cd5938927c04ff35461684874ba660 /src
parent4c002588af162762bc6b309904683c43d2895887 (diff)
downloadpoi-3f56b83377034474a824ba5a6850efe86b96917b.tar.gz
poi-3f56b83377034474a824ba5a6850efe86b96917b.zip
Tweak a few tests, and add in a few more chunk types
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@897185 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src')
-rw-r--r--src/scratchpad/src/org/apache/poi/hsmf/MAPIMessage.java7
-rw-r--r--src/scratchpad/src/org/apache/poi/hsmf/datatypes/AttachmentChunks.java12
-rw-r--r--src/scratchpad/src/org/apache/poi/hsmf/datatypes/Chunks.java1
-rw-r--r--src/scratchpad/src/org/apache/poi/hsmf/datatypes/RecipientChunks.java1
-rw-r--r--src/scratchpad/testcases/org/apache/poi/hsmf/TestFileWithAttachmentsRead.java94
-rw-r--r--src/scratchpad/testcases/org/apache/poi/hsmf/parsers/TestPOIFSChunkParser.java1
6 files changed, 70 insertions, 46 deletions
diff --git a/src/scratchpad/src/org/apache/poi/hsmf/MAPIMessage.java b/src/scratchpad/src/org/apache/poi/hsmf/MAPIMessage.java
index 790669032c..936715f2b5 100644
--- a/src/scratchpad/src/org/apache/poi/hsmf/MAPIMessage.java
+++ b/src/scratchpad/src/org/apache/poi/hsmf/MAPIMessage.java
@@ -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;
diff --git a/src/scratchpad/src/org/apache/poi/hsmf/datatypes/AttachmentChunks.java b/src/scratchpad/src/org/apache/poi/hsmf/datatypes/AttachmentChunks.java
index c7ad005e74..10984b9415 100644
--- a/src/scratchpad/src/org/apache/poi/hsmf/datatypes/AttachmentChunks.java
+++ b/src/scratchpad/src/org/apache/poi/hsmf/datatypes/AttachmentChunks.java
@@ -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
diff --git a/src/scratchpad/src/org/apache/poi/hsmf/datatypes/Chunks.java b/src/scratchpad/src/org/apache/poi/hsmf/datatypes/Chunks.java
index 9f68cc1670..d6b433c157 100644
--- a/src/scratchpad/src/org/apache/poi/hsmf/datatypes/Chunks.java
+++ b/src/scratchpad/src/org/apache/poi/hsmf/datatypes/Chunks.java
@@ -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:
diff --git a/src/scratchpad/src/org/apache/poi/hsmf/datatypes/RecipientChunks.java b/src/scratchpad/src/org/apache/poi/hsmf/datatypes/RecipientChunks.java
index b5157bb2c3..d03a96242f 100644
--- a/src/scratchpad/src/org/apache/poi/hsmf/datatypes/RecipientChunks.java
+++ b/src/scratchpad/src/org/apache/poi/hsmf/datatypes/RecipientChunks.java
@@ -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:
diff --git a/src/scratchpad/testcases/org/apache/poi/hsmf/TestFileWithAttachmentsRead.java b/src/scratchpad/testcases/org/apache/poi/hsmf/TestFileWithAttachmentsRead.java
index c3fcda741f..cd8bfbf110 100644
--- a/src/scratchpad/testcases/org/apache/poi/hsmf/TestFileWithAttachmentsRead.java
+++ b/src/scratchpad/testcases/org/apache/poi/hsmf/TestFileWithAttachmentsRead.java
@@ -17,18 +17,13 @@
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);
+ }
}
diff --git a/src/scratchpad/testcases/org/apache/poi/hsmf/parsers/TestPOIFSChunkParser.java b/src/scratchpad/testcases/org/apache/poi/hsmf/parsers/TestPOIFSChunkParser.java
index f379d8b2b4..5c9e55f96b 100644
--- a/src/scratchpad/testcases/org/apache/poi/hsmf/parsers/TestPOIFSChunkParser.java
+++ b/src/scratchpad/testcases/org/apache/poi/hsmf/parsers/TestPOIFSChunkParser.java
@@ -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;