You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2017/01/24 05:49:03 UTC

[03/15] james-project git commit: JAMES-1785 Using SystemMailboxesProvider to look up role and remove the redundance code

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 <qn...@linagora.com>
Authored: Thu Jan 19 17:46:58 2017 +0700
Committer: Quynh Nguyen <qn...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org