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]

Reply via email to