MAILBOX-351 WebAdminReIndexing routes can rely directly on MailboxId

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

Branch: refs/heads/master
Commit: 85350b38639e7ae5b15ef785f3c1dc1a80a3789d
Parents: 5e04df0
Author: Benoit Tellier <btell...@linagora.com>
Authored: Fri Nov 23 15:41:11 2018 +0700
Committer: Benoit Tellier <btell...@linagora.com>
Committed: Thu Nov 29 10:52:45 2018 +0700

----------------------------------------------------------------------
 .../james/webadmin/routes/ReindexingRoutes.java | 55 ++++++++------------
 .../webadmin/routes/ReindexingRoutesTest.java   |  6 ++-
 2 files changed, 27 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/85350b38/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/ReindexingRoutes.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/ReindexingRoutes.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/ReindexingRoutes.java
index e042580..e954a0f 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/ReindexingRoutes.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/ReindexingRoutes.java
@@ -25,14 +25,11 @@ import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 
 import org.apache.james.core.User;
-import org.apache.james.mailbox.MailboxManager;
-import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.indexer.ReIndexer;
 import org.apache.james.mailbox.model.MailboxId;
-import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.task.Task;
 import org.apache.james.task.TaskId;
 import org.apache.james.task.TaskManager;
@@ -42,8 +39,6 @@ import org.apache.james.webadmin.utils.ErrorResponder;
 import org.apache.james.webadmin.utils.JsonTransformer;
 import org.eclipse.jetty.http.HttpStatus;
 
-import com.github.fge.lambdas.supplier.ThrowingSupplier;
-
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -58,6 +53,11 @@ import spark.Service;
 @Path("/mailboxIndex")
 @Produces("application/json")
 public class ReindexingRoutes implements Routes {
+    @FunctionalInterface
+    interface TaskGenerator {
+        Task generate() throws MailboxException;
+    }
+
     static final String BASE_PATH = "/mailboxIndex";
     private static final String USER_PARAM = ":user";
     private static final String MAILBOX_PARAM = ":mailbox";
@@ -67,15 +67,13 @@ public class ReindexingRoutes implements Routes {
     private static final String MESSAGE_PATH = MAILBOX_PATH + "/mails/" + 
UID_PARAM;
 
     private final TaskManager taskManager;
-    private final MailboxManager mailboxManager;
     private final MailboxId.Factory mailboxIdFactory;
     private final ReIndexer reIndexer;
     private final JsonTransformer jsonTransformer;
 
     @Inject
-    public ReindexingRoutes(TaskManager taskManager, MailboxManager 
mailboxManager, MailboxId.Factory mailboxIdFactory, ReIndexer reIndexer, 
JsonTransformer jsonTransformer) {
+    public ReindexingRoutes(TaskManager taskManager, MailboxId.Factory 
mailboxIdFactory, ReIndexer reIndexer, JsonTransformer jsonTransformer) {
         this.taskManager = taskManager;
-        this.mailboxManager = mailboxManager;
         this.mailboxIdFactory = mailboxIdFactory;
         this.reIndexer = reIndexer;
         this.jsonTransformer = jsonTransformer;
@@ -183,7 +181,7 @@ public class ReindexingRoutes implements Routes {
     })
     private TaskIdDto reIndexMailbox(Request request, Response response) {
         return wrap(request, response,
-            () -> reIndexer.reIndex(retrievePath(request)));
+            () -> reIndexer.reIndex(extractMailboxId(request)));
     }
 
     @POST
@@ -223,14 +221,25 @@ public class ReindexingRoutes implements Routes {
     })
     private TaskIdDto reIndexMessage(Request request, Response response) {
         return wrap(request, response,
-            () -> reIndexer.reIndex(retrievePath(request), 
extractUid(request)));
+            () -> reIndexer.reIndex(extractMailboxId(request), 
extractUid(request)));
     }
 
-    private TaskIdDto wrap(Request request, Response response, 
ThrowingSupplier<Task> taskGenerator) {
+    private TaskIdDto wrap(Request request, Response response, TaskGenerator 
taskGenerator) {
         ReIndexingRoutesUtil.enforceTaskParameter(request);
-        Task task = taskGenerator.get();
-        TaskId taskId = taskManager.submit(task);
-        return TaskIdDto.respond(response, taskId);
+        try {
+            Task task = taskGenerator.generate();
+            TaskId taskId = taskManager.submit(task);
+            return TaskIdDto.respond(response, taskId);
+        } catch (MailboxNotFoundException e) {
+            throw ErrorResponder.builder()
+                .statusCode(HttpStatus.BAD_REQUEST_400)
+                .type(ErrorResponder.ErrorType.INVALID_ARGUMENT)
+                .message("mailbox not found")
+                .cause(e)
+                .haltError();
+        } catch (MailboxException e) {
+            throw new RuntimeException(e);
+        }
     }
 
     private User extractUser(Request request) {
@@ -246,10 +255,6 @@ public class ReindexingRoutes implements Routes {
         }
     }
 
-    private MailboxPath retrievePath(Request request) throws MailboxException {
-        return toMailboxPath(extractUser(request), extractMailboxId(request));
-    }
-
     private MailboxId extractMailboxId(Request request) {
         try {
             return mailboxIdFactory.fromString(request.params(MAILBOX_PARAM));
@@ -275,18 +280,4 @@ public class ReindexingRoutes implements Routes {
                 .haltError();
         }
     }
-
-    private MailboxPath toMailboxPath(User user, MailboxId mailboxId) throws 
MailboxException {
-        try {
-            MailboxSession systemSession = 
mailboxManager.createSystemSession(user.asString());
-            return mailboxManager.getMailbox(mailboxId, 
systemSession).getMailboxPath();
-        } catch (MailboxNotFoundException e) {
-            throw ErrorResponder.builder()
-                .statusCode(HttpStatus.BAD_REQUEST_400)
-                .type(ErrorResponder.ErrorType.INVALID_ARGUMENT)
-                .message("mailbox not found")
-                .cause(e)
-                .haltError();
-        }
-    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/85350b38/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java
index f0c6459..6ac8cc8 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java
@@ -61,6 +61,7 @@ import org.apache.mailbox.tools.indexer.UserReindexingTask;
 import org.eclipse.jetty.http.HttpStatus;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
@@ -95,7 +96,6 @@ class ReindexingRoutesTest {
             new TasksRoutes(taskManager, jsonTransformer),
             new ReindexingRoutes(
                 taskManager,
-                mailboxManager,
                 mailboxIdFactory,
                 reIndexer,
                 jsonTransformer),
@@ -401,6 +401,7 @@ class ReindexingRoutesTest {
                     .body("message", is("task query parameter is mandatory. 
The only supported value is `reIndex`"));
             }
 
+            @Disabled("Using user here makes no sens from an API perspective, 
and will be removed")
             @Test
             void mailboxReprocessingShouldFailWithBadUser() throws Exception {
                 MailboxSession systemSession = 
mailboxManager.createSystemSession(USERNAME);
@@ -580,6 +581,7 @@ class ReindexingRoutesTest {
                     .body("message", is("task query parameter is mandatory. 
The only supported value is `reIndex`"));
             }
 
+            @Disabled("Using user here makes no sens from an API perspective, 
and will be removed")
             @Test
             void messageReprocessingShouldFailWithBadUser() throws Exception {
                 MailboxSession systemSession = 
mailboxManager.createSystemSession(USERNAME);
@@ -624,7 +626,7 @@ class ReindexingRoutesTest {
                     .statusCode(HttpStatus.BAD_REQUEST_400)
                     .body("statusCode", is(400))
                     .body("type", 
is(ErrorResponder.ErrorType.INVALID_ARGUMENT.getType()))
-                    .body("message", is("mailbox not found"));
+                    .body("message", is("'uid' needs to be a parsable long"));
             }
         }
 


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

Reply via email to