/** * */ package fr.cedrik.email.pop3.commands; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.commons.lang3.StringUtils; import fr.cedrik.email.FoldersList; import fr.cedrik.email.pop3.Context; import fr.cedrik.email.pop3.POP3Command; import fr.cedrik.email.pop3.ResponseStatus; import fr.cedrik.email.spi.Folder; import fr.cedrik.util.IteratorChain; /** * List available folders and change current folder * @author Cédrik LIME */ public class FOLDER extends BasePOP3Command implements POP3Command { public FOLDER() { } @Override public Iterator<String> call(Context context) throws IOException { FoldersList folders = context.remoteSession.getFolders(); if (StringUtils.isBlank(context.inputArgs)) { // no arguments: list available folders List<String> response = new ArrayList<String>(folders.size()+1); response.add(ResponseStatus.POSITIVE.toString("folders listing follows: " + folders.size() + " folders")); for (Folder folder : folders) { response.add(folder.toString()); } return response.iterator(); } else { // argument: change folder Folder requestedFolder = null; for (Folder folder : folders) { if (folder.getId().equals(context.inputArgs)) { requestedFolder = folder; break; } } if (requestedFolder == null) { return new IteratorChain<String>(ResponseStatus.NEGATIVE.toString("no such folder")); } context.remoteSession.setCurrentFolder(requestedFolder); return new IteratorChain<String>(ResponseStatus.POSITIVE.toString("current folder changed to: " + requestedFolder.getName())); } } }