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

@ -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;
}
}

View File

@ -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
}
}
}