1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package net.sf.wallace.messages;
20
21 import javax.mail.Folder;
22 import javax.mail.MessagingException;
23 import javax.mail.Store;
24
25 import net.sf.wallace.Command;
26 import net.sf.wallace.ServerResponse;
27 import net.sf.wallace.WallaceSession;
28 import net.sf.wallace.WallaceSessionState;
29 import net.sf.wallace.commands.AuthCommand;
30
31 import org.apache.commons.logging.Log;
32 import org.apache.commons.logging.LogFactory;
33
34 /***
35 * A SELECT command.
36 *
37 * @author rnewson
38 */
39 public final class SelectMessage extends MailboxMessage {
40
41 protected Log log = LogFactory.getLog(getClass());
42
43 public Command getCommand() {
44 return new SelectCommand();
45 }
46
47 private final class SelectCommand extends AuthCommand {
48
49 protected void onExecute(final WallaceSession wallaceSession) throws MessagingException {
50 assert getMailboxName() != null : "Mailbox name must not be null.";
51 final Store store = wallaceSession.getStore();
52 assert store != null : "Store must not be null.";
53 final Folder root = store.getDefaultFolder();
54 final Folder folder = root.getFolder(getMailboxName());
55
56 if (!folder.exists()) {
57 wallaceSession.respond(new ServerResponse(SelectMessage.this, "NO " + getMailboxName() + " not found."));
58 return;
59 }
60
61 wallaceSession.setSelectedFolder(folder);
62 wallaceSession.setState(WallaceSessionState.SELECTED);
63
64 wallaceSession.respond(new ServerResponse(ServerResponse.Type.UNTAGGED,
65 "FLAGS (//Answered //Flagged //Deleted //Seen //Draft)"));
66 wallaceSession.respond(new ServerResponse(ServerResponse.Type.UNTAGGED,
67 "OK PERMANENTFLAGS (//Answered //Flagged //Deleted //Seen //Draft)"));
68 wallaceSession.respond(new ServerResponse(ServerResponse.Type.UNTAGGED, folder.getMessageCount() + " EXISTS"));
69 wallaceSession.respond(new ServerResponse(ServerResponse.Type.UNTAGGED, folder.getNewMessageCount() + " RECENT"));
70 wallaceSession.respond(new ServerResponse(ServerResponse.Type.UNTAGGED, "OK [UNSEEN " + folder.getUnreadMessageCount()
71 + "]"));
72 wallaceSession.respond(new ServerResponse(ServerResponse.Type.UNTAGGED, "OK [UIDVALIDITY 19740724]"));
73
74 wallaceSession.respond(new ServerResponse(SelectMessage.this, "OK [READ-WRITE] SELECT."));
75 }
76 }
77
78 }