/**
*
*/
package fr.cedrik.email.pop3.commands;
import java.io.IOException;
import java.util.Iterator;
import fr.cedrik.email.MessagesMetaData;
import fr.cedrik.email.pop3.Context;
import fr.cedrik.email.pop3.POP3Command;
import fr.cedrik.email.pop3.ResponseStatus;
import fr.cedrik.email.spi.Message;
import fr.cedrik.util.IteratorChain;
/**
* @author Cédrik LIME
*/
public class DELE extends BasePOP3Command implements POP3Command {
public DELE() {
}
@Override
public Iterator<String> call(Context context) throws IOException {
int requestedMessageNumber = -1;
try {
requestedMessageNumber = Integer.parseInt(context.inputArgs);
} catch (NumberFormatException noInput) {
return new IteratorChain<String>(ResponseStatus.NEGATIVE.toString("no such message"));
}
MessagesMetaData<?> messages = context.remoteSession.getMessagesMetaData();
if (requestedMessageNumber > messages.entries.size()) {
return new IteratorChain<String>(ResponseStatus.NEGATIVE.toString("no such message, only " + messages.entries.size() + " messages in maildrop"));
}
// TODO may NOT refer to a message marked as deleted: -ERR message 2 already deleted
Message message = messages.entries.get(requestedMessageNumber - 1);
context.remoteSession.deleteMessage(message);
return new IteratorChain<String>(ResponseStatus.POSITIVE.toString("message " + requestedMessageNumber + " (" + message.getId() + ") deleted"));
}
}