JAMES-1785 Using SystemMailboxesProvider to look up role and remove the redundance code
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/1acd459a Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1acd459a Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1acd459a Branch: refs/heads/master Commit: 1acd459ab233aa41a40cfd2985c5753b516cb452 Parents: c996365 Author: Quynh Nguyen <qngu...@linagora.com> Authored: Thu Jan 19 17:46:58 2017 +0700 Committer: Quynh Nguyen <qngu...@linagora.com> Committed: Tue Jan 24 09:45:34 2017 +0700 ---------------------------------------------------------------------- .../james/jmap/send/PostDequeueDecorator.java | 38 +++++++------------- .../jmap/send/PostDequeueDecoratorFactory.java | 10 +++--- .../jmap/utils/SystemMailboxesProvider.java | 6 ++++ .../jmap/utils/SystemMailboxesProviderImpl.java | 3 +- .../SetMessagesCreationProcessorTest.java | 1 + .../jmap/send/PostDequeueDecoratorTest.java | 3 +- 6 files changed, 29 insertions(+), 32 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/1acd459a/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java index 9179b7e..8a122db 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java @@ -24,15 +24,13 @@ import java.util.List; 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; @@ -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 @@ -95,7 +96,7 @@ public class PostDequeueDecorator extends MailQueueItemDecorator { try { messageIdFactory.fromString((String) messageId); } catch (Exception e) { - LOG.error("Invalid messageId: " + (String) messageId); + LOG.error("Invalid messageId: " + messageId); return false; } return true; @@ -123,28 +124,13 @@ public class PostDequeueDecorator extends MailQueueItemDecorator { } 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); - } } http://git-wip-us.apache.org/repos/asf/james-project/blob/1acd459a/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecoratorFactory.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecoratorFactory.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecoratorFactory.java index a43de17..5114fe8 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecoratorFactory.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecoratorFactory.java @@ -21,9 +21,9 @@ package org.apache.james.jmap.send; 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; @@ -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); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/1acd459a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SystemMailboxesProvider.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SystemMailboxesProvider.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SystemMailboxesProvider.java index e3d605d..bc01d52 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SystemMailboxesProvider.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SystemMailboxesProvider.java @@ -21,6 +21,7 @@ package org.apache.james.jmap.utils; 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; @@ -28,4 +29,9 @@ 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)); + } } http://git-wip-us.apache.org/repos/asf/james-project/blob/1acd459a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SystemMailboxesProviderImpl.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SystemMailboxesProviderImpl.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SystemMailboxesProviderImpl.java index c5d36fe..181fafd 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SystemMailboxesProviderImpl.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SystemMailboxesProviderImpl.java @@ -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; } http://git-wip-us.apache.org/repos/asf/james-project/blob/1acd459a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMessagesCreationProcessorTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMessagesCreationProcessorTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMessagesCreationProcessorTest.java index 10ba230..b5605bc 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMessagesCreationProcessorTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMessagesCreationProcessorTest.java @@ -36,6 +36,7 @@ import java.util.stream.Stream; 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; http://git-wip-us.apache.org/repos/asf/james-project/blob/1acd459a/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/PostDequeueDecoratorTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/PostDequeueDecoratorTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/PostDequeueDecoratorTest.java index 477e371..3c6fd2e 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/PostDequeueDecoratorTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/PostDequeueDecoratorTest.java @@ -31,6 +31,7 @@ import javax.mail.Flags; 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; @@ -76,7 +77,7 @@ public class PostDequeueDecoratorTest { 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 --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org