Class ImapHostManagerImpl

  • All Implemented Interfaces:
    ImapConstants, ImapHostManager

    public class ImapHostManagerImpl
    extends java.lang.Object
    implements ImapHostManager, ImapConstants
    An initial implementation of an ImapHost. By default, uses, the InMemoryStore implementation of Store. TODO: Make the underlying store configurable with Phoenix.
    Version:
    $Revision: 109034 $
    Author:
    Darrell DeBoer
    • Constructor Detail

      • ImapHostManagerImpl

        public ImapHostManagerImpl()
        Hack constructor which creates an in-memory store, and creates a console logger.
      • ImapHostManagerImpl

        public ImapHostManagerImpl​(Store store)
    • Method Detail

      • getHierarchyDelimiter

        public char getHierarchyDelimiter()
        Description copied from interface: ImapHostManager
        Returns the hierarchy delimiter for mailboxes on this host.
        Specified by:
        getHierarchyDelimiter in interface ImapHostManager
        Returns:
        The hierarchy delimiter character.
      • getFolder

        public MailFolder getFolder​(GreenMailUser user,
                                    java.lang.String mailboxName,
                                    boolean mustExist)
                             throws FolderException
        Description copied from interface: ImapHostManager
        Returns a reference to an existing Mailbox. If mustExist == true, an exception is thrown if the requested mailbox doesn't exists on this server or the requesting user doesn't have at least lookup rights. If mustExist == false, simply returns null in this case.
        Specified by:
        getFolder in interface ImapHostManager
        Parameters:
        user - User making the request.
        mailboxName - String name of the target.
        mustExist - Specified behaviour where a mailbox is missing or non-viewable.
        Returns:
        an Mailbox reference.
        Throws:
        FolderException - if mailbox does not exist locally, and mustExist is true.
      • createMailbox

        public MailFolder createMailbox​(GreenMailUser user,
                                        java.lang.String mailboxName)
                                 throws AuthorizationException,
                                        FolderException
        Description copied from interface: ImapHostManager
        Returns a reference to a newly created Mailbox. The request should specify a mailbox that does not already exist on this server, that could exist on this server and that the user has rights to create. If a system allocates different namespaces to different hosts then a request to create a mailbox in a namespace not served by this host would be an error. It is an error to create a mailbox with the name of a mailbox that has been deleted, if that name is still in use.
        Specified by:
        createMailbox in interface ImapHostManager
        Parameters:
        user - User making the request.
        mailboxName - String name of the target
        Returns:
        an Mailbox reference.
        Throws:
        AuthorizationException - if mailbox could be created locally but user does not have create rights.
        FolderException - if mailbox already exists, locally or remotely, or if mailbox cannot be created locally.
        See Also:
        ImapHostManager.createMailbox(com.icegreen.greenmail.user.GreenMailUser, java.lang.String)
      • renameMailbox

        public void renameMailbox​(GreenMailUser user,
                                  java.lang.String oldMailboxName,
                                  java.lang.String newMailboxName)
                           throws FolderException,
                                  AuthorizationException
        Description copied from interface: ImapHostManager
        Renames an existing MailBox. The specified mailbox must already exist locally, the requested name must not exist locally already but must be able to be created locally and the user must have rights to delete the existing mailbox and create a mailbox with the new name. Any inferior hierarchical names must also be renamed. If INBOX is renamed, the contents of INBOX are transferred to a new folder with the new name, but INBOX is not deleted. If INBOX has inferior mailboxes these are not renamed. It is an error to create a mailbox with the name of a mailbox that has been deleted, if that name is still in use.
        Specified by:
        renameMailbox in interface ImapHostManager
        Parameters:
        user - User making the request.
        oldMailboxName - String name of the existing mailbox
        newMailboxName - String target new name
        Throws:
        FolderException - if mailbox does not exist locally, or there is an existing mailbox with the new name.
        AuthorizationException - if user does not have rights to delete the existing mailbox or create the new mailbox.
        See Also:
        ImapHostManager.renameMailbox(com.icegreen.greenmail.user.GreenMailUser, java.lang.String, java.lang.String)
      • listSubscribedMailboxes

        public java.util.Collection listSubscribedMailboxes​(GreenMailUser user,
                                                            java.lang.String mailboxPattern)
                                                     throws FolderException
        Description copied from interface: ImapHostManager
        Returns an collection of mailboxes on this host. The specified user must have at least lookup rights for each mailbox returned. If the subscribedOnly flag is set, only mailboxes to which the specified user is currently subscribed should be returned. Implementations that may export circular hierarchies SHOULD restrict the levels of hierarchy returned. The depth suggested by rfc 2683 is 20 hierarchy levels.

        The reference name must be non-empty. If the mailbox name is empty, implementations must not throw either exception but must return a single String (described below) if the reference name specifies a local mailbox accessible to the user and a one-character String containing the hierarchy delimiter of the referenced namespace, otherwise.

        Each String returned should be a space seperated triple of name attributes, hierarchy delimiter and full mailbox name. The mailbox name should include the namespace and be relative to the specified user.

        RFC comments: Implementations SHOULD return quickly. They SHOULD NOT go to excess trouble to calculate\Marked or \Unmarked status.

        JAMES comment: By elimination, implementations should usually include \Noinferiors or \Noselect, if appropriate. Also, if the reference name and mailbox name resolve to a single local mailbox, implementations should establish all attributes.

        Note that servers cannot unilaterally remove mailboxes from the subscribed list. A request that attempts to list a deleted, but subscribed, mailbox must return that mailbox with the \Noselect attribute.

        Specified by:
        listSubscribedMailboxes in interface ImapHostManager
        Parameters:
        user - User making the request
        mailboxPattern - String name of a mailbox possible including a wildcard.
        Returns:
        Collection of mailboxes matching the pattern.
        Throws:
        FolderException - if the referenceName is not local or if referenceName and mailbox name resolve to a single mailbox which does not exist locally.
        See Also:
        ImapHostManager.listSubscribedMailboxes(com.icegreen.greenmail.user.GreenMailUser, java.lang.String)
      • listMailboxes

        public java.util.Collection listMailboxes​(GreenMailUser user,
                                                  java.lang.String mailboxPattern)
                                           throws FolderException
        Description copied from interface: ImapHostManager
        Returns an collection of mailboxes on this host. The specified user must have at least lookup rights for each mailbox returned. If the subscribedOnly flag is set, only mailboxes to which the specified user is currently subscribed should be returned. Implementations that may export circular hierarchies SHOULD restrict the levels of hierarchy returned. The depth suggested by rfc 2683 is 20 hierarchy levels.

        The reference name must be non-empty. If the mailbox name is empty, implementations must not throw either exception but must return a single String (described below) if the reference name specifies a local mailbox accessible to the user and a one-character String containing the hierarchy delimiter of the referenced namespace, otherwise.

        Each String returned should be a space seperated triple of name attributes, hierarchy delimiter and full mailbox name. The mailbox name should include the namespace and be relative to the specified user.

        RFC comments: Implementations SHOULD return quickly. They SHOULD NOT go to excess trouble to calculate\Marked or \Unmarked status.

        JAMES comment: By elimination, implementations should usually include \Noinferiors or \Noselect, if appropriate. Also, if the reference name and mailbox name resolve to a single local mailbox, implementations should establish all attributes.

        Specified by:
        listMailboxes in interface ImapHostManager
        Parameters:
        user - User making the request
        mailboxPattern - String name of a mailbox possible including a wildcard.
        Returns:
        Collection of mailboxes matching the pattern.
        Throws:
        FolderException - if the referenceName is not local or if referenceName and mailbox name resolve to a single mailbox which does not exist locally.
        See Also:
        ImapHostManager.listMailboxes(com.icegreen.greenmail.user.GreenMailUser, java.lang.String)