Skip to content

Commit

Permalink
JAMES-1785 Using SystemMailboxesProvider to look up role and remove t…
Browse files Browse the repository at this point in the history
…he redundance code
  • Loading branch information
Quynh Nguyen committed Jan 24, 2017
1 parent c996365 commit 1acd459
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 32 deletions.
Expand Up @@ -24,15 +24,13 @@
import org.apache.james.jmap.exceptions.MailboxRoleNotFoundException;
import org.apache.james.jmap.model.mailbox.Role;
import org.apache.james.jmap.send.exception.MailShouldBeInOutboxException;
import org.apache.james.jmap.utils.SystemMailboxesProvider;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageIdManager;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.FetchGroupImpl;
import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MailboxMetaData;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.MailboxQuery;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.model.MessageId.Factory;
import org.apache.james.mailbox.model.MessageResult;
Expand All @@ -51,15 +49,18 @@ public class PostDequeueDecorator extends MailQueueItemDecorator {
private final MailboxManager mailboxManager;
private final Factory messageIdFactory;
private final MessageIdManager messageIdManager;
private final SystemMailboxesProvider systemMailboxesProvider;

public PostDequeueDecorator(MailQueueItem mailQueueItem,
MailboxManager mailboxManager,
MessageId.Factory messageIdFactory,
MessageIdManager messageIdManager) {
MailboxManager mailboxManager,
Factory messageIdFactory,
MessageIdManager messageIdManager,
SystemMailboxesProvider systemMailboxesProvider) {
super(mailQueueItem);
this.mailboxManager = mailboxManager;
this.messageIdFactory = messageIdFactory;
this.messageIdManager = messageIdManager;
this.systemMailboxesProvider = systemMailboxesProvider;
}

@Override
Expand Down Expand Up @@ -95,7 +96,7 @@ private boolean checkMessageIdAttribute() {
try {
messageIdFactory.fromString((String) messageId);
} catch (Exception e) {
LOG.error("Invalid messageId: " + (String) messageId);
LOG.error("Invalid messageId: " + messageId);
return false;
}
return true;
Expand Down Expand Up @@ -123,28 +124,13 @@ private void assertMessageBelongsToOutbox(MessageId messageId, MailboxSession ma
}

private MailboxId getSentMailboxId(MailboxSession session) throws MailboxRoleNotFoundException, MailboxException {
return getMailboxIdForRole(Role.SENT, session);
return systemMailboxesProvider.findMailbox(Role.SENT, session)
.getId();
}

private MailboxId getOutboxMailboxId(MailboxSession session) throws MailboxRoleNotFoundException, MailboxException {
return getMailboxIdForRole(Role.OUTBOX, session);
return systemMailboxesProvider.findMailbox(Role.OUTBOX, session)
.getId();
}

private MailboxId getMailboxIdForRole(Role role, MailboxSession session) throws MailboxRoleNotFoundException, MailboxException {
MailboxQuery allUserMailboxesQuery = MailboxQuery.builder(session)
.privateUserMailboxes()
.build();
return mailboxManager.search(allUserMailboxesQuery, session)
.stream()
.filter(meta -> hasRole(meta.getPath(), role))
.map(MailboxMetaData::getId)
.findFirst()
.orElseThrow(() -> new MailboxRoleNotFoundException(role));
}

private boolean hasRole(MailboxPath mailBoxPath, Role role) {
return Role.from(mailBoxPath.getName())
.map(role::equals)
.orElse(false);
}
}
Expand Up @@ -21,9 +21,9 @@

import javax.inject.Inject;

import org.apache.james.jmap.utils.SystemMailboxesProvider;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MessageIdManager;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.model.MessageId.Factory;
import org.apache.james.queue.api.MailQueue.MailQueueItem;
import org.apache.james.queue.api.MailQueueItemDecoratorFactory;
Expand All @@ -32,18 +32,20 @@ public class PostDequeueDecoratorFactory implements MailQueueItemDecoratorFactor
private final MailboxManager mailboxManager;
private final Factory messageIdFactory;
private final MessageIdManager messageIdManager;
private final SystemMailboxesProvider systemMailboxesProvider;

@Inject
public PostDequeueDecoratorFactory(MailboxManager mailboxManager, MessageId.Factory messageIdFactory,
MessageIdManager messageIdManager) {
public PostDequeueDecoratorFactory(MailboxManager mailboxManager, Factory messageIdFactory,
MessageIdManager messageIdManager, SystemMailboxesProvider systemMailboxesProvider) {
this.mailboxManager = mailboxManager;
this.messageIdFactory = messageIdFactory;
this.messageIdManager = messageIdManager;
this.systemMailboxesProvider = systemMailboxesProvider;
}

@Override
public MailQueueItemDecorator decorate(MailQueueItem mailQueueItem) {
return new PostDequeueDecorator(mailQueueItem, mailboxManager, messageIdFactory, messageIdManager);
return new PostDequeueDecorator(mailQueueItem, mailboxManager, messageIdFactory, messageIdManager, systemMailboxesProvider);
}

}
Expand Up @@ -21,11 +21,17 @@

import java.util.stream.Stream;

import org.apache.james.jmap.exceptions.MailboxRoleNotFoundException;
import org.apache.james.jmap.model.mailbox.Role;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageManager;
import org.apache.james.mailbox.exception.MailboxException;

public interface SystemMailboxesProvider {
Stream<MessageManager> listMailboxes(Role aRole, MailboxSession session) throws MailboxException;

default MessageManager findMailbox(Role role, MailboxSession session) throws MailboxException {
return listMailboxes(role, session).findAny()
.orElseThrow(() -> new MailboxRoleNotFoundException(role));
}
}
Expand Up @@ -41,7 +41,8 @@ public class SystemMailboxesProviderImpl implements SystemMailboxesProvider {
private final MailboxManager mailboxManager;

@Inject
@VisibleForTesting SystemMailboxesProviderImpl(MailboxManager mailboxManager) {
@VisibleForTesting
public SystemMailboxesProviderImpl(MailboxManager mailboxManager) {
this.mailboxManager = mailboxManager;
}

Expand Down
Expand Up @@ -36,6 +36,7 @@
import javax.mail.Flags;

import org.apache.james.jmap.exceptions.AttachmentsNotFoundException;
import org.apache.james.jmap.exceptions.MailboxRoleNotFoundException;
import org.apache.james.jmap.methods.ValueWithId.CreationMessageEntry;
import org.apache.james.jmap.model.Attachment;
import org.apache.james.jmap.model.BlobId;
Expand Down
Expand Up @@ -31,6 +31,7 @@

import org.apache.james.jmap.exceptions.MailboxRoleNotFoundException;
import org.apache.james.jmap.send.exception.MailShouldBeInOutboxException;
import org.apache.james.jmap.utils.SystemMailboxesProviderImpl;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageManager;
Expand Down Expand Up @@ -76,7 +77,7 @@ public void init() throws Exception {
mail = FakeMail.defaultFakeMail();
when(mockedMailQueueItem.getMail()).thenReturn(mail);
testee = new PostDequeueDecorator(mockedMailQueueItem, mailboxManager, new InMemoryMessageId.Factory(),
inMemoryIntegrationResources.createMessageIdManager(mailboxManager));
inMemoryIntegrationResources.createMessageIdManager(mailboxManager), new SystemMailboxesProviderImpl(mailboxManager));
}

@Test
Expand Down

0 comments on commit 1acd459

Please sign in to comment.