This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 217513b9aa48195f3219727728c2f0141c829e22 Author: Benoit TELLIER <btell...@linagora.com> AuthorDate: Wed Jan 15 23:22:07 2025 +0100 JAMES-4103 Extract BlobResolvers out of JMAP module chain Allows defining easily custom blob resolvers and removing the default ones for application builders --- .../org/apache/james/CassandraJamesServerMain.java | 2 ++ .../james/CassandraRabbitMQJamesServerMain.java | 2 ++ .../james/DistributedPOP3JamesServerMain.java | 2 ++ .../org/apache/james/MemoryJamesServerMain.java | 2 ++ .../java/org/apache/james/jmap/JMAPModule.java | 33 ++++++++++++++++--- .../james/jmap/JMAPWithoutDraftCommonModule.java | 37 ---------------------- .../james/jmap/rfc8621/RFC8621MethodsModule.java | 11 ------- .../james/modules/protocols/JMAPServerModule.java | 3 -- 8 files changed, 36 insertions(+), 56 deletions(-) diff --git a/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerMain.java b/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerMain.java index 45bd8fd342..80dd87884d 100644 --- a/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerMain.java +++ b/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerMain.java @@ -24,6 +24,7 @@ import java.util.Set; import org.apache.james.data.UsersRepositoryModuleChooser; import org.apache.james.eventsourcing.eventstore.EventNestedTypes; import org.apache.james.jmap.JMAPListenerModule; +import org.apache.james.jmap.JMAPModule; import org.apache.james.json.DTOModule; import org.apache.james.modules.BlobExportMechanismModule; import org.apache.james.modules.CassandraConsistencyTaskSerializationModule; @@ -130,6 +131,7 @@ public class CassandraJamesServerMain implements JamesServerMain { new ProtocolHandlerModule(), new SMTPServerModule(), new JMAPServerModule(), + JMAPModule.INSTANCE, new JmapEventBusModule(), WEBADMIN); diff --git a/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java b/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java index e0c750f98b..2abeb519fe 100644 --- a/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java +++ b/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java @@ -25,6 +25,7 @@ import org.apache.commons.lang3.NotImplementedException; import org.apache.james.data.UsersRepositoryModuleChooser; import org.apache.james.eventsourcing.eventstore.EventNestedTypes; import org.apache.james.jmap.JMAPListenerModule; +import org.apache.james.jmap.JMAPModule; import org.apache.james.json.DTO; import org.apache.james.json.DTOModule; import org.apache.james.modules.BlobExportMechanismModule; @@ -138,6 +139,7 @@ public class CassandraRabbitMQJamesServerMain implements JamesServerMain { new ProtocolHandlerModule(), new SMTPServerModule(), new JMAPServerModule(), + JMAPModule.INSTANCE, new JmapEventBusModule(), WEBADMIN); diff --git a/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java b/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java index b53b60da92..9ecac2a5fb 100644 --- a/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java +++ b/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java @@ -23,6 +23,7 @@ import java.util.Set; import org.apache.james.data.UsersRepositoryModuleChooser; import org.apache.james.eventsourcing.eventstore.EventNestedTypes; +import org.apache.james.jmap.JMAPModule; import org.apache.james.json.DTO; import org.apache.james.json.DTOModule; import org.apache.james.mailbox.NoACLMapper; @@ -127,6 +128,7 @@ public class DistributedPOP3JamesServerMain implements JamesServerMain { public static final Module PROTOCOLS = Modules.combine( new LMTPServerModule(), new JMAPServerModule(), + JMAPModule.INSTANCE, new JMAPEventBusModule(), new ManageSieveServerModule(), new POP3ServerModule(), diff --git a/server/apps/memory-app/src/main/java/org/apache/james/MemoryJamesServerMain.java b/server/apps/memory-app/src/main/java/org/apache/james/MemoryJamesServerMain.java index 0f4561a7cf..5adc1ebea1 100644 --- a/server/apps/memory-app/src/main/java/org/apache/james/MemoryJamesServerMain.java +++ b/server/apps/memory-app/src/main/java/org/apache/james/MemoryJamesServerMain.java @@ -22,6 +22,7 @@ package org.apache.james; import org.apache.commons.configuration2.BaseHierarchicalConfiguration; import org.apache.james.data.UsersRepositoryModuleChooser; import org.apache.james.jmap.JMAPListenerModule; +import org.apache.james.jmap.JMAPModule; import org.apache.james.jmap.api.identity.CustomIdentityDAO; import org.apache.james.jmap.memory.identity.MemoryCustomIdentityDAO; import org.apache.james.jmap.memory.pushsubscription.MemoryPushSubscriptionModule; @@ -121,6 +122,7 @@ public class MemoryJamesServerMain implements JamesServerMain { new JmapTasksModule(), new MemoryDataJmapModule(), new MemoryPushSubscriptionModule(), + JMAPModule.INSTANCE, new JMAPServerModule()); public static final Module IN_MEMORY_SERVER_MODULE = Modules.combine( 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 13b3931e01..b35544b0e8 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 @@ -48,6 +48,11 @@ import org.apache.james.jmap.core.VacationResponseCapabilityFactory$; import org.apache.james.jmap.core.WebSocketCapabilityFactory$; import org.apache.james.jmap.mailet.filter.JMAPFiltering; import org.apache.james.jmap.rfc8621.RFC8621MethodsModule; +import org.apache.james.jmap.routes.AttachmentBlobResolver; +import org.apache.james.jmap.routes.BlobResolver; +import org.apache.james.jmap.routes.MessageBlobResolver; +import org.apache.james.jmap.routes.MessagePartBlobResolver; +import org.apache.james.jmap.routes.UploadResolver; import org.apache.james.jmap.send.PostDequeueDecoratorFactory; import org.apache.james.jmap.utils.JsoupHtmlTextExtractor; import org.apache.james.jwt.JwtConfiguration; @@ -64,7 +69,10 @@ import org.apache.james.transport.matchers.All; import org.apache.james.transport.matchers.RecipientIsLocal; import org.apache.james.util.Port; import org.apache.james.util.Size; +import org.apache.james.util.date.DefaultZonedDateTimeProvider; +import org.apache.james.util.date.ZonedDateTimeProvider; import org.apache.james.util.html.HtmlTextExtractor; +import org.apache.james.util.mime.MessageContentExtractor; import org.apache.james.utils.PropertiesProvider; import org.apache.mailet.Mail; import org.slf4j.Logger; @@ -75,6 +83,7 @@ import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; import com.google.inject.AbstractModule; import com.google.inject.Inject; +import com.google.inject.Module; import com.google.inject.Provides; import com.google.inject.Scopes; import com.google.inject.Singleton; @@ -82,6 +91,19 @@ import com.google.inject.multibindings.Multibinder; import com.google.inject.multibindings.ProvidesIntoSet; public class JMAPModule extends AbstractModule { + public static Module BLOBS_RESOLVERS = binder -> { + Multibinder<BlobResolver> blobResolverMultibinder = Multibinder.newSetBinder(binder, BlobResolver.class); + blobResolverMultibinder.addBinding().to(MessageBlobResolver.class); + blobResolverMultibinder.addBinding().to(UploadResolver.class); + blobResolverMultibinder.addBinding().to(MessagePartBlobResolver.class); + blobResolverMultibinder.addBinding().to(AttachmentBlobResolver.class); + }; + public static Module INSTANCE = binder -> { + binder.install(new JMAPModule()); + binder.install(new RFC8621MethodsModule()); + binder.install(BLOBS_RESOLVERS); + }; + private static final int DEFAULT_JMAP_PORT = 80; private static final Logger LOGGER = LoggerFactory.getLogger(JMAPModule.class); public static final MailetContainerModule.DefaultProcessorsConfigurationSupplier DEFAULT_JMAP_PROCESSORS_CONFIGURATION_SUPPLIER = @@ -115,11 +137,12 @@ public class JMAPModule extends AbstractModule { @Override protected void configure() { - install(new JMAPWithoutDraftCommonModule()); - install(new RFC8621MethodsModule()); - install(binder -> binder - .bind(MailetContainerModule.DefaultProcessorsConfigurationSupplier.class) - .toInstance(DEFAULT_JMAP_PROCESSORS_CONFIGURATION_SUPPLIER)); + bind(MessageContentExtractor.class).in(Scopes.SINGLETON); + bind(DefaultZonedDateTimeProvider.class).in(Scopes.SINGLETON); + bind(ZonedDateTimeProvider.class).to(DefaultZonedDateTimeProvider.class); + + bind(MailetContainerModule.DefaultProcessorsConfigurationSupplier.class) + .toInstance(DEFAULT_JMAP_PROCESSORS_CONFIGURATION_SUPPLIER); bind(JMAPServer.class).in(Scopes.SINGLETON); bind(JsoupHtmlTextExtractor.class).in(Scopes.SINGLETON); diff --git a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPWithoutDraftCommonModule.java b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPWithoutDraftCommonModule.java deleted file mode 100644 index ade3870ddc..0000000000 --- a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPWithoutDraftCommonModule.java +++ /dev/null @@ -1,37 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.jmap; - -import org.apache.james.util.date.DefaultZonedDateTimeProvider; -import org.apache.james.util.date.ZonedDateTimeProvider; -import org.apache.james.util.mime.MessageContentExtractor; - -import com.google.inject.AbstractModule; -import com.google.inject.Scopes; - -public class JMAPWithoutDraftCommonModule extends AbstractModule { - - @Override - protected void configure() { - bind(MessageContentExtractor.class).in(Scopes.SINGLETON); - bind(DefaultZonedDateTimeProvider.class).in(Scopes.SINGLETON); - bind(ZonedDateTimeProvider.class).to(DefaultZonedDateTimeProvider.class); - } -} diff --git a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/rfc8621/RFC8621MethodsModule.java b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/rfc8621/RFC8621MethodsModule.java index bfa80ab9b3..160684dd20 100644 --- a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/rfc8621/RFC8621MethodsModule.java +++ b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/rfc8621/RFC8621MethodsModule.java @@ -90,15 +90,10 @@ import org.apache.james.jmap.method.ZoneIdProvider; import org.apache.james.jmap.pushsubscription.DefaultWebPushClient; import org.apache.james.jmap.pushsubscription.PushClientConfiguration; import org.apache.james.jmap.pushsubscription.WebPushClient; -import org.apache.james.jmap.routes.AttachmentBlobResolver; -import org.apache.james.jmap.routes.BlobResolver; import org.apache.james.jmap.routes.DownloadRoutes; import org.apache.james.jmap.routes.EventSourceRoutes; import org.apache.james.jmap.routes.JMAPApiRoutes; -import org.apache.james.jmap.routes.MessageBlobResolver; -import org.apache.james.jmap.routes.MessagePartBlobResolver; import org.apache.james.jmap.routes.SessionRoutes; -import org.apache.james.jmap.routes.UploadResolver; import org.apache.james.jmap.routes.UploadRoutes; import org.apache.james.jmap.routes.WebSocketRoutes; import org.apache.james.metrics.api.MetricFactory; @@ -199,12 +194,6 @@ public class RFC8621MethodsModule extends AbstractModule { typeNameMultibinder.addBinding().toInstance(EmailDeliveryTypeName$.MODULE$); typeNameMultibinder.addBinding().toInstance(VacationResponseTypeName$.MODULE$); - Multibinder<BlobResolver> blobResolverMultibinder = Multibinder.newSetBinder(binder(), BlobResolver.class); - blobResolverMultibinder.addBinding().to(MessageBlobResolver.class); - blobResolverMultibinder.addBinding().to(UploadResolver.class); - blobResolverMultibinder.addBinding().to(MessagePartBlobResolver.class); - blobResolverMultibinder.addBinding().to(AttachmentBlobResolver.class); - Multibinder<Disconnector> disconnectorMultibinder = Multibinder.newSetBinder(binder(), Disconnector.class); disconnectorMultibinder.addBinding().to(WebSocketRoutes.class); disconnectorMultibinder.addBinding().to(EventSourceRoutes.class); diff --git a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/modules/protocols/JMAPServerModule.java b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/modules/protocols/JMAPServerModule.java index a12a0c1a0a..e10a903123 100644 --- a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/modules/protocols/JMAPServerModule.java +++ b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/modules/protocols/JMAPServerModule.java @@ -22,7 +22,6 @@ package org.apache.james.modules.protocols; import java.security.Security; import org.apache.james.jmap.JMAPConfiguration; -import org.apache.james.jmap.JMAPModule; import org.apache.james.jmap.JMAPServer; import org.apache.james.jmap.JmapGuiceProbe; import org.apache.james.jmap.MessageIdProbe; @@ -39,10 +38,8 @@ public class JMAPServerModule extends AbstractModule { @Override protected void configure() { - install(new JMAPModule()); Multibinder.newSetBinder(binder(), GuiceProbe.class).addBinding().to(JmapGuiceProbe.class); Multibinder.newSetBinder(binder(), GuiceProbe.class).addBinding().to(MessageIdProbe.class); - } @ProvidesIntoSet --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org