* This command deletes a particular mail message from the
* mailbox.
*
*/
public Response onCommand(POP3Session session, Request request) {
POP3Response response = null;
if (session.getHandlerState() == POP3Session.TRANSACTION) {
int num = 0;
try {
num = Integer.parseInt(request.getArgument());
} catch (Exception e) {
response = new POP3Response(POP3Response.ERR_RESPONSE,"Usage: DELE [mail number]");
return response;
}
try {
List<Long> uidList = (List<Long>) session.getState().get(POP3Session.UID_LIST);
List<Long> deletedUidList = (List<Long>) session.getState().get(POP3Session.DELETED_UID_LIST);
Long uid = uidList.get(num -1);
if (deletedUidList.contains(uid)) {
StringBuilder responseBuffer =
new StringBuilder(64)
.append("Message (")
.append(num)
.append(") already deleted.");
response = new POP3Response(POP3Response.ERR_RESPONSE,responseBuffer.toString());
} else {
deletedUidList.add(uid);
// we are replacing our reference with "DELETED", so we have
// to dispose the no-more-referenced mail object.
response = new POP3Response(POP3Response.OK_RESPONSE,"Message deleted");
}
} catch (IndexOutOfBoundsException iob) {
StringBuilder responseBuffer =
new StringBuilder(64)
.append("Message (")
.append(num)
.append(") does not exist.");
response = new POP3Response(POP3Response.ERR_RESPONSE,responseBuffer.toString());
}
} else {
response = new POP3Response(POP3Response.ERR_RESPONSE);
}
return response;
}