You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2025/01/26 22:25:25 UTC
(james-project) 04/05: JAMES-4103 Extract BlobResolvers out of JMAP module chain
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 <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org