JAMES-1874 add builder to Mailbox Factory

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/5acec718
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/5acec718
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/5acec718

Branch: refs/heads/master
Commit: 5acec718cbe15f9837c118406e126c9c10e5117b
Parents: f2c5821
Author: Luc DUZAN <ldu...@linagora.com>
Authored: Tue Feb 14 16:05:43 2017 +0100
Committer: Benoit Tellier <btell...@linagora.com>
Committed: Mon Feb 20 16:06:31 2017 +0700

----------------------------------------------------------------------
 .../james/jmap/methods/GetMailboxesMethod.java  | 11 +++-
 .../methods/SetMailboxesCreationProcessor.java  |  5 +-
 .../SetMailboxesDestructionProcessor.java       |  5 +-
 .../methods/SetMailboxesUpdateProcessor.java    |  5 +-
 .../apache/james/jmap/model/MailboxFactory.java | 57 ++++++++++++++------
 .../SetMailboxesUpdateProcessorTest.java        | 18 +++++--
 .../james/jmap/model/MailboxFactoryTest.java    | 12 ++++-
 7 files changed, 87 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/5acec718/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
index 58954f3..2f4eea9 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
@@ -104,7 +104,10 @@ public class GetMailboxesMethod implements Method {
         if (mailboxIds.isPresent()) {
             return mailboxIds.get()
                 .stream()
-                .map(mailboxId -> mailboxFactory.fromMailboxId(mailboxId, 
mailboxSession))
+                .map(mailboxId -> mailboxFactory.builder()
+                        .id(mailboxId)
+                        .session(mailboxSession)
+                        .build())
                 .flatMap(OptionalConverter::toStream);
         } else {
             List<MailboxMetaData> userMailboxes = mailboxManager.search(
@@ -113,7 +116,11 @@ public class GetMailboxesMethod implements Method {
             return userMailboxes
                 .stream()
                 .map(MailboxMetaData::getId)
-                .map(mailboxId -> mailboxFactory.fromMailboxId(mailboxId, 
userMailboxes, mailboxSession))
+                .map(mailboxId -> mailboxFactory.builder()
+                        .id(mailboxId)
+                        .session(mailboxSession)
+                        .usingPreloadedMailboxesMetadata(userMailboxes)
+                        .build())
                 .flatMap(OptionalConverter::toStream);
         }
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/5acec718/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessor.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessor.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessor.java
index 40221e9..cf7e676 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessor.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessor.java
@@ -106,7 +106,10 @@ public class SetMailboxesCreationProcessor implements 
SetMailboxesProcessor {
             ensureValidMailboxName(mailboxRequest, mailboxSession);
             MailboxPath mailboxPath = getMailboxPath(mailboxRequest, 
creationIdsToCreatedMailboxId, mailboxSession);
             Optional<MailboxId> mailboxId = 
OptionalConverter.fromGuava(mailboxManager.createMailbox(mailboxPath, 
mailboxSession));
-            Optional<Mailbox> mailbox = mailboxId.flatMap(id -> 
mailboxFactory.fromMailboxId(id, mailboxSession));
+            Optional<Mailbox> mailbox = mailboxId.flatMap(id -> 
mailboxFactory.builder()
+                    .id(id)
+                    .session(mailboxSession)
+                    .build());
             if (mailbox.isPresent()) {
                 subscriptionManager.subscribe(mailboxSession, 
mailboxPath.getName());
                 builder.created(mailboxCreationId, mailbox.get());

http://git-wip-us.apache.org/repos/asf/james-project/blob/5acec718/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesDestructionProcessor.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesDestructionProcessor.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesDestructionProcessor.java
index cd6e402..75a8395 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesDestructionProcessor.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesDestructionProcessor.java
@@ -86,7 +86,10 @@ public class SetMailboxesDestructionProcessor implements 
SetMailboxesProcessor {
     private ImmutableMap<MailboxId, Mailbox> 
mapDestroyRequests(SetMailboxesRequest request, MailboxSession mailboxSession) {
         ImmutableMap.Builder<MailboxId, Mailbox> idToMailboxBuilder = 
ImmutableMap.builder(); 
         request.getDestroy().stream()
-            .map(id -> mailboxFactory.fromMailboxId(id, mailboxSession))
+            .map(id -> mailboxFactory.builder()
+                    .id(id)
+                    .session(mailboxSession)
+                    .build())
             .filter(Optional::isPresent)
             .map(Optional::get)
             .forEach(mailbox -> idToMailboxBuilder.put(mailbox.getId(), 
mailbox));

http://git-wip-us.apache.org/repos/asf/james-project/blob/5acec718/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessor.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessor.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessor.java
index 85f06d3..6faa959 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessor.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessor.java
@@ -138,7 +138,10 @@ public class SetMailboxesUpdateProcessor implements 
SetMailboxesProcessor {
     }
 
     private Mailbox getMailbox(MailboxId mailboxId, MailboxSession 
mailboxSession) throws MailboxNotFoundException {
-        return mailboxFactory.fromMailboxId(mailboxId, mailboxSession)
+        return mailboxFactory.builder()
+                .id(mailboxId)
+                .session(mailboxSession)
+                .build()
                 .orElseThrow(() -> new 
MailboxNotFoundException(mailboxId.serialize()));
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/5acec718/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxFactory.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxFactory.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxFactory.java
index b8a42c2..bc868b0 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxFactory.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxFactory.java
@@ -23,6 +23,7 @@ import java.util.Optional;
 
 import javax.inject.Inject;
 
+import com.google.common.base.Preconditions;
 import org.apache.james.jmap.model.mailbox.Mailbox;
 import org.apache.james.jmap.model.mailbox.Role;
 import org.apache.james.jmap.model.mailbox.SortOrder;
@@ -41,27 +42,51 @@ import com.google.common.base.Splitter;
 public class MailboxFactory {
     private final MailboxManager mailboxManager;
 
+    public static class MailboxBuilder {
+        private final MailboxFactory mailboxFactory;
+        private MailboxSession session;
+        private MailboxId id;
+        private List<MailboxMetaData> userMailboxesMetadata;
+
+        private MailboxBuilder(MailboxFactory mailboxFactory) {
+            this.mailboxFactory = mailboxFactory;
+        }
+
+        public MailboxBuilder id(MailboxId id) {
+            this.id = id;
+            return this;
+        }
+
+        public MailboxBuilder session(MailboxSession session) {
+            this.session = session;
+            return this;
+        }
+
+        public MailboxBuilder 
usingPreloadedMailboxesMetadata(List<MailboxMetaData> userMailboxesMetadata) {
+            this.userMailboxesMetadata = userMailboxesMetadata;
+            return this;
+        }
+
+        public Optional<Mailbox> build() {
+            Preconditions.checkNotNull(id);
+            Preconditions.checkNotNull(session);
+
+            try {
+                MessageManager mailbox = 
mailboxFactory.mailboxManager.getMailbox(id, session);
+                return mailboxFactory.fromMessageManager(mailbox, 
Optional.ofNullable(userMailboxesMetadata), session);
+            } catch (MailboxException e) {
+                return Optional.empty();
+            }
+        }
+    }
+
     @Inject
     public MailboxFactory(MailboxManager mailboxManager) {
         this.mailboxManager = mailboxManager;
     }
 
-    public Optional<Mailbox> fromMailboxId(MailboxId mailboxId, MailboxSession 
mailboxSession) {
-        try {
-            MessageManager mailbox = mailboxManager.getMailbox(mailboxId, 
mailboxSession);
-            return fromMessageManager(mailbox, Optional.empty(), 
mailboxSession);
-        } catch (MailboxException e) {
-            return Optional.empty();
-        }
-    }
-
-    public Optional<Mailbox> fromMailboxId(MailboxId mailboxId, 
List<MailboxMetaData> userMailboxesMetadata, MailboxSession mailboxSession) {
-        try {
-            MessageManager mailbox = mailboxManager.getMailbox(mailboxId, 
mailboxSession);
-            return fromMessageManager(mailbox, 
Optional.of(userMailboxesMetadata), mailboxSession);
-        } catch (MailboxException e) {
-            return Optional.empty();
-        }
+    public MailboxBuilder builder() {
+        return new MailboxBuilder(this);
     }
 
     private Optional<Mailbox> fromMessageManager(MessageManager 
messageManager, Optional<List<MailboxMetaData>> userMailboxesMetadata,

http://git-wip-us.apache.org/repos/asf/james-project/blob/5acec718/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessorTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessorTest.java
 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessorTest.java
index a296303..9f9c0fc 100644
--- 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessorTest.java
+++ 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessorTest.java
@@ -20,8 +20,9 @@
 package org.apache.james.jmap.methods;
 
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.*;
+
+import org.mockito.Mockito;
 
 import java.util.Optional;
 
@@ -69,8 +70,17 @@ public class SetMailboxesUpdateProcessorTest {
                 .update(mailboxId, 
MailboxUpdateRequest.builder().parentId(newParentId).build())
                 .build();
         Mailbox mailbox = 
Mailbox.builder().id(mailboxId).name("name").role(Optional.empty()).build();
-        when(mockedMailboxFactory.fromMailboxId(mailboxId, 
mockedMailboxSession))
+
+        MailboxFactory.MailboxBuilder mockBuilder = 
mock(MailboxFactory.MailboxBuilder.class);
+        when(mockBuilder.id(mailboxId))
+            .thenReturn(mockBuilder);
+        when(mockBuilder.session(mockedMailboxSession))
+            .thenReturn(mockBuilder);
+        when(mockBuilder.build())
             .thenReturn(Optional.of(mailbox));
+
+        when(mockedMailboxFactory.builder())
+            .thenReturn(mockBuilder);
         when(mockedMailboxManager.getMailbox(newParentId, 
mockedMailboxSession))
             .thenReturn(mock(MessageManager.class));
         when(mockedMailboxUtils.hasChildren(mailboxId, mockedMailboxSession))
@@ -80,6 +90,8 @@ public class SetMailboxesUpdateProcessorTest {
         SetMailboxesResponse setMailboxesResponse = sut.process(request, 
mockedMailboxSession);
 
         // Then
+        verify(mockBuilder, times(1)).id(Mockito.eq(mailboxId));
+        verify(mockBuilder, 
times(1)).session(Mockito.eq(mockedMailboxSession));
         assertThat(setMailboxesResponse.getUpdated()).isEmpty();
         
assertThat(setMailboxesResponse.getNotUpdated()).containsEntry(mailboxId, 
SetError.builder().type("anErrorOccurred").description("An error occurred when 
updating the mailbox").build());
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/5acec718/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java
 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java
index 3e83baf..131c947 100644
--- 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java
+++ 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java
@@ -59,7 +59,11 @@ public class MailboxFactoryTest {
 
     @Test
     public void mailboxFromMailboxIdShouldReturnAbsentWhenDoesntExist() throws 
Exception {
-        Optional<Mailbox> mailbox = sut.fromMailboxId(InMemoryId.of(123), 
mailboxSession);
+        Optional<Mailbox> mailbox = sut.builder()
+                .id(InMemoryId.of(123))
+                .session(mailboxSession)
+                .build();
+
         assertThat(mailbox).isEmpty();
     }
 
@@ -69,7 +73,11 @@ public class MailboxFactoryTest {
         mailboxManager.createMailbox(mailboxPath, mailboxSession);
         MailboxId mailboxId = mailboxManager.getMailbox(mailboxPath, 
mailboxSession).getId();
 
-        Optional<Mailbox> mailbox = sut.fromMailboxId(mailboxId, 
mailboxSession);
+        Optional<Mailbox> mailbox = sut.builder()
+                .id(mailboxId)
+                .session(mailboxSession)
+                .build();
+
         assertThat(mailbox).isPresent();
         assertThat(mailbox.get().getId()).isEqualTo(mailboxId);
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to