JAMES-1692 message processors are injected ... through SetMessagesMethod's ctor
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/b21eae3f Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b21eae3f Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b21eae3f Branch: refs/heads/master Commit: b21eae3f04c024cb80436702e799bd1af60952b9 Parents: 99ac325 Author: Fabien Vignon <[email protected]> Authored: Wed Feb 17 11:40:18 2016 +0100 Committer: Raphael Ouazana <[email protected]> Committed: Tue Mar 1 15:42:53 2016 +0100 ---------------------------------------------------------------------- .../org/apache/james/jmap/MethodsModule.java | 13 +++++++++++++ .../james/jmap/methods/SetMessagesMethod.java | 20 +++++++++++--------- 2 files changed, 24 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/b21eae3f/server/container/cassandra-guice/src/main/java/org/apache/james/jmap/MethodsModule.java ---------------------------------------------------------------------- diff --git a/server/container/cassandra-guice/src/main/java/org/apache/james/jmap/MethodsModule.java b/server/container/cassandra-guice/src/main/java/org/apache/james/jmap/MethodsModule.java index 4e57d20..01257da 100644 --- a/server/container/cassandra-guice/src/main/java/org/apache/james/jmap/MethodsModule.java +++ b/server/container/cassandra-guice/src/main/java/org/apache/james/jmap/MethodsModule.java @@ -19,6 +19,8 @@ package org.apache.james.jmap; +import java.util.List; + import org.apache.james.jmap.json.ObjectMapperFactory; import org.apache.james.jmap.methods.GetMailboxesMethod; import org.apache.james.jmap.methods.GetMessageListMethod; @@ -30,10 +32,13 @@ import org.apache.james.jmap.methods.JmapResponseWriterImpl; import org.apache.james.jmap.methods.Method; import org.apache.james.jmap.methods.SetMessagesCreationProcessor; import org.apache.james.jmap.methods.SetMessagesMethod; +import org.apache.james.jmap.methods.SetMessagesProcessor; import org.apache.james.jmap.methods.SetMessagesUpdateProcessor; import org.apache.james.mailbox.cassandra.CassandraId; +import com.google.common.collect.ImmutableList; import com.google.inject.AbstractModule; +import com.google.inject.Provides; import com.google.inject.Singleton; import com.google.inject.TypeLiteral; import com.google.inject.multibindings.Multibinder; @@ -58,4 +63,12 @@ public class MethodsModule extends AbstractModule { bind(SetMessagesCreationProcessor.class).to(new TypeLiteral<SetMessagesCreationProcessor<CassandraId>>(){}); } + @Provides + public List<SetMessagesProcessor<CassandraId>> setMessagesProcessors( + SetMessagesUpdateProcessor<CassandraId> messageUpdater, + SetMessagesCreationProcessor<CassandraId> messageCreator) { + + return ImmutableList.of( messageUpdater, messageCreator); + } + } http://git-wip-us.apache.org/repos/asf/james-project/blob/b21eae3f/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesMethod.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesMethod.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesMethod.java index 5202026..7bb606b 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesMethod.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesMethod.java @@ -43,6 +43,7 @@ import org.apache.james.mailbox.store.mail.model.MailboxMessage; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -55,18 +56,15 @@ public class SetMessagesMethod<Id extends MailboxId> implements Method { private final MailboxMapperFactory<Id> mailboxMapperFactory; private final MailboxSessionMapperFactory<Id> mailboxSessionMapperFactory; - private final SetMessagesUpdateProcessor<Id> messageUpdater; - private final SetMessagesCreationProcessor messageCreator; + private final List<SetMessagesProcessor<Id>> messagesProcessors; @Inject @VisibleForTesting SetMessagesMethod(MailboxMapperFactory<Id> mailboxMapperFactory, MailboxSessionMapperFactory<Id> mailboxSessionMapperFactory, - SetMessagesUpdateProcessor<Id> messageUpdater, - SetMessagesCreationProcessor messageCreator) { + List<SetMessagesProcessor<Id>> messagesProcessors) { this.mailboxMapperFactory = mailboxMapperFactory; this.mailboxSessionMapperFactory = mailboxSessionMapperFactory; - this.messageUpdater = messageUpdater; - this.messageCreator = messageCreator; + this.messagesProcessors = messagesProcessors; } @Override @@ -99,9 +97,13 @@ public class SetMessagesMethod<Id extends MailboxId> implements Method { private SetMessagesResponse setMessagesResponse(SetMessagesRequest request, MailboxSession mailboxSession) throws MailboxException { SetMessagesResponse.Builder responseBuilder = SetMessagesResponse.builder(); processDestroy(request.getDestroy(), mailboxSession, responseBuilder); - messageUpdater.process(request, mailboxSession).mergeInto(responseBuilder); - messageCreator.process(request, mailboxSession).mergeInto(responseBuilder); - return responseBuilder.build(); + return messagesProcessors.stream() + .map(processor -> processor.process(request, mailboxSession)) + .reduce(responseBuilder, + (builder, resp) -> resp.mergeInto(builder) , + (builder1, builder2) -> builder2.build().mergeInto(builder1) + ) + .build(); } private void processDestroy(List<MessageId> messageIds, MailboxSession mailboxSession, SetMessagesResponse.Builder responseBuilder) throws MailboxException { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
