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
This commit is contained in:
Nick Burch 2010-01-08 12:08:35 +00:00
parent 795ed3ce55
commit 58806414fc
6 changed files with 70 additions and 46 deletions

View File

@ -36,7 +36,10 @@ import org.apache.poi.poifs.filesystem.POIFSFileSystem;
/** /**
* Reads an Outlook MSG File in and provides hooks into its data structure. * 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 { public class MAPIMessage {
private POIFSFileSystem fs; private POIFSFileSystem fs;

View File

@ -27,9 +27,13 @@ public class AttachmentChunks implements ChunkGroup {
/* String parts of Outlook Messages Attachments that are currently known */ /* String parts of Outlook Messages Attachments that are currently known */
public static final int ATTACH_DATA = 0x3701; public static final int ATTACH_DATA = 0x3701;
// 0x3702 might be "attach encoding"
public static final int ATTACH_EXTENSION = 0x3703; public static final int ATTACH_EXTENSION = 0x3703;
public static final int ATTACH_FILENAME = 0x3704; 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_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 static final int ATTACH_MIME_TAG = 0x370E;
public ByteChunk attachData; public ByteChunk attachData;
@ -37,6 +41,12 @@ public class AttachmentChunks implements ChunkGroup {
public StringChunk attachFileName; public StringChunk attachFileName;
public StringChunk attachLongFileName; public StringChunk attachLongFileName;
public StringChunk attachMimeTag; 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. * What the POIFS name of this attachment is.
@ -82,6 +92,8 @@ public class AttachmentChunks implements ChunkGroup {
case ATTACH_MIME_TAG: case ATTACH_MIME_TAG:
attachMimeTag = (StringChunk)chunk; attachMimeTag = (StringChunk)chunk;
break; break;
case ATTACH_RENDERING_WMF:
attachRenderingWMF = (ByteChunk)chunk;
} }
// And add to the main list // And add to the main list

View File

@ -86,6 +86,7 @@ public final class Chunks implements ChunkGroup {
subjectChunk = (StringChunk)chunk; subjectChunk = (StringChunk)chunk;
break; break;
case DATE: case DATE:
// TODO - parse
dateChunk = (ByteChunk)chunk; dateChunk = (ByteChunk)chunk;
break; break;
case CONVERSATION_TOPIC: case CONVERSATION_TOPIC:

View File

@ -53,6 +53,7 @@ public final class RecipientChunks implements ChunkGroup {
public void record(Chunk chunk) { public void record(Chunk chunk) {
switch(chunk.getChunkId()) { switch(chunk.getChunkId()) {
case RECIPIENT_SEARCH: case RECIPIENT_SEARCH:
// TODO - parse
recipientSearchChunk = (ByteChunk)chunk; recipientSearchChunk = (ByteChunk)chunk;
break; break;
case RECIPIENT_EMAIL: case RECIPIENT_EMAIL:

View File

@ -17,18 +17,13 @@
package org.apache.poi.hsmf; package org.apache.poi.hsmf;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import junit.framework.TestCase; 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.datatypes.AttachmentChunks;
import org.apache.poi.hsmf.exceptions.ChunkNotFoundException; import org.apache.poi.hsmf.exceptions.ChunkNotFoundException;
import org.apache.poi.POIDataSamples;
/** /**
* Tests to verify that we can read attachments from msg file * Tests to verify that we can read attachments from msg file
@ -54,7 +49,6 @@ public class TestFileWithAttachmentsRead extends TestCase {
* @throws ChunkNotFoundException * @throws ChunkNotFoundException
* *
*/ */
// public void testReadDisplayCC() throws ChunkNotFoundException {
public void testRetrieveAttachments() { public void testRetrieveAttachments() {
AttachmentChunks[] attachments = mapiMessage.getAttachmentFiles(); AttachmentChunks[] attachments = mapiMessage.getAttachmentFiles();
int obtained = attachments.length; int obtained = attachments.length;
@ -65,21 +59,35 @@ public class TestFileWithAttachmentsRead extends TestCase {
/** /**
* Test to see if attachments are not empty. * Test to see if attachments are not empty.
*
* @throws ChunkNotFoundException
*
*/ */
public void testReadAttachments() throws IOException { public void testReadAttachments() throws IOException {
AttachmentChunks[] attachments = mapiMessage.getAttachmentFiles(); AttachmentChunks[] attachments = mapiMessage.getAttachmentFiles();
// Basic checks
for (AttachmentChunks attachment : attachments) { for (AttachmentChunks attachment : attachments) {
assertTrue(attachment.attachFileName.getValue().length() > 0); assertTrue(attachment.attachFileName.getValue().length() > 0);
assertTrue(attachment.attachLongFileName.getValue().length() > 0); assertTrue(attachment.attachLongFileName.getValue().length() > 0);
assertTrue(attachment.attachExtension.getValue().length() > 0); assertTrue(attachment.attachExtension.getValue().length() > 0);
if(attachment.attachMimeTag != null) {
assertTrue(attachment.attachMimeTag.getValue().length() > 0); assertTrue(attachment.attachMimeTag.getValue().length() > 0);
} }
// TODO better checking
} }
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);
}
} }

View File

@ -20,7 +20,6 @@ package org.apache.poi.hsmf.parsers;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.Charset;
import org.apache.poi.hsmf.MAPIMessage; import org.apache.poi.hsmf.MAPIMessage;
import org.apache.poi.hsmf.datatypes.AttachmentChunks; import org.apache.poi.hsmf.datatypes.AttachmentChunks;