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 2018/06/12 00:03:20 UTC

[01/17] james-project git commit: JAMES-2411 Get the mail inputStream in MailRepositoryStoreService

Repository: james-project
Updated Branches:
  refs/heads/master 65c2bb774 -> 257eae573


JAMES-2411 Get the mail inputStream in MailRepositoryStoreService


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/581a2671
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/581a2671
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/581a2671

Branch: refs/heads/master
Commit: 581a2671d7761557620272a4b425f436be4e2330
Parents: 65c2bb7
Author: Antoine Duprat <ad...@linagora.com>
Authored: Tue Jun 5 15:29:19 2018 +0200
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 12 06:59:33 2018 +0700

----------------------------------------------------------------------
 .../webadmin/webadmin-mailrepository/pom.xml    |  6 +++
 .../service/MailRepositoryStoreService.java     | 11 +++++
 .../service/MailRepositoryStoreServiceTest.java | 46 ++++++++++++++++++++
 3 files changed, 63 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/581a2671/server/protocols/webadmin/webadmin-mailrepository/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/pom.xml b/server/protocols/webadmin/webadmin-mailrepository/pom.xml
index 72b374a..20ffd89 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/pom.xml
+++ b/server/protocols/webadmin/webadmin-mailrepository/pom.xml
@@ -76,6 +76,12 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>javax-mail-extension</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/581a2671/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
index 7df346b..efc9a75 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
@@ -19,11 +19,13 @@
 
 package org.apache.james.webadmin.service;
 
+import java.io.InputStream;
 import java.util.List;
 import java.util.Optional;
 
 import javax.inject.Inject;
 import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
 
 import org.apache.james.mailrepository.api.MailRepository;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
@@ -35,6 +37,7 @@ import org.apache.james.webadmin.dto.MailDto;
 import org.apache.james.webadmin.dto.MailKey;
 import org.apache.james.webadmin.dto.MailRepositoryResponse;
 import org.apache.james.webadmin.utils.ErrorResponder;
+import org.apache.mailet.Mail;
 import org.eclipse.jetty.http.HttpStatus;
 
 import com.github.fge.lambdas.Throwing;
@@ -83,6 +86,14 @@ public class MailRepositoryStoreService {
             .map(Throwing.function(MailDto::fromMail).sneakyThrow());
     }
 
+    public Optional<InputStream> downloadMail(String url, String mailKey) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
+        MailRepository mailRepository = getRepository(url);
+
+        return Optional.ofNullable(mailRepository.retrieve(mailKey))
+            .map(Throwing.function(Mail::getMessage).sneakyThrow())
+            .map(Throwing.function(MimeMessage::getRawInputStream).sneakyThrow());
+    }
+
     public void deleteMail(String url, String mailKey) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
         getRepository(url)
             .remove(mailKey);

http://git-wip-us.apache.org/repos/asf/james-project/blob/581a2671/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
index fb6fd66..bd84ae1 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
@@ -23,8 +23,11 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
 import java.util.Optional;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.mailrepository.memory.MemoryMailRepository;
 import org.apache.james.util.streams.Limit;
@@ -126,4 +129,47 @@ public class MailRepositoryStoreServiceTest {
         assertThat(testee.listMails(FIRST_REPOSITORY, Offset.from(1), Limit.from(1)).get())
             .containsOnly(new MailKey(NAME_2));
     }
+
+    @Test
+    public void downloadMailShouldThrownWhenUnknownRepository() throws Exception {
+        when(mailRepositoryStore.get("unkown")).thenReturn(Optional.empty());
+
+        assertThatThrownBy(() -> testee.downloadMail(FIRST_REPOSITORY, NAME_1))
+            .isInstanceOf(NullPointerException.class);
+    }
+
+    @Test
+    public void dowloadMailShouldThrowWhenMailRepositoryStoreThrows() throws Exception {
+        when(mailRepositoryStore.get(FIRST_REPOSITORY))
+            .thenThrow(new MailRepositoryStore.MailRepositoryStoreException("message"));
+
+        assertThatThrownBy(() -> testee.downloadMail(FIRST_REPOSITORY, NAME_1))
+            .isInstanceOf(MailRepositoryStore.MailRepositoryStoreException.class);
+    }
+
+    @Test
+    public void dowloadMailShouldReturnEmptyWhenMailNotFound() throws Exception {
+        when(mailRepositoryStore.get(FIRST_REPOSITORY)).thenReturn(Optional.of(repository));
+
+        assertThat(testee.downloadMail(FIRST_REPOSITORY, NAME_1))
+            .isEmpty();
+    }
+
+    @Test
+    public void dowloadMailShouldReturnThInputStreamWhenMailExists() throws Exception {
+        when(mailRepositoryStore.get(FIRST_REPOSITORY)).thenReturn(Optional.of(repository));
+
+        FakeMail mail = FakeMail.builder()
+            .name(NAME_1)
+            .fileName("mail.eml")
+            .build();
+        repository.store(mail);
+
+        Optional<InputStream> downloadMail = testee.downloadMail(FIRST_REPOSITORY, NAME_1);
+        assertThat(downloadMail).isNotEmpty();
+
+        String eml = IOUtils.toString(downloadMail.get(), StandardCharsets.UTF_8);
+        String expectedContent = IOUtils.toString(mail.getMessage().getRawInputStream(), StandardCharsets.UTF_8);
+        assertThat(eml).isEqualTo(expectedContent);
+    }
 }


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


[05/17] james-project git commit: JAMES-2411 EML download should enforce exact raw content

Posted by bt...@apache.org.
JAMES-2411 EML download should enforce exact raw content


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/8b1f6fb5
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/8b1f6fb5
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/8b1f6fb5

Branch: refs/heads/master
Commit: 8b1f6fb56140c6516e6f6fbe1f182b7812b67a94
Parents: 0d66652
Author: benwa <bt...@linagora.com>
Authored: Thu Jun 7 08:37:39 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 12 07:00:47 2018 +0700

----------------------------------------------------------------------
 .../webadmin/routes/MailRepositoriesRoutes.java | 24 ++++++++++------
 .../service/MailRepositoryStoreService.java     |  8 ++----
 .../routes/MailRepositoriesRoutesTest.java      | 15 +++++-----
 .../service/MailRepositoryStoreServiceTest.java | 29 +++++++++++---------
 .../src/test/resources/mail.eml                 | 16 +++++++++++
 5 files changed, 58 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/8b1f6fb5/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
index 83f035d..9bd7f1d 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
@@ -19,7 +19,7 @@
 
 package org.apache.james.webadmin.routes;
 
-import java.io.InputStream;
+import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.nio.charset.StandardCharsets;
@@ -29,6 +29,8 @@ import java.util.function.Supplier;
 
 import javax.inject.Inject;
 import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
+import javax.servlet.http.HttpServletResponse;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -187,15 +189,21 @@ public class MailRepositoriesRoutes implements Routes {
         service.get(MAIL_REPOSITORIES + "/:encodedUrl/mails/:mailKey", Constants.JSON_CONTENT_TYPE,
             (request, response) -> getMailAsJson(decodedRepositoryUrl(request), request.params("mailKey")), jsonTransformer);
 
-        service.get(MAIL_REPOSITORIES + "/:encodedUrl/mails/:mailKey", Constants.RFC822_CONTENT_TYPE, (request, response) -> {
-            response.type(Constants.RFC822_CONTENT_TYPE);
-            return getMailAsEml(decodedRepositoryUrl(request), request.params("mailKey"));
-        });
+        service.get(MAIL_REPOSITORIES + "/:encodedUrl/mails/:mailKey", Constants.RFC822_CONTENT_TYPE,
+            (request, response) -> writeMimeMessage(
+                getMailAsMimeMessage(decodedRepositoryUrl(request), request.params("mailKey")),
+                response.raw()));
+    }
+
+    private Object writeMimeMessage(MimeMessage mimeMessage, HttpServletResponse rawResponse) throws MessagingException, IOException {
+        rawResponse.setContentType(Constants.RFC822_CONTENT_TYPE);
+        mimeMessage.writeTo(rawResponse.getOutputStream());
+        return rawResponse;
     }
 
-    private InputStream getMailAsEml(String url, String mailKey) {
+    private MimeMessage getMailAsMimeMessage(String url, String mailKey) {
         try {
-            return repositoryStoreService.downloadMail(url, mailKey)
+            return repositoryStoreService.retrieveMessage(url, mailKey)
                 .orElseThrow(mailNotFoundError(mailKey));
         } catch (MailRepositoryStore.MailRepositoryStoreException | MessagingException e) {
             throw internalServerError(e);
@@ -248,7 +256,7 @@ public class MailRepositoriesRoutes implements Routes {
                             .message("The repository " + encodedUrl + "(decoded value: '" + url + "') does not exist")
                             .haltError());
                 return new ExtendedMailRepositoryResponse(url, size);
-            } catch (MailRepositoryStore.MailRepositoryStoreException | MessagingException e) {
+            } catch (MailRepositoryStore.MailRepositoryStoreException e) {
                 throw ErrorResponder.builder()
                     .statusCode(HttpStatus.INTERNAL_SERVER_ERROR_500)
                     .type(ErrorResponder.ErrorType.SERVER_ERROR)

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b1f6fb5/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
index efc9a75..6f69be3 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
@@ -19,7 +19,6 @@
 
 package org.apache.james.webadmin.service;
 
-import java.io.InputStream;
 import java.util.List;
 import java.util.Optional;
 
@@ -74,7 +73,7 @@ public class MailRepositoryStoreService {
                 .collect(Guavate.toImmutableList());
     }
 
-    public Optional<Long> size(String url) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
+    public Optional<Long> size(String url) throws MailRepositoryStore.MailRepositoryStoreException {
         Optional<MailRepository> mailRepository = Optional.ofNullable(getRepository(url));
         return mailRepository.map(Throwing.function(MailRepository::size).sneakyThrow());
     }
@@ -86,12 +85,11 @@ public class MailRepositoryStoreService {
             .map(Throwing.function(MailDto::fromMail).sneakyThrow());
     }
 
-    public Optional<InputStream> downloadMail(String url, String mailKey) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
+    public Optional<MimeMessage> retrieveMessage(String url, String mailKey) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
         MailRepository mailRepository = getRepository(url);
 
         return Optional.ofNullable(mailRepository.retrieve(mailKey))
-            .map(Throwing.function(Mail::getMessage).sneakyThrow())
-            .map(Throwing.function(MimeMessage::getRawInputStream).sneakyThrow());
+            .map(Throwing.function(Mail::getMessage).sneakyThrow());
     }
 
     public void deleteMail(String url, String mailKey) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b1f6fb5/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
index 308c9de..6e7d6fb 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
@@ -35,11 +35,9 @@ import static org.hamcrest.Matchers.notNullValue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.Optional;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.mailrepository.memory.MemoryMailRepository;
 import org.apache.james.metrics.api.NoopMetricFactory;
@@ -48,6 +46,7 @@ import org.apache.james.queue.api.ManageableMailQueue;
 import org.apache.james.queue.api.RawMailQueueItemDecoratorFactory;
 import org.apache.james.queue.memory.MemoryMailQueueFactory;
 import org.apache.james.task.MemoryTaskManager;
+import org.apache.james.util.ClassLoaderUtils;
 import org.apache.james.webadmin.Constants;
 import org.apache.james.webadmin.WebAdminServer;
 import org.apache.james.webadmin.WebAdminUtils;
@@ -248,7 +247,7 @@ public class MailRepositoriesRoutesTest {
     }
 
     @Test
-    public void listingKeysShouldReturnErrorOnInvalidOffset() throws Exception {
+    public void listingKeysShouldReturnErrorOnInvalidOffset() {
         given()
             .param("offset", "invalid")
         .when()
@@ -261,7 +260,7 @@ public class MailRepositoriesRoutesTest {
     }
 
     @Test
-    public void listingKeysShouldReturnErrorOnNegativeOffset() throws Exception {
+    public void listingKeysShouldReturnErrorOnNegativeOffset() {
         given()
             .param("offset", "-1")
         .when()
@@ -297,7 +296,7 @@ public class MailRepositoriesRoutesTest {
     }
 
     @Test
-    public void listingKeysShouldReturnErrorOnInvalidLimit() throws Exception {
+    public void listingKeysShouldReturnErrorOnInvalidLimit() {
         given()
             .param("limit", "invalid")
         .when()
@@ -310,7 +309,7 @@ public class MailRepositoriesRoutesTest {
     }
 
     @Test
-    public void listingKeysShouldReturnErrorOnNegativeLimit() throws Exception {
+    public void listingKeysShouldReturnErrorOnNegativeLimit() {
         given()
             .param("limit", "-1")
         .when()
@@ -344,7 +343,7 @@ public class MailRepositoriesRoutesTest {
     }
 
     @Test
-    public void zeroLimitShouldNotBeValid() throws Exception {
+    public void zeroLimitShouldNotBeValid() {
         given()
             .param("limit", "0")
         .when()
@@ -485,7 +484,7 @@ public class MailRepositoriesRoutesTest {
             .build();
         mailRepository.store(mail);
 
-        String expectedContent = IOUtils.toString(mail.getMessage().getRawInputStream(), StandardCharsets.UTF_8);
+        String expectedContent = ClassLoaderUtils.getSystemResourceAsString("mail.eml");
         given()
             .accept(Constants.RFC822_CONTENT_TYPE)
         .when()

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b1f6fb5/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
index bd84ae1..100959a 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
@@ -23,13 +23,16 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.util.Optional;
 
+import javax.mail.internet.MimeMessage;
+
 import org.apache.commons.io.IOUtils;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.mailrepository.memory.MemoryMailRepository;
+import org.apache.james.server.core.MimeMessageInputStream;
+import org.apache.james.util.ClassLoaderUtils;
 import org.apache.james.util.streams.Limit;
 import org.apache.james.util.streams.Offset;
 import org.apache.james.webadmin.dto.MailKey;
@@ -131,32 +134,32 @@ public class MailRepositoryStoreServiceTest {
     }
 
     @Test
-    public void downloadMailShouldThrownWhenUnknownRepository() throws Exception {
+    public void retrieveMessageShouldThrownWhenUnknownRepository() throws Exception {
         when(mailRepositoryStore.get("unkown")).thenReturn(Optional.empty());
 
-        assertThatThrownBy(() -> testee.downloadMail(FIRST_REPOSITORY, NAME_1))
+        assertThatThrownBy(() -> testee.retrieveMessage(FIRST_REPOSITORY, NAME_1))
             .isInstanceOf(NullPointerException.class);
     }
 
     @Test
-    public void dowloadMailShouldThrowWhenMailRepositoryStoreThrows() throws Exception {
+    public void retrieveMessageShouldThrowWhenMailRepositoryStoreThrows() throws Exception {
         when(mailRepositoryStore.get(FIRST_REPOSITORY))
             .thenThrow(new MailRepositoryStore.MailRepositoryStoreException("message"));
 
-        assertThatThrownBy(() -> testee.downloadMail(FIRST_REPOSITORY, NAME_1))
+        assertThatThrownBy(() -> testee.retrieveMessage(FIRST_REPOSITORY, NAME_1))
             .isInstanceOf(MailRepositoryStore.MailRepositoryStoreException.class);
     }
 
     @Test
-    public void dowloadMailShouldReturnEmptyWhenMailNotFound() throws Exception {
+    public void retrieveMessageShouldReturnEmptyWhenMailNotFound() throws Exception {
         when(mailRepositoryStore.get(FIRST_REPOSITORY)).thenReturn(Optional.of(repository));
 
-        assertThat(testee.downloadMail(FIRST_REPOSITORY, NAME_1))
+        assertThat(testee.retrieveMessage(FIRST_REPOSITORY, NAME_1))
             .isEmpty();
     }
 
     @Test
-    public void dowloadMailShouldReturnThInputStreamWhenMailExists() throws Exception {
+    public void retrieveMessageShouldReturnTheMessageWhenMailExists() throws Exception {
         when(mailRepositoryStore.get(FIRST_REPOSITORY)).thenReturn(Optional.of(repository));
 
         FakeMail mail = FakeMail.builder()
@@ -165,11 +168,11 @@ public class MailRepositoryStoreServiceTest {
             .build();
         repository.store(mail);
 
-        Optional<InputStream> downloadMail = testee.downloadMail(FIRST_REPOSITORY, NAME_1);
-        assertThat(downloadMail).isNotEmpty();
+        Optional<MimeMessage> mimeMessage = testee.retrieveMessage(FIRST_REPOSITORY, NAME_1);
+        assertThat(mimeMessage).isNotEmpty();
 
-        String eml = IOUtils.toString(downloadMail.get(), StandardCharsets.UTF_8);
-        String expectedContent = IOUtils.toString(mail.getMessage().getRawInputStream(), StandardCharsets.UTF_8);
-        assertThat(eml).isEqualTo(expectedContent);
+        String eml = IOUtils.toString(new MimeMessageInputStream(mimeMessage.get()), StandardCharsets.UTF_8);
+        String expectedContent = ClassLoaderUtils.getSystemResourceAsString("mail.eml");
+        assertThat(eml).isEqualToNormalizingNewlines(expectedContent);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b1f6fb5/server/protocols/webadmin/webadmin-mailrepository/src/test/resources/mail.eml
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/resources/mail.eml b/server/protocols/webadmin/webadmin-mailrepository/src/test/resources/mail.eml
new file mode 100644
index 0000000..b732d23
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/resources/mail.eml
@@ -0,0 +1,16 @@
+Return-Path: <ge...@list.org>
+MIME-Version: 1.0
+From: Hello <he...@gmail.com>
+Date: Thu, 4 Jun 2015 06:08:41 +0200
+Message-ID: <CA...@mail.gmail.com>
+To: General Discussion  <ge...@list.org>
+Content-Type: text/plain; charset=UTF-8
+Subject: [arch-general] Very important topic
+Reply-To: General Discussion <ge...@list.org>
+Sender: "arch-general" <ge...@list.org>
+
+Hi all,
+
+Very important message!!!
+
+Thanks!
\ No newline at end of file


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


[17/17] james-project git commit: Reduce size of "Download" cucumber test messages

Posted by bt...@apache.org.
Reduce size of "Download" cucumber test messages

They put a significant pressure on Garbadge collection and lead to test crash


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/bb176e07
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/bb176e07
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/bb176e07

Branch: refs/heads/master
Commit: bb176e07b7006a6ca9d3ca9ab3b61e07ad589efb
Parents: f3127d8
Author: benwa <bt...@linagora.com>
Authored: Fri Jun 8 14:57:03 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 12 07:02:02 2018 +0700

----------------------------------------------------------------------
 .../james/jmap/methods/integration/cucumber/DownloadStepdefs.java  | 2 +-
 .../src/test/resources/cucumber/DownloadGet.feature                | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/bb176e07/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/DownloadStepdefs.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/DownloadStepdefs.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/DownloadStepdefs.java
index a2aedfc..6f611a4 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/DownloadStepdefs.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/DownloadStepdefs.java
@@ -110,7 +110,7 @@ public class DownloadStepdefs {
 
         ComposedMessageId composedMessageId = mainStepdefs.mailboxProbe.appendMessage(user, mailboxPath,
             AppendCommand.from(new ByteArrayInputStream(
-                Strings.repeat("header: 0123456789\r\n", 1024 * 1024)
+                Strings.repeat("header: 0123456789\r\n", 128 * 1024)
                     .getBytes(StandardCharsets.UTF_8))));
 
         inputToMessageId.put(messageId, composedMessageId.getMessageId());

http://git-wip-us.apache.org/repos/asf/james-project/blob/bb176e07/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadGet.feature
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadGet.feature b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadGet.feature
index 6a11038..565e1be 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadGet.feature
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadGet.feature
@@ -58,7 +58,7 @@ Feature: Download GET
   Scenario: Getting a message blob previously stored
     Given "alice@domain.tld" mailbox "INBOX" contains a big message "1"
     When "alice@domain.tld" downloads "1"
-    Then the blob size is 20971520
+    Then the blob size is 2621440
 
   Scenario: Getting a message then getting its blob
     Given "alice@domain.tld" has a message "m1" in "INBOX" mailbox with subject "my test subject", content "testmail"


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


[04/17] james-project git commit: JAMES-2411 Content-Length should be added

Posted by bt...@apache.org.
JAMES-2411 Content-Length should be added


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/bfb5d147
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/bfb5d147
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/bfb5d147

Branch: refs/heads/master
Commit: bfb5d14705c40482a64951b00b32da32051929eb
Parents: 8b1f6fb
Author: benwa <bt...@linagora.com>
Authored: Thu Jun 7 08:41:37 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 12 07:00:47 2018 +0700

----------------------------------------------------------------------
 .../apache/james/webadmin/WebAdminUtils.java    |  7 +-----
 .../webadmin/routes/MailRepositoriesRoutes.java |  8 ++++++
 .../routes/MailRepositoriesRoutesTest.java      | 26 +++++++++++++-------
 3 files changed, 26 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/bfb5d147/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
index 7f294ad..6e5a717 100644
--- a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
+++ b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
@@ -35,7 +35,7 @@ import com.jayway.restassured.http.ContentType;
 
 public class WebAdminUtils {
 
-    public static WebAdminServer createWebAdminServer(MetricFactory metricFactory, Routes... routes) throws IOException {
+    public static WebAdminServer createWebAdminServer(MetricFactory metricFactory, Routes... routes) {
         return new WebAdminServer(WebAdminConfiguration.TEST_CONFIGURATION,
             ImmutableSet.copyOf(routes),
             new NoAuthenticationFilter(),
@@ -53,9 +53,4 @@ public class WebAdminUtils {
             .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8)))
             .setPort(port.getValue());
     }
-
-    public static RequestSpecBuilder buildRequestSpecificationWithPortOnly(Port port) {
-        return new RequestSpecBuilder()
-            .setPort(port.getValue());
-    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/bfb5d147/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
index 9bd7f1d..c9f07cc 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.webadmin.routes;
 
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
@@ -197,10 +198,17 @@ public class MailRepositoriesRoutes implements Routes {
 
     private Object writeMimeMessage(MimeMessage mimeMessage, HttpServletResponse rawResponse) throws MessagingException, IOException {
         rawResponse.setContentType(Constants.RFC822_CONTENT_TYPE);
+        rawResponse.setHeader("Content-Length", String.valueOf(computeExactSize(mimeMessage)));
         mimeMessage.writeTo(rawResponse.getOutputStream());
         return rawResponse;
     }
 
+    private long computeExactSize(MimeMessage mimeMessage) throws IOException, MessagingException {
+        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+        mimeMessage.writeTo(byteArrayOutputStream);
+        return byteArrayOutputStream.size();
+    }
+
     private MimeMessage getMailAsMimeMessage(String url, String mailKey) {
         try {
             return repositoryStoreService.retrieveMessage(url, mailKey)

http://git-wip-us.apache.org/repos/asf/james-project/blob/bfb5d147/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
index 6e7d6fb..e7b57fb 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
@@ -35,6 +35,7 @@ import static org.hamcrest.Matchers.notNullValue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.Optional;
 
@@ -66,6 +67,7 @@ import org.junit.Test;
 
 import com.google.common.collect.ImmutableList;
 import com.jayway.restassured.RestAssured;
+import com.jayway.restassured.builder.RequestSpecBuilder;
 import com.jayway.restassured.http.ContentType;
 import com.jayway.restassured.parsing.Parser;
 
@@ -470,10 +472,10 @@ public class MailRepositoriesRoutesTest {
 
     @Test
     public void downloadingAMailShouldReturnTheEml() throws Exception {
-        RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecificationWithPortOnly(webAdminServer.getPort())
+        RestAssured.requestSpecification = new RequestSpecBuilder().setPort(webAdminServer.getPort().getValue())
                 .setBasePath(MailRepositoriesRoutes.MAIL_REPOSITORIES)
                 .build();
-        RestAssured.registerParser(Constants.RFC822_CONTENT_TYPE, Parser.JSON);
+        RestAssured.registerParser(Constants.RFC822_CONTENT_TYPE, Parser.TEXT);
 
         when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 
@@ -484,23 +486,29 @@ public class MailRepositoriesRoutesTest {
             .build();
         mailRepository.store(mail);
 
-        String expectedContent = ClassLoaderUtils.getSystemResourceAsString("mail.eml");
-        given()
+        String expectedContent = ClassLoaderUtils.getSystemResourceAsString("mail.eml", StandardCharsets.UTF_8);
+
+        String actualContent = given()
             .accept(Constants.RFC822_CONTENT_TYPE)
         .when()
             .get(URL_ESCAPED_MY_REPO + "/mails/" + name)
         .then()
             .statusCode(HttpStatus.OK_200)
+            .header("Content-Length", "471")
             .contentType(Constants.RFC822_CONTENT_TYPE)
-            .content(is(expectedContent));
+            .extract()
+            .body()
+            .asString();
+
+        assertThat(actualContent).isEqualToNormalizingNewlines(expectedContent);
     }
 
     @Test
     public void downloadingAMailShouldFailWhenUnknown() throws Exception {
-        RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecificationWithPortOnly(webAdminServer.getPort())
-                .setBasePath(MailRepositoriesRoutes.MAIL_REPOSITORIES)
-                .build();
-        RestAssured.registerParser(Constants.RFC822_CONTENT_TYPE, Parser.JSON);
+        RestAssured.requestSpecification = new RequestSpecBuilder().setPort(webAdminServer.getPort().getValue())
+            .setBasePath(MailRepositoriesRoutes.MAIL_REPOSITORIES)
+            .build();
+        RestAssured.registerParser(Constants.RFC822_CONTENT_TYPE, Parser.TEXT);
 
         when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 


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


[12/17] james-project git commit: JAMES-2414 Configure mailboxListener poolSize where appropriate

Posted by bt...@apache.org.
JAMES-2414 Configure mailboxListener poolSize where appropriate


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/cfccd184
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/cfccd184
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/cfccd184

Branch: refs/heads/master
Commit: cfccd184df8c11d87a93660ee2f5c15ae33b1511
Parents: 4fae4fd
Author: benwa <bt...@linagora.com>
Authored: Thu Jun 7 16:34:19 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 12 07:01:45 2018 +0700

----------------------------------------------------------------------
 .../run/guice/cassandra-ldap/destination/conf/listeners.xml        | 2 ++
 dockerfiles/run/guice/cassandra/destination/conf/listeners.xml     | 2 ++
 dockerfiles/run/guice/jpa/destination/conf/listeners.xml           | 1 +
 .../src/test/resources/listeners.xml                               | 2 ++
 .../src/test/resources/listeners.xml                               | 2 ++
 5 files changed, 9 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/cfccd184/dockerfiles/run/guice/cassandra-ldap/destination/conf/listeners.xml
----------------------------------------------------------------------
diff --git a/dockerfiles/run/guice/cassandra-ldap/destination/conf/listeners.xml b/dockerfiles/run/guice/cassandra-ldap/destination/conf/listeners.xml
index eabdb5e..815c099 100644
--- a/dockerfiles/run/guice/cassandra-ldap/destination/conf/listeners.xml
+++ b/dockerfiles/run/guice/cassandra-ldap/destination/conf/listeners.xml
@@ -19,6 +19,8 @@
  -->
 
 <listeners>
+  <poolSize>8</poolSize>
+
   <listener>
     <class>org.apache.james.mailbox.spamassassin.SpamAssassinListener</class>
   </listener>

http://git-wip-us.apache.org/repos/asf/james-project/blob/cfccd184/dockerfiles/run/guice/cassandra/destination/conf/listeners.xml
----------------------------------------------------------------------
diff --git a/dockerfiles/run/guice/cassandra/destination/conf/listeners.xml b/dockerfiles/run/guice/cassandra/destination/conf/listeners.xml
index eabdb5e..815c099 100644
--- a/dockerfiles/run/guice/cassandra/destination/conf/listeners.xml
+++ b/dockerfiles/run/guice/cassandra/destination/conf/listeners.xml
@@ -19,6 +19,8 @@
  -->
 
 <listeners>
+  <poolSize>8</poolSize>
+
   <listener>
     <class>org.apache.james.mailbox.spamassassin.SpamAssassinListener</class>
   </listener>

http://git-wip-us.apache.org/repos/asf/james-project/blob/cfccd184/dockerfiles/run/guice/jpa/destination/conf/listeners.xml
----------------------------------------------------------------------
diff --git a/dockerfiles/run/guice/jpa/destination/conf/listeners.xml b/dockerfiles/run/guice/jpa/destination/conf/listeners.xml
index ae5937f..496df58 100644
--- a/dockerfiles/run/guice/jpa/destination/conf/listeners.xml
+++ b/dockerfiles/run/guice/jpa/destination/conf/listeners.xml
@@ -19,4 +19,5 @@
  -->
 
 <listeners>
+    <poolSize>8</poolSize>
 </listeners>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/cfccd184/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/listeners.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/listeners.xml b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/listeners.xml
index 27589f0..7227803 100644
--- a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/listeners.xml
+++ b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/listeners.xml
@@ -19,6 +19,8 @@
  -->
 
 <listeners>
+  <poolSize>8</poolSize>
+
   <listener>
     <class>org.apache.james.mailbox.spamassassin.SpamAssassinListener</class>
     <async>false</async>

http://git-wip-us.apache.org/repos/asf/james-project/blob/cfccd184/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/listeners.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/listeners.xml b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/listeners.xml
index 40d6ab6..cd9acd6 100644
--- a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/listeners.xml
+++ b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/listeners.xml
@@ -19,6 +19,8 @@
  -->
 
 <listeners>
+  <poolSize>8</poolSize>
+
   <listener>
     <class>org.apache.james.mailbox.spamassassin.SpamAssassinListener</class>
     <async>false</async>


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


[03/17] james-project git commit: JAMES-2411 Add the capability to download the eml itself in the MailRepository GET endpoint

Posted by bt...@apache.org.
JAMES-2411 Add the capability to download the eml itself in the MailRepository GET endpoint


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/4d3cda34
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/4d3cda34
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/4d3cda34

Branch: refs/heads/master
Commit: 4d3cda34928214b4dca5aa44e1061236dba3016a
Parents: 581a267
Author: Antoine Duprat <ad...@linagora.com>
Authored: Wed Jun 6 11:42:37 2018 +0200
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 12 07:00:46 2018 +0700

----------------------------------------------------------------------
 .../org/apache/james/webadmin/Constants.java    |  1 +
 .../apache/james/webadmin/WebAdminUtils.java    |  4 ++
 .../webadmin/routes/MailRepositoriesRoutes.java | 66 ++++++++++++++------
 .../routes/MailRepositoriesRoutesTest.java      | 52 +++++++++++++++
 4 files changed, 104 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/4d3cda34/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/Constants.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/Constants.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/Constants.java
index 70cfbbb..8c54f94 100644
--- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/Constants.java
+++ b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/Constants.java
@@ -24,5 +24,6 @@ public interface Constants {
     String SEPARATOR = "/";
     String EMPTY_BODY = "";
     String JSON_CONTENT_TYPE = "application/json";
+    String RFC822_CONTENT_TYPE = "message/rfc822";
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/4d3cda34/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
index f4f95ff..7f294ad 100644
--- a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
+++ b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
@@ -54,4 +54,8 @@ public class WebAdminUtils {
             .setPort(port.getValue());
     }
 
+    public static RequestSpecBuilder buildRequestSpecificationWithPortOnly(Port port) {
+        return new RequestSpecBuilder()
+            .setPort(port.getValue());
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/4d3cda34/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
index dfe1fcf..2600812 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
@@ -19,11 +19,13 @@
 
 package org.apache.james.webadmin.routes;
 
+import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.Optional;
+import java.util.function.Supplier;
 
 import javax.inject.Inject;
 import javax.mail.MessagingException;
@@ -42,6 +44,7 @@ import org.apache.james.util.streams.Offset;
 import org.apache.james.webadmin.Constants;
 import org.apache.james.webadmin.Routes;
 import org.apache.james.webadmin.dto.ExtendedMailRepositoryResponse;
+import org.apache.james.webadmin.dto.MailDto;
 import org.apache.james.webadmin.dto.TaskIdDto;
 import org.apache.james.webadmin.service.MailRepositoryStoreService;
 import org.apache.james.webadmin.service.ReprocessingAllMailsTask;
@@ -60,6 +63,7 @@ import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
 import io.swagger.jaxrs.PATCH;
+import spark.HaltException;
 import spark.Request;
 import spark.Service;
 
@@ -177,25 +181,49 @@ public class MailRepositoriesRoutes implements Routes {
         @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "Not found - Could not retrieve the given mail.")
     })
     public void defineGetMail() {
-        service.get(MAIL_REPOSITORIES + "/:encodedUrl/mails/:mailKey", (request, response) -> {
-            String url = decodedRepositoryUrl(request);
-            String mailKey = request.params("mailKey");
-            try {
-                return repositoryStoreService.retrieveMail(url, mailKey)
-                    .orElseThrow(() -> ErrorResponder.builder()
-                        .statusCode(HttpStatus.NOT_FOUND_404)
-                        .type(ErrorResponder.ErrorType.NOT_FOUND)
-                        .message("Could not retrieve " + mailKey)
-                        .haltError());
-            } catch (MailRepositoryStore.MailRepositoryStoreException | MessagingException e) {
-                throw ErrorResponder.builder()
-                    .statusCode(HttpStatus.INTERNAL_SERVER_ERROR_500)
-                    .type(ErrorResponder.ErrorType.SERVER_ERROR)
-                    .cause(e)
-                    .message("Error while retrieving mail")
-                    .haltError();
-            }
-        }, jsonTransformer);
+
+        service.get(MAIL_REPOSITORIES + "/:encodedUrl/mails/:mailKey", Constants.JSON_CONTENT_TYPE,
+            (request, response) -> getMailAsJson(decodedRepositoryUrl(request), request.params("mailKey")), jsonTransformer);
+
+        service.get(MAIL_REPOSITORIES + "/:encodedUrl/mails/:mailKey", Constants.RFC822_CONTENT_TYPE, (request, response) -> {
+            response.type(Constants.RFC822_CONTENT_TYPE);
+            return getMailAsEml(decodedRepositoryUrl(request), request.params("mailKey"));
+        });
+    }
+
+    private InputStream getMailAsEml(String url, String mailKey) {
+        try {
+            return repositoryStoreService.downloadMail(url, mailKey)
+                .orElseThrow(mailNotFoundError(mailKey));
+        } catch (MailRepositoryStore.MailRepositoryStoreException | MessagingException e) {
+            throw internalServerError(e);
+        }
+    }
+
+    private MailDto getMailAsJson(String url, String mailKey) {
+        try {
+            return repositoryStoreService.retrieveMail(url, mailKey)
+                .orElseThrow(mailNotFoundError(mailKey));
+        } catch (MailRepositoryStore.MailRepositoryStoreException | MessagingException e) {
+            throw internalServerError(e);
+        }
+    }
+
+    private Supplier<HaltException> mailNotFoundError(String mailKey) {
+        return () -> ErrorResponder.builder()
+            .statusCode(HttpStatus.NOT_FOUND_404)
+            .type(ErrorResponder.ErrorType.NOT_FOUND)
+            .message("Could not retrieve " + mailKey)
+            .haltError();
+    }
+
+    private HaltException internalServerError(Exception e) {
+        return ErrorResponder.builder()
+            .statusCode(HttpStatus.INTERNAL_SERVER_ERROR_500)
+            .type(ErrorResponder.ErrorType.SERVER_ERROR)
+            .cause(e)
+            .message("Error while retrieving mail")
+            .haltError();
     }
 
     @GET

http://git-wip-us.apache.org/repos/asf/james-project/blob/4d3cda34/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
index f3945bb..308c9de 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
@@ -35,9 +35,11 @@ import static org.hamcrest.Matchers.notNullValue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.Optional;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.mailrepository.memory.MemoryMailRepository;
 import org.apache.james.metrics.api.NoopMetricFactory;
@@ -46,6 +48,7 @@ import org.apache.james.queue.api.ManageableMailQueue;
 import org.apache.james.queue.api.RawMailQueueItemDecoratorFactory;
 import org.apache.james.queue.memory.MemoryMailQueueFactory;
 import org.apache.james.task.MemoryTaskManager;
+import org.apache.james.webadmin.Constants;
 import org.apache.james.webadmin.WebAdminServer;
 import org.apache.james.webadmin.WebAdminUtils;
 import org.apache.james.webadmin.service.ClearMailRepositoryTask;
@@ -65,6 +68,7 @@ import org.junit.Test;
 import com.google.common.collect.ImmutableList;
 import com.jayway.restassured.RestAssured;
 import com.jayway.restassured.http.ContentType;
+import com.jayway.restassured.parsing.Parser;
 
 public class MailRepositoriesRoutesTest {
 
@@ -466,6 +470,54 @@ public class MailRepositoriesRoutesTest {
     }
 
     @Test
+    public void downloadingAMailShouldReturnTheEml() throws Exception {
+        RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecificationWithPortOnly(webAdminServer.getPort())
+                .setBasePath(MailRepositoriesRoutes.MAIL_REPOSITORIES)
+                .build();
+        RestAssured.registerParser(Constants.RFC822_CONTENT_TYPE, Parser.JSON);
+
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+
+        String name = NAME_1;
+        FakeMail mail = FakeMail.builder()
+            .name(name)
+            .fileName("mail.eml")
+            .build();
+        mailRepository.store(mail);
+
+        String expectedContent = IOUtils.toString(mail.getMessage().getRawInputStream(), StandardCharsets.UTF_8);
+        given()
+            .accept(Constants.RFC822_CONTENT_TYPE)
+        .when()
+            .get(URL_ESCAPED_MY_REPO + "/mails/" + name)
+        .then()
+            .statusCode(HttpStatus.OK_200)
+            .contentType(Constants.RFC822_CONTENT_TYPE)
+            .content(is(expectedContent));
+    }
+
+    @Test
+    public void downloadingAMailShouldFailWhenUnknown() throws Exception {
+        RestAssured.requestSpecification = WebAdminUtils.buildRequestSpecificationWithPortOnly(webAdminServer.getPort())
+                .setBasePath(MailRepositoriesRoutes.MAIL_REPOSITORIES)
+                .build();
+        RestAssured.registerParser(Constants.RFC822_CONTENT_TYPE, Parser.JSON);
+
+        when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
+
+        String name = "name";
+        given()
+            .accept(Constants.RFC822_CONTENT_TYPE)
+        .when()
+            .get(URL_ESCAPED_MY_REPO + "/mails/" + name)
+        .then()
+            .statusCode(HttpStatus.NOT_FOUND_404)
+            .body("statusCode", is(404))
+            .body("type", is(ErrorResponder.ErrorType.NOT_FOUND.getType()))
+            .body("message", is("Could not retrieve " + name));
+    }
+
+    @Test
     public void deletingAMailShouldRemoveIt() throws Exception {
         when(mailRepositoryStore.get(URL_MY_REPO)).thenReturn(Optional.of(mailRepository));
 


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


[10/17] james-project git commit: JAMES-2414 Document custom MailboxListener `async` configuration

Posted by bt...@apache.org.
JAMES-2414 Document custom MailboxListener `async` configuration


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/fd81b296
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/fd81b296
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/fd81b296

Branch: refs/heads/master
Commit: fd81b296583f635695fd096031bc3b7731ae1636
Parents: 041c55d
Author: benwa <bt...@linagora.com>
Authored: Thu Jun 7 16:41:29 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 12 07:01:45 2018 +0700

----------------------------------------------------------------------
 src/site/xdoc/server/config-listeners.xml | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/fd81b296/src/site/xdoc/server/config-listeners.xml
----------------------------------------------------------------------
diff --git a/src/site/xdoc/server/config-listeners.xml b/src/site/xdoc/server/config-listeners.xml
index 45885b5..e0efeb8 100644
--- a/src/site/xdoc/server/config-listeners.xml
+++ b/src/site/xdoc/server/config-listeners.xml
@@ -41,12 +41,21 @@
             <p>To do so, just register the class that needs to be instantiated and added to global listeners. These JAR can be
                part of James source code, or provided as an extension and thus should be located in the<code>extensions-jars</code> folder.</p>
 
+            <p>
+                Some MailboxListener allows you to specify if you want to run them synchronously or asynchronously. To do so,
+                for MailboxListener that supports this, you can use the <b>async</b> attribute (optional, per mailet default) to govern the execution mode.
+                If <b>true</b> the execution will be scheduled by a FixedThreadPool whose size is defined by the <b>poolSize</b>
+                attribute (optional, default to 8). If <b>false</b>, the execution is synchronous, on the current thread.
+            </p>
+
             <ul>
                 Already provided additional listeners includes:
 
                  <li><code>org.apache.james.mailbox.spamassassin.SpamAssassinListener</code>:
                      Provides per user real-time HAM/SPAM feedback to a SpamAssassin server depending on user actions.
-                     Please note that a <code>spamassassin.properties</code> file is needed.</li>
+                     Please note that a <code>spamassassin.properties</code> file is needed.<br/>
+                     This mailet is asynchronous by default, but this behaviour can be overridden by the <b>async</b>
+                     configuration property.</li>
                  <li><code>org.apache.james.mailbox.cassandra.MailboxOperationLoggingListener</code>:
                      For Cassandra guice wiring. Provides more insights on mailbox operations</li>
                  <li><code>org.apache.james.mailbox.quota.mailing.listeners.QuotaThresholdCrossingListener</code>:


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


[07/17] james-project git commit: JAMES-2414 Allow to potentially configure execution mode on custom mailbox listener

Posted by bt...@apache.org.
JAMES-2414 Allow to potentially configure execution mode on custom mailbox listener


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/aa4de6a9
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/aa4de6a9
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/aa4de6a9

Branch: refs/heads/master
Commit: aa4de6a94ca9c28e462fa6ad2e694154c29a000f
Parents: bfb5d14
Author: benwa <bt...@linagora.com>
Authored: Thu Jun 7 16:21:18 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 12 07:01:28 2018 +0700

----------------------------------------------------------------------
 .../apache/james/mailbox/MailboxListener.java   |  4 ++++
 .../spamassassin/SpamAssassinListener.java      | 13 +++++++++--
 .../modules/mailbox/ListenerConfiguration.java  | 13 ++++++++---
 .../mailbox/MailboxListenersLoaderImpl.java     | 24 ++++++++++++++++++--
 .../mailbox/ListenerConfigurationTest.java      | 12 ++++++++++
 5 files changed, 59 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/aa4de6a9/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
index 664a107..fc248d6 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
@@ -40,6 +40,10 @@ import org.apache.james.mailbox.quota.QuotaSize;
  */
 public interface MailboxListener {
 
+    interface ConfigurableExecutionMode {
+        void set(ExecutionMode executionMode);
+    }
+
     enum ListenerType {
         ONCE,
         EACH_NODE,

http://git-wip-us.apache.org/repos/asf/james-project/blob/aa4de6a9/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java b/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
index 7160625..b25fd08 100644
--- a/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
+++ b/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
@@ -20,10 +20,12 @@ package org.apache.james.mailbox.spamassassin;
 
 import java.io.InputStream;
 import java.util.List;
+import java.util.Optional;
 
 import javax.inject.Inject;
 
 import org.apache.james.mailbox.Event;
+import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.Role;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxId;
@@ -42,17 +44,24 @@ import com.github.steveash.guavate.Guavate;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableList;
 
-public class SpamAssassinListener implements SpamEventListener {
+public class SpamAssassinListener implements SpamEventListener, MailboxListener.ConfigurableExecutionMode {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(SpamAssassinListener.class);
 
     private final SpamAssassin spamAssassin;
     private final MailboxSessionMapperFactory mapperFactory;
+    private Optional<ExecutionMode> executionMode;
 
     @Inject
     public SpamAssassinListener(SpamAssassin spamAssassin, MailboxSessionMapperFactory mapperFactory) {
         this.spamAssassin = spamAssassin;
         this.mapperFactory = mapperFactory;
+        this.executionMode = Optional.empty();
+    }
+
+    @Override
+    public void set(ExecutionMode executionMode) {
+        this.executionMode = Optional.of(executionMode);
     }
 
     @Override
@@ -62,7 +71,7 @@ public class SpamAssassinListener implements SpamEventListener {
 
     @Override
     public ExecutionMode getExecutionMode() {
-        return ExecutionMode.ASYNCHRONOUS;
+        return executionMode.orElse(ExecutionMode.ASYNCHRONOUS);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/aa4de6a9/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ListenerConfiguration.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ListenerConfiguration.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ListenerConfiguration.java
index f2d5ea3..ec99546 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ListenerConfiguration.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ListenerConfiguration.java
@@ -30,11 +30,12 @@ public class ListenerConfiguration {
     public static ListenerConfiguration from(HierarchicalConfiguration configuration) {
         String listenerClass = configuration.getString("class");
         Preconditions.checkState(!Strings.isNullOrEmpty(listenerClass), "class name is mandatory");
-        return new ListenerConfiguration(listenerClass, extractSubconfiguration(configuration));
+        Optional<Boolean> isAsync = Optional.ofNullable(configuration.getBoolean("async", null));
+        return new ListenerConfiguration(listenerClass, extractSubconfiguration(configuration), isAsync);
     }
 
     public static ListenerConfiguration forClass(String clazz) {
-        return new ListenerConfiguration(clazz, Optional.empty());
+        return new ListenerConfiguration(clazz, Optional.empty(), Optional.empty());
     }
 
     private static Optional<HierarchicalConfiguration> extractSubconfiguration(HierarchicalConfiguration configuration) {
@@ -45,10 +46,12 @@ public class ListenerConfiguration {
 
     private final String clazz;
     private final Optional<HierarchicalConfiguration> configuration;
+    private final Optional<Boolean> isAsync;
 
-    private ListenerConfiguration(String clazz, Optional<HierarchicalConfiguration> configuration) {
+    private ListenerConfiguration(String clazz, Optional<HierarchicalConfiguration> configuration, Optional<Boolean> isAsync) {
         this.clazz = clazz;
         this.configuration = configuration;
+        this.isAsync = isAsync;
     }
 
     public String getClazz() {
@@ -58,4 +61,8 @@ public class ListenerConfiguration {
     public Optional<HierarchicalConfiguration> getConfiguration() {
         return configuration;
     }
+
+    public Optional<Boolean> isAsync() {
+        return isAsync;
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/aa4de6a9/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
index 68a8643..3e59a78 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
@@ -30,6 +30,7 @@ import org.apache.james.utils.ExtendedClassLoader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.github.fge.lambdas.Throwing;
 import com.google.inject.Inject;
 
 public class MailboxListenersLoaderImpl implements Configurable, MailboxListenersLoader {
@@ -80,8 +81,14 @@ public class MailboxListenersLoaderImpl implements Configurable, MailboxListener
             LOGGER.info("Loading user registered mailbox listener {}", listenerClass);
             Class<MailboxListener> clazz = classLoader.locateClass(listenerClass);
             MailboxListener listener = mailboxListenerFactory.createInstance(clazz);
-            if (listener instanceof Configurable && configuration.getConfiguration().isPresent()) {
-                ((Configurable)listener).configure(configuration.getConfiguration().get());
+            if (listener instanceof Configurable) {
+                configureListener(configuration, (Configurable) listener);
+            }
+            if (listener instanceof MailboxListener.ConfigurableExecutionMode) {
+                MailboxListener.ConfigurableExecutionMode configurableExecutionMode = (MailboxListener.ConfigurableExecutionMode) listener;
+                configuration.isAsync()
+                    .map(this::getExecutionMode)
+                    .ifPresent(configurableExecutionMode::set);
             }
             return listener;
         } catch (ClassNotFoundException | ConfigurationException e) {
@@ -89,4 +96,17 @@ public class MailboxListenersLoaderImpl implements Configurable, MailboxListener
             throw new RuntimeException(e);
         }
     }
+
+    private void configureListener(ListenerConfiguration configuration, Configurable configurableListener) throws ConfigurationException {
+        configuration.getConfiguration()
+            .ifPresent(Throwing.consumer(configurableListener::configure).sneakyThrow());
+    }
+
+
+    MailboxListener.ExecutionMode getExecutionMode(boolean isAsync) {
+        if (isAsync) {
+            return MailboxListener.ExecutionMode.ASYNCHRONOUS;
+        }
+        return MailboxListener.ExecutionMode.SYNCHRONOUS;
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/aa4de6a9/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/ListenerConfigurationTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/ListenerConfigurationTest.java b/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/ListenerConfigurationTest.java
index 011f3ec..b2db84c 100644
--- a/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/ListenerConfigurationTest.java
+++ b/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/ListenerConfigurationTest.java
@@ -53,4 +53,16 @@ public class ListenerConfigurationTest {
 
         assertThat(listenerConfiguration.getClazz()).isEqualTo(expectedClazz);
     }
+
+    @Test
+    public void isAsyncShouldReturnConfiguredValue() {
+        DefaultConfigurationBuilder configuration = new DefaultConfigurationBuilder();
+        String expectedClazz = "MyClassName";
+        configuration.addProperty("class", expectedClazz);
+        configuration.addProperty("async", "false");
+
+        ListenerConfiguration listenerConfiguration = ListenerConfiguration.from(configuration);
+
+        assertThat(listenerConfiguration.isAsync()).contains(false);
+    }
 }


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


[06/17] james-project git commit: JAMES-2414 Non configurable MailboxListeners should be SYNCHRONOUS

Posted by bt...@apache.org.
JAMES-2414 Non configurable MailboxListeners should be SYNCHRONOUS

To avoid testing problems...


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/150e5294
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/150e5294
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/150e5294

Branch: refs/heads/master
Commit: 150e5294ef73dea169e043ce44860f524bff8e00
Parents: a968e0e
Author: benwa <bt...@linagora.com>
Authored: Thu Jun 7 16:30:38 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 12 07:01:28 2018 +0700

----------------------------------------------------------------------
 .../elasticsearch/events/ElasticSearchQuotaMailboxListener.java    | 2 +-
 .../james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java    | 2 +-
 .../james/mailbox/store/search/ListeningMessageSearchIndex.java    | 2 +-
 .../main/java/org/apache/james/imap/processor/IdleProcessor.java   | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/150e5294/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
index b08ca97..3bdd358 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
@@ -54,7 +54,7 @@ public class ElasticSearchQuotaMailboxListener implements MailboxListener {
 
     @Override
     public ExecutionMode getExecutionMode() {
-        return ExecutionMode.ASYNCHRONOUS;
+        return ExecutionMode.SYNCHRONOUS;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/150e5294/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
index 62e4ee0..33f4fff 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
@@ -57,7 +57,7 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener, QuotaUpdat
 
     @Override
     public ExecutionMode getExecutionMode() {
-        return ExecutionMode.ASYNCHRONOUS;
+        return ExecutionMode.SYNCHRONOUS;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/150e5294/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
index 92dc0db..5dfc82b 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
@@ -54,7 +54,7 @@ public abstract class ListeningMessageSearchIndex implements MessageSearchIndex,
 
     @Override
     public ExecutionMode getExecutionMode() {
-        return ExecutionMode.ASYNCHRONOUS;
+        return ExecutionMode.SYNCHRONOUS;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/150e5294/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
index 56e5a06..58be42b 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
@@ -197,7 +197,7 @@ public class IdleProcessor extends AbstractMailboxProcessor<IdleRequest> impleme
 
         @Override
         public ExecutionMode getExecutionMode() {
-            return ExecutionMode.ASYNCHRONOUS;
+            return ExecutionMode.SYNCHRONOUS;
         }
     }
 


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


[11/17] james-project git commit: JAMES-2414 s/set/setExecutionMode/ for ConfigurableExecutionMode

Posted by bt...@apache.org.
JAMES-2414 s/set/setExecutionMode/ for ConfigurableExecutionMode


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/e9de12ef
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/e9de12ef
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/e9de12ef

Branch: refs/heads/master
Commit: e9de12efe545a395d6ffde78a146b3480a806499
Parents: 3dd70a1
Author: benwa <bt...@linagora.com>
Authored: Thu Jun 7 16:59:55 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 12 07:01:45 2018 +0700

----------------------------------------------------------------------
 .../src/main/java/org/apache/james/mailbox/MailboxListener.java    | 2 +-
 .../apache/james/mailbox/spamassassin/SpamAssassinListener.java    | 2 +-
 .../apache/james/modules/mailbox/MailboxListenersLoaderImpl.java   | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/e9de12ef/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
index 86fd3d4..d1aeb7d 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
@@ -41,7 +41,7 @@ import org.apache.james.mailbox.quota.QuotaSize;
 public interface MailboxListener {
 
     interface ConfigurableExecutionMode {
-        void set(ExecutionMode executionMode);
+        void setExecutionMode(ExecutionMode executionMode);
     }
 
     enum ListenerType {

http://git-wip-us.apache.org/repos/asf/james-project/blob/e9de12ef/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java b/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
index b25fd08..6bfb91b 100644
--- a/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
+++ b/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
@@ -60,7 +60,7 @@ public class SpamAssassinListener implements SpamEventListener, MailboxListener.
     }
 
     @Override
-    public void set(ExecutionMode executionMode) {
+    public void setExecutionMode(ExecutionMode executionMode) {
         this.executionMode = Optional.of(executionMode);
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/e9de12ef/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
index 3e59a78..fced6be 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
@@ -88,7 +88,7 @@ public class MailboxListenersLoaderImpl implements Configurable, MailboxListener
                 MailboxListener.ConfigurableExecutionMode configurableExecutionMode = (MailboxListener.ConfigurableExecutionMode) listener;
                 configuration.isAsync()
                     .map(this::getExecutionMode)
-                    .ifPresent(configurableExecutionMode::set);
+                    .ifPresent(configurableExecutionMode::setExecutionMode);
             }
             return listener;
         } catch (ClassNotFoundException | ConfigurationException e) {


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


[08/17] james-project git commit: JAMES-2414 SpamAssassin listener should not be async in tests

Posted by bt...@apache.org.
JAMES-2414 SpamAssassin listener should not be async in tests


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/a968e0e7
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/a968e0e7
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/a968e0e7

Branch: refs/heads/master
Commit: a968e0e7749660d50bd727623a3ffc93294b914b
Parents: aa4de6a
Author: benwa <bt...@linagora.com>
Authored: Thu Jun 7 16:22:22 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 12 07:01:28 2018 +0700

----------------------------------------------------------------------
 .../src/test/resources/listeners.xml                                | 1 +
 .../src/test/resources/listeners.xml                                | 1 +
 2 files changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/a968e0e7/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/listeners.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/listeners.xml b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/listeners.xml
index 5dcb054..27589f0 100644
--- a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/listeners.xml
+++ b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/listeners.xml
@@ -21,6 +21,7 @@
 <listeners>
   <listener>
     <class>org.apache.james.mailbox.spamassassin.SpamAssassinListener</class>
+    <async>false</async>
   </listener>
   <listener>
     <class>org.apache.james.mailbox.cassandra.MailboxOperationLoggingListener</class>

http://git-wip-us.apache.org/repos/asf/james-project/blob/a968e0e7/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/listeners.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/listeners.xml b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/listeners.xml
index 6cecff3..40d6ab6 100644
--- a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/listeners.xml
+++ b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/listeners.xml
@@ -21,6 +21,7 @@
 <listeners>
   <listener>
     <class>org.apache.james.mailbox.spamassassin.SpamAssassinListener</class>
+    <async>false</async>
   </listener>
   <listener>
     <class>org.apache.james.mailbox.quota.mailing.listeners.QuotaThresholdCrossingListener</class>


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


[14/17] james-project git commit: JAMES-2414 Use a default method for getExecutionMode

Posted by bt...@apache.org.
JAMES-2414 Use a default method for getExecutionMode


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/3dd70a19
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/3dd70a19
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/3dd70a19

Branch: refs/heads/master
Commit: 3dd70a19df91407255ec38071da1dcff38b8ed9f
Parents: fd81b29
Author: benwa <bt...@linagora.com>
Authored: Thu Jun 7 16:58:57 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 12 07:01:45 2018 +0700

----------------------------------------------------------------------
 .../src/main/java/org/apache/james/mailbox/MailboxListener.java | 4 +++-
 .../java/org/apache/james/mailbox/MailboxManagerStressTest.java | 5 -----
 .../test/java/org/apache/james/mailbox/util/EventCollector.java | 5 -----
 .../james/mailbox/caching/CacheInvalidatingMailboxListener.java | 5 -----
 .../mailbox/cassandra/MailboxOperationLoggingListener.java      | 5 -----
 .../quota/mailing/listeners/QuotaThresholdCrossingListener.java | 5 -----
 .../elasticsearch/events/ElasticSearchQuotaMailboxListener.java | 5 -----
 .../mailbox/store/event/DefaultDelegatingMailboxListener.java   | 5 -----
 .../james/mailbox/store/event/MailboxAnnotationListener.java    | 5 -----
 .../event/distributed/BroadcastDelegatingMailboxListener.java   | 5 -----
 .../event/distributed/RegisteredDelegatingMailboxListener.java  | 5 -----
 .../james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java | 5 -----
 .../james/mailbox/store/search/ListeningMessageSearchIndex.java | 5 -----
 .../james/mailbox/indexer/registrations/GlobalRegistration.java | 5 -----
 .../mailbox/indexer/registrations/MailboxRegistration.java      | 5 -----
 .../java/org/apache/james/imap/processor/IdleProcessor.java     | 5 -----
 .../apache/james/imap/processor/base/SelectedMailboxImpl.java   | 5 -----
 .../org/apache/james/modules/mailbox/NoopMailboxListener.java   | 5 -----
 .../james/jmap/methods/integration/SetMessagesMethodTest.java   | 5 -----
 .../apache/james/jmap/event/PropagateLookupRightListener.java   | 5 -----
 20 files changed, 3 insertions(+), 96 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/3dd70a19/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
index fc248d6..86fd3d4 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
@@ -57,7 +57,9 @@ public interface MailboxListener {
 
     ListenerType getType();
 
-    ExecutionMode getExecutionMode();
+    default ExecutionMode getExecutionMode() {
+        return ExecutionMode.SYNCHRONOUS;
+    }
 
     /**
      * Informs this listener about the given event.

http://git-wip-us.apache.org/repos/asf/james-project/blob/3dd70a19/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
index 93bb3e8..fc26d15 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
@@ -71,11 +71,6 @@ public abstract class MailboxManagerStressTest {
             }
 
             @Override
-            public ExecutionMode getExecutionMode() {
-                return ExecutionMode.SYNCHRONOUS;
-            }
-
-            @Override
             public void event(Event event) {
                 MessageUid u = ((Added) event).getUids().get(0);
                 uList.add(u);

http://git-wip-us.apache.org/repos/asf/james-project/blob/3dd70a19/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java b/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
index 13f1020..408295f 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
@@ -44,11 +44,6 @@ public class EventCollector implements MailboxListener {
         return listenerType;
     }
 
-    @Override
-    public ExecutionMode getExecutionMode() {
-        return ExecutionMode.SYNCHRONOUS;
-    }
-
     public List<Event> getEvents() {
         return events;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3dd70a19/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
index 80a5ab8..fdbf311 100644
--- a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
+++ b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
@@ -40,11 +40,6 @@ public class CacheInvalidatingMailboxListener implements MailboxListener {
     }
 
     @Override
-    public ExecutionMode getExecutionMode() {
-        return ExecutionMode.SYNCHRONOUS;
-    }
-
-    @Override
     public void event(Event event) {
         if (event instanceof MailboxEvent) {
             mailboxEvent((MailboxEvent) event);

http://git-wip-us.apache.org/repos/asf/james-project/blob/3dd70a19/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
index ca7f94d..f6bdfb8 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
@@ -40,11 +40,6 @@ public class MailboxOperationLoggingListener implements MailboxListener {
     }
 
     @Override
-    public ExecutionMode getExecutionMode() {
-        return ExecutionMode.SYNCHRONOUS;
-    }
-
-    @Override
     public void event(Event event) {
         if (event instanceof MailboxRenamed) {
             MailboxRenamed mailboxRenamed = (MailboxRenamed) event;

http://git-wip-us.apache.org/repos/asf/james-project/blob/3dd70a19/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java b/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
index 6aaf1cb..526679c 100644
--- a/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
+++ b/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
@@ -80,11 +80,6 @@ public class QuotaThresholdCrossingListener implements MailboxListener, Configur
     }
 
     @Override
-    public ExecutionMode getExecutionMode() {
-        return ExecutionMode.SYNCHRONOUS;
-    }
-
-    @Override
     public void event(Event event) {
         try {
             if (event instanceof QuotaUsageUpdatedEvent) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/3dd70a19/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
index 3bdd358..1bdd295 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
@@ -53,11 +53,6 @@ public class ElasticSearchQuotaMailboxListener implements MailboxListener {
     }
 
     @Override
-    public ExecutionMode getExecutionMode() {
-        return ExecutionMode.SYNCHRONOUS;
-    }
-
-    @Override
     public void event(Event event) {
         try {
             if (event instanceof QuotaUsageUpdatedEvent) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/3dd70a19/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java
index fa5d18b..43a236c 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java
@@ -45,11 +45,6 @@ public class DefaultDelegatingMailboxListener implements DelegatingMailboxListen
         return ListenerType.EACH_NODE;
     }
 
-    @Override
-    public ExecutionMode getExecutionMode() {
-        return ExecutionMode.SYNCHRONOUS;
-    }
-
     public DefaultDelegatingMailboxListener() {
         this(new SynchronousEventDelivery(),
             new MailboxListenerRegistry());

http://git-wip-us.apache.org/repos/asf/james-project/blob/3dd70a19/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java
index 379f225..a1ba834 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java
@@ -47,11 +47,6 @@ public class MailboxAnnotationListener implements MailboxListener {
     }
 
     @Override
-    public ExecutionMode getExecutionMode() {
-        return ExecutionMode.SYNCHRONOUS;
-    }
-
-    @Override
     public void event(Event event) {
         if (event instanceof EventFactory.MailboxDeletionImpl) {
             try {

http://git-wip-us.apache.org/repos/asf/james-project/blob/3dd70a19/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/distributed/BroadcastDelegatingMailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/distributed/BroadcastDelegatingMailboxListener.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/distributed/BroadcastDelegatingMailboxListener.java
index 375c3c5..74fd142 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/distributed/BroadcastDelegatingMailboxListener.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/distributed/BroadcastDelegatingMailboxListener.java
@@ -73,11 +73,6 @@ public class BroadcastDelegatingMailboxListener implements DistributedDelegating
     }
 
     @Override
-    public ExecutionMode getExecutionMode() {
-        return ExecutionMode.SYNCHRONOUS;
-    }
-
-    @Override
     public void addListener(MailboxPath mailboxPath, MailboxListener listener, MailboxSession session) throws MailboxException {
         mailboxListenerRegistry.addListener(mailboxPath, listener);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3dd70a19/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/distributed/RegisteredDelegatingMailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/distributed/RegisteredDelegatingMailboxListener.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/distributed/RegisteredDelegatingMailboxListener.java
index b129c5a..383da95 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/distributed/RegisteredDelegatingMailboxListener.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/distributed/RegisteredDelegatingMailboxListener.java
@@ -74,11 +74,6 @@ public class RegisteredDelegatingMailboxListener implements DistributedDelegatin
     }
 
     @Override
-    public ExecutionMode getExecutionMode() {
-        return ExecutionMode.SYNCHRONOUS;
-    }
-
-    @Override
     public void addListener(MailboxPath path, MailboxListener listener, MailboxSession session) throws MailboxException {
         mailboxListenerRegistry.addListener(path, listener);
         mailboxPathRegister.register(path);

http://git-wip-us.apache.org/repos/asf/james-project/blob/3dd70a19/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
index 33f4fff..4ffbf4a 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
@@ -56,11 +56,6 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener, QuotaUpdat
     }
 
     @Override
-    public ExecutionMode getExecutionMode() {
-        return ExecutionMode.SYNCHRONOUS;
-    }
-
-    @Override
     public void event(Event event) {
         try {
             if (event instanceof Added) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/3dd70a19/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
index 5dfc82b..f194ad3 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
@@ -52,11 +52,6 @@ public abstract class ListeningMessageSearchIndex implements MessageSearchIndex,
         this.factory = factory;
     }
 
-    @Override
-    public ExecutionMode getExecutionMode() {
-        return ExecutionMode.SYNCHRONOUS;
-    }
-
     /**
      * Return the {@link MessageMapperFactory}
      * 

http://git-wip-us.apache.org/repos/asf/james-project/blob/3dd70a19/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/registrations/GlobalRegistration.java
----------------------------------------------------------------------
diff --git a/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/registrations/GlobalRegistration.java b/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/registrations/GlobalRegistration.java
index 56e5b54..4991e28 100644
--- a/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/registrations/GlobalRegistration.java
+++ b/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/registrations/GlobalRegistration.java
@@ -50,11 +50,6 @@ public class GlobalRegistration implements MailboxListener {
     }
 
     @Override
-    public ExecutionMode getExecutionMode() {
-        return ExecutionMode.SYNCHRONOUS;
-    }
-
-    @Override
     public void event(Event event) {
         if (event instanceof MailboxDeletion) {
             MailboxDeletion mailboxDeletion = (MailboxDeletion) event;

http://git-wip-us.apache.org/repos/asf/james-project/blob/3dd70a19/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/registrations/MailboxRegistration.java
----------------------------------------------------------------------
diff --git a/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/registrations/MailboxRegistration.java b/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/registrations/MailboxRegistration.java
index 6232c92..f754880 100644
--- a/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/registrations/MailboxRegistration.java
+++ b/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/registrations/MailboxRegistration.java
@@ -50,11 +50,6 @@ public class MailboxRegistration implements MailboxListener {
         return ListenerType.MAILBOX;
     }
 
-    @Override
-    public ExecutionMode getExecutionMode() {
-        return ExecutionMode.SYNCHRONOUS;
-    }
-
     public List<ImpactingMessageEvent> getImpactingEvents(MessageUid uid) {
         return ImmutableList.copyOf(impactingMessageEvents.get(uid));
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3dd70a19/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
index 58be42b..01cab31 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
@@ -194,11 +194,6 @@ public class IdleProcessor extends AbstractMailboxProcessor<IdleRequest> impleme
         public ListenerType getType() {
             return ListenerType.MAILBOX;
         }
-
-        @Override
-        public ExecutionMode getExecutionMode() {
-            return ExecutionMode.SYNCHRONOUS;
-        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/3dd70a19/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
index dcac60b..0579c61 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
@@ -105,11 +105,6 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener {
     }
 
     @Override
-    public ExecutionMode getExecutionMode() {
-        return ExecutionMode.SYNCHRONOUS;
-    }
-
-    @Override
     public synchronized Optional<MessageUid> getFirstUid() {
         return uidMsnConverter.getFirstUid();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3dd70a19/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
index 06b5f08..003c56e 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
@@ -29,11 +29,6 @@ public class NoopMailboxListener implements MailboxListener {
     }
 
     @Override
-    public ExecutionMode getExecutionMode() {
-        return ExecutionMode.SYNCHRONOUS;
-    }
-
-    @Override
     public void event(Event event) {
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/3dd70a19/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
index 8dda617..a886af8 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
@@ -2228,11 +2228,6 @@ public abstract class SetMessagesMethodTest {
             }
 
             @Override
-            public ExecutionMode getExecutionMode() {
-                return ExecutionMode.SYNCHRONOUS;
-            }
-
-            @Override
             public void event(Event event) {
                 events.add(event);
             }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3dd70a19/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
index 2a98128..7767a94 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
@@ -52,11 +52,6 @@ public class PropagateLookupRightListener implements MailboxListener {
     }
 
     @Override
-    public ExecutionMode getExecutionMode() {
-        return ExecutionMode.SYNCHRONOUS;
-    }
-
-    @Override
     public void event(Event event) {
         MailboxSession mailboxSession = event.getSession();
 


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


[09/17] james-project git commit: JAMES-2414 Docker images should announce that SpamAssassinListener is async

Posted by bt...@apache.org.
JAMES-2414 Docker images should announce that SpamAssassinListener is async


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/041c55de
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/041c55de
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/041c55de

Branch: refs/heads/master
Commit: 041c55de307f623cbc46940f03a25e0b11b7917f
Parents: cfccd18
Author: benwa <bt...@linagora.com>
Authored: Thu Jun 7 16:36:14 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 12 07:01:45 2018 +0700

----------------------------------------------------------------------
 dockerfiles/run/guice/cassandra-ldap/destination/conf/listeners.xml | 1 +
 dockerfiles/run/guice/cassandra/destination/conf/listeners.xml      | 1 +
 2 files changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/041c55de/dockerfiles/run/guice/cassandra-ldap/destination/conf/listeners.xml
----------------------------------------------------------------------
diff --git a/dockerfiles/run/guice/cassandra-ldap/destination/conf/listeners.xml b/dockerfiles/run/guice/cassandra-ldap/destination/conf/listeners.xml
index 815c099..7f956ae 100644
--- a/dockerfiles/run/guice/cassandra-ldap/destination/conf/listeners.xml
+++ b/dockerfiles/run/guice/cassandra-ldap/destination/conf/listeners.xml
@@ -23,6 +23,7 @@
 
   <listener>
     <class>org.apache.james.mailbox.spamassassin.SpamAssassinListener</class>
+    <async>true</async>
   </listener>
   <listener>
     <class>org.apache.james.mailbox.cassandra.MailboxOperationLoggingListener</class>

http://git-wip-us.apache.org/repos/asf/james-project/blob/041c55de/dockerfiles/run/guice/cassandra/destination/conf/listeners.xml
----------------------------------------------------------------------
diff --git a/dockerfiles/run/guice/cassandra/destination/conf/listeners.xml b/dockerfiles/run/guice/cassandra/destination/conf/listeners.xml
index 815c099..7f956ae 100644
--- a/dockerfiles/run/guice/cassandra/destination/conf/listeners.xml
+++ b/dockerfiles/run/guice/cassandra/destination/conf/listeners.xml
@@ -23,6 +23,7 @@
 
   <listener>
     <class>org.apache.james.mailbox.spamassassin.SpamAssassinListener</class>
+    <async>true</async>
   </listener>
   <listener>
     <class>org.apache.james.mailbox.cassandra.MailboxOperationLoggingListener</class>


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


[13/17] james-project git commit: JAMES-2414 MailboxListeners should be fully final

Posted by bt...@apache.org.
JAMES-2414 MailboxListeners should be fully final


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f3127d87
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f3127d87
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f3127d87

Branch: refs/heads/master
Commit: f3127d870b3555cbfdc955d379ede001875a2edb
Parents: e9de12e
Author: benwa <bt...@linagora.com>
Authored: Fri Jun 8 09:43:04 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 12 07:01:45 2018 +0700

----------------------------------------------------------------------
 .../apache/james/mailbox/MailboxListener.java   |  4 --
 .../QuotaThresholdCrossingListener.java         | 35 ++++--------
 .../QuotaThresholdListenersTestSystem.java      |  4 +-
 .../spamassassin/SpamAssassinListener.java      | 17 ++----
 .../spamassassin/SpamAssassinListenerTest.java  |  3 +-
 .../SpamAssassinListenerModule.java             |  4 +-
 .../modules/mailbox/MailboxListenerFactory.java | 57 +++++++++++++++++++-
 .../mailbox/MailboxListenersLoaderImpl.java     | 29 +++-------
 8 files changed, 82 insertions(+), 71 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/f3127d87/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
index d1aeb7d..9021aa9 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
@@ -40,10 +40,6 @@ import org.apache.james.mailbox.quota.QuotaSize;
  */
 public interface MailboxListener {
 
-    interface ConfigurableExecutionMode {
-        void setExecutionMode(ExecutionMode executionMode);
-    }
-
     enum ListenerType {
         ONCE,
         EACH_NODE,

http://git-wip-us.apache.org/repos/asf/james-project/blob/f3127d87/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java b/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
index 526679c..d669cba 100644
--- a/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
+++ b/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
@@ -28,7 +28,6 @@ import org.apache.james.eventsourcing.EventSourcingSystem;
 import org.apache.james.eventsourcing.Subscriber;
 import org.apache.james.eventsourcing.eventstore.EventStore;
 import org.apache.james.filesystem.api.FileSystem;
-import org.apache.james.lifecycle.api.Configurable;
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.quota.mailing.QuotaMailingListenerConfiguration;
@@ -42,35 +41,23 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.ImmutableSet;
 
-public class QuotaThresholdCrossingListener implements MailboxListener, Configurable {
+public class QuotaThresholdCrossingListener implements MailboxListener {
     private static final Logger LOGGER = LoggerFactory.getLogger(QuotaThresholdCrossingListener.class);
-    private final EventStore eventStore;
-    private final MailetContext mailetContext;
-    private final UsersRepository usersRepository;
-    private final FileSystem fileSystem;
 
-    private EventSourcingSystem eventSourcingSystem;
+    private final EventSourcingSystem eventSourcingSystem;
 
     @Inject
-    public QuotaThresholdCrossingListener(MailetContext mailetContext,
-                                          UsersRepository usersRepository,
-                                          FileSystem fileSystem,
-                                          EventStore eventStore) {
-        this.eventStore = eventStore;
-        this.mailetContext = mailetContext;
-        this.usersRepository = usersRepository;
-        this.fileSystem = fileSystem;
+    public QuotaThresholdCrossingListener(MailetContext mailetContext, UsersRepository usersRepository,
+                                          FileSystem fileSystem, EventStore eventStore,
+                                          HierarchicalConfiguration config) {
+        this(mailetContext, usersRepository, fileSystem, eventStore, QuotaMailingListenerConfiguration.from(config));
     }
 
-    @Override
-    public void configure(HierarchicalConfiguration config) {
-        QuotaMailingListenerConfiguration configuration = QuotaMailingListenerConfiguration.from(config);
-        configure(configuration);
-    }
-
-    public void configure(QuotaMailingListenerConfiguration configuration) {
-        ImmutableSet<CommandHandler<?>> handlers = ImmutableSet.of(new DetectThresholdCrossingHandler(eventStore, configuration));
-        ImmutableSet<Subscriber> subscribers = ImmutableSet.of(new QuotaThresholdMailer(mailetContext, usersRepository, fileSystem, configuration));
+    public QuotaThresholdCrossingListener(MailetContext mailetContext, UsersRepository usersRepository,
+                                          FileSystem fileSystem, EventStore eventStore,
+                                          QuotaMailingListenerConfiguration config) {
+        ImmutableSet<CommandHandler<?>> handlers = ImmutableSet.of(new DetectThresholdCrossingHandler(eventStore, config));
+        ImmutableSet<Subscriber> subscribers = ImmutableSet.of(new QuotaThresholdMailer(mailetContext, usersRepository, fileSystem, config));
         eventSourcingSystem = new EventSourcingSystem(handlers, subscribers, eventStore);
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/f3127d87/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java b/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java
index f6be2c0..32f19e3 100644
--- a/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java
+++ b/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java
@@ -41,9 +41,7 @@ public class QuotaThresholdListenersTestSystem {
         FileSystem fileSystem = new FileSystemImpl(new JamesServerResourceLoader("."));
 
         QuotaThresholdCrossingListener thresholdCrossingListener =
-            new QuotaThresholdCrossingListener(mailetContext, MemoryUsersRepository.withVirtualHosting(), fileSystem, eventStore);
-
-        thresholdCrossingListener.configure(configuration);
+            new QuotaThresholdCrossingListener(mailetContext, MemoryUsersRepository.withVirtualHosting(), fileSystem, eventStore, configuration);
 
         MockMailboxSession mailboxSession = new MockMailboxSession("system");
         delegatingListener.addGlobalListener(thresholdCrossingListener, mailboxSession);

http://git-wip-us.apache.org/repos/asf/james-project/blob/f3127d87/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java b/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
index 6bfb91b..3f3f73a 100644
--- a/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
+++ b/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
@@ -20,12 +20,10 @@ package org.apache.james.mailbox.spamassassin;
 
 import java.io.InputStream;
 import java.util.List;
-import java.util.Optional;
 
 import javax.inject.Inject;
 
 import org.apache.james.mailbox.Event;
-import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.Role;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxId;
@@ -44,24 +42,19 @@ import com.github.steveash.guavate.Guavate;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableList;
 
-public class SpamAssassinListener implements SpamEventListener, MailboxListener.ConfigurableExecutionMode {
+public class SpamAssassinListener implements SpamEventListener {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(SpamAssassinListener.class);
 
     private final SpamAssassin spamAssassin;
     private final MailboxSessionMapperFactory mapperFactory;
-    private Optional<ExecutionMode> executionMode;
+    private final ExecutionMode executionMode;
 
     @Inject
-    public SpamAssassinListener(SpamAssassin spamAssassin, MailboxSessionMapperFactory mapperFactory) {
+    public SpamAssassinListener(SpamAssassin spamAssassin, MailboxSessionMapperFactory mapperFactory, ExecutionMode executionMode) {
         this.spamAssassin = spamAssassin;
         this.mapperFactory = mapperFactory;
-        this.executionMode = Optional.empty();
-    }
-
-    @Override
-    public void setExecutionMode(ExecutionMode executionMode) {
-        this.executionMode = Optional.of(executionMode);
+        this.executionMode = executionMode;
     }
 
     @Override
@@ -71,7 +64,7 @@ public class SpamAssassinListener implements SpamEventListener, MailboxListener.
 
     @Override
     public ExecutionMode getExecutionMode() {
-        return executionMode.orElse(ExecutionMode.ASYNCHRONOUS);
+        return executionMode;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/f3127d87/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java b/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java
index f7b3ba3..a384c4b 100644
--- a/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java
+++ b/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java
@@ -31,6 +31,7 @@ import javax.mail.Flags;
 import javax.mail.util.SharedByteArrayInputStream;
 
 import org.apache.james.mailbox.DefaultMailboxes;
+import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
@@ -86,7 +87,7 @@ public class SpamAssassinListenerTest {
         spamCapitalMailboxId = mailboxMapper.save(new SimpleMailbox(MailboxPath.forUser(USER, "SPAM"), UID_VALIDITY));
         trashMailboxId = mailboxMapper.save(new SimpleMailbox(MailboxPath.forUser(USER, "Trash"), UID_VALIDITY));
 
-        listener = new SpamAssassinListener(spamAssassin, mapperFactory);
+        listener = new SpamAssassinListener(spamAssassin, mapperFactory, MailboxListener.ExecutionMode.SYNCHRONOUS);
     }
 
     @After

http://git-wip-us.apache.org/repos/asf/james-project/blob/f3127d87/server/container/guice/mailbox-plugin-spamassassin/src/main/java/org/apache/james/modules/spamassassin/SpamAssassinListenerModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox-plugin-spamassassin/src/main/java/org/apache/james/modules/spamassassin/SpamAssassinListenerModule.java b/server/container/guice/mailbox-plugin-spamassassin/src/main/java/org/apache/james/modules/spamassassin/SpamAssassinListenerModule.java
index 9a96618..862696e 100644
--- a/server/container/guice/mailbox-plugin-spamassassin/src/main/java/org/apache/james/modules/spamassassin/SpamAssassinListenerModule.java
+++ b/server/container/guice/mailbox-plugin-spamassassin/src/main/java/org/apache/james/modules/spamassassin/SpamAssassinListenerModule.java
@@ -26,14 +26,12 @@ import javax.inject.Singleton;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.PropertiesConfiguration;
 import org.apache.james.mailbox.spamassassin.SpamAssassinConfiguration;
-import org.apache.james.mailbox.spamassassin.SpamAssassinListener;
 import org.apache.james.utils.PropertiesProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
-import com.google.inject.Scopes;
 
 public class SpamAssassinListenerModule extends AbstractModule {
     private static final Logger LOGGER = LoggerFactory.getLogger(SpamAssassinListenerModule.class);
@@ -42,7 +40,7 @@ public class SpamAssassinListenerModule extends AbstractModule {
 
     @Override
     protected void configure() {
-        bind(SpamAssassinListener.class).in(Scopes.SINGLETON);
+
     }
 
     @Provides

http://git-wip-us.apache.org/repos/asf/james-project/blob/f3127d87/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
index 500517b..4c39661 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
@@ -18,14 +18,67 @@
  ****************************************************************/
 package org.apache.james.modules.mailbox;
 
+import java.util.Optional;
+
 import javax.inject.Inject;
 
+import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.mailbox.MailboxListener;
 
+import com.google.common.base.Preconditions;
 import com.google.inject.Injector;
 
 public class MailboxListenerFactory {
 
+    public static class MailboxListenerBuilder {
+        private final Injector injector;
+        private Optional<Class<MailboxListener>> clazz;
+        private Optional<MailboxListener.ExecutionMode> executionMode;
+        private Optional<HierarchicalConfiguration> configuration;
+
+        public MailboxListenerBuilder(Injector injector) {
+            this.injector = injector;
+            this.clazz = Optional.empty();
+            this.executionMode = Optional.empty();
+            this.configuration = Optional.empty();
+        }
+
+        public MailboxListenerBuilder withExecutionMode(MailboxListener.ExecutionMode executionMode) {
+            this.executionMode = Optional.of(executionMode);
+            return this;
+        }
+
+        public MailboxListenerBuilder withConfiguration(HierarchicalConfiguration configuration) {
+            this.configuration = Optional.of(configuration);
+            return this;
+        }
+
+        public MailboxListenerBuilder withExecutionMode(Optional<MailboxListener.ExecutionMode> executionMode) {
+            executionMode.ifPresent(this::withExecutionMode);
+            return this;
+        }
+
+        public MailboxListenerBuilder withConfiguration(Optional<HierarchicalConfiguration> configuration) {
+            configuration.ifPresent(this::withConfiguration);
+            return this;
+        }
+
+        public MailboxListenerBuilder clazz(Class<MailboxListener> clazz) {
+            this.clazz = Optional.of(clazz);
+            return this;
+        }
+
+        public MailboxListener build() {
+            Preconditions.checkState(clazz.isPresent(), "'clazz' is mandatory");
+            return injector.createChildInjector(
+                binder -> binder.bind(MailboxListener.ExecutionMode.class)
+                    .toInstance(executionMode.orElse(MailboxListener.ExecutionMode.SYNCHRONOUS)),
+                binder -> binder.bind(HierarchicalConfiguration.class)
+                    .toInstance(configuration.orElse(new HierarchicalConfiguration())))
+                .getInstance(clazz.get());
+        }
+    }
+
     private final Injector injector;
 
     @Inject
@@ -33,7 +86,7 @@ public class MailboxListenerFactory {
         this.injector = injector;
     }
 
-    public MailboxListener createInstance(Class<MailboxListener> clazz) {
-        return injector.getInstance(clazz);
+    public MailboxListenerBuilder newInstance() {
+        return new MailboxListenerBuilder(injector);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f3127d87/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
index fced6be..866553c 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
@@ -20,7 +20,6 @@ package org.apache.james.modules.mailbox;
 
 import java.util.Set;
 
-import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.lifecycle.api.Configurable;
 import org.apache.james.mailbox.MailboxListener;
@@ -30,7 +29,6 @@ import org.apache.james.utils.ExtendedClassLoader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.github.fge.lambdas.Throwing;
 import com.google.inject.Inject;
 
 public class MailboxListenersLoaderImpl implements Configurable, MailboxListenersLoader {
@@ -79,31 +77,18 @@ public class MailboxListenersLoaderImpl implements Configurable, MailboxListener
         String listenerClass = configuration.getClazz();
         try {
             LOGGER.info("Loading user registered mailbox listener {}", listenerClass);
-            Class<MailboxListener> clazz = classLoader.locateClass(listenerClass);
-            MailboxListener listener = mailboxListenerFactory.createInstance(clazz);
-            if (listener instanceof Configurable) {
-                configureListener(configuration, (Configurable) listener);
-            }
-            if (listener instanceof MailboxListener.ConfigurableExecutionMode) {
-                MailboxListener.ConfigurableExecutionMode configurableExecutionMode = (MailboxListener.ConfigurableExecutionMode) listener;
-                configuration.isAsync()
-                    .map(this::getExecutionMode)
-                    .ifPresent(configurableExecutionMode::setExecutionMode);
-            }
-            return listener;
-        } catch (ClassNotFoundException | ConfigurationException e) {
+            return mailboxListenerFactory.newInstance()
+                .withConfiguration(configuration.getConfiguration())
+                .withExecutionMode(configuration.isAsync().map(this::getExecutionMode))
+                .clazz(classLoader.locateClass(listenerClass))
+                .build();
+        } catch (ClassNotFoundException e) {
             LOGGER.error("Error while loading user registered global listener {}", listenerClass, e);
             throw new RuntimeException(e);
         }
     }
 
-    private void configureListener(ListenerConfiguration configuration, Configurable configurableListener) throws ConfigurationException {
-        configuration.getConfiguration()
-            .ifPresent(Throwing.consumer(configurableListener::configure).sneakyThrow());
-    }
-
-
-    MailboxListener.ExecutionMode getExecutionMode(boolean isAsync) {
+    private MailboxListener.ExecutionMode getExecutionMode(boolean isAsync) {
         if (isAsync) {
             return MailboxListener.ExecutionMode.ASYNCHRONOUS;
         }


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


[16/17] james-project git commit: Correct a scenario explanation

Posted by bt...@apache.org.
Correct a scenario explanation


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/257eae57
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/257eae57
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/257eae57

Branch: refs/heads/master
Commit: 257eae573ca0bd80fca7580c63abb3c6b506091a
Parents: bb176e0
Author: benwa <bt...@linagora.com>
Authored: Fri Jun 8 17:58:28 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 12 07:02:02 2018 +0700

----------------------------------------------------------------------
 .../src/test/resources/cucumber/DownloadGet.feature                | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/257eae57/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadGet.feature
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadGet.feature b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadGet.feature
index 565e1be..a68740e 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadGet.feature
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadGet.feature
@@ -55,7 +55,7 @@ Feature: Download GET
     Then she can read that blob
     And the blob size is 4963
 
-  Scenario: Getting a message blob previously stored
+  Scenario: Content-Length header should be positioned before transfers starts
     Given "alice@domain.tld" mailbox "INBOX" contains a big message "1"
     When "alice@domain.tld" downloads "1"
     Then the blob size is 2621440


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


[02/17] james-project git commit: JAMES-2411 Upgrade swagger documentation for MailRepository endpoints

Posted by bt...@apache.org.
JAMES-2411 Upgrade swagger documentation for MailRepository endpoints


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/0d666522
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/0d666522
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/0d666522

Branch: refs/heads/master
Commit: 0d666522e08d17077ddb8309375dcf144c27954f
Parents: 4d3cda3
Author: Antoine Duprat <ad...@linagora.com>
Authored: Wed Jun 6 14:18:22 2018 +0200
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 12 07:00:46 2018 +0700

----------------------------------------------------------------------
 .../apache/james/webadmin/routes/MailRepositoriesRoutes.java   | 6 ++++--
 src/site/markdown/server/manage-webadmin.md                    | 6 ++++--
 2 files changed, 8 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/0d666522/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
index 2600812..83f035d 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
@@ -67,7 +67,7 @@ import spark.HaltException;
 import spark.Request;
 import spark.Service;
 
-@Api(tags = "MailRepositories")
+@Api(tags = "MailRepositories", consumes = "application/json")
 @Path("/mailRepositories")
 @Produces("application/json")
 public class MailRepositoriesRoutes implements Routes {
@@ -173,8 +173,10 @@ public class MailRepositoriesRoutes implements Routes {
             jsonTransformer);
     }
 
+    @GET
+    @Produces("application/json, message/rfc822")
     @Path("/{encodedUrl}/mails/{mailKey}")
-    @ApiOperation(value = "Retrieving a specific mail details")
+    @ApiOperation(value = "Retrieving a specific mail details (this endpoint can accept both \"application/json\" or \"message/rfc822\")")
     @ApiResponses(value = {
         @ApiResponse(code = HttpStatus.OK_200, message = "The list of all mails in a repository", response = List.class),
         @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "Internal server error - Something went bad on the server side."),

http://git-wip-us.apache.org/repos/asf/james-project/blob/0d666522/src/site/markdown/server/manage-webadmin.md
----------------------------------------------------------------------
diff --git a/src/site/markdown/server/manage-webadmin.md b/src/site/markdown/server/manage-webadmin.md
index 5dfc243..01d2022 100644
--- a/src/site/markdown/server/manage-webadmin.md
+++ b/src/site/markdown/server/manage-webadmin.md
@@ -1360,7 +1360,7 @@ Response codes:
  - 404: This repository can not be found
  - 500: Internal error
 
-### Reading a mail details
+### Reading/downloading a mail details
 
 ```
 curl -XGET http://ip:port/mailRepositories/encodedUrlOfTheRepository/mails/mailKey
@@ -1372,7 +1372,7 @@ Resource name `encodedUrlOfTheRepository` should be the resource id of an existi
 curl -XGET http://ip:port/mailRepositories/file%3A%2F%2Fvar%2Fmail%2Ferror%2F/mails/mail-key-1
 ```
 
-Response looks like:
+If the Accept header in the request is "application/json", then the response looks like:
 
 ```
 {
@@ -1383,6 +1383,8 @@ Response looks like:
     "error": "A small message explaining what happened to that mail..."
 }
 ```
+If the Accept header in the request is "message/rfc822", then the response will be the _eml_ file itself.
+
 
 Response codes:
 


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


[15/17] james-project git commit: JAMES-2414 Guice should used the MixedEventDelivery

Posted by bt...@apache.org.
JAMES-2414 Guice should used the MixedEventDelivery

Allows per listener async/sync executions


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/4fae4fdc
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/4fae4fdc
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/4fae4fdc

Branch: refs/heads/master
Commit: 4fae4fdcb05796a2949bc86f9345dc73d5f6d46e
Parents: 150e529
Author: benwa <bt...@linagora.com>
Authored: Thu Jun 7 16:31:41 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 12 07:01:45 2018 +0700

----------------------------------------------------------------------
 .../modules/mailbox/DefaultEventModule.java     | 29 ++++++++++++++++++--
 1 file changed, 26 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/4fae4fdc/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
index 9cf2f97..b788ed9 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
@@ -20,17 +20,20 @@
 package org.apache.james.modules.mailbox;
 
 import java.util.List;
+import java.util.Optional;
 
 import javax.inject.Inject;
 
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.james.lifecycle.api.Configurable;
 import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.store.event.AsynchronousEventDelivery;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.event.EventDelivery;
 import org.apache.james.mailbox.store.event.MailboxAnnotationListener;
 import org.apache.james.mailbox.store.event.MailboxListenerRegistry;
+import org.apache.james.mailbox.store.event.MixedEventDelivery;
 import org.apache.james.mailbox.store.event.SynchronousEventDelivery;
 import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
@@ -38,20 +41,20 @@ import org.apache.james.utils.ConfigurationPerformer;
 
 import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
 import com.google.inject.Scopes;
 import com.google.inject.Singleton;
 import com.google.inject.multibindings.Multibinder;
 
 public class DefaultEventModule extends AbstractModule {
 
+    private static final int DEFAULT_POOL_SIZE = 8;
+
     @Override
     protected void configure() {
         bind(DefaultDelegatingMailboxListener.class).in(Scopes.SINGLETON);
         bind(DelegatingMailboxListener.class).to(DefaultDelegatingMailboxListener.class);
 
-        bind(SynchronousEventDelivery.class).in(Scopes.SINGLETON);
-        bind(EventDelivery.class).to(SynchronousEventDelivery.class);
-
         Multibinder.newSetBinder(binder(), ConfigurationPerformer.class).addBinding().to(ListenerRegistrationPerformer.class);
 
         bind(ListeningCurrentQuotaUpdater.class).in(Scopes.SINGLETON);
@@ -64,6 +67,26 @@ public class DefaultEventModule extends AbstractModule {
         Multibinder.newSetBinder(binder(), MailboxListener.class);
     }
 
+    @Provides
+    @Singleton
+    EventDelivery provideEventDelivery(ConfigurationProvider configurationProvider) {
+        int poolSize = retrievePoolSize(configurationProvider);
+
+        return new MixedEventDelivery(
+            new AsynchronousEventDelivery(poolSize),
+            new SynchronousEventDelivery());
+    }
+
+    private int retrievePoolSize(ConfigurationProvider configurationProvider) {
+        try {
+            return Optional.ofNullable(configurationProvider.getConfiguration("listeners")
+                .getInteger("poolSize", null))
+                .orElse(DEFAULT_POOL_SIZE);
+        } catch (ConfigurationException e) {
+            return DEFAULT_POOL_SIZE;
+        }
+    }
+
     @Singleton
     public static class ListenerRegistrationPerformer implements ConfigurationPerformer {
         private final ConfigurationProvider configurationProvider;


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