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

Reply via email to