From 14b87c423268c2aeee30ddca0bc04290a95ad452 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Mon, 11 Jan 2010 12:19:42 +0000 Subject: [PATCH] Make it possible to return null on missing chunks, rather than the exception git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@897847 13f79535-47bb-0310-9956-ffa450edef68 --- .../src/org/apache/poi/hsmf/MAPIMessage.java | 31 ++++++++++++++++++- .../org/apache/poi/hsmf/TestBasics.java | 28 +++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/src/scratchpad/src/org/apache/poi/hsmf/MAPIMessage.java b/src/scratchpad/src/org/apache/poi/hsmf/MAPIMessage.java index ea7335c5b1..911119b19e 100644 --- a/src/scratchpad/src/org/apache/poi/hsmf/MAPIMessage.java +++ b/src/scratchpad/src/org/apache/poi/hsmf/MAPIMessage.java @@ -50,6 +50,8 @@ public class MAPIMessage extends POIDocument { private NameIdChunks nameIdChunks; private RecipientChunks recipientChunks; private AttachmentChunks[] attachmentChunks; + + private boolean returnNullOnMissingChunk = false; /** * Constructor for creating new files. @@ -125,7 +127,11 @@ public class MAPIMessage extends POIDocument { */ public String getStringFromChunk(StringChunk chunk) throws ChunkNotFoundException { if(chunk == null) { - throw new ChunkNotFoundException(); + if(returnNullOnMissingChunk) { + return null; + } else { + throw new ChunkNotFoundException(); + } } return chunk.getValue(); } @@ -230,6 +236,8 @@ public class MAPIMessage extends POIDocument { if(mainChunks.submissionChunk != null) { return mainChunks.submissionChunk.getAcceptedAtTime(); } + if(returnNullOnMissingChunk) + return null; throw new ChunkNotFoundException(); } @@ -268,4 +276,25 @@ public class MAPIMessage extends POIDocument { public void write(OutputStream out) throws IOException { throw new UnsupportedOperationException("Writing isn't yet supported for HSMF, sorry"); } + + + /** + * Will you get a null on a missing chunk, or a + * {@link ChunkNotFoundException} (default is the + * exception). + */ + public boolean isReturnNullOnMissingChunk() { + return returnNullOnMissingChunk; + } + + /** + * Sets whether on asking for a missing chunk, + * you get back null or a {@link ChunkNotFoundException} + * (default is the exception). + */ + public void setReturnNullOnMissingChunk(boolean returnNullOnMissingChunk) { + this.returnNullOnMissingChunk = returnNullOnMissingChunk; + } + + } diff --git a/src/scratchpad/testcases/org/apache/poi/hsmf/TestBasics.java b/src/scratchpad/testcases/org/apache/poi/hsmf/TestBasics.java index 793d9ade0a..008a4edba4 100644 --- a/src/scratchpad/testcases/org/apache/poi/hsmf/TestBasics.java +++ b/src/scratchpad/testcases/org/apache/poi/hsmf/TestBasics.java @@ -22,6 +22,7 @@ import java.io.IOException; import junit.framework.TestCase; import org.apache.poi.POIDataSamples; +import org.apache.poi.hsmf.exceptions.ChunkNotFoundException; /** * Tests to verify that we can perform basic opperations on @@ -74,4 +75,31 @@ public final class TestBasics extends TestCase { assertEquals(0, outlook30.getAttachmentFiles().length); assertEquals(2, attachments.getAttachmentFiles().length); } + + /** + * Test missing chunks + */ + public void testMissingChunks() throws Exception { + assertEquals(false, attachments.isReturnNullOnMissingChunk()); + + try { + attachments.getMessageDate(); + fail(); + } catch(ChunkNotFoundException e) { + // Good + } + + attachments.setReturnNullOnMissingChunk(true); + + assertEquals(null, attachments.getMessageDate()); + + attachments.setReturnNullOnMissingChunk(false); + + try { + attachments.getMessageDate(); + fail(); + } catch(ChunkNotFoundException e) { + // Good + } + } } -- 2.39.5