Search in sources :

Example 1 with MailboxException

use of org.apache.james.mailbox.exception.MailboxException in project i2p.i2p-bote by i2p.

the class ImapService method create.

public static ImapService create(Configuration configuration, final PasswordVerifier passwordVerifier, EmailFolderManager folderManager) throws ConfigurationException {
    MapperFactory mailboxSessionMapperFactory = new MapperFactory(folderManager);
    Authenticator authenticator = createAuthenticator(passwordVerifier);
    Authorizator authorizator = new Authorizator() {

        @Override
        public AuthorizationState canLoginAsOtherUser(String userId, String otherUserId) throws MailboxException {
            return AuthorizationState.UNKNOWN_USER;
        }
    };
    MailboxACLResolver aclResolver = createMailboxACLResolver();
    GroupMembershipResolver groupMembershipResolver = new GroupMembershipResolver() {

        public boolean isMember(String user, String group) {
            return true;
        }
    };
    MessageParser messageParser = new MessageParser();
    MessageId.Factory messageIdFactory = new BoteMessageId.Factory();
    StoreMailboxManager mailboxManager = new StoreMailboxManager(mailboxSessionMapperFactory, authenticator, authorizator, aclResolver, groupMembershipResolver, messageParser, messageIdFactory, 0, 0);
    try {
        mailboxManager.init();
    } catch (MailboxException e) {
        throw new ConfigurationException(e);
    }
    SubscriptionManager subscriptionManager = createSubscriptionManager(folderManager);
    DefaultImapEncoderFactory encoderFactory = new DefaultImapEncoderFactory(new DefaultLocalizer(), true);
    MetricFactory metricFactory = new NoopMetricFactory();
    DefaultImapProcessorFactory processorFactory = new DefaultImapProcessorFactory();
    processorFactory.setMailboxManager(mailboxManager);
    processorFactory.setSubscriptionManager(subscriptionManager);
    processorFactory.setMetricFactory(metricFactory);
    return new ImapService(DefaultImapDecoderFactory.createDecoder(), encoderFactory.buildImapEncoder(), processorFactory.buildImapProcessor(), new ImapMetrics(metricFactory), configuration, mailboxSessionMapperFactory);
}
Also used : MailboxACLResolver(org.apache.james.mailbox.acl.MailboxACLResolver) MailboxException(org.apache.james.mailbox.exception.MailboxException) MessageParser(org.apache.james.mailbox.store.mail.model.impl.MessageParser) DefaultLocalizer(org.apache.james.imap.encode.main.DefaultLocalizer) MetricFactory(org.apache.james.metrics.api.MetricFactory) NoopMetricFactory(org.apache.james.metrics.api.NoopMetricFactory) LoggerFactory(org.slf4j.LoggerFactory) MetricFactory(org.apache.james.metrics.api.MetricFactory) DefaultImapProcessorFactory(org.apache.james.imap.processor.main.DefaultImapProcessorFactory) NoopMetricFactory(org.apache.james.metrics.api.NoopMetricFactory) SSLSocketFactory(javax.net.ssl.SSLSocketFactory) DefaultImapEncoderFactory(org.apache.james.imap.encode.main.DefaultImapEncoderFactory) DefaultImapDecoderFactory(org.apache.james.imap.main.DefaultImapDecoderFactory) StoreMailboxManager(org.apache.james.mailbox.store.StoreMailboxManager) SubscriptionManager(org.apache.james.mailbox.SubscriptionManager) ImapMetrics(org.apache.james.imapserver.netty.ImapMetrics) NoopMetricFactory(org.apache.james.metrics.api.NoopMetricFactory) ConfigurationException(org.apache.commons.configuration.ConfigurationException) GroupMembershipResolver(org.apache.james.mailbox.acl.GroupMembershipResolver) DefaultImapEncoderFactory(org.apache.james.imap.encode.main.DefaultImapEncoderFactory) Authorizator(org.apache.james.mailbox.store.Authorizator) DefaultImapProcessorFactory(org.apache.james.imap.processor.main.DefaultImapProcessorFactory) Authenticator(org.apache.james.mailbox.store.Authenticator) MessageId(org.apache.james.mailbox.model.MessageId)

Example 2 with MailboxException

use of org.apache.james.mailbox.exception.MailboxException in project i2p.i2p-bote by i2p.

the class MapperFactory method createMessageMapper.

@Override
public MessageMapper createMessageMapper(MailboxSession mailboxSession) throws MailboxException {
    return new AbstractMessageMapper(mailboxSession, uidProvider, modSeqProvider) {

        @Override
        public long countMessagesInMailbox(Mailbox mailbox) throws MailboxException {
            String mailboxName = mailbox.getName().toLowerCase();
            BoteMailbox boteMailbox = getMailboxes().get(mailboxName);
            return boteMailbox == null ? -1 : boteMailbox.getNumMessages();
        }

        @Override
        public long countUnseenMessagesInMailbox(Mailbox mailbox) throws MailboxException {
            int count = 0;
            BoteMailbox boteMailbox = (BoteMailbox) mailbox;
            for (BoteMessage message : boteMailbox.getAllMessages()) if (!message.isSeen())
                count++;
            return count;
        }

        @Override
        public void delete(Mailbox mailbox, MailboxMessage message) throws MailboxException {
            EmailFolder folder = ((BoteMailbox) mailbox).getFolder();
            MessageId messageId = message.getMessageId();
            boolean deleted = folderManager.deleteEmail(folder, messageId.serialize());
            if (!deleted)
                log.error("Can't delete Message " + messageId + " from folder " + folder);
        }

        @Override
        public Map<MessageUid, MessageMetaData> expungeMarkedForDeletionInMailbox(Mailbox mailbox, MessageRange set) throws MailboxException {
            final Map<MessageUid, MessageMetaData> filteredResult = new HashMap<>();
            Iterator<MailboxMessage> it = findInMailbox(mailbox, set, FetchType.Metadata, -1);
            while (it.hasNext()) {
                MailboxMessage message = it.next();
                if (message.isDeleted()) {
                    filteredResult.put(message.getUid(), new SimpleMessageMetaData(message));
                    delete(mailbox, message);
                }
            }
            return filteredResult;
        }

        @Override
        public MessageUid findFirstUnseenMessageUid(Mailbox mailbox) throws MailboxException {
            BoteMailbox boteMailbox = (BoteMailbox) mailbox;
            for (BoteMessage message : boteMailbox.getAllMessages()) if (!message.isSeen())
                return message.getUid();
            return null;
        }

        @Override
        public Iterator<MailboxMessage> findInMailbox(Mailbox mailbox, MessageRange set, FetchType type, int limit) throws MailboxException {
            BoteMailbox boteBox = (BoteMailbox) mailbox;
            return boteBox.getMessages(set, limit).iterator();
        }

        @Override
        public List<MessageUid> findRecentMessageUidsInMailbox(Mailbox mailbox) throws MailboxException {
            final List<MessageUid> results = new ArrayList<>();
            BoteMailbox boteMailbox = (BoteMailbox) mailbox;
            for (BoteMessage message : boteMailbox.getAllMessages()) if (message.isRecent())
                results.add(message.getUid());
            Collections.sort(results);
            return results;
        }

        @Override
        public void endRequest() {
        }

        @Override
        public MessageMetaData copy(Mailbox mailbox, MessageUid uid, long modSeq, MailboxMessage original) throws MailboxException {
            BoteMailbox boteBox = (BoteMailbox) mailbox;
            try {
                BoteMessage newMessage = new BoteMessage((BoteMessage) original);
                newMessage.setUid(uid);
                newMessage.setModSeq(modSeq);
                Flags flags = original.createFlags();
                // Mark message as recent as it is a copy
                flags.add(Flag.RECENT);
                newMessage.setFlags(flags);
                boteBox.add(newMessage);
                return new SimpleMessageMetaData(newMessage);
            } catch (Exception e) {
                throw new MailboxException("Can't copy message [" + original + "] to folder [" + mailbox + "]");
            }
        }

        @Override
        public MessageMetaData move(Mailbox mailbox, MailboxMessage message) throws MailboxException {
            MessageMetaData metadata = copy(mailbox, message);
            delete(mailbox, message);
            return metadata;
        }

        @Override
        public Flags getApplicableFlag(Mailbox mailbox) throws MailboxException {
            Flags flags = new Flags();
            flags.add(Flag.ANSWERED);
            flags.add(Flag.DELETED);
            flags.add(Flag.RECENT);
            flags.add(Flag.SEEN);
            return flags;
        }

        /**
         * Updates the metadata
         */
        @Override
        protected MessageMetaData save(Mailbox mailbox, MailboxMessage message) throws MailboxException {
            // (I2P-Bote does this already, plus the email shouldn't show up in "sent" until it's actually been sent to the DHT)
            if (!(message instanceof BoteMessage))
                return new SimpleMessageMetaData(message);
            BoteMailbox boteBox = (BoteMailbox) mailbox;
            BoteMessage boteMessage = (BoteMessage) message;
            try {
                boteBox.saveMetadata(boteMessage);
                return new SimpleMessageMetaData(message);
            } catch (Exception e) {
                throw new MailboxException("Can't add message to folder " + boteBox.getFolder(), e);
            }
        }

        @Override
        protected void begin() throws MailboxException {
        // not implemented for now
        }

        @Override
        protected void commit() throws MailboxException {
        // not implemented for now
        }

        @Override
        protected void rollback() throws MailboxException {
        // not implemented for now
        }
    };
}
Also used : MessageMetaData(org.apache.james.mailbox.model.MessageMetaData) SimpleMessageMetaData(org.apache.james.mailbox.store.SimpleMessageMetaData) MailboxException(org.apache.james.mailbox.exception.MailboxException) MessageUid(org.apache.james.mailbox.MessageUid) HashMap(java.util.HashMap) SimpleMessageMetaData(org.apache.james.mailbox.store.SimpleMessageMetaData) ArrayList(java.util.ArrayList) Flags(javax.mail.Flags) MailboxException(org.apache.james.mailbox.exception.MailboxException) MailboxNotFoundException(org.apache.james.mailbox.exception.MailboxNotFoundException) SubscriptionException(org.apache.james.mailbox.exception.SubscriptionException) Mailbox(org.apache.james.mailbox.store.mail.model.Mailbox) MessageRange(org.apache.james.mailbox.model.MessageRange) AbstractMessageMapper(org.apache.james.mailbox.store.mail.AbstractMessageMapper) MailboxMessage(org.apache.james.mailbox.store.mail.model.MailboxMessage) EmailFolder(i2p.bote.folder.EmailFolder) MessageId(org.apache.james.mailbox.model.MessageId)

Aggregations

MailboxException (org.apache.james.mailbox.exception.MailboxException)2 MessageId (org.apache.james.mailbox.model.MessageId)2 EmailFolder (i2p.bote.folder.EmailFolder)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 Flags (javax.mail.Flags)1 SSLSocketFactory (javax.net.ssl.SSLSocketFactory)1 ConfigurationException (org.apache.commons.configuration.ConfigurationException)1 DefaultImapEncoderFactory (org.apache.james.imap.encode.main.DefaultImapEncoderFactory)1 DefaultLocalizer (org.apache.james.imap.encode.main.DefaultLocalizer)1 DefaultImapDecoderFactory (org.apache.james.imap.main.DefaultImapDecoderFactory)1 DefaultImapProcessorFactory (org.apache.james.imap.processor.main.DefaultImapProcessorFactory)1 ImapMetrics (org.apache.james.imapserver.netty.ImapMetrics)1 MessageUid (org.apache.james.mailbox.MessageUid)1 SubscriptionManager (org.apache.james.mailbox.SubscriptionManager)1 GroupMembershipResolver (org.apache.james.mailbox.acl.GroupMembershipResolver)1 MailboxACLResolver (org.apache.james.mailbox.acl.MailboxACLResolver)1 MailboxNotFoundException (org.apache.james.mailbox.exception.MailboxNotFoundException)1 SubscriptionException (org.apache.james.mailbox.exception.SubscriptionException)1 MessageMetaData (org.apache.james.mailbox.model.MessageMetaData)1