MAILBOX-322 Generify Guice MailboxListener registration

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

Branch: refs/heads/master
Commit: 73e933361068c553e3f17eb0a7d3332b4b2d349c
Parents: af726bb
Author: benwa <btell...@linagora.com>
Authored: Thu Dec 14 10:04:45 2017 +0700
Committer: Antoine Duprat <adup...@linagora.com>
Committed: Fri Dec 15 16:45:42 2017 +0100

----------------------------------------------------------------------
 .../modules/mailbox/DefaultEventModule.java     | 49 ++++++++++++++++++++
 .../java/org/apache/james/jmap/JMAPModule.java  | 32 ++-----------
 2 files changed, 52 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/73e93336/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
 
b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
index 9bb03f8..3e7f303 100644
--- 
a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
+++ 
b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
@@ -19,13 +19,30 @@
 
 package org.apache.james.modules.mailbox;
 
+import java.util.List;
+import java.util.Set;
+
+import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.event.EventDelivery;
 import org.apache.james.mailbox.store.event.SynchronousEventDelivery;
+import org.apache.james.modules.Names;
+import org.apache.james.utils.ConfigurationPerformer;
 
+import com.github.fge.lambdas.Throwing;
+import com.google.common.base.Throwables;
+import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
+import com.google.inject.Inject;
 import com.google.inject.Scopes;
+import com.google.inject.Singleton;
+import com.google.inject.multibindings.Multibinder;
+import com.google.inject.name.Named;
 
 public class DefaultEventModule extends AbstractModule {
 
@@ -36,5 +53,37 @@ public class DefaultEventModule extends AbstractModule {
 
         bind(SynchronousEventDelivery.class).in(Scopes.SINGLETON);
         bind(EventDelivery.class).to(SynchronousEventDelivery.class);
+
+        Multibinder.newSetBinder(binder(), 
ConfigurationPerformer.class).addBinding().to(ListenerRegistrationPerformer.class);
+        Multibinder.newSetBinder(binder(), MailboxListener.class);
+    }
+
+    @Singleton
+    public static class ListenerRegistrationPerformer implements 
ConfigurationPerformer {
+        private final MailboxManager mailboxManager;
+        private final Set<MailboxListener> listeners;
+
+        @Inject
+        public ListenerRegistrationPerformer(@Named(Names.MAILBOXMANAGER_NAME) 
MailboxManager mailboxManager,
+                                             Set<MailboxListener> listeners) {
+            this.mailboxManager = mailboxManager;
+            this.listeners = listeners;
+        }
+
+        @Override
+        public void initModule() {
+            try {
+                MailboxSession systemSession = 
mailboxManager.createSystemSession("storeMailboxManager");
+                listeners.forEach(Throwing.consumer(listener ->
+                    mailboxManager.addGlobalListener(listener, 
systemSession)));
+            } catch (MailboxException e) {
+                Throwables.propagate(e);
+            }
+        }
+
+        @Override
+        public List<Class<? extends Configurable>> forClasses() {
+            return ImmutableList.of();
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/73e93336/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
 
b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
index 42a3d07..29adf98 100644
--- 
a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
+++ 
b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
@@ -38,9 +38,9 @@ import org.apache.james.jmap.utils.SystemMailboxesProvider;
 import org.apache.james.jmap.utils.SystemMailboxesProviderImpl;
 import org.apache.james.jwt.JwtConfiguration;
 import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxManager.SearchCapabilities;
-import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailetcontainer.impl.MatcherMailetPair;
 import org.apache.james.modules.server.CamelMailetContainerModule;
 import org.apache.james.queue.api.MailQueueItemDecoratorFactory;
@@ -91,13 +91,14 @@ public class JMAPModule extends AbstractModule {
 
         bind(HtmlTextExtractor.class).to(JsoupHtmlTextExtractor.class);
         Multibinder.newSetBinder(binder(), 
ConfigurationPerformer.class).addBinding().to(RequiredCapabilitiesPrecondition.class);
-        Multibinder.newSetBinder(binder(), 
ConfigurationPerformer.class).addBinding().to(JmapListenerRegistrationPerformer.class);
 
         Multibinder<CamelMailetContainerModule.TransportProcessorCheck> 
transportProcessorChecks = Multibinder.newSetBinder(binder(), 
CamelMailetContainerModule.TransportProcessorCheck.class);
         transportProcessorChecks.addBinding().to(VacationMailetCheck.class);
         
         
bind(SystemMailboxesProvider.class).to(SystemMailboxesProviderImpl.class);
         
bind(MailQueueItemDecoratorFactory.class).to(PostDequeueDecoratorFactory.class).in(Scopes.SINGLETON);
+
+        Multibinder.newSetBinder(binder(), 
MailboxListener.class).addBinding().to(PropagateLookupRightListener.class);
     }
 
     @Provides
@@ -131,33 +132,6 @@ public class JMAPModule extends AbstractModule {
     }
 
     @Singleton
-    public static class JmapListenerRegistrationPerformer implements 
ConfigurationPerformer {
-        private final MailboxManager mailboxManager;
-        private final PropagateLookupRightListener 
propagateLookupRightListener;
-
-        @Inject
-        public JmapListenerRegistrationPerformer(MailboxManager 
mailboxManager, PropagateLookupRightListener propagateLookupRightListener) {
-            this.mailboxManager = mailboxManager;
-            this.propagateLookupRightListener = propagateLookupRightListener;
-        }
-
-        @Override
-        public void initModule() {
-            try {
-                mailboxManager.addGlobalListener(propagateLookupRightListener,
-                                                 
mailboxManager.createSystemSession("storeMailboxManager"));
-            } catch (MailboxException e) {
-                Throwables.propagate(e);
-            }
-        }
-
-        @Override
-        public List<Class<? extends Configurable>> forClasses() {
-            return ImmutableList.of();
-        }
-    }
-
-    @Singleton
     public static class RequiredCapabilitiesPrecondition implements 
ConfigurationPerformer {
 
         private final MailboxManager mailboxManager;


---------------------------------------------------------------------
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