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 0aecc7e08f99b50746095bb3f9baceaaff15a631
Author: Benoit Tellier <[email protected]>
AuthorDate: Tue Mar 5 10:06:43 2019 +0700

    JAMES-2665 When none configured, we should use a default MailRepository 
configuration
    
    This should be "per implementation" as the MailRepository available vary.
    
    This is required to start a default James server with the vault.
---
 .../modules/data/CassandraMailRepositoryModule.java      | 13 +++++++++++++
 .../james/modules/server/MailStoreRepositoryModule.java  | 16 ++++++++++++++--
 .../james/modules/data/JPAMailRepositoryModule.java      | 13 +++++++++++++
 .../org/apache/james/modules/data/MemoryDataModule.java  | 11 +++++++++++
 4 files changed, 51 insertions(+), 2 deletions(-)

diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraMailRepositoryModule.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraMailRepositoryModule.java
index 60fa72f..4472a53 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraMailRepositoryModule.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraMailRepositoryModule.java
@@ -19,9 +19,12 @@
 
 package org.apache.james.modules.data;
 
+import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.mailrepository.api.MailRepositoryProvider;
 import org.apache.james.mailrepository.api.MailRepositoryUrlStore;
+import org.apache.james.mailrepository.api.Protocol;
+import org.apache.james.mailrepository.cassandra.CassandraMailRepository;
 import 
org.apache.james.mailrepository.cassandra.CassandraMailRepositoryCountDAO;
 import 
org.apache.james.mailrepository.cassandra.CassandraMailRepositoryKeysDAO;
 import 
org.apache.james.mailrepository.cassandra.CassandraMailRepositoryMailDAO;
@@ -31,12 +34,20 @@ import 
org.apache.james.mailrepository.cassandra.CassandraMailRepositoryProvider
 import 
org.apache.james.mailrepository.cassandra.CassandraMailRepositoryUrlModule;
 import 
org.apache.james.mailrepository.cassandra.CassandraMailRepositoryUrlStore;
 import 
org.apache.james.mailrepository.cassandra.MergingCassandraMailRepositoryMailDao;
+import org.apache.james.mailrepository.memory.MailRepositoryStoreConfiguration;
+import org.apache.james.modules.server.MailStoreRepositoryModule;
 
+import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Scopes;
 import com.google.inject.multibindings.Multibinder;
 
 public class CassandraMailRepositoryModule extends AbstractModule {
+    private static final MailRepositoryStoreConfiguration.Item 
CASSANDRA_MAILREPOSITORY_DEFAULT_DECLARATION = new 
MailRepositoryStoreConfiguration.Item(
+        ImmutableList.of(new Protocol("cassandra")),
+        CassandraMailRepository.class.getName(),
+        new HierarchicalConfiguration());
+
     @Override
     protected void configure() {
         bind(CassandraMailRepositoryUrlStore.class).in(Scopes.SINGLETON);
@@ -52,6 +63,8 @@ public class CassandraMailRepositoryModule extends 
AbstractModule {
         Multibinder<MailRepositoryProvider> multibinder = 
Multibinder.newSetBinder(binder(), MailRepositoryProvider.class);
         multibinder.addBinding().to(CassandraMailRepositoryProvider.class);
 
+        
bind(MailStoreRepositoryModule.DefaultItemSupplier.class).toInstance(() -> 
CASSANDRA_MAILREPOSITORY_DEFAULT_DECLARATION);
+
         Multibinder<CassandraModule> cassandraModuleBinder = 
Multibinder.newSetBinder(binder(), CassandraModule.class);
         
cassandraModuleBinder.addBinding().toInstance(org.apache.james.mailrepository.cassandra.CassandraMailRepositoryModule.MODULE);
         
cassandraModuleBinder.addBinding().toInstance(CassandraMailRepositoryUrlModule.MODULE);
diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java
index 66bc204..809756a 100644
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java
+++ 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java
@@ -20,6 +20,7 @@
 package org.apache.james.modules.server;
 
 import java.util.List;
+import java.util.function.Supplier;
 
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
@@ -33,6 +34,8 @@ import 
org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
 import org.apache.james.utils.GuiceProbe;
 import org.apache.james.utils.MailRepositoryProbeImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
@@ -44,6 +47,10 @@ import com.google.inject.multibindings.Multibinder;
 
 public class MailStoreRepositoryModule extends AbstractModule {
 
+    public static final Logger LOGGER = 
LoggerFactory.getLogger(MailStoreRepositoryModule.class);
+
+    public interface DefaultItemSupplier extends 
Supplier<MailRepositoryStoreConfiguration.Item> {}
+
     @Override
     protected void configure() {
         bind(MemoryMailRepositoryStore.class).in(Scopes.SINGLETON);
@@ -57,9 +64,14 @@ public class MailStoreRepositoryModule extends 
AbstractModule {
 
     @Provides
     @Singleton
-    MailRepositoryStoreConfiguration 
provideConfiguration(ConfigurationProvider configurationProvider) throws 
ConfigurationException {
+    MailRepositoryStoreConfiguration 
provideConfiguration(ConfigurationProvider configurationProvider, 
DefaultItemSupplier defaultItemSupplier) throws ConfigurationException {
         HierarchicalConfiguration configuration = 
configurationProvider.getConfiguration("mailrepositorystore");
-        return MailRepositoryStoreConfiguration.parse(configuration);
+        MailRepositoryStoreConfiguration userConfiguration = 
MailRepositoryStoreConfiguration.parse(configuration);
+        if (!userConfiguration.getItems().isEmpty()) {
+            return userConfiguration;
+        }
+        LOGGER.warn("Empty MailRepository store configuration supplied. 
Defaulting to default configuration for this product");
+        return 
MailRepositoryStoreConfiguration.forItems(defaultItemSupplier.get());
     }
 
     @Singleton
diff --git 
a/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPAMailRepositoryModule.java
 
b/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPAMailRepositoryModule.java
index 5e9f398..7bcfc4f 100644
--- 
a/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPAMailRepositoryModule.java
+++ 
b/server/container/guice/jpa-common-guice/src/main/java/org/apache/james/modules/data/JPAMailRepositoryModule.java
@@ -19,17 +19,30 @@
 
 package org.apache.james.modules.data;
 
+import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.mailrepository.api.MailRepositoryUrlStore;
+import org.apache.james.mailrepository.api.Protocol;
+import org.apache.james.mailrepository.file.FileMailRepository;
 import org.apache.james.mailrepository.jpa.JPAMailRepositoryUrlStore;
+import org.apache.james.mailrepository.memory.MailRepositoryStoreConfiguration;
+import org.apache.james.modules.server.MailStoreRepositoryModule;
 
+import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Scopes;
 
 public class JPAMailRepositoryModule extends AbstractModule {
+    private static final MailRepositoryStoreConfiguration.Item 
FILE_MAILREPOSITORY_DEFAULT_DECLARATION = new 
MailRepositoryStoreConfiguration.Item(
+        ImmutableList.of(new Protocol("file")),
+        FileMailRepository.class.getName(),
+        new HierarchicalConfiguration());
+
     @Override
     protected void configure() {
         bind(JPAMailRepositoryUrlStore.class).in(Scopes.SINGLETON);
 
         bind(MailRepositoryUrlStore.class).to(JPAMailRepositoryUrlStore.class);
+
+        
bind(MailStoreRepositoryModule.DefaultItemSupplier.class).toInstance(() -> 
FILE_MAILREPOSITORY_DEFAULT_DECLARATION);
     }
 }
diff --git 
a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/data/MemoryDataModule.java
 
b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/data/MemoryDataModule.java
index d5a2a90..96f89c4 100644
--- 
a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/data/MemoryDataModule.java
+++ 
b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/data/MemoryDataModule.java
@@ -22,6 +22,7 @@ package org.apache.james.modules.data;
 import java.util.List;
 
 import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.dlp.api.DLPConfigurationStore;
 import org.apache.james.dlp.eventsourcing.EventSourcingDLPConfigurationStore;
 import org.apache.james.domainlist.api.DomainList;
@@ -29,7 +30,11 @@ import 
org.apache.james.domainlist.lib.DomainListConfiguration;
 import org.apache.james.domainlist.memory.MemoryDomainList;
 import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.mailrepository.api.MailRepositoryUrlStore;
+import org.apache.james.mailrepository.api.Protocol;
+import org.apache.james.mailrepository.file.FileMailRepository;
+import org.apache.james.mailrepository.memory.MailRepositoryStoreConfiguration;
 import org.apache.james.mailrepository.memory.MemoryMailRepositoryUrlStore;
+import org.apache.james.modules.server.MailStoreRepositoryModule;
 import org.apache.james.rrt.api.RecipientRewriteTable;
 import org.apache.james.rrt.memory.MemoryRecipientRewriteTable;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
@@ -46,6 +51,10 @@ import com.google.inject.Singleton;
 import com.google.inject.multibindings.Multibinder;
 
 public class MemoryDataModule extends AbstractModule {
+    private static final MailRepositoryStoreConfiguration.Item 
FILE_MAILREPOSITORY_DEFAULT_DECLARATION = new 
MailRepositoryStoreConfiguration.Item(
+        ImmutableList.of(new Protocol("file")),
+        FileMailRepository.class.getName(),
+        new HierarchicalConfiguration());
 
     @Override
     protected void configure() {
@@ -70,6 +79,8 @@ public class MemoryDataModule extends AbstractModule {
         
bind(DLPConfigurationStore.class).to(EventSourcingDLPConfigurationStore.class);
 
         Multibinder.newSetBinder(binder(), 
ConfigurationPerformer.class).addBinding().to(MemoryDataConfigurationPerformer.class);
+
+        
bind(MailStoreRepositoryModule.DefaultItemSupplier.class).toInstance(() -> 
FILE_MAILREPOSITORY_DEFAULT_DECLARATION);
     }
 
     @Provides


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to