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