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/26 02:43:43 UTC

[1/2] james-project git commit: JAMES-2321 Review error messages on MailRepository routes

Repository: james-project
Updated Branches:
  refs/heads/master 83649fc34 -> 5a4c0ded9


JAMES-2321 Review error messages on MailRepository routes

 - Avoid implicit toString calls
 - Avoid a weird Optional not working trick


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

Branch: refs/heads/master
Commit: e21b78b48f74665864f8d98e32c33ec3be511b4c
Parents: 83649fc
Author: benwa <bt...@linagora.com>
Authored: Mon Jun 25 10:02:50 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 26 09:41:02 2018 +0700

----------------------------------------------------------------------
 .../webadmin/routes/MailRepositoriesRoutes.java | 20 ++++++++++----------
 .../service/MailRepositoryStoreService.java     |  6 +++---
 .../routes/MailRepositoriesRoutesTest.java      |  7 ++++---
 3 files changed, 17 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/e21b78b4/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 53d7a2a..c69f599 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
@@ -181,11 +181,7 @@ public class MailRepositoriesRoutes implements Routes {
             MailRepositoryUrl url = MailRepositoryUrl.fromEncoded(encodedUrl);
             try {
                 return repositoryStoreService.listMails(url, offset, limit)
-                    .orElseThrow(() -> ErrorResponder.builder()
-                            .statusCode(HttpStatus.NOT_FOUND_404)
-                            .type(ErrorType.NOT_FOUND)
-                            .message("The repository " + encodedUrl + "(decoded value: '" + url + "') does not exist")
-                            .haltError());
+                    .orElseThrow(() -> repositoryNotFound(encodedUrl, url));
 
             } catch (MailRepositoryStore.MailRepositoryStoreException | MessagingException e) {
                 throw ErrorResponder.builder()
@@ -294,6 +290,14 @@ public class MailRepositoriesRoutes implements Routes {
             .haltError();
     }
 
+    private HaltException repositoryNotFound(String encodedUrl, MailRepositoryUrl url) {
+        return ErrorResponder.builder()
+            .statusCode(HttpStatus.NOT_FOUND_404)
+            .type(ErrorType.NOT_FOUND)
+            .message("The repository '" + encodedUrl + "' (decoded value: '" + url.asString() + "') does not exist")
+            .haltError();
+    }
+
     private HaltException internalServerError(Exception e) {
         return ErrorResponder.builder()
             .statusCode(HttpStatus.INTERNAL_SERVER_ERROR_500)
@@ -317,11 +321,7 @@ public class MailRepositoriesRoutes implements Routes {
             MailRepositoryUrl url = MailRepositoryUrl.fromEncoded(encodedUrl);
             try {
                 long size = repositoryStoreService.size(url)
-                    .orElseThrow(() -> ErrorResponder.builder()
-                            .statusCode(HttpStatus.NOT_FOUND_404)
-                            .type(ErrorType.NOT_FOUND)
-                            .message("The repository " + encodedUrl + "(decoded value: '" + url + "') does not exist")
-                            .haltError());
+                    .orElseThrow(() -> repositoryNotFound(encodedUrl, url));
                 return new ExtendedMailRepositoryResponse(url, size);
             } catch (MailRepositoryStore.MailRepositoryStoreException e) {
                 throw ErrorResponder.builder()

http://git-wip-us.apache.org/repos/asf/james-project/blob/e21b78b4/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 6c7ed64..6efce69 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
@@ -67,7 +67,7 @@ public class MailRepositoryStoreService {
     }
 
     public Optional<List<MailKeyDTO>> listMails(MailRepositoryUrl url, Offset offset, Limit limit) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
-        Optional<MailRepository> mailRepository = Optional.ofNullable(getRepository(url));
+        Optional<MailRepository> mailRepository = mailRepositoryStore.get(url);
         ThrowingFunction<MailRepository, List<MailKeyDTO>> list = repository -> list(repository, offset, limit);
         return mailRepository.map(Throwing.function(list).sneakyThrow());
     }
@@ -81,7 +81,7 @@ public class MailRepositoryStoreService {
     }
 
     public Optional<Long> size(MailRepositoryUrl url) throws MailRepositoryStore.MailRepositoryStoreException {
-        Optional<MailRepository> mailRepository = Optional.ofNullable(getRepository(url));
+        Optional<MailRepository> mailRepository = mailRepositoryStore.get(url);
         return mailRepository.map(Throwing.function(MailRepository::size).sneakyThrow());
     }
 
@@ -113,7 +113,7 @@ public class MailRepositoryStoreService {
             .orElseThrow(() -> ErrorResponder.builder()
                 .statusCode(HttpStatus.NOT_FOUND_404)
                 .type(ErrorResponder.ErrorType.NOT_FOUND)
-                .message(url + "does not exist")
+                .message(url.asString() + " does not exist")
                 .haltError());
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/e21b78b4/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 6ea3072..4f752c9 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
@@ -246,7 +246,8 @@ public class MailRepositoriesRoutesTest {
         when()
             .get(MY_REPO_MAILS)
         .then()
-            .statusCode(HttpStatus.NOT_FOUND_404);
+            .statusCode(HttpStatus.NOT_FOUND_404)
+            .body("message", is("The repository 'url%3A%2F%2FmyRepo' (decoded value: 'url://myRepo') does not exist"));
     }
 
     @Test
@@ -947,7 +948,7 @@ public class MailRepositoriesRoutesTest {
             .statusCode(HttpStatus.NOT_FOUND_404)
             .body("statusCode", is(404))
             .body("type", is(ErrorResponder.ErrorType.NOT_FOUND.getType()))
-            .body("message", is(URL_MY_REPO + "does not exist"));
+            .body("message", is(URL_MY_REPO.asString() + " does not exist"));
     }
 
     @Test
@@ -960,7 +961,7 @@ public class MailRepositoriesRoutesTest {
             .statusCode(HttpStatus.NOT_FOUND_404)
             .body("statusCode", is(404))
             .body("type", is(ErrorResponder.ErrorType.NOT_FOUND.getType()))
-            .body("message", is(URL_MY_REPO + "does not exist"));
+            .body("message", is(URL_MY_REPO.asString() + " does not exist"));
     }
 
     @Test


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


[2/2] james-project git commit: JAMES-2279 Add WithPriority mailet

Posted by bt...@apache.org.
JAMES-2279 Add WithPriority mailet


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

Branch: refs/heads/master
Commit: 5a4c0ded9f68565afa1c357c1a680389bc75a231
Parents: e21b78b
Author: clitetailor <du...@gmail.com>
Authored: Wed Jun 20 19:41:20 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 26 09:42:48 2018 +0700

----------------------------------------------------------------------
 .../james/transport/mailets/WithPriority.java   |  63 +++++++++
 .../transport/mailets/WithPriorityTest.java     | 133 +++++++++++++++++++
 2 files changed, 196 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/5a4c0ded/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/WithPriority.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/WithPriority.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/WithPriority.java
new file mode 100644
index 0000000..5e5218c
--- /dev/null
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/WithPriority.java
@@ -0,0 +1,63 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.transport.mailets;
+
+import java.util.Optional;
+
+import javax.mail.MessagingException;
+
+import org.apache.james.queue.api.MailPrioritySupport;
+import org.apache.mailet.Mail;
+import org.apache.mailet.base.GenericMailet;
+
+/**
+ * This mailet sets the priority of the incoming mail.
+ *
+ * Example configuration:
+ *
+ * <mailet match="All" class="WithPriority">
+ *     <priority>7</priority>
+ * </mailet>
+ */
+public class WithPriority extends GenericMailet {
+
+    private int priority;
+
+    @Override
+    public String getMailetInfo() {
+        return "With Priority Mailet";
+    }
+
+    @Override
+    public void init() throws MessagingException {
+        priority = Optional.ofNullable(getInitParameter("priority", null))
+                .map(Integer::valueOf)
+                .orElseThrow(() -> new IllegalArgumentException("'priority' init parameter is compulsory"));
+
+        if (priority < 0 || priority > 9) {
+            throw new IllegalArgumentException("Invalid priority: Priority should be from 0 to 9");
+        }
+    }
+
+    @Override
+    public void service(Mail mail) throws MessagingException {
+        mail.setAttribute(MailPrioritySupport.MAIL_PRIORITY, priority);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/5a4c0ded/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/WithPriorityTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/WithPriorityTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/WithPriorityTest.java
new file mode 100644
index 0000000..620964a
--- /dev/null
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/WithPriorityTest.java
@@ -0,0 +1,133 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.transport.mailets;
+
+import org.apache.james.queue.api.MailPrioritySupport;
+import org.apache.mailet.Mail;
+import org.apache.mailet.MailetConfig;
+import org.apache.mailet.base.test.FakeMail;
+import org.apache.mailet.base.test.FakeMailContext;
+import org.apache.mailet.base.test.FakeMailetConfig;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.assertj.core.api.Assertions.*;
+
+public class WithPriorityTest {
+
+    private WithPriority mailet;
+
+    @Before
+    public void setup() throws Exception {
+        mailet = new WithPriority();
+    }
+
+    @Test
+    public void getMailetInfoShouldReturnExpectedContent() {
+        String expected = "With Priority Mailet";
+
+        String actual = mailet.getMailetInfo();
+
+        assertThat(actual).isEqualTo(expected);
+    }
+
+    @Test
+    public void initShouldNotThrowWhenValidPriority() {
+        MailetConfig mockedMailetConfig = FakeMailetConfig.builder()
+            .mailetContext(FakeMailContext.defaultContext())
+            .setProperty("priority", "7")
+            .build();
+
+        assertThatCode(() -> mailet.init(mockedMailetConfig))
+            .doesNotThrowAnyException();
+    }
+
+    @Test
+    public void initShouldThrowWhenInvalidPriority() {
+        MailetConfig mockedMailetConfig = FakeMailetConfig.builder()
+            .mailetContext(FakeMailContext.defaultContext())
+            .setProperty("priority", "-1")
+            .build();
+
+        assertThatThrownBy(() -> mailet.init(mockedMailetConfig))
+            .isInstanceOf(IllegalArgumentException.class);
+    }
+
+    @Test
+    public void initShouldThrowWhenPriorityIsNotANumber() {
+        MailetConfig mockedMailetConfig = FakeMailetConfig.builder()
+                .mailetContext(FakeMailContext.defaultContext())
+                .setProperty("priority", "k")
+                .build();
+
+        assertThatThrownBy(() -> mailet.init(mockedMailetConfig))
+                .isInstanceOf(NumberFormatException.class);
+    }
+
+    @Test
+    public void initShouldThrowWhenPriorityIsEmpty() {
+        MailetConfig mockedMailetConfig = FakeMailetConfig.builder()
+                .mailetContext(FakeMailContext.defaultContext())
+                .setProperty("priority", "")
+                .build();
+
+        assertThatThrownBy(() -> mailet.init(mockedMailetConfig))
+                .isInstanceOf(NumberFormatException.class);
+    }
+
+    @Test
+    public void initShouldThrowWhenNoPriority() {
+        MailetConfig mockedMailetConfig = FakeMailetConfig.builder()
+                .mailetContext(FakeMailContext.defaultContext())
+                .build();
+
+        assertThatThrownBy(() -> mailet.init(mockedMailetConfig))
+                .isInstanceOf(IllegalArgumentException.class);
+    }
+
+    @Test
+    public void serviceShouldSetMailPriorityWhenNone() throws Exception {
+        MailetConfig mockedMailetConfig = FakeMailetConfig.builder()
+            .mailetContext(FakeMailContext.defaultContext())
+            .setProperty("priority", "7")
+            .build();
+
+        mailet.init(mockedMailetConfig);
+        Mail mail = FakeMail.builder().build();
+        mailet.service(mail);
+
+        assertThat(mail.getAttribute(MailPrioritySupport.MAIL_PRIORITY)).isEqualTo(7);
+    }
+
+    @Test
+    public void serviceShouldSetMailPriorityWhenPriorityExists() throws Exception {
+        MailetConfig mockedMailetConfig = FakeMailetConfig.builder()
+            .mailetContext(FakeMailContext.defaultContext())
+            .setProperty("priority", "7")
+            .build();
+
+        mailet.init(mockedMailetConfig);
+        Mail mail = FakeMail.builder()
+                .attribute(MailPrioritySupport.MAIL_PRIORITY, 5)
+                .build();
+        mailet.service(mail);
+
+        assertThat(mail.getAttribute(MailPrioritySupport.MAIL_PRIORITY)).isEqualTo(7);
+    }
+}


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