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