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:
parent
795ed3ce55
commit
58806414fc
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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:
|
||||||
|
@ -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:
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user