*/
public Email retrieveMessage(EmailID emailID, boolean decompress, boolean decrypt, boolean headersOnly) throws MessageStoreException {
if (emailID==null || emailID.getVolume()==null || emailID.getUniqueID()==null)
throw new MessageStoreException("assertion failure: null emailID, volume or uniqueId",logger);
String uniqueId = emailID.getUniqueID();
Volume volume = emailID.getVolume();
logger.debug("retrieveMessage() {"+emailID+",retrieveHeadersOnly='" + headersOnly + "', decompress='" + decompress + "',decrypt='"+decrypt+"'");
String messageFileName = getMessageFileName(emailID);
InputStream is = null;
try {
is = getRawMessageInputStream(emailID, decompress, decrypt);
} catch(FileNotFoundException fnfe)
{
throw new MessageStoreException("message file not found {filename='" + messageFileName + "'}", fnfe, logger);
} catch(IOException io)
{
try
{
if (is!=null)
is.close();
}
catch(Exception e) { }
throw new MessageStoreException("failed to retrieve message {filename='" + messageFileName + "'}", io, logger);
}
Email message = null;
try {
message = new Email(is, headersOnly, emailID);
} catch(MessagingException me)
{
try
{
is.close();
}
catch(Exception e) { }
throw new MessageStoreException("failed to decode message {filename='" + messageFileName + "'}", me, logger);
} finally
{
if(is != null)
try
{
is.close();
}
catch(IOException ioe)
{
throw new MessageStoreException("error closing message {file '" + messageFileName + "'}", ioe, logger);
}
}
try
{
logger.debug("retrieved message {filename='" + messageFileName + "'," + message+"}");
}
catch(Exception e)
{
throw new MessageStoreException("retrieved message does not appear to be well formed.", e, logger);
}
return message;
}