/**
*
*/
package fr.cedrik.email.pop3.commands;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
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 LIST extends BasePOP3Command implements POP3Command {
public LIST() {
}
@Override
public Iterator<String> call(Context context) throws IOException {
int requestedMessageNumber = -1;
try {
requestedMessageNumber = Integer.parseInt(context.inputArgs);
} catch (NumberFormatException noInput) {
}
MessagesMetaData<? extends Message> 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 if present, may NOT refer to a message marked as deleted
List<? extends Message> maildrop;
if (requestedMessageNumber > 0) {
maildrop = new ArrayList<Message>(1);
((List<Message>)maildrop).add(messages.entries.get(requestedMessageNumber-1));
} else {
// TODO messages marked as deleted are not listed
maildrop = messages.entries;
}
List<String> response = new ArrayList<String>(maildrop.size()+1);
response.add(ResponseStatus.POSITIVE.toString("scan listing follows: " + maildrop.size() + " message(s)"));
int n = 1;
for (Message message : maildrop) {
response.add(""+n+' '+message.getSize());
++n;
}
return response.iterator();
}
}