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
This commit is contained in:
Nick Burch 2010-01-11 12:19:42 +00:00
parent e605489dc0
commit 5621bb0800
2 changed files with 58 additions and 1 deletions

View File

@ -51,6 +51,8 @@ public class MAPIMessage extends POIDocument {
private RecipientChunks recipientChunks; private RecipientChunks recipientChunks;
private AttachmentChunks[] attachmentChunks; private AttachmentChunks[] attachmentChunks;
private boolean returnNullOnMissingChunk = false;
/** /**
* Constructor for creating new files. * Constructor for creating new files.
* *
@ -125,7 +127,11 @@ public class MAPIMessage extends POIDocument {
*/ */
public String getStringFromChunk(StringChunk chunk) throws ChunkNotFoundException { public String getStringFromChunk(StringChunk chunk) throws ChunkNotFoundException {
if(chunk == null) { if(chunk == null) {
throw new ChunkNotFoundException(); if(returnNullOnMissingChunk) {
return null;
} else {
throw new ChunkNotFoundException();
}
} }
return chunk.getValue(); return chunk.getValue();
} }
@ -230,6 +236,8 @@ public class MAPIMessage extends POIDocument {
if(mainChunks.submissionChunk != null) { if(mainChunks.submissionChunk != null) {
return mainChunks.submissionChunk.getAcceptedAtTime(); return mainChunks.submissionChunk.getAcceptedAtTime();
} }
if(returnNullOnMissingChunk)
return null;
throw new ChunkNotFoundException(); throw new ChunkNotFoundException();
} }
@ -268,4 +276,25 @@ public class MAPIMessage extends POIDocument {
public void write(OutputStream out) throws IOException { public void write(OutputStream out) throws IOException {
throw new UnsupportedOperationException("Writing isn't yet supported for HSMF, sorry"); 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;
}
} }

View File

@ -22,6 +22,7 @@ import java.io.IOException;
import junit.framework.TestCase; import junit.framework.TestCase;
import org.apache.poi.POIDataSamples; import org.apache.poi.POIDataSamples;
import org.apache.poi.hsmf.exceptions.ChunkNotFoundException;
/** /**
* Tests to verify that we can perform basic opperations on * 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(0, outlook30.getAttachmentFiles().length);
assertEquals(2, attachments.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
}
}
} }