Browse Source

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
tags/REL_3_7_BETA1
Nick Burch 14 years ago
parent
commit
14b87c4232

+ 30
- 1
src/scratchpad/src/org/apache/poi/hsmf/MAPIMessage.java 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;
}
}

+ 28
- 0
src/scratchpad/testcases/org/apache/poi/hsmf/TestBasics.java 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
}
}
}

Loading…
Cancel
Save