I've added the basic commands for the POP3 protocol, but I can not do more with them until the interface for the mailbox is worked out.
I've started laying out some of the key ideas, and I wanted some feedback to see if this makes sense.
We already discussed creating a MailboxMBean that will provide access to the actual implementation. I think this will just consist of a single accesser method - get(String mailboxName).
Should security be integrated into the mailbox interface, or should it be a seperate MBean? Many protocols allow different types of authentication so I think it could be a complicated interface.
POP3 locks a mailbox and commits the changes when the connection is terminated via the QUIT command. It looks like IMAP allows individual folders (they call them mailboxes) to be 'selected'. So, I thought I would define a single Mailbox interface that can be locked. It would contain both messages and additional mailboxes, with methods to manipulate both. I'm not sure how the interface should be setup to allow both deferred commits (POP3) and immediate (IMAP).
I'm not really an IMAP expert though so I would appreciate any ideas about how to make it work well for both.
I say, do what works for POP and/or SMTP now and we'll refactor later when we get to IMAP.