summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/scratchpad/src/org/apache/poi/hsmf/datatypes/AttachmentChunks.java15
-rw-r--r--src/scratchpad/src/org/apache/poi/hsmf/datatypes/Chunk.java6
-rw-r--r--src/scratchpad/testcases/org/apache/poi/hsmf/TestFileWithAttachmentsRead.java39
-rw-r--r--test-data/hsmf/attachment_msg_inlineImg.msgbin0 -> 147456 bytes
4 files changed, 53 insertions, 7 deletions
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 5b782b4389..043ef88c28 100644
--- a/src/scratchpad/src/org/apache/poi/hsmf/datatypes/AttachmentChunks.java
+++ b/src/scratchpad/src/org/apache/poi/hsmf/datatypes/AttachmentChunks.java
@@ -16,6 +16,7 @@
==================================================================== */
package org.apache.poi.hsmf.datatypes;
+import static org.apache.poi.hsmf.datatypes.MAPIProperty.ATTACH_CONTENT_ID;
import static org.apache.poi.hsmf.datatypes.MAPIProperty.ATTACH_DATA;
import static org.apache.poi.hsmf.datatypes.MAPIProperty.ATTACH_EXTENSION;
import static org.apache.poi.hsmf.datatypes.MAPIProperty.ATTACH_FILENAME;
@@ -47,6 +48,7 @@ public class AttachmentChunks implements ChunkGroup {
private StringChunk attachLongFileName;
private StringChunk attachMimeTag;
private DirectoryChunk attachmentDirectory;
+ private StringChunk attachContentId;
/**
* This is in WMF Format. You'll probably want to pass it to Apache Batik to
@@ -158,6 +160,13 @@ public class AttachmentChunks implements ChunkGroup {
}
/**
+ * @return the attachment content ID
+ */
+ public StringChunk getAttachContentId() {
+ return attachContentId;
+ }
+
+ /**
* Called by the parser whenever a chunk is found.
*/
@Override
@@ -178,7 +187,7 @@ public class AttachmentChunks implements ChunkGroup {
} else if (chunk instanceof DirectoryChunk) {
attachmentDirectory = (DirectoryChunk) chunk;
} else {
- LOG.log(POILogger.ERROR, "Unexpected data chunk of type " + chunk);
+ LOG.log(POILogger.ERROR, "Unexpected data chunk of type " + chunk.getEntryName());
}
} else if (chunkId == ATTACH_EXTENSION.id) {
attachExtension = (StringChunk) chunk;
@@ -190,6 +199,10 @@ public class AttachmentChunks implements ChunkGroup {
attachMimeTag = (StringChunk) chunk;
} else if (chunkId == ATTACH_RENDERING.id) {
attachRenderingWMF = (ByteChunk) chunk;
+ } else if (chunkId == ATTACH_CONTENT_ID.id) {
+ attachContentId = (StringChunk) chunk;
+ } else {
+ LOG.log(POILogger.WARN, "Currently unsupported attachment chunk property will be ignored. " + chunk.getEntryName());
}
// And add to the main list
diff --git a/src/scratchpad/src/org/apache/poi/hsmf/datatypes/Chunk.java b/src/scratchpad/src/org/apache/poi/hsmf/datatypes/Chunk.java
index d4b333b64d..5073771fc3 100644
--- a/src/scratchpad/src/org/apache/poi/hsmf/datatypes/Chunk.java
+++ b/src/scratchpad/src/org/apache/poi/hsmf/datatypes/Chunk.java
@@ -27,9 +27,9 @@ import org.apache.poi.hsmf.datatypes.Types.MAPIType;
public abstract class Chunk {
public static final String DEFAULT_NAME_PREFIX = "__substg1.0_";
- private int chunkId;
- private MAPIType type;
- private String namePrefix;
+ private final int chunkId;
+ private final MAPIType type;
+ private final String namePrefix;
protected Chunk(String namePrefix, int chunkId, MAPIType type) {
this.namePrefix = namePrefix;
diff --git a/src/scratchpad/testcases/org/apache/poi/hsmf/TestFileWithAttachmentsRead.java b/src/scratchpad/testcases/org/apache/poi/hsmf/TestFileWithAttachmentsRead.java
index 9b4bbbd549..66f182df1a 100644
--- a/src/scratchpad/testcases/org/apache/poi/hsmf/TestFileWithAttachmentsRead.java
+++ b/src/scratchpad/testcases/org/apache/poi/hsmf/TestFileWithAttachmentsRead.java
@@ -31,6 +31,7 @@ import org.apache.poi.hsmf.exceptions.ChunkNotFoundException;
public class TestFileWithAttachmentsRead extends TestCase {
private final MAPIMessage twoSimpleAttachments;
private final MAPIMessage pdfMsgAttachments;
+ private final MAPIMessage inlineImgMsgAttachments;
/**
* Initialize this test, load up the attachment_test_msg.msg mapi message.
@@ -41,6 +42,7 @@ public class TestFileWithAttachmentsRead extends TestCase {
POIDataSamples samples = POIDataSamples.getHSMFInstance();
this.twoSimpleAttachments = new MAPIMessage(samples.openResourceAsStream("attachment_test_msg.msg"));
this.pdfMsgAttachments = new MAPIMessage(samples.openResourceAsStream("attachment_msg_pdf.msg"));
+ this.inlineImgMsgAttachments = new MAPIMessage(samples.openResourceAsStream("attachment_msg_inlineImg.msg"));
}
/**
@@ -60,6 +62,37 @@ public class TestFileWithAttachmentsRead extends TestCase {
}
/**
+ * Test to see if we get the correct Content-IDs of inline images.
+ */
+ public void testReadContentIDField() throws IOException {
+ AttachmentChunks[] attachments = inlineImgMsgAttachments.getAttachmentFiles();
+
+ AttachmentChunks attachment;
+
+ // Check in Content-ID field
+ attachment = inlineImgMsgAttachments.getAttachmentFiles()[0];
+ assertEquals("image001.png", attachment.getAttachFileName().getValue());
+ assertEquals(".png", attachment.getAttachExtension().getValue());
+ assertEquals("image001.png@01D0A524.96D40F30", attachment.getAttachContentId().getValue());
+
+ attachment = inlineImgMsgAttachments.getAttachmentFiles()[1];
+ assertEquals("image002.png", attachment.getAttachFileName().getValue());
+ assertEquals(".png", attachment.getAttachExtension().getValue());
+ assertEquals("image002.png@01D0A524.96D40F30", attachment.getAttachContentId().getValue());
+
+ attachment = inlineImgMsgAttachments.getAttachmentFiles()[2];
+ assertEquals("image003.png", attachment.getAttachFileName().getValue());
+ assertEquals(".png", attachment.getAttachExtension().getValue());
+ assertEquals("image003.png@01D0A526.B4C739C0", attachment.getAttachContentId().getValue());
+
+ attachment = inlineImgMsgAttachments.getAttachmentFiles()[3];
+ assertEquals("image006.jpg", attachment.getAttachFileName().getValue());
+ assertEquals(".jpg", attachment.getAttachExtension().getValue());
+ assertEquals("image006.jpg@01D0A526.B649E220", attachment.getAttachContentId().getValue());
+ }
+
+
+ /**
* Test to see if attachments are not empty.
*/
public void testReadAttachments() throws IOException {
@@ -83,14 +116,14 @@ public class TestFileWithAttachmentsRead extends TestCase {
assertEquals("test-unicode.doc", attachment.getAttachLongFileName().getValue());
assertEquals(".doc", attachment.getAttachExtension().getValue());
assertNull(attachment.getAttachMimeTag());
- assertEquals(24064, attachment.getAttachData().getValue().length);
+ assertEquals(24064, attachment.getAttachData().getValue().length); // or compare the hashes of the attachment data
attachment = twoSimpleAttachments.getAttachmentFiles()[1];
assertEquals("pj1.txt", attachment.getAttachFileName().getValue());
assertEquals("pj1.txt", attachment.getAttachLongFileName().getValue());
assertEquals(".txt", attachment.getAttachExtension().getValue());
assertNull(attachment.getAttachMimeTag());
- assertEquals(89, attachment.getAttachData().getValue().length);
+ assertEquals(89, attachment.getAttachData().getValue().length); // or compare the hashes of the attachment data
}
/**
@@ -109,7 +142,7 @@ public class TestFileWithAttachmentsRead extends TestCase {
assertEquals(".pdf", attachment.getAttachExtension().getValue());
assertNull(attachment.getAttachMimeTag());
assertNull(attachment.getAttachmentDirectory());
- assertEquals(13539, attachment.getAttachData().getValue().length);
+ assertEquals(13539, attachment.getAttachData().getValue().length); //or compare the hashes of the attachment data
// First in a nested message
attachment = pdfMsgAttachments.getAttachmentFiles()[0];
diff --git a/test-data/hsmf/attachment_msg_inlineImg.msg b/test-data/hsmf/attachment_msg_inlineImg.msg
new file mode 100644
index 0000000000..ee7abdfc0b
--- /dev/null
+++ b/test-data/hsmf/attachment_msg_inlineImg.msg
Binary files differ