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.
*
* @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;

View 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

View 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:

View 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:

View File

@ -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);
}
if(attachment.attachMimeTag != null) {
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.FileNotFoundException;
import java.io.IOException;
import java.nio.charset.Charset;
import org.apache.poi.hsmf.MAPIMessage;
import org.apache.poi.hsmf.datatypes.AttachmentChunks;