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);
}
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
}
};
}
Aggregations