You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2020/06/29 04:38:39 UTC

[james-project] 09/09: JAMES-3214 Move MailRepositoryStore related classes to mailRepository-api

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 6fc0a85c214fc767b85725b0f339386f1bbb2dec
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Jun 16 11:46:06 2020 +0700

    JAMES-3214 Move MailRepositoryStore related classes to mailRepository-api
    
    Without this interface it is impossible to generate MailRepository that the calling code will rely on.
    
    mailRepository-api furthermore have many dependencies that are orthogonal to data-api and should not be included in it.
---
 mailbox/plugin/quota-search-scanning/pom.xml       |   4 +
 .../apache/james/managesieve/jsieve/Parser.java    |  22 +--
 server/container/spring/pom.xml                    |   4 +
 .../resources/META-INF/spring/loaders-context.xml  |   6 +-
 server/data/data-api/pom.xml                       |  15 +-
 server/data/data-file/pom.xml                      |   4 +
 .../mailrepository/file/FileMailRepository.java    |   2 +-
 server/data/data-jdbc/pom.xml                      |   4 +
 .../mailrepository/jdbc/JDBCMailRepository.java    |   2 +-
 server/data/data-jpa/pom.xml                       |  10 +
 .../jpa/JPAMailRepositoryUrlStoreTest.java         |   2 +-
 server/data/data-memory/pom.xml                    |   4 -
 server/mailet/mailetcontainer-camel/pom.xml        |   4 +
 server/mailet/mailets/pom.xml                      |   4 +
 server/mailrepository/mailrepository-api/pom.xml   |   1 +
 .../james/mailrepository}/api/Initializable.java   |   2 +-
 .../mailrepository/api/MailRepositoryStore.java    | 214 ++++++++++-----------
 .../mailrepository/api/MailRepositoryUrlStore.java |   0
 .../MailRepositoryUrlStoreContract.java            |   4 +-
 .../CassandraMailRepositoryUrlModule.java          |   0
 .../cassandra/CassandraMailRepositoryUrlStore.java |   0
 .../james/mailrepository/cassandra/UrlsDao.java    |   0
 .../james/mailrepository/cassandra/UrlsTable.java  |   0
 .../CassandraMailRepositoryUrlStoreExtension.java  |   0
 .../CassandraMailRepositoryUrlStoreTest.java       |   2 +-
 .../mailrepository/mailrepository-memory/pom.xml   |  23 +++
 .../memory/MailRepositoryLoader.java               |   0
 .../memory/MailRepositoryStoreConfiguration.java   |   0
 .../memory/MemoryMailRepositoryStore.java          |   2 +-
 .../memory/MemoryMailRepositoryUrlStore.java       |   0
 .../memory/SimpleMailRepositoryLoader.java         |   0
 .../MailRepositoryStoreConfigurationTest.java      |   0
 .../memory/MemoryMailRepositoryStoreTest.java      |   0
 .../MemoryMailRepositoryUrlStoreExtension.java     |   0
 .../memory/MemoryMailRepositoryUrlStoreTest.java   |   2 +-
 .../src/test/resources/mailrepositorystore.xml     |   0
 36 files changed, 187 insertions(+), 150 deletions(-)

diff --git a/mailbox/plugin/quota-search-scanning/pom.xml b/mailbox/plugin/quota-search-scanning/pom.xml
index 470337d..289580e 100644
--- a/mailbox/plugin/quota-search-scanning/pom.xml
+++ b/mailbox/plugin/quota-search-scanning/pom.xml
@@ -76,6 +76,10 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-util</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>metrics-tests</artifactId>
             <scope>test</scope>
         </dependency>
diff --git a/protocols/managesieve/src/main/java/org/apache/james/managesieve/jsieve/Parser.java b/protocols/managesieve/src/main/java/org/apache/james/managesieve/jsieve/Parser.java
index f6972d1..a935dc5 100644
--- a/protocols/managesieve/src/main/java/org/apache/james/managesieve/jsieve/Parser.java
+++ b/protocols/managesieve/src/main/java/org/apache/james/managesieve/jsieve/Parser.java
@@ -24,8 +24,6 @@ import java.io.ByteArrayInputStream;
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.annotation.Resource;
-
 import org.apache.james.managesieve.api.SieveParser;
 import org.apache.james.managesieve.api.SyntaxException;
 import org.apache.jsieve.ConfigurationManager;
@@ -36,24 +34,18 @@ public class Parser implements SieveParser {
     
     private static final List<String> EMPTY_WARNINGS = new ArrayList<>(0);
     
-    private SieveFactory sieveFactory;
+    private final SieveFactory sieveFactory;
+
+    public Parser(SieveFactory sieveFactory) {
+        this.sieveFactory = sieveFactory;
+    }
 
     public Parser() throws Exception {
-        setConfigurationManager(new ConfigurationManager());
+        this(new ConfigurationManager());
     }
 
     public Parser(ConfigurationManager manager) {
-        setConfigurationManager(manager);
-    }
-    
-    /**
-     * setConfigurationManager.
-     *
-     * @param manager The <code>ConfigurationManager</code> to set
-     */
-    @Resource(name = "jsieveconfigurationmanager")
-    public void setConfigurationManager(ConfigurationManager manager) {
-        sieveFactory = manager.build();
+        this(manager.build());
     }
 
     @Override
diff --git a/server/container/spring/pom.xml b/server/container/spring/pom.xml
index dcb87f5..ce13b70 100644
--- a/server/container/spring/pom.xml
+++ b/server/container/spring/pom.xml
@@ -87,6 +87,10 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-mailrepository-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-protocols-library</artifactId>
             <exclusions>
                 <exclusion>
diff --git a/server/container/spring/src/main/resources/META-INF/spring/loaders-context.xml b/server/container/spring/src/main/resources/META-INF/spring/loaders-context.xml
index ccfc959..5fa8873 100644
--- a/server/container/spring/src/main/resources/META-INF/spring/loaders-context.xml
+++ b/server/container/spring/src/main/resources/META-INF/spring/loaders-context.xml
@@ -121,10 +121,6 @@
     <!--<bean id="filesystem" class="org.apache.james.container.spring.filesystem.FileSystemImpl" autowire="byName"/>-->
     <bean id="filesystem" class="org.apache.james.container.spring.filesystem.ResourceLoaderFileSystem"/>
 
-    <bean id="sieveparser" class="org.apache.james.managesieve.jsieve.Parser">
-        <property name="configurationManager" ref="configurationmanager"/>
-    </bean>
-
-    <bean id="configurationmanager" class="org.apache.jsieve.ConfigurationManager"/>
+    <bean id="sieveparser" class="org.apache.james.managesieve.jsieve.Parser"/>
 
 </beans>
diff --git a/server/data/data-api/pom.xml b/server/data/data-api/pom.xml
index 0968964..ffe0382 100644
--- a/server/data/data-api/pom.xml
+++ b/server/data/data-api/pom.xml
@@ -39,11 +39,12 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>james-server-mailrepository-api</artifactId>
+            <artifactId>testing-base</artifactId>
+            <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>${james.groupId}</groupId>
-            <artifactId>testing-base</artifactId>
+            <groupId>io.projectreactor</groupId>
+            <artifactId>reactor-core</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -51,14 +52,6 @@
             <artifactId>commons-configuration2</artifactId>
         </dependency>
         <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.sun.mail</groupId>
-            <artifactId>javax.mail</artifactId>
-        </dependency>
-        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>jcl-over-slf4j</artifactId>
             <scope>test</scope>
diff --git a/server/data/data-file/pom.xml b/server/data/data-file/pom.xml
index 65b4b11..5c1cf2e 100644
--- a/server/data/data-file/pom.xml
+++ b/server/data/data-file/pom.xml
@@ -81,6 +81,10 @@
         <dependency>
             <groupId>${james.groupId}</groupId>
             <artifactId>james-server-mailrepository-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-mailrepository-api</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
diff --git a/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepository.java b/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepository.java
index 7ebcd31..c5cba49 100644
--- a/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepository.java
+++ b/server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepository.java
@@ -40,9 +40,9 @@ import org.apache.commons.configuration2.HierarchicalConfiguration;
 import org.apache.commons.configuration2.tree.ImmutableNode;
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.mailrepository.api.Initializable;
 import org.apache.james.mailrepository.api.MailKey;
 import org.apache.james.mailrepository.api.MailRepository;
-import org.apache.james.repository.api.Initializable;
 import org.apache.james.repository.file.FilePersistentObjectRepository;
 import org.apache.james.repository.file.FilePersistentStreamRepository;
 import org.apache.james.server.core.MimeMessageCopyOnWriteProxy;
diff --git a/server/data/data-jdbc/pom.xml b/server/data/data-jdbc/pom.xml
index 03b7786..270e53b 100644
--- a/server/data/data-jdbc/pom.xml
+++ b/server/data/data-jdbc/pom.xml
@@ -72,6 +72,10 @@
         <dependency>
             <groupId>${james.groupId}</groupId>
             <artifactId>james-server-mailrepository-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-mailrepository-api</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
diff --git a/server/data/data-jdbc/src/main/java/org/apache/james/mailrepository/jdbc/JDBCMailRepository.java b/server/data/data-jdbc/src/main/java/org/apache/james/mailrepository/jdbc/JDBCMailRepository.java
index 344c4c3..4b25b4f 100644
--- a/server/data/data-jdbc/src/main/java/org/apache/james/mailrepository/jdbc/JDBCMailRepository.java
+++ b/server/data/data-jdbc/src/main/java/org/apache/james/mailrepository/jdbc/JDBCMailRepository.java
@@ -56,9 +56,9 @@ import org.apache.commons.lang3.SerializationUtils;
 import org.apache.james.core.MailAddress;
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.mailrepository.api.Initializable;
 import org.apache.james.mailrepository.api.MailKey;
 import org.apache.james.mailrepository.api.MailRepository;
-import org.apache.james.repository.api.Initializable;
 import org.apache.james.repository.file.FilePersistentStreamRepository;
 import org.apache.james.server.core.MailImpl;
 import org.apache.james.server.core.MimeMessageCopyOnWriteProxy;
diff --git a/server/data/data-jpa/pom.xml b/server/data/data-jpa/pom.xml
index f2cba25..bcce435 100644
--- a/server/data/data-jpa/pom.xml
+++ b/server/data/data-jpa/pom.xml
@@ -78,6 +78,16 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-mailrepository-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-mailrepository-api</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>testing-base</artifactId>
             <scope>test</scope>
         </dependency>
diff --git a/server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStoreTest.java b/server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStoreTest.java
index 5a58174..ed8b693 100644
--- a/server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStoreTest.java
+++ b/server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStoreTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.james.mailrepository.jpa;
 
-import org.apache.james.mailrepository.api.MailRepositoryUrlStoreContract;
+import org.apache.james.mailrepository.MailRepositoryUrlStoreContract;
 import org.junit.jupiter.api.extension.ExtendWith;
 
 @ExtendWith(JPAMailRepositoryUrlStoreExtension.class)
diff --git a/server/data/data-memory/pom.xml b/server/data/data-memory/pom.xml
index 9515716..8546b26 100644
--- a/server/data/data-memory/pom.xml
+++ b/server/data/data-memory/pom.xml
@@ -75,10 +75,6 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>james-server-mailrepository-memory</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>${james.groupId}</groupId>
             <artifactId>testing-base</artifactId>
             <scope>test</scope>
         </dependency>
diff --git a/server/mailet/mailetcontainer-camel/pom.xml b/server/mailet/mailetcontainer-camel/pom.xml
index e06eb72..0129e39 100644
--- a/server/mailet/mailetcontainer-camel/pom.xml
+++ b/server/mailet/mailetcontainer-camel/pom.xml
@@ -79,6 +79,10 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-mailrepository-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-queue-api</artifactId>
         </dependency>
         <dependency>
diff --git a/server/mailet/mailets/pom.xml b/server/mailet/mailets/pom.xml
index d0b3791..c54386f 100644
--- a/server/mailet/mailets/pom.xml
+++ b/server/mailet/mailets/pom.xml
@@ -148,6 +148,10 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-mailrepository-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-mailrepository-memory</artifactId>
             <scope>test</scope>
         </dependency>
diff --git a/server/mailrepository/mailrepository-api/pom.xml b/server/mailrepository/mailrepository-api/pom.xml
index 2de1aa4..b7faf1a 100644
--- a/server/mailrepository/mailrepository-api/pom.xml
+++ b/server/mailrepository/mailrepository-api/pom.xml
@@ -31,6 +31,7 @@
     <packaging>jar</packaging>
 
     <name>Apache James :: Server :: MailRepository :: API</name>
+    <description>MailRepository allows storing Emails with their delivery context</description>
 
     <dependencies>
         <dependency>
diff --git a/server/data/data-library/src/main/java/org/apache/james/repository/api/Initializable.java b/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/Initializable.java
similarity index 96%
rename from server/data/data-library/src/main/java/org/apache/james/repository/api/Initializable.java
rename to server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/Initializable.java
index aea96b2..26c61df 100644
--- a/server/data/data-library/src/main/java/org/apache/james/repository/api/Initializable.java
+++ b/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/Initializable.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.repository.api;
+package org.apache.james.mailrepository.api;
 
 public interface Initializable {
 
diff --git a/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java b/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
similarity index 97%
rename from server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
rename to server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
index fa79c3c..272a479 100644
--- a/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
+++ b/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
@@ -1,107 +1,107 @@
-/****************************************************************
- * 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.mailrepository.api;
-
-import java.util.Optional;
-import java.util.stream.Stream;
-
-public interface MailRepositoryStore {
-
-    /**
-     * Select the {@link MailRepository} for the given url.
-     *
-     * If the repository is not referenced by {@link MailRepositoryStore::getUrls}, it will be created, and its URL referenced
-     * by {@link MailRepositoryStore::getUrls}.
-     */
-    MailRepository select(MailRepositoryUrl url) throws MailRepositoryStoreException;
-
-    Optional<Protocol> defaultProtocol();
-
-    /**
-     * Create the {@link MailRepository} for the given url and return it. If the repository already exists,
-     * then no new repository is created, the old one will be returned.
-     *
-     * The URL of the created repository will be referenced by {@link MailRepositoryStore::getUrls}
-     */
-    default MailRepository create(MailRepositoryUrl url) throws MailRepositoryStoreException {
-        return select(url);
-    }
-
-    /**
-     * Returns the {@link MailRepository} for the given url.
-     *
-     * This mail repository will not be created if the URL is not referenced by {@link MailRepositoryStore::getUrls}.
-     *
-     * If the repository is referenced by {@link MailRepositoryStore::getUrls}, and the repository do not exist locally, then
-     * this repository will be created locally.
-     */
-    Optional<MailRepository> get(MailRepositoryUrl url) throws MailRepositoryStoreException;
-
-    /**
-     * Returns all the {@link MailRepository} referenced by {@link MailRepositoryStore::getUrls} got a given path.
-     *
-     * The corresponding mail repositories will not be created if they do not exist.
-     *
-     * If the path matches URLs referenced by {@link MailRepositoryStore::getUrls}, and the repositories do not exist locally, then
-     * these repositories will be created locally.
-     */
-    Stream<MailRepository> getByPath(MailRepositoryPath path) throws MailRepositoryStoreException;
-
-    /**
-     * Return a {@link Stream} which contains all urls of the selected {@link MailRepository}'s.
-     *
-     * Note that this may include MailRepositories that do not exist locally.
-     *
-     * This can be the case if:
-     *  - The MailRepository had been created by another James server in a clustered environment
-     *  - The MailRepository had been dynamically created, and James was restarted
-     */
-    Stream<MailRepositoryUrl> getUrls();
-
-    /**
-     * Return a {@link Stream} which contains all paths of the selected {@link MailRepository}'s
-     */
-    default Stream<MailRepositoryPath> getPaths() {
-        return getUrls()
-            .map(MailRepositoryUrl::getPath)
-            .sorted()
-            .distinct();
-    }
-
-    class MailRepositoryStoreException extends Exception {
-        public MailRepositoryStoreException(String msg, Throwable t) {
-            super(msg, t);
-        }
-
-        public MailRepositoryStoreException(String msg) {
-            super(msg);
-        }
-    }
-
-    class UnsupportedRepositoryStoreException extends MailRepositoryStoreException {
-        public UnsupportedRepositoryStoreException(String msg, Throwable t) {
-            super(msg, t);
-        }
-
-        public UnsupportedRepositoryStoreException(String msg) {
-            super(msg);
-        }
-    }
-}
+/****************************************************************
+ * 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.mailrepository.api;
+
+import java.util.Optional;
+import java.util.stream.Stream;
+
+public interface MailRepositoryStore {
+
+    /**
+     * Select the {@link MailRepository} for the given url.
+     *
+     * If the repository is not referenced by {@link MailRepositoryStore::getUrls}, it will be created, and its URL referenced
+     * by {@link MailRepositoryStore::getUrls}.
+     */
+    MailRepository select(MailRepositoryUrl url) throws MailRepositoryStoreException;
+
+    Optional<Protocol> defaultProtocol();
+
+    /**
+     * Create the {@link MailRepository} for the given url and return it. If the repository already exists,
+     * then no new repository is created, the old one will be returned.
+     *
+     * The URL of the created repository will be referenced by {@link MailRepositoryStore::getUrls}
+     */
+    default MailRepository create(MailRepositoryUrl url) throws MailRepositoryStoreException {
+        return select(url);
+    }
+
+    /**
+     * Returns the {@link MailRepository} for the given url.
+     *
+     * This mail repository will not be created if the URL is not referenced by {@link MailRepositoryStore::getUrls}.
+     *
+     * If the repository is referenced by {@link MailRepositoryStore::getUrls}, and the repository do not exist locally, then
+     * this repository will be created locally.
+     */
+    Optional<MailRepository> get(MailRepositoryUrl url) throws MailRepositoryStoreException;
+
+    /**
+     * Returns all the {@link MailRepository} referenced by {@link MailRepositoryStore::getUrls} got a given path.
+     *
+     * The corresponding mail repositories will not be created if they do not exist.
+     *
+     * If the path matches URLs referenced by {@link MailRepositoryStore::getUrls}, and the repositories do not exist locally, then
+     * these repositories will be created locally.
+     */
+    Stream<MailRepository> getByPath(MailRepositoryPath path) throws MailRepositoryStoreException;
+
+    /**
+     * Return a {@link Stream} which contains all urls of the selected {@link MailRepository}'s.
+     *
+     * Note that this may include MailRepositories that do not exist locally.
+     *
+     * This can be the case if:
+     *  - The MailRepository had been created by another James server in a clustered environment
+     *  - The MailRepository had been dynamically created, and James was restarted
+     */
+    Stream<MailRepositoryUrl> getUrls();
+
+    /**
+     * Return a {@link Stream} which contains all paths of the selected {@link MailRepository}'s
+     */
+    default Stream<MailRepositoryPath> getPaths() {
+        return getUrls()
+            .map(MailRepositoryUrl::getPath)
+            .sorted()
+            .distinct();
+    }
+
+    class MailRepositoryStoreException extends Exception {
+        public MailRepositoryStoreException(String msg, Throwable t) {
+            super(msg, t);
+        }
+
+        public MailRepositoryStoreException(String msg) {
+            super(msg);
+        }
+    }
+
+    class UnsupportedRepositoryStoreException extends MailRepositoryStoreException {
+        public UnsupportedRepositoryStoreException(String msg, Throwable t) {
+            super(msg, t);
+        }
+
+        public UnsupportedRepositoryStoreException(String msg) {
+            super(msg);
+        }
+    }
+}
diff --git a/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryUrlStore.java b/server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryUrlStore.java
similarity index 100%
rename from server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryUrlStore.java
rename to server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryUrlStore.java
diff --git a/server/data/data-api/src/test/java/org/apache/james/mailrepository/api/MailRepositoryUrlStoreContract.java b/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryUrlStoreContract.java
similarity index 95%
rename from server/data/data-api/src/test/java/org/apache/james/mailrepository/api/MailRepositoryUrlStoreContract.java
rename to server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryUrlStoreContract.java
index 89fce77..5273ca3 100644
--- a/server/data/data-api/src/test/java/org/apache/james/mailrepository/api/MailRepositoryUrlStoreContract.java
+++ b/server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryUrlStoreContract.java
@@ -17,12 +17,14 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailrepository.api;
+package org.apache.james.mailrepository;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
 import java.time.Duration;
 
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
+import org.apache.james.mailrepository.api.MailRepositoryUrlStore;
 import org.apache.james.util.concurrency.ConcurrentTestRunner;
 import org.junit.jupiter.api.Test;
 
diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlModule.java b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlModule.java
similarity index 100%
rename from server/data/data-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlModule.java
rename to server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlModule.java
diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlStore.java b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlStore.java
similarity index 100%
rename from server/data/data-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlStore.java
rename to server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlStore.java
diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/UrlsDao.java b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/UrlsDao.java
similarity index 100%
rename from server/data/data-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/UrlsDao.java
rename to server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/UrlsDao.java
diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/UrlsTable.java b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/UrlsTable.java
similarity index 100%
rename from server/data/data-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/UrlsTable.java
rename to server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/UrlsTable.java
diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlStoreExtension.java b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlStoreExtension.java
similarity index 100%
rename from server/data/data-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlStoreExtension.java
rename to server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlStoreExtension.java
diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlStoreTest.java b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlStoreTest.java
similarity index 95%
rename from server/data/data-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlStoreTest.java
rename to server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlStoreTest.java
index 92a8a37..f41810c 100644
--- a/server/data/data-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlStoreTest.java
+++ b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlStoreTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.james.mailrepository.cassandra;
 
-import org.apache.james.mailrepository.api.MailRepositoryUrlStoreContract;
+import org.apache.james.mailrepository.MailRepositoryUrlStoreContract;
 import org.junit.jupiter.api.extension.ExtendWith;
 
 @ExtendWith(CassandraMailRepositoryUrlStoreExtension.class)
diff --git a/server/mailrepository/mailrepository-memory/pom.xml b/server/mailrepository/mailrepository-memory/pom.xml
index 73678b3..f4ed89c 100644
--- a/server/mailrepository/mailrepository-memory/pom.xml
+++ b/server/mailrepository/mailrepository-memory/pom.xml
@@ -35,6 +35,20 @@
     <dependencies>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-mailet-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-lifecycle-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-mailrepository-api</artifactId>
         </dependency>
         <dependency>
@@ -45,8 +59,17 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-testing</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>testing-base</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-configuration2</artifactId>
+        </dependency>
     </dependencies>
 </project>
diff --git a/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MailRepositoryLoader.java b/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MailRepositoryLoader.java
similarity index 100%
rename from server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MailRepositoryLoader.java
rename to server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MailRepositoryLoader.java
diff --git a/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MailRepositoryStoreConfiguration.java b/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MailRepositoryStoreConfiguration.java
similarity index 100%
rename from server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MailRepositoryStoreConfiguration.java
rename to server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MailRepositoryStoreConfiguration.java
diff --git a/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java b/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
similarity index 99%
rename from server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
rename to server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
index 1ef76a2..47f5bd2 100644
--- a/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
+++ b/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
@@ -33,13 +33,13 @@ import org.apache.commons.configuration2.HierarchicalConfiguration;
 import org.apache.commons.configuration2.tree.ImmutableNode;
 import org.apache.james.lifecycle.api.Configurable;
 import org.apache.james.lifecycle.api.Startable;
+import org.apache.james.mailrepository.api.Initializable;
 import org.apache.james.mailrepository.api.MailRepository;
 import org.apache.james.mailrepository.api.MailRepositoryPath;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.mailrepository.api.MailRepositoryUrl;
 import org.apache.james.mailrepository.api.MailRepositoryUrlStore;
 import org.apache.james.mailrepository.api.Protocol;
-import org.apache.james.repository.api.Initializable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryUrlStore.java b/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryUrlStore.java
similarity index 100%
rename from server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryUrlStore.java
rename to server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryUrlStore.java
diff --git a/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/SimpleMailRepositoryLoader.java b/server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/SimpleMailRepositoryLoader.java
similarity index 100%
rename from server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/SimpleMailRepositoryLoader.java
rename to server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/SimpleMailRepositoryLoader.java
diff --git a/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MailRepositoryStoreConfigurationTest.java b/server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MailRepositoryStoreConfigurationTest.java
similarity index 100%
rename from server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MailRepositoryStoreConfigurationTest.java
rename to server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MailRepositoryStoreConfigurationTest.java
diff --git a/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java b/server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
similarity index 100%
rename from server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
rename to server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
diff --git a/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryUrlStoreExtension.java b/server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryUrlStoreExtension.java
similarity index 100%
rename from server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryUrlStoreExtension.java
rename to server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryUrlStoreExtension.java
diff --git a/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryUrlStoreTest.java b/server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryUrlStoreTest.java
similarity index 95%
rename from server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryUrlStoreTest.java
rename to server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryUrlStoreTest.java
index 047957f..7c6d10f 100644
--- a/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryUrlStoreTest.java
+++ b/server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryUrlStoreTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.james.mailrepository.memory;
 
-import org.apache.james.mailrepository.api.MailRepositoryUrlStoreContract;
+import org.apache.james.mailrepository.MailRepositoryUrlStoreContract;
 import org.junit.jupiter.api.extension.ExtendWith;
 
 @ExtendWith(MemoryMailRepositoryUrlStoreExtension.class)
diff --git a/server/data/data-memory/src/test/resources/mailrepositorystore.xml b/server/mailrepository/mailrepository-memory/src/test/resources/mailrepositorystore.xml
similarity index 100%
rename from server/data/data-memory/src/test/resources/mailrepositorystore.xml
rename to server/mailrepository/mailrepository-memory/src/test/resources/mailrepositorystore.xml


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org