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 ro...@apache.org on 2016/09/05 12:44:02 UTC

[06/10] james-project git commit: JAMES-1818 Use more MailboxId instead of String when possible

JAMES-1818 Use more MailboxId instead of String when possible


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

Branch: refs/heads/master
Commit: 8ec9ab9360470d4cdf7a6ca74937332e9c6af227
Parents: 460b650
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Tue Aug 30 12:13:47 2016 +0200
Committer: Raphael Ouazana <ra...@linagora.com>
Committed: Mon Sep 5 14:42:00 2016 +0200

----------------------------------------------------------------------
 .../integration/GetMailboxesMethodTest.java     | 18 ++++++-
 .../integration/SetMailboxesMethodTest.java     | 28 +++++++---
 .../MailboxParentNotFoundException.java         | 14 +++--
 .../james/jmap/methods/GetMailboxesMethod.java  |  3 +-
 .../jmap/methods/GetMessageListMethod.java      |  2 +-
 .../methods/SetMailboxesCreationProcessor.java  | 39 ++++++++++----
 .../SetMailboxesDestructionProcessor.java       | 25 ++++-----
 .../methods/SetMailboxesUpdateProcessor.java    | 17 +++---
 .../james/jmap/model/GetMailboxesRequest.java   | 11 ++--
 .../org/apache/james/jmap/model/Message.java    | 13 ++---
 .../apache/james/jmap/model/MessageFactory.java |  2 +-
 .../james/jmap/model/SetMailboxesRequest.java   | 21 ++++----
 .../james/jmap/model/SetMailboxesResponse.java  | 45 ++++++++--------
 .../james/jmap/model/mailbox/Mailbox.java       | 21 ++++----
 .../model/mailbox/MailboxCreateRequest.java     | 11 ++--
 .../model/mailbox/MailboxUpdateRequest.java     | 11 ++--
 .../apache/james/jmap/utils/MailboxUtils.java   | 19 ++++---
 .../james/jmap/json/ParsingWritingObjects.java  |  4 +-
 .../jmap/json/ParsingWritingObjectsTest.java    | 16 ++++--
 .../jmap/methods/GetMailboxesMethodTest.java    |  5 +-
 .../jmap/methods/JmapRequestParserImplTest.java | 12 ++---
 .../methods/JmapResponseWriterImplTest.java     | 20 ++++----
 .../SetMailboxesCreationProcessorTest.java      | 12 +++--
 .../jmap/methods/SetMailboxesMethodTest.java    |  6 ++-
 .../SetMailboxesUpdateProcessorTest.java        |  5 +-
 .../SetMessagesCreationProcessorTest.java       |  6 +--
 .../jmap/model/GetMailboxesRequestTest.java     |  5 +-
 .../james/jmap/model/MessageFactoryTest.java    |  6 +--
 .../apache/james/jmap/model/MessageTest.java    | 15 +++---
 .../jmap/model/SetMailboxesRequestTest.java     |  6 ++-
 .../jmap/model/SetMailboxesResponseTest.java    | 22 ++++----
 .../jmap/model/SetMessagesResponseTest.java     |  3 +-
 .../james/jmap/model/mailbox/MailboxTest.java   | 20 +++-----
 .../model/mailbox/MailboxUpdateRequestTest.java | 10 ++--
 .../apache/james/jmap/send/MailFactoryTest.java |  4 +-
 .../james/jmap/utils/MailboxUtilsTest.java      | 38 ++++++--------
 .../SortingHierarchicalCollectionsTest.java     | 54 +++++++++++---------
 .../jmap/src/test/resources/json/message.json   |  2 +-
 38 files changed, 330 insertions(+), 241 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java
index 3c74002..f59850a 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java
@@ -101,10 +101,13 @@ public abstract class GetMailboxesMethodTest {
     @Test
     public void getMailboxesShouldReturnEmptyWhenIdsDoesntMatch() throws Exception {
         jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, username, "name");
+        jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, username, "quicklyRemoved");
+        String removedId = jmapServer.serverProbe().getMailbox(MailboxConstants.USER_NAMESPACE, username, "quicklyRemoved").getMailboxId().serialize();
+        jmapServer.serverProbe().deleteMailbox(MailboxConstants.USER_NAMESPACE, username, "quicklyRemoved");
 
         given()
             .header("Authorization", accessToken.serialize())
-            .body("[[\"getMailboxes\", {\"ids\": [\"notAMailboxId\"]}, \"#0\"]]")
+            .body("[[\"getMailboxes\", {\"ids\": [\"" + removedId + "\"]}, \"#0\"]]")
         .when()
             .post("/jmap")
         .then()
@@ -114,6 +117,19 @@ public abstract class GetMailboxesMethodTest {
     }
 
     @Test
+    public void getMailboxesShouldReturnErrorWhenInvalidMailboxId() throws Exception {
+        given()
+            .header("Authorization", accessToken.serialize())
+            .body("[[\"getMailboxes\", {\"ids\": [\"invalid id\"]}, \"#0\"]]")
+        .when()
+            .post("/jmap")
+        .then()
+            .statusCode(200)
+            .body(NAME, equalTo("error"))
+            .body(ARGUMENTS + ".type", equalTo("invalidArguments"));
+    }
+
+    @Test
     public void getMailboxesShouldReturnMailboxesWhenIdsMatch() throws Exception {
         jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, username, "INBOX");
         jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, username, "myMailbox");

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMailboxesMethodTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMailboxesMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMailboxesMethodTest.java
index a1046a8..1fa49cc 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMailboxesMethodTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMailboxesMethodTest.java
@@ -39,6 +39,8 @@ import static org.hamcrest.collection.IsMapWithSize.aMapWithSize;
 import org.apache.james.GuiceJamesServer;
 import org.apache.james.jmap.JmapAuthentication;
 import org.apache.james.jmap.api.access.AccessToken;
+import org.apache.james.mailbox.model.MailboxConstants;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.hamcrest.Matchers;
 import org.junit.After;
@@ -565,11 +567,12 @@ public abstract class SetMailboxesMethodTest {
 
     @Test
     public void setMailboxesShouldReturnNotDestroyedWhenMailboxDoesntExist() {
+        String nonExistantMailboxId = getRemovedMailboxId().serialize();
         String requestBody =
             "[" +
                 "  [ \"setMailboxes\"," +
                 "    {" +
-                "      \"destroy\": [\"123\"]" +
+                "      \"destroy\": [\"" + nonExistantMailboxId + "\"]" +
                 "    }," +
                 "    \"#0\"" +
                 "  ]" +
@@ -584,9 +587,9 @@ public abstract class SetMailboxesMethodTest {
             .statusCode(200)
             .body(NAME, equalTo("mailboxesSet"))
             .body(ARGUMENTS + ".notDestroyed", aMapWithSize(1))
-            .body(ARGUMENTS + ".notDestroyed", hasEntry(equalTo("123"), Matchers.allOf(
+            .body(ARGUMENTS + ".notDestroyed", hasEntry(equalTo(nonExistantMailboxId), Matchers.allOf(
                     hasEntry(equalTo("type"), equalTo("notFound")),
-                    hasEntry(equalTo("description"), equalTo("The mailbox '123' was not found.")))));
+                    hasEntry(equalTo("description"), equalTo("The mailbox '" + nonExistantMailboxId + "' was not found.")))));
     }
 
     @Test
@@ -705,14 +708,22 @@ public abstract class SetMailboxesMethodTest {
             .body(ARGUMENTS + ".destroyed", containsInAnyOrder(parentMailboxId, childMailboxId));
     }
 
+    private MailboxId getRemovedMailboxId() {
+        jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, username, "quicklyRemoved");
+        MailboxId removedId = jmapServer.serverProbe().getMailbox(MailboxConstants.USER_NAMESPACE, username, "quicklyRemoved").getMailboxId();
+        jmapServer.serverProbe().deleteMailbox(MailboxConstants.USER_NAMESPACE, username, "quicklyRemoved");
+        return removedId;
+    }
+
     @Test
     public void setMailboxesShouldReturnNotUpdatedWhenUnknownMailbox() {
+        String unknownMailboxId = getRemovedMailboxId().serialize();
         String requestBody =
                 "[" +
                     "  [ \"setMailboxes\"," +
                     "    {" +
                     "      \"update\": {" +
-                    "        \"unknown-update-id01\" : {" +
+                    "        \"" + unknownMailboxId + "\" : {" +
                     "          \"name\" : \"yolo\"" +
                     "        }" +
                     "      }" +
@@ -729,9 +740,9 @@ public abstract class SetMailboxesMethodTest {
         .then()
             .statusCode(200)
             .body(NAME, equalTo("mailboxesSet"))
-            .body(ARGUMENTS + ".notUpdated", hasEntry(equalTo("unknown-update-id01"), Matchers.allOf(
+            .body(ARGUMENTS + ".notUpdated", hasEntry(equalTo(unknownMailboxId), Matchers.allOf(
                     hasEntry(equalTo("type"), equalTo("notFound")),
-                    hasEntry(equalTo("description"), containsString("unknown-update-id01")))));
+                    hasEntry(equalTo("description"), containsString(unknownMailboxId)))));
     }
 
     @Test
@@ -1177,13 +1188,14 @@ public abstract class SetMailboxesMethodTest {
         jmapServer.serverProbe().createMailbox("#private", username, "myBox");
         Mailbox mailbox = jmapServer.serverProbe().getMailbox("#private", username, "myBox");
         String mailboxId = mailbox.getMailboxId().serialize();
+        String badParentId = getRemovedMailboxId().serialize();
         String requestBody =
                 "[" +
                     "  [ \"setMailboxes\"," +
                     "    {" +
                     "      \"update\": {" +
                     "        \"" + mailboxId + "\" : {" +
-                    "          \"parentId\" : \"badParent\"" +
+                    "          \"parentId\" : \"" + badParentId + "\"" +
                     "        }" +
                     "      }" +
                     "    }," +
@@ -1201,7 +1213,7 @@ public abstract class SetMailboxesMethodTest {
             .body(NAME, equalTo("mailboxesSet"))
             .body(ARGUMENTS + ".notUpdated", hasEntry(equalTo(mailboxId), Matchers.allOf(
                     hasEntry(equalTo("type"), equalTo("notFound")),
-                    hasEntry(equalTo("description"), containsString("badParent")))));
+                    hasEntry(equalTo("description"), containsString(badParentId)))));
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/main/java/org/apache/james/jmap/exceptions/MailboxParentNotFoundException.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/exceptions/MailboxParentNotFoundException.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/exceptions/MailboxParentNotFoundException.java
index aadf5eb..bfa3b38 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/exceptions/MailboxParentNotFoundException.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/exceptions/MailboxParentNotFoundException.java
@@ -19,13 +19,21 @@
 
 package org.apache.james.jmap.exceptions;
 
+import org.apache.james.jmap.model.MailboxCreationId;
+import org.apache.james.mailbox.model.MailboxId;
+
 public class MailboxParentNotFoundException extends RuntimeException {
 
     private final String parentId;
 
-    public MailboxParentNotFoundException(String parentId) {
-        super(String.format("The parent mailbox '%s' was not found.", parentId));
-        this.parentId = parentId;
+    public MailboxParentNotFoundException(MailboxId parentId) {
+        super(String.format("The parent mailbox '%s' was not found.", parentId.serialize()));
+        this.parentId = parentId.serialize();
+    }
+
+    public MailboxParentNotFoundException(MailboxCreationId parentId) {
+        super(String.format("The parent mailbox '%s' was not found.", parentId.getCreationId()));
+        this.parentId = parentId.getCreationId();
     }
 
     public String getParentId() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
index 7a4e2ed..3e739ed 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
@@ -36,6 +36,7 @@ import org.apache.james.jmap.utils.MailboxUtils;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxMetaData;
 import org.apache.james.mailbox.model.MailboxQuery;
 
@@ -103,7 +104,7 @@ public class GetMailboxesMethod implements Method {
         }
     }
 
-    private Predicate<? super Mailbox> filterMailboxesById(Optional<ImmutableList<String>> ids) {
+    private Predicate<? super Mailbox> filterMailboxesById(Optional<ImmutableList<MailboxId>> ids) {
         return (mailbox -> ids.map(list -> list.contains(mailbox.getId())).orElse(true));
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessageListMethod.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessageListMethod.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessageListMethod.java
index 911aa9f..5b476ef 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessageListMethod.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessageListMethod.java
@@ -149,7 +149,7 @@ public class GetMessageListMethod implements Method {
     }
 
     private void aggregate(MailboxSession mailboxSession, Multimap<MailboxPath, MessageResult> aggregation, Map.Entry<MailboxId, Collection<Long>> mailboxResults) throws MailboxNotFoundException {
-        MailboxPath mailboxPath = mailboxUtils.mailboxPathFromMailboxId(mailboxResults.getKey().serialize(), mailboxSession)
+        MailboxPath mailboxPath = mailboxUtils.mailboxPathFromMailboxId(mailboxResults.getKey(), mailboxSession)
             .orElseThrow(() -> new MailboxNotFoundException(mailboxResults.getKey().serialize()));
         MessageManager messageManager = getMessageManager(mailboxPath, mailboxSession)
             .orElseThrow(() -> new MailboxNotFoundException(mailboxPath));

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessor.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessor.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessor.java
index 06c0605..cc4cb4d 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessor.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessor.java
@@ -40,11 +40,14 @@ import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxExistsException;
+import org.apache.james.mailbox.model.MailboxId;
+import org.apache.james.mailbox.model.MailboxId.Factory;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.github.fge.lambdas.Throwing;
+import com.github.fge.lambdas.functions.ThrowingFunction;
 import com.google.common.annotations.VisibleForTesting;
 
 public class SetMailboxesCreationProcessor implements SetMailboxesProcessor {
@@ -52,24 +55,26 @@ public class SetMailboxesCreationProcessor implements SetMailboxesProcessor {
     private static final Logger LOGGER = LoggerFactory.getLogger(SetMailboxesCreationProcessor.class);
 
     private final MailboxManager mailboxManager;
-    private final SortingHierarchicalCollections<Map.Entry<MailboxCreationId, MailboxCreateRequest>, String> sortingHierarchicalCollections;
+    private final SortingHierarchicalCollections<Map.Entry<MailboxCreationId, MailboxCreateRequest>, MailboxCreationId> sortingHierarchicalCollections;
     private final MailboxUtils mailboxUtils;
+    private final Factory mailboxIdFactory;
 
     @Inject
     @VisibleForTesting
-    SetMailboxesCreationProcessor(MailboxManager mailboxManager, MailboxUtils mailboxUtils) {
+    SetMailboxesCreationProcessor(MailboxManager mailboxManager, MailboxUtils mailboxUtils, MailboxId.Factory mailboxIdFactory) {
         this.mailboxManager = mailboxManager;
         this.sortingHierarchicalCollections =
-            new SortingHierarchicalCollections<>(
-                x -> x.getKey().getCreationId(),
+            new SortingHierarchicalCollections<Map.Entry<MailboxCreationId, MailboxCreateRequest>, MailboxCreationId>(
+                x -> x.getKey(),
                 x -> x.getValue().getParentId());
         this.mailboxUtils = mailboxUtils;
+        this.mailboxIdFactory = mailboxIdFactory;
     }
 
     public SetMailboxesResponse process(SetMailboxesRequest request, MailboxSession mailboxSession) {
         SetMailboxesResponse.Builder builder = SetMailboxesResponse.builder();
         try {
-            Map<MailboxCreationId, String> creationIdsToCreatedMailboxId = new HashMap<>();
+            Map<MailboxCreationId, MailboxId> creationIdsToCreatedMailboxId = new HashMap<>();
             sortingHierarchicalCollections.sortFromRootToLeaf(request.getCreate().entrySet())
                 .forEach(entry -> 
                     createMailbox(entry.getKey(), entry.getValue(), mailboxSession, creationIdsToCreatedMailboxId, builder));
@@ -90,7 +95,7 @@ public class SetMailboxesCreationProcessor implements SetMailboxesProcessor {
     }
 
     private void createMailbox(MailboxCreationId mailboxCreationId, MailboxCreateRequest mailboxRequest, MailboxSession mailboxSession,
-            Map<MailboxCreationId, String> creationIdsToCreatedMailboxId, SetMailboxesResponse.Builder builder) {
+            Map<MailboxCreationId, MailboxId> creationIdsToCreatedMailboxId, SetMailboxesResponse.Builder builder) {
         try {
             ensureValidMailboxName(mailboxRequest, mailboxSession);
             MailboxPath mailboxPath = getMailboxPath(mailboxRequest, creationIdsToCreatedMailboxId, mailboxSession);
@@ -134,12 +139,12 @@ public class SetMailboxesCreationProcessor implements SetMailboxesProcessor {
         }
     }
 
-    private MailboxPath getMailboxPath(MailboxCreateRequest mailboxRequest, Map<MailboxCreationId, String> creationIdsToCreatedMailboxId, MailboxSession mailboxSession) throws MailboxException {
+    private MailboxPath getMailboxPath(MailboxCreateRequest mailboxRequest, Map<MailboxCreationId, MailboxId> creationIdsToCreatedMailboxId, MailboxSession mailboxSession) throws MailboxException {
         if (mailboxRequest.getParentId().isPresent()) {
-            String parentId = mailboxRequest.getParentId().get();
-            String parentName = mailboxUtils.getMailboxNameFromId(parentId, mailboxSession)
+            MailboxCreationId parentId = mailboxRequest.getParentId().get();
+            String parentName = getMailboxNameFromId(parentId, mailboxSession)
                     .orElseGet(Throwing.supplier(() ->
-                        mailboxUtils.getMailboxNameFromId(creationIdsToCreatedMailboxId.get(MailboxCreationId.of(parentId)), mailboxSession)
+                        mailboxUtils.getMailboxNameFromId(creationIdsToCreatedMailboxId.get(parentId), mailboxSession)
                             .orElseThrow(() -> new MailboxParentNotFoundException(parentId))
                     ));
 
@@ -148,4 +153,18 @@ public class SetMailboxesCreationProcessor implements SetMailboxesProcessor {
         }
         return new MailboxPath(mailboxSession.getPersonalSpace(), mailboxSession.getUser().getUserName(), mailboxRequest.getName());
     }
+
+    private Optional<String> getMailboxNameFromId(MailboxCreationId creationId, MailboxSession mailboxSession) {
+        ThrowingFunction<? super MailboxId, Optional<String>> toName = parentId -> mailboxUtils.getMailboxNameFromId(parentId, mailboxSession);
+        return getMailboxIdFromCreationId(creationId)
+                .flatMap(Throwing.function(toName).sneakyThrow());
+    }
+
+    private Optional<MailboxId> getMailboxIdFromCreationId(MailboxCreationId creationId) {
+        try {
+            return Optional.of(mailboxIdFactory.fromString(creationId.getCreationId()));
+        } catch (Exception e) {
+            return Optional.empty();
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesDestructionProcessor.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesDestructionProcessor.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesDestructionProcessor.java
index f6e225a..9fa4aab 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesDestructionProcessor.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesDestructionProcessor.java
@@ -38,6 +38,7 @@ import org.apache.james.jmap.utils.SortingHierarchicalCollections;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.MailboxId;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -49,7 +50,7 @@ public class SetMailboxesDestructionProcessor implements SetMailboxesProcessor {
     private static final Logger LOGGER = LoggerFactory.getLogger(SetMailboxesDestructionProcessor.class);
 
     private final MailboxManager mailboxManager;
-    private final SortingHierarchicalCollections<Map.Entry<String, Mailbox>, String> sortingHierarchicalCollections;
+    private final SortingHierarchicalCollections<Map.Entry<MailboxId, Mailbox>, MailboxId> sortingHierarchicalCollections;
     private final MailboxUtils mailboxUtils;
 
     @Inject
@@ -64,7 +65,7 @@ public class SetMailboxesDestructionProcessor implements SetMailboxesProcessor {
     }
 
     public SetMailboxesResponse process(SetMailboxesRequest request, MailboxSession mailboxSession) {
-        ImmutableMap<String, Mailbox> idToMailbox = mapDestroyRequests(request, mailboxSession);
+        ImmutableMap<MailboxId, Mailbox> idToMailbox = mapDestroyRequests(request, mailboxSession);
 
         SetMailboxesResponse.Builder builder = SetMailboxesResponse.builder();
         sortingHierarchicalCollections.sortFromLeafToRoot(idToMailbox.entrySet())
@@ -74,8 +75,8 @@ public class SetMailboxesDestructionProcessor implements SetMailboxesProcessor {
         return builder.build();
     }
 
-    private ImmutableMap<String, Mailbox> mapDestroyRequests(SetMailboxesRequest request, MailboxSession mailboxSession) {
-        ImmutableMap.Builder<String, Mailbox> idToMailboxBuilder = ImmutableMap.builder(); 
+    private ImmutableMap<MailboxId, Mailbox> mapDestroyRequests(SetMailboxesRequest request, MailboxSession mailboxSession) {
+        ImmutableMap.Builder<MailboxId, Mailbox> idToMailboxBuilder = ImmutableMap.builder(); 
         request.getDestroy().stream()
             .map(id -> mailboxUtils.mailboxFromMailboxId(id, mailboxSession))
             .filter(Optional::isPresent)
@@ -84,13 +85,13 @@ public class SetMailboxesDestructionProcessor implements SetMailboxesProcessor {
         return idToMailboxBuilder.build();
     }
 
-    private void notDestroyedRequests(SetMailboxesRequest request, ImmutableMap<String, Mailbox> idToMailbox, SetMailboxesResponse.Builder builder) {
+    private void notDestroyedRequests(SetMailboxesRequest request, ImmutableMap<MailboxId, Mailbox> idToMailbox, SetMailboxesResponse.Builder builder) {
         request.getDestroy().stream()
             .filter(id -> !idToMailbox.containsKey(id))
             .forEach(id -> notDestroy(id, builder));
     }
 
-    private void destroyMailbox(Entry<String, Mailbox> entry, MailboxSession mailboxSession, SetMailboxesResponse.Builder builder) {
+    private void destroyMailbox(Entry<MailboxId, Mailbox> entry, MailboxSession mailboxSession, SetMailboxesResponse.Builder builder) {
         try {
             Mailbox mailbox = entry.getValue();
             preconditions(mailbox, mailboxSession);
@@ -100,15 +101,15 @@ public class SetMailboxesDestructionProcessor implements SetMailboxesProcessor {
         } catch (MailboxHasChildException e) {
             builder.notDestroyed(entry.getKey(), SetError.builder()
                     .type("mailboxHasChild")
-                    .description(String.format("The mailbox '%s' has a child.", entry.getKey()))
+                    .description(String.format("The mailbox '%s' has a child.", entry.getKey().serialize()))
                     .build());
         } catch (SystemMailboxNotUpdatableException e) {
             builder.notDestroyed(entry.getKey(), SetError.builder()
                     .type("invalidArguments")
-                    .description(String.format("The mailbox '%s' is a system mailbox.", entry.getKey()))
+                    .description(String.format("The mailbox '%s' is a system mailbox.", entry.getKey().serialize()))
                     .build());
         } catch (MailboxException e) {
-            String message = String.format("An error occurred when deleting the mailbox '%s'", entry.getKey());
+            String message = String.format("An error occurred when deleting the mailbox '%s'", entry.getKey().serialize());
             LOGGER.error(message, e);
             builder.notDestroyed(entry.getKey(), SetError.builder()
                     .type("anErrorOccurred")
@@ -122,7 +123,7 @@ public class SetMailboxesDestructionProcessor implements SetMailboxesProcessor {
         checkRole(mailbox.getRole());
     }
 
-    private void checkForChild(String id, MailboxSession mailboxSession) throws MailboxHasChildException, MailboxException {
+    private void checkForChild(MailboxId id, MailboxSession mailboxSession) throws MailboxHasChildException, MailboxException {
         if (mailboxUtils.hasChildren(id, mailboxSession)) {
             throw new MailboxHasChildException();
         }
@@ -134,10 +135,10 @@ public class SetMailboxesDestructionProcessor implements SetMailboxesProcessor {
         }
     }
 
-    private void notDestroy(String id, Builder builder) {
+    private void notDestroy(MailboxId id, Builder builder) {
         builder.notDestroyed(id, SetError.builder()
                 .type("notFound")
-                .description(String.format("The mailbox '%s' was not found.", id))
+                .description(String.format("The mailbox '%s' was not found.", id.serialize()))
                 .build());
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessor.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessor.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessor.java
index 673e918..69a07fe 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessor.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessor.java
@@ -40,6 +40,7 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxExistsException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 
 import com.google.common.annotations.VisibleForTesting;
@@ -68,7 +69,7 @@ public class SetMailboxesUpdateProcessor implements SetMailboxesProcessor {
         return responseBuilder.build();
     }
 
-    private void handleUpdate(String mailboxId, MailboxUpdateRequest updateRequest, Builder responseBuilder, MailboxSession mailboxSession) {
+    private void handleUpdate(MailboxId mailboxId, MailboxUpdateRequest updateRequest, Builder responseBuilder, MailboxSession mailboxSession) {
         try {
             validateMailboxName(updateRequest, mailboxSession);
             Mailbox mailbox = getMailbox(mailboxId, mailboxSession);
@@ -91,7 +92,7 @@ public class SetMailboxesUpdateProcessor implements SetMailboxesProcessor {
         } catch (MailboxNotFoundException e) {
             responseBuilder.notUpdated(mailboxId, SetError.builder()
                     .type("notFound")
-                    .description(String.format("The mailbox '%s' was not found", mailboxId))
+                    .description(String.format("The mailbox '%s' was not found", mailboxId.serialize()))
                     .build());
         } catch (MailboxParentNotFoundException e) {
             responseBuilder.notUpdated(mailboxId, SetError.builder()
@@ -122,9 +123,9 @@ public class SetMailboxesUpdateProcessor implements SetMailboxesProcessor {
         }
     }
 
-    private Mailbox getMailbox(String mailboxId, MailboxSession mailboxSession) throws MailboxNotFoundException {
+    private Mailbox getMailbox(MailboxId mailboxId, MailboxSession mailboxSession) throws MailboxNotFoundException {
         return mailboxUtils.mailboxFromMailboxId(mailboxId, mailboxSession)
-                .orElseThrow(() -> new MailboxNotFoundException(mailboxId));
+                .orElseThrow(() -> new MailboxNotFoundException(mailboxId.serialize()));
     }
 
     private void validateMailboxName(MailboxUpdateRequest updateRequest, MailboxSession mailboxSession) throws MailboxNameException {
@@ -154,7 +155,7 @@ public class SetMailboxesUpdateProcessor implements SetMailboxesProcessor {
     private void validateParent(Mailbox mailbox, MailboxUpdateRequest updateRequest, MailboxSession mailboxSession) throws MailboxException, MailboxHasChildException {
 
         if (isParentIdInRequest(updateRequest)) {
-            String newParentId = updateRequest.getParentId().get();
+            MailboxId newParentId = updateRequest.getParentId().get();
             mailboxUtils.mailboxPathFromMailboxId(newParentId, mailboxSession)
                     .orElseThrow(() -> new MailboxParentNotFoundException(newParentId));
             if (mustChangeParent(mailbox.getParentId(), newParentId) && mailboxUtils.hasChildren(mailbox.getId(), mailboxSession)) {
@@ -168,7 +169,7 @@ public class SetMailboxesUpdateProcessor implements SetMailboxesProcessor {
                 && updateRequest.getParentId().isPresent();
     }
 
-    private boolean mustChangeParent(Optional<String> currentParentId, String newParentId) {
+    private boolean mustChangeParent(Optional<MailboxId> currentParentId, MailboxId newParentId) {
         return currentParentId
                 .map(x -> ! x.equals(newParentId))
                 .orElse(true);
@@ -183,7 +184,7 @@ public class SetMailboxesUpdateProcessor implements SetMailboxesProcessor {
     }
 
     private MailboxPath computeNewMailboxPath(Mailbox mailbox, MailboxPath originMailboxPath, MailboxUpdateRequest updateRequest, MailboxSession mailboxSession) {
-        Optional<String> parentId = updateRequest.getParentId();
+        Optional<MailboxId> parentId = updateRequest.getParentId();
         if (parentId == null) {
             return new MailboxPath(mailboxSession.getPersonalSpace(), 
                     mailboxSession.getUser().getUserName(), 
@@ -202,7 +203,7 @@ public class SetMailboxesUpdateProcessor implements SetMailboxesProcessor {
         return new MailboxPath(originMailboxPath, newName);
     }
 
-    private MailboxPath computeMailboxPathWithNewParentId(MailboxPath originMailboxPath, String parentMailboxId, MailboxSession mailboxSession) {
+    private MailboxPath computeMailboxPathWithNewParentId(MailboxPath originMailboxPath, MailboxId parentMailboxId, MailboxSession mailboxSession) {
         Optional<MailboxPath> newParentMailboxPath = mailboxUtils.mailboxPathFromMailboxId(parentMailboxId, mailboxSession);
         String lastName = getCurrentMailboxName(originMailboxPath, mailboxSession);
         return new MailboxPath(originMailboxPath, newParentMailboxPath.get().getName() + mailboxSession.getPathDelimiter() + lastName);

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetMailboxesRequest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetMailboxesRequest.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetMailboxesRequest.java
index a8f59d8..6e435f8 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetMailboxesRequest.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetMailboxesRequest.java
@@ -23,6 +23,7 @@ import java.util.Optional;
 
 import org.apache.commons.lang.NotImplementedException;
 import org.apache.james.jmap.methods.JmapRequest;
+import org.apache.james.mailbox.model.MailboxId;
 
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
@@ -42,7 +43,7 @@ public class GetMailboxesRequest implements JmapRequest {
 
         private String accountId;
         private Optional<ImmutableSet<MailboxProperty>> properties;
-        private Optional<ImmutableList<String>> ids;
+        private Optional<ImmutableList<MailboxId>> ids;
 
         private Builder() {
             ids = Optional.empty();
@@ -56,7 +57,7 @@ public class GetMailboxesRequest implements JmapRequest {
             return this;
         }
 
-        public Builder ids(List<String> ids) {
+        public Builder ids(List<MailboxId> ids) {
             if (ids != null) {
                 this.ids = Optional.of(ImmutableList.copyOf(ids));
             }
@@ -79,10 +80,10 @@ public class GetMailboxesRequest implements JmapRequest {
     }
 
     private final Optional<String> accountId;
-    private final Optional<ImmutableList<String>> ids;
+    private final Optional<ImmutableList<MailboxId>> ids;
     private final Optional<ImmutableSet<MailboxProperty>> properties;
 
-    private GetMailboxesRequest(Optional<String> accountId, Optional<ImmutableList<String>> ids, Optional<ImmutableSet<MailboxProperty>> properties) {
+    private GetMailboxesRequest(Optional<String> accountId, Optional<ImmutableList<MailboxId>> ids, Optional<ImmutableSet<MailboxProperty>> properties) {
         this.accountId = accountId;
         this.ids = ids;
         this.properties = properties;
@@ -92,7 +93,7 @@ public class GetMailboxesRequest implements JmapRequest {
         return accountId;
     }
 
-    public Optional<ImmutableList<String>> getIds() {
+    public Optional<ImmutableList<MailboxId>> getIds() {
         return ids;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java
index 1e334aa..e1122db 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java
@@ -27,6 +27,7 @@ import java.util.function.Predicate;
 
 import org.apache.james.jmap.methods.GetMessagesMethod;
 import org.apache.james.jmap.methods.JmapResponseWriterImpl;
+import org.apache.james.mailbox.model.MailboxId;
 
 import com.fasterxml.jackson.annotation.JsonFilter;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@@ -50,7 +51,7 @@ public class Message {
         private MessageId id;
         private BlobId blobId;
         private String threadId;
-        private ImmutableList<String> mailboxIds;
+        private ImmutableList<MailboxId> mailboxIds;
         private String inReplyToMessageId;
         private boolean isUnread;
         private boolean isFlagged;
@@ -95,11 +96,11 @@ public class Message {
             return this;
         }
 
-        public Builder mailboxId(String mailboxId) {
+        public Builder mailboxId(MailboxId mailboxId) {
             return this.mailboxIds(ImmutableList.of(mailboxId));
         }
 
-        public Builder mailboxIds(List<String> mailboxIds) {
+        public Builder mailboxIds(List<MailboxId> mailboxIds) {
             this.mailboxIds = ImmutableList.copyOf(mailboxIds);
             return this;
         }
@@ -234,7 +235,7 @@ public class Message {
     private final MessageId id;
     private final BlobId blobId;
     private final String threadId;
-    private final ImmutableList<String> mailboxIds;
+    private final ImmutableList<MailboxId> mailboxIds;
     private final Optional<String> inReplyToMessageId;
     private final boolean isUnread;
     private final boolean isFlagged;
@@ -257,7 +258,7 @@ public class Message {
     private final ImmutableList<Attachment> attachments;
     private final ImmutableMap<BlobId, SubMessage> attachedMessages;
 
-    @VisibleForTesting Message(MessageId id, BlobId blobId, String threadId, ImmutableList<String> mailboxIds, Optional<String> inReplyToMessageId, boolean isUnread, boolean isFlagged, boolean isAnswered, boolean isDraft, boolean hasAttachment, ImmutableMap<String, String> headers, Optional<Emailer> from,
+    @VisibleForTesting Message(MessageId id, BlobId blobId, String threadId, ImmutableList<MailboxId> mailboxIds, Optional<String> inReplyToMessageId, boolean isUnread, boolean isFlagged, boolean isAnswered, boolean isDraft, boolean hasAttachment, ImmutableMap<String, String> headers, Optional<Emailer> from,
             ImmutableList<Emailer> to, ImmutableList<Emailer> cc, ImmutableList<Emailer> bcc, ImmutableList<Emailer> replyTo, String subject, ZonedDateTime date, long size, String preview, Optional<String> textBody, Optional<String> htmlBody, ImmutableList<Attachment> attachments,
             ImmutableMap<BlobId, SubMessage> attachedMessages) {
         this.id = id;
@@ -298,7 +299,7 @@ public class Message {
         return threadId;
     }
 
-    public ImmutableList<String> getMailboxIds() {
+    public ImmutableList<MailboxId> getMailboxIds() {
         return mailboxIds;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
index c1597c2..fe090ce 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
@@ -76,7 +76,7 @@ public class MessageFactory {
                 .id(message.getMessageId())
                 .blobId(BlobId.of(String.valueOf(message.getUid())))
                 .threadId(message.getMessageId().serialize())
-                .mailboxIds(ImmutableList.of(message.getMailboxId().serialize()))
+                .mailboxIds(ImmutableList.of(message.getMailboxId()))
                 .inReplyToMessageId(getHeader(mimeMessage, "in-reply-to"))
                 .isUnread(! message.getFlags().contains(Flags.Flag.SEEN))
                 .isFlagged(message.getFlags().contains(Flags.Flag.FLAGGED))

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetMailboxesRequest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetMailboxesRequest.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetMailboxesRequest.java
index a89031e..7d6552a 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetMailboxesRequest.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetMailboxesRequest.java
@@ -26,6 +26,7 @@ import org.apache.commons.lang.NotImplementedException;
 import org.apache.james.jmap.methods.JmapRequest;
 import org.apache.james.jmap.model.mailbox.MailboxCreateRequest;
 import org.apache.james.jmap.model.mailbox.MailboxUpdateRequest;
+import org.apache.james.mailbox.model.MailboxId;
 
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
@@ -44,8 +45,8 @@ public class SetMailboxesRequest implements JmapRequest {
     public static class Builder {
 
         private final ImmutableMap.Builder<MailboxCreationId, MailboxCreateRequest> create;
-        private final ImmutableMap.Builder<String, MailboxUpdateRequest> update;
-        private final ImmutableList.Builder<String> destroy;
+        private final ImmutableMap.Builder<MailboxId, MailboxUpdateRequest> update;
+        private final ImmutableList.Builder<MailboxId> destroy;
 
         private Builder() {
             create = ImmutableMap.builder();
@@ -71,17 +72,17 @@ public class SetMailboxesRequest implements JmapRequest {
             throw new NotImplementedException();
         }
         
-        public Builder update(String mailboxId, MailboxUpdateRequest mailboxUpdateRequest) {
+        public Builder update(MailboxId mailboxId, MailboxUpdateRequest mailboxUpdateRequest) {
             update.put(mailboxId, mailboxUpdateRequest);
             return this;
         }
         
-        public Builder update(Map<String, MailboxUpdateRequest> updates) {
+        public Builder update(Map<MailboxId, MailboxUpdateRequest> updates) {
             update.putAll(updates);
             return this;
         }
         
-        public Builder destroy(List<String> deletions) {
+        public Builder destroy(List<MailboxId> deletions) {
             destroy.addAll(deletions);
             return this;
         }
@@ -92,11 +93,11 @@ public class SetMailboxesRequest implements JmapRequest {
     }
 
     private final ImmutableMap<MailboxCreationId, MailboxCreateRequest> create;
-    private final ImmutableMap<String, MailboxUpdateRequest> update;
-    private final ImmutableList<String> destroy;
+    private final ImmutableMap<MailboxId, MailboxUpdateRequest> update;
+    private final ImmutableList<MailboxId> destroy;
 
     @VisibleForTesting
-    SetMailboxesRequest(ImmutableMap<MailboxCreationId, MailboxCreateRequest> create, ImmutableMap<String,MailboxUpdateRequest> update, ImmutableList<String> destroy) {
+    SetMailboxesRequest(ImmutableMap<MailboxCreationId, MailboxCreateRequest> create, ImmutableMap<MailboxId,MailboxUpdateRequest> update, ImmutableList<MailboxId> destroy) {
         this.create = create;
         this.update = update;
         this.destroy = destroy;
@@ -106,11 +107,11 @@ public class SetMailboxesRequest implements JmapRequest {
         return create;
     }
 
-    public ImmutableMap<String, MailboxUpdateRequest> getUpdate() {
+    public ImmutableMap<MailboxId,MailboxUpdateRequest> getUpdate() {
         return update;
     }
 
-    public ImmutableList<String> getDestroy() {
+    public ImmutableList<MailboxId> getDestroy() {
         return destroy;
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetMailboxesResponse.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetMailboxesResponse.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetMailboxesResponse.java
index 321aba9..eb1abf1 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetMailboxesResponse.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetMailboxesResponse.java
@@ -23,6 +23,7 @@ import java.util.Map;
 
 import org.apache.james.jmap.methods.Method;
 import org.apache.james.jmap.model.mailbox.Mailbox;
+import org.apache.james.mailbox.model.MailboxId;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Objects;
@@ -38,11 +39,11 @@ public class SetMailboxesResponse implements Method.Response {
     public static class Builder {
 
         private final ImmutableMap.Builder<MailboxCreationId, Mailbox> created;
-        private final ImmutableList.Builder<String> updated;
-        private final ImmutableList.Builder<String> destroyed;
+        private final ImmutableList.Builder<MailboxId> updated;
+        private final ImmutableList.Builder<MailboxId> destroyed;
         private final ImmutableMap.Builder<MailboxCreationId, SetError> notCreated;
-        private final ImmutableMap.Builder<String, SetError> notUpdated;
-        private final ImmutableMap.Builder<String, SetError> notDestroyed;
+        private final ImmutableMap.Builder<MailboxId, SetError> notUpdated;
+        private final ImmutableMap.Builder<MailboxId, SetError> notDestroyed;
 
         private Builder() {
             created = ImmutableMap.builder();
@@ -63,22 +64,22 @@ public class SetMailboxesResponse implements Method.Response {
             return this;
         }
 
-        public Builder updated(String mailboxId) {
+        public Builder updated(MailboxId mailboxId) {
             updated.add(mailboxId);
             return this;
         }
         
-        public Builder updated(List<String> mailboxIds) {
+        public Builder updated(List<MailboxId> mailboxIds) {
             updated.addAll(mailboxIds);
             return this;
         }
         
-        public Builder destroyed(String mailboxId) {
+        public Builder destroyed(MailboxId mailboxId) {
             destroyed.add(mailboxId);
             return this;
         }
         
-        public Builder destroyed(ImmutableList<String> destroyed) {
+        public Builder destroyed(ImmutableList<MailboxId> destroyed) {
             this.destroyed.addAll(destroyed);
             return this;
         }
@@ -93,22 +94,22 @@ public class SetMailboxesResponse implements Method.Response {
             return this;
         }
         
-        public Builder notUpdated(String mailboxId, SetError setError) {
+        public Builder notUpdated(MailboxId mailboxId, SetError setError) {
             notUpdated.put(mailboxId, setError);
             return this;
         }
         
-        public Builder notUpdated(Map<String, SetError> notUpdated) {
+        public Builder notUpdated(Map<MailboxId, SetError> notUpdated) {
             this.notUpdated.putAll(notUpdated);
             return this;
         }
 
-        public Builder notDestroyed(String mailboxId, SetError setError) {
+        public Builder notDestroyed(MailboxId mailboxId, SetError setError) {
             notDestroyed.put(mailboxId, setError);
             return this;
         }
 
-        public Builder notDestroyed(ImmutableMap<String, SetError> notDestroyed) {
+        public Builder notDestroyed(ImmutableMap<MailboxId, SetError> notDestroyed) {
             this.notDestroyed.putAll(notDestroyed);
             return this;
         }
@@ -119,15 +120,15 @@ public class SetMailboxesResponse implements Method.Response {
     }
 
     private final ImmutableMap<MailboxCreationId, Mailbox> created;
-    private final ImmutableList<String> updated;
-    private final ImmutableList<String> destroyed;
+    private final ImmutableList<MailboxId> updated;
+    private final ImmutableList<MailboxId> destroyed;
     private final ImmutableMap<MailboxCreationId, SetError> notCreated;
-    private final ImmutableMap<String, SetError> notUpdated;
-    private final ImmutableMap<String, SetError> notDestroyed;
+    private final ImmutableMap<MailboxId,SetError> notUpdated;
+    private final ImmutableMap<MailboxId,SetError> notDestroyed;
 
     @VisibleForTesting
-    SetMailboxesResponse(ImmutableMap<MailboxCreationId, Mailbox> created, ImmutableList<String> updated, ImmutableList<String> destroyed,
-            ImmutableMap<MailboxCreationId, SetError> notCreated, ImmutableMap<String, SetError> notUpdated, ImmutableMap<String, SetError> notDestroyed) {
+    SetMailboxesResponse(ImmutableMap<MailboxCreationId, Mailbox> created, ImmutableList<MailboxId> updated, ImmutableList<MailboxId> destroyed,
+            ImmutableMap<MailboxCreationId, SetError> notCreated, ImmutableMap<MailboxId, SetError> notUpdated, ImmutableMap<MailboxId, SetError> notDestroyed) {
         this.created = created;
         this.updated = updated;
         this.destroyed = destroyed;
@@ -140,11 +141,11 @@ public class SetMailboxesResponse implements Method.Response {
         return created;
     }
 
-    public ImmutableList<String> getUpdated() {
+    public ImmutableList<MailboxId> getUpdated() {
         return updated;
     }
 
-    public ImmutableList<String> getDestroyed() {
+    public ImmutableList<MailboxId> getDestroyed() {
         return destroyed;
     }
     
@@ -152,11 +153,11 @@ public class SetMailboxesResponse implements Method.Response {
         return notCreated;
     }
 
-    public ImmutableMap<String, SetError> getNotUpdated() {
+    public ImmutableMap<MailboxId,SetError> getNotUpdated() {
         return notUpdated;
     }
     
-    public ImmutableMap<String, SetError> getNotDestroyed() {
+    public ImmutableMap<MailboxId,SetError> getNotDestroyed() {
         return notDestroyed;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/Mailbox.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/Mailbox.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/Mailbox.java
index 52436c4..cddb101 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/Mailbox.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/Mailbox.java
@@ -23,6 +23,7 @@ import java.util.Objects;
 import java.util.Optional;
 
 import org.apache.james.jmap.methods.JmapResponseWriterImpl;
+import org.apache.james.mailbox.model.MailboxId;
 
 import com.fasterxml.jackson.annotation.JsonFilter;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@@ -43,9 +44,9 @@ public class Mailbox {
     @JsonPOJOBuilder(withPrefix = "")
     public static class Builder {
 
-        private String id;
+        private MailboxId id;
         private String name;
-        private Optional<String> parentId;
+        private Optional<MailboxId> parentId;
         private Optional<Role> role;
         private SortOrder sortOrder;
         private boolean mustBeOnlyMailbox;
@@ -64,7 +65,7 @@ public class Mailbox {
             parentId = Optional.empty();
         }
 
-        public Builder id(String id) {
+        public Builder id(MailboxId id) {
             Preconditions.checkNotNull(id);
             this.id = id;
             return this;
@@ -76,7 +77,7 @@ public class Mailbox {
             return this;
         }
 
-        public Builder parentId(String parentId) {
+        public Builder parentId(MailboxId parentId) {
             this.parentId = Optional.ofNullable(parentId);
             return this;
         }
@@ -148,16 +149,16 @@ public class Mailbox {
 
         public Mailbox build() {
             Preconditions.checkState(!Strings.isNullOrEmpty(name), "'name' is mandatory");
-            Preconditions.checkState(!Strings.isNullOrEmpty(id), "'id' is mandatory");
+            Preconditions.checkState(id != null, "'id' is mandatory");
 
             return new Mailbox(id, name, parentId, role, sortOrder, mustBeOnlyMailbox, mayReadItems, mayAddItems, mayRemoveItems, mayCreateChild, mayRename, mayDelete,
                     totalMessages, unreadMessages, totalThreads, unreadThreads);
         }
     }
 
-    private final String id;
+    private final MailboxId id;
     private final String name;
-    private final Optional<String> parentId;
+    private final Optional<MailboxId> parentId;
     private final Optional<Role> role;
     private final SortOrder sortOrder;
     private final boolean mustBeOnlyMailbox;
@@ -172,7 +173,7 @@ public class Mailbox {
     private final long totalThreads;
     private final long unreadThreads;
 
-    @VisibleForTesting Mailbox(String id, String name, Optional<String> parentId, Optional<Role> role, SortOrder sortOrder, boolean mustBeOnlyMailbox,
+    @VisibleForTesting Mailbox(MailboxId id, String name, Optional<MailboxId> parentId, Optional<Role> role, SortOrder sortOrder, boolean mustBeOnlyMailbox,
             boolean mayReadItems, boolean mayAddItems, boolean mayRemoveItems, boolean mayCreateChild, boolean mayRename, boolean mayDelete,
             long totalMessages, long unreadMessages, long totalThreads, long unreadThreads) {
 
@@ -194,7 +195,7 @@ public class Mailbox {
         this.unreadThreads = unreadThreads;
     }
 
-    public String getId() {
+    public MailboxId getId() {
         return id;
     }
 
@@ -202,7 +203,7 @@ public class Mailbox {
         return name;
     }
 
-    public Optional<String> getParentId() {
+    public Optional<MailboxId> getParentId() {
         return parentId;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/MailboxCreateRequest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/MailboxCreateRequest.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/MailboxCreateRequest.java
index cd1c89f..c0eb828 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/MailboxCreateRequest.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/MailboxCreateRequest.java
@@ -23,6 +23,7 @@ import java.util.Objects;
 import java.util.Optional;
 
 import org.apache.commons.lang.NotImplementedException;
+import org.apache.james.jmap.model.MailboxCreationId;
 
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
@@ -43,7 +44,7 @@ public class MailboxCreateRequest {
 
         private Optional<String> id;
         private String name;
-        private Optional<String> parentId;
+        private Optional<MailboxCreationId> parentId;
         private Optional<Role> role;
         private Optional<SortOrder> sortOrder;
 
@@ -66,7 +67,7 @@ public class MailboxCreateRequest {
             return this;
         }
 
-        public Builder parentId(String parentId) {
+        public Builder parentId(MailboxCreationId parentId) {
             Preconditions.checkNotNull(parentId);
             this.parentId = Optional.of(parentId);
             return this;
@@ -91,12 +92,12 @@ public class MailboxCreateRequest {
 
     private final Optional<String> id;
     private final String name;
-    private final Optional<String> parentId;
+    private final Optional<MailboxCreationId> parentId;
     private final Optional<Role> role;
     private final Optional<SortOrder> sortOrder;
 
     @VisibleForTesting
-    MailboxCreateRequest(Optional<String> id, String name, Optional<String> parentId, Optional<Role> role, Optional<SortOrder> sortOrder) {
+    MailboxCreateRequest(Optional<String> id, String name, Optional<MailboxCreationId> parentId, Optional<Role> role, Optional<SortOrder> sortOrder) {
 
         this.id = id;
         this.name = name;
@@ -113,7 +114,7 @@ public class MailboxCreateRequest {
         return name;
     }
 
-    public Optional<String> getParentId() {
+    public Optional<MailboxCreationId> getParentId() {
         return parentId;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/MailboxUpdateRequest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/MailboxUpdateRequest.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/MailboxUpdateRequest.java
index ebffb49..65af555 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/MailboxUpdateRequest.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/MailboxUpdateRequest.java
@@ -24,6 +24,7 @@ import java.util.Optional;
 
 import org.apache.commons.lang.NotImplementedException;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.MailboxId;
 
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
@@ -42,7 +43,7 @@ public class MailboxUpdateRequest {
     public static class Builder {
 
         private Optional<String> name;
-        private Optional<String> parentId;
+        private Optional<MailboxId> parentId;
         private Optional<Role> role;
         private Optional<SortOrder> sortOrder;
 
@@ -60,7 +61,7 @@ public class MailboxUpdateRequest {
             return this;
         }
 
-        public Builder parentId(String parentId) {
+        public Builder parentId(MailboxId parentId) {
             if (parentId == null) {
                 this.parentId = null;
             } else {
@@ -86,12 +87,12 @@ public class MailboxUpdateRequest {
     }
 
     private final Optional<String> name;
-    private final Optional<String> parentId;
+    private final Optional<MailboxId> parentId;
     private final Optional<Role> role;
     private final Optional<SortOrder> sortOrder;
 
     @VisibleForTesting
-    MailboxUpdateRequest(Optional<String> name, Optional<String> parentId, Optional<Role> role, Optional<SortOrder> sortOrder) {
+    MailboxUpdateRequest(Optional<String> name, Optional<MailboxId> parentId, Optional<Role> role, Optional<SortOrder> sortOrder) {
 
         this.name = name;
         this.parentId = parentId;
@@ -103,7 +104,7 @@ public class MailboxUpdateRequest {
         return name;
     }
 
-    public Optional<String> getParentId() {
+    public Optional<MailboxId> getParentId() {
         return parentId;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/MailboxUtils.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/MailboxUtils.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/MailboxUtils.java
index 6197c9c..3584420 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/MailboxUtils.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/MailboxUtils.java
@@ -41,7 +41,6 @@ import com.github.fge.lambdas.Throwing;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Splitter;
-import com.google.common.base.Strings;
 
 public class MailboxUtils {
 
@@ -65,9 +64,9 @@ public class MailboxUtils {
             MessageManager mailbox = mailboxManager.getMailbox(mailboxPath, mailboxSession);
             MessageManager.MetaData mailboxMetaData = getMailboxMetaData(mailbox, mailboxSession);
             return Optional.ofNullable(Mailbox.builder()
-                    .id(mailbox.getId().serialize())
+                    .id(mailbox.getId())
                     .name(getName(mailboxPath, mailboxSession))
-                    .parentId(getParentIdFromMailboxPath(mailboxPath, mailboxSession).map(MailboxId::serialize).orElse(null))
+                    .parentId(getParentIdFromMailboxPath(mailboxPath, mailboxSession).orElse(null))
                     .role(role)
                     .unreadMessages(mailboxMetaData.getUnseenCount())
                     .totalMessages(mailboxMetaData.getMessageCount())
@@ -97,16 +96,16 @@ public class MailboxUtils {
         return name;
     }
 
-    public Optional<String> getMailboxNameFromId(String mailboxId, MailboxSession mailboxSession) throws MailboxException {
+    public Optional<String> getMailboxNameFromId(MailboxId mailboxId, MailboxSession mailboxSession) throws MailboxException {
         return getMailboxFromId(mailboxId, mailboxSession)
                 .map(org.apache.james.mailbox.store.mail.model.Mailbox::getName);
     }
 
-    private Optional<org.apache.james.mailbox.store.mail.model.Mailbox> getMailboxFromId(String mailboxId, MailboxSession mailboxSession) throws MailboxException {
+    private Optional<org.apache.james.mailbox.store.mail.model.Mailbox> getMailboxFromId(MailboxId mailboxId, MailboxSession mailboxSession) throws MailboxException {
         return mailboxMapperFactory.getMailboxMapper(mailboxSession)
                 .findMailboxWithPathLike(new MailboxPath(mailboxSession.getPersonalSpace(), mailboxSession.getUser().getUserName(), WILDCARD))
                 .stream()
-                .filter(mailbox -> mailbox.getMailboxId().serialize().equals(mailboxId))
+                .filter(mailbox -> mailbox.getMailboxId().equals(mailboxId))
                 .findFirst();
     }
 
@@ -119,7 +118,7 @@ public class MailboxUtils {
         return Optional.of(getMailboxId(parent, mailboxSession));
     }
 
-    public Optional<Mailbox> mailboxFromMailboxId(String mailboxId, MailboxSession mailboxSession) {
+    public Optional<Mailbox> mailboxFromMailboxId(MailboxId mailboxId, MailboxSession mailboxSession) {
         try {
             return getMailboxFromId(mailboxId, mailboxSession)
                 .flatMap(jamesMailbox ->
@@ -143,15 +142,15 @@ public class MailboxUtils {
         return mailbox.getName();
     }
 
-    public boolean hasChildren(String mailboxId, MailboxSession mailboxSession) throws MailboxException {
+    public boolean hasChildren(MailboxId mailboxId, MailboxSession mailboxSession) throws MailboxException {
         return getMailboxFromId(mailboxId, mailboxSession)
                 .map(Throwing.function(mailbox -> 
                     mailboxMapperFactory.getMailboxMapper(mailboxSession).hasChildren(mailbox, mailboxSession.getPathDelimiter())))
                 .orElse(false);
     }
 
-    public Optional<MailboxPath> mailboxPathFromMailboxId(String mailboxId, MailboxSession mailboxSession) {
-        Preconditions.checkState(!Strings.isNullOrEmpty(mailboxId), "'mailboxId' is mandatory");
+    public Optional<MailboxPath> mailboxPathFromMailboxId(MailboxId mailboxId, MailboxSession mailboxSession) {
+        Preconditions.checkState(mailboxId != null, "'mailboxId' is mandatory");
         Preconditions.checkState(mailboxSession != null, "'mailboxId' is mandatory");
         return mailboxFromMailboxId(mailboxId, mailboxSession)
                 .map(mailbox -> getMailboxPath(mailbox, mailboxSession));

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ParsingWritingObjects.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ParsingWritingObjects.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ParsingWritingObjects.java
index 7723d8a..b2209a2 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ParsingWritingObjects.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ParsingWritingObjects.java
@@ -27,6 +27,8 @@ import org.apache.james.jmap.model.Emailer;
 import org.apache.james.jmap.model.Message;
 import org.apache.james.jmap.model.MessageId;
 import org.apache.james.jmap.model.SubMessage;
+import org.apache.james.mailbox.inmemory.InMemoryId;
+import org.apache.james.mailbox.model.MailboxId;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -37,7 +39,7 @@ public interface ParsingWritingObjects {
         MessageId MESSAGE_ID = MessageId.of("username|mailbox|1");
         BlobId BLOB_ID = BlobId.of("myBlobId");
         String THREAD_ID = "myThreadId";
-        ImmutableList<String> MAILBOX_IDS = ImmutableList.of("mailboxId1", "mailboxId2");
+        ImmutableList<MailboxId> MAILBOX_IDS = ImmutableList.of(InMemoryId.of(1), InMemoryId.of(2));
         String IN_REPLY_TO_MESSAGE_ID = "myInReplyToMessageId";
         boolean IS_UNREAD = true;
         boolean IS_FLAGGED = true;

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ParsingWritingObjectsTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ParsingWritingObjectsTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ParsingWritingObjectsTest.java
index b001060..583f560 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ParsingWritingObjectsTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ParsingWritingObjectsTest.java
@@ -31,18 +31,26 @@ import org.apache.james.jmap.methods.JmapResponseWriterImpl;
 import org.apache.james.jmap.model.Message;
 import org.apache.james.jmap.model.SubMessage;
 import org.apache.james.mailbox.inmemory.InMemoryId;
+import org.junit.Before;
 import org.junit.Test;
 
 import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
 import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
 
 public class ParsingWritingObjectsTest {
+    
+    private ObjectMapperFactory testee;
+
+    @Before
+    public void setup() {
+        testee = new ObjectMapperFactory(new InMemoryId.Factory());
+    }
 
     @Test
     public void parsingJsonShouldWorkOnSubMessage() throws Exception {
         SubMessage expected = SUB_MESSAGE;
 
-        SubMessage subMessage = new ObjectMapperFactory(new InMemoryId.Factory()).forParsing()
+        SubMessage subMessage = testee.forParsing()
             .readValue(IOUtils.toString(ClassLoader.getSystemResource("json/subMessage.json")), SubMessage.class);
 
         assertThat(subMessage).isEqualToComparingFieldByField(expected);
@@ -52,7 +60,7 @@ public class ParsingWritingObjectsTest {
     public void writingJsonShouldWorkOnSubMessage() throws Exception {
         String expected = IOUtils.toString(ClassLoader.getSystemResource("json/subMessage.json"));
 
-        String json = new ObjectMapperFactory(new InMemoryId.Factory()).forWriting()
+        String json = testee.forWriting()
                 .writeValueAsString(SUB_MESSAGE);
 
         assertThatJson(json)
@@ -65,7 +73,7 @@ public class ParsingWritingObjectsTest {
     public void parsingJsonShouldWorkOnMessage() throws Exception {
         Message expected = MESSAGE;
 
-        Message message = new ObjectMapperFactory(new InMemoryId.Factory()).forParsing()
+        Message message = testee.forParsing()
             .readValue(IOUtils.toString(ClassLoader.getSystemResource("json/message.json")), Message.class);
 
         assertThat(message).isEqualToComparingFieldByField(expected);
@@ -79,7 +87,7 @@ public class ParsingWritingObjectsTest {
                 .addFilter(JmapResponseWriterImpl.PROPERTIES_FILTER, SimpleBeanPropertyFilter.serializeAll())
                 .addFilter(GetMessagesMethod.HEADERS_FILTER, SimpleBeanPropertyFilter.serializeAll());
 
-        String json = new ObjectMapperFactory(new InMemoryId.Factory()).forWriting()
+        String json = testee.forWriting()
                 .setFilterProvider(filterProvider)
                 .writeValueAsString(MESSAGE);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
index a8af679..e321085 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
@@ -46,6 +46,7 @@ import org.apache.james.mailbox.acl.MailboxACLResolver;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.MockAuthenticator;
@@ -149,7 +150,7 @@ public class GetMailboxesMethodTest {
                 .extracting(GetMailboxesResponse.class::cast)
                 .flatExtracting(GetMailboxesResponse::getList)
                 .extracting(Mailbox::getId, Mailbox::getName, Mailbox::getUnreadMessages)
-                .containsOnly(Tuple.tuple("1", mailboxPath.getName(), 2L));
+                .containsOnly(Tuple.tuple(InMemoryId.of(1), mailboxPath.getName(), 2L));
     }
 
     @Test
@@ -173,7 +174,7 @@ public class GetMailboxesMethodTest {
                 .extracting(GetMailboxesResponse.class::cast)
                 .flatExtracting(GetMailboxesResponse::getList)
                 .extracting(Mailbox::getId, Mailbox::getName)
-                .containsOnly(Tuple.tuple("1", mailboxPathToReturn.getName()));
+                .containsOnly(Tuple.tuple(InMemoryId.of(1), mailboxPathToReturn.getName()));
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/JmapRequestParserImplTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/JmapRequestParserImplTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/JmapRequestParserImplTest.java
index 879de19..0a04016 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/JmapRequestParserImplTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/JmapRequestParserImplTest.java
@@ -30,20 +30,20 @@ import com.fasterxml.jackson.databind.node.JsonNodeFactory;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
 public class JmapRequestParserImplTest {
-    private JmapRequestParserImpl jmapRequestParserImpl;
+    private JmapRequestParserImpl testee;
 
     @Before
     public void setup() {
-        jmapRequestParserImpl = new JmapRequestParserImpl(new ObjectMapperFactory(new InMemoryId.Factory()));
+        testee = new JmapRequestParserImpl(new ObjectMapperFactory(new InMemoryId.Factory()));
     }
-
+    
     @Test(expected=IllegalArgumentException.class)
     public void extractJmapRequestShouldThrowWhenNullRequestClass() throws Exception {
         JsonNode[] nodes = new JsonNode[] { new ObjectNode(new JsonNodeFactory(false)).textNode("unknwonMethod"),
                 new ObjectNode(new JsonNodeFactory(false)).putObject("{\"id\": \"id\"}"),
                 new ObjectNode(new JsonNodeFactory(false)).textNode("#1")} ;
 
-        jmapRequestParserImpl.extractJmapRequest(ProtocolRequest.deserialize(nodes), null);
+        testee.extractJmapRequest(ProtocolRequest.deserialize(nodes), null);
     }
 
     @Test
@@ -54,7 +54,7 @@ public class JmapRequestParserImplTest {
                 parameters,
                 new ObjectNode(new JsonNodeFactory(false)).textNode("#1")} ;
 
-        jmapRequestParserImpl.extractJmapRequest(ProtocolRequest.deserialize(nodes), RequestClass.class);
+        testee.extractJmapRequest(ProtocolRequest.deserialize(nodes), RequestClass.class);
     }
 
     @Test
@@ -64,7 +64,7 @@ public class JmapRequestParserImplTest {
                 parameters,
                 new ObjectNode(new JsonNodeFactory(false)).textNode("#1")} ;
 
-        jmapRequestParserImpl.extractJmapRequest(ProtocolRequest.deserialize(nodes), RequestClass.class);
+        testee.extractJmapRequest(ProtocolRequest.deserialize(nodes), RequestClass.class);
     }
 
     private static class RequestClass implements JmapRequest {

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/JmapResponseWriterImplTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/JmapResponseWriterImplTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/JmapResponseWriterImplTest.java
index b943a9a..48cc643 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/JmapResponseWriterImplTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/JmapResponseWriterImplTest.java
@@ -46,11 +46,11 @@ import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 
 public class JmapResponseWriterImplTest {
-    private JmapResponseWriterImpl jmapResponseWriterImpl;
+    private JmapResponseWriterImpl testee;
 
     @Before
     public void setup() {
-        jmapResponseWriterImpl = new JmapResponseWriterImpl(new ObjectMapperFactory(new InMemoryId.Factory()));
+        testee = new JmapResponseWriterImpl(new ObjectMapperFactory(new InMemoryId.Factory()));
     }
 
     @Ignore
@@ -60,7 +60,7 @@ public class JmapResponseWriterImplTest {
         String expectedClientId = "#1";
         String expectedId = "myId";
 
-        Stream<ProtocolResponse> response = jmapResponseWriterImpl.formatMethodResponse(Stream.of(JmapResponse
+        Stream<ProtocolResponse> response = testee.formatMethodResponse(Stream.of(JmapResponse
                 .builder()
                 .clientId(ClientId.of(expectedClientId))
                 .response(null)
@@ -80,7 +80,7 @@ public class JmapResponseWriterImplTest {
         ResponseClass responseClass = new ResponseClass();
         responseClass.id = expectedId;
 
-        List<ProtocolResponse> response = jmapResponseWriterImpl.formatMethodResponse(
+        List<ProtocolResponse> response = testee.formatMethodResponse(
                 Stream.of(JmapResponse
                 .builder()
                 .responseName(Method.Response.name("unknownMethod"))
@@ -107,7 +107,7 @@ public class JmapResponseWriterImplTest {
         responseClass.list = ImmutableList.of(new ObjectResponseClass.Foo("id", "name"));
         Property property = () -> "id";
 
-        List<ProtocolResponse> response = jmapResponseWriterImpl.formatMethodResponse(
+        List<ProtocolResponse> response = testee.formatMethodResponse(
                 Stream.of(JmapResponse
                 .builder()
                 .responseName(Method.Response.name("unknownMethod"))
@@ -132,7 +132,7 @@ public class JmapResponseWriterImplTest {
         Property property = () -> "id";
 
         @SuppressWarnings("unused")
-        Stream<ProtocolResponse> ignoredResponse = jmapResponseWriterImpl.formatMethodResponse(
+        Stream<ProtocolResponse> ignoredResponse = testee.formatMethodResponse(
                 Stream.of(JmapResponse
                         .builder()
                         .responseName(Method.Response.name("unknownMethod"))
@@ -141,7 +141,7 @@ public class JmapResponseWriterImplTest {
                         .response(responseClass)
                         .build()));
 
-        List<ProtocolResponse> response = jmapResponseWriterImpl.formatMethodResponse(
+        List<ProtocolResponse> response = testee.formatMethodResponse(
                 Stream.of(JmapResponse
                 .builder()
                 .responseName(Method.Response.name("unknownMethod"))
@@ -163,7 +163,7 @@ public class JmapResponseWriterImplTest {
         Property idProperty = () -> "id";
         Property nameProperty = () -> "name";
 
-        List<ProtocolResponse> response = jmapResponseWriterImpl.formatMethodResponse(
+        List<ProtocolResponse> response = testee.formatMethodResponse(
                 Stream.of(JmapResponse
                             .builder()
                             .responseName(Method.Response.name("unknownMethod"))
@@ -212,7 +212,7 @@ public class JmapResponseWriterImplTest {
                 parameters,
                 new ObjectNode(new JsonNodeFactory(false)).textNode(expectedClientId)} ;
 
-        List<ProtocolResponse> response = jmapResponseWriterImpl.formatMethodResponse(
+        List<ProtocolResponse> response = testee.formatMethodResponse(
                 Stream.of(JmapResponse
                     .builder()
                     .clientId(ProtocolRequest.deserialize(nodes).getClientId())
@@ -235,7 +235,7 @@ public class JmapResponseWriterImplTest {
                 parameters,
                 new ObjectNode(new JsonNodeFactory(false)).textNode(expectedClientId)} ;
 
-        List<ProtocolResponse> response = jmapResponseWriterImpl.formatMethodResponse(
+        List<ProtocolResponse> response = testee.formatMethodResponse(
                 Stream.of(JmapResponse
                     .builder()
                     .clientId(ProtocolRequest.deserialize(nodes).getClientId())

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessorTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessorTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessorTest.java
index d90bd63..f8f67bc 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessorTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessorTest.java
@@ -32,30 +32,36 @@ import org.apache.james.jmap.utils.MailboxUtils;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.inmemory.InMemoryId;
+import org.apache.james.mailbox.inmemory.InMemoryId.Factory;
+import org.apache.james.mailbox.model.MailboxId;
 import org.junit.Before;
 import org.junit.Test;
 
 public class SetMailboxesCreationProcessorTest {
 
     private MailboxUtils mailboxUtils;
+    private Factory mailboxIdFactory;
     private SetMailboxesCreationProcessor sut;
 
     @Before
     public void setup() {
         mailboxUtils = mock(MailboxUtils.class);
-        sut = new SetMailboxesCreationProcessor(mock(MailboxManager.class), mailboxUtils);
+        mailboxIdFactory = new InMemoryId.Factory();
+        sut = new SetMailboxesCreationProcessor(mock(MailboxManager.class), mailboxUtils, mailboxIdFactory);
     }
 
     @Test
     public void processShouldReturnNotCreatedWhenMailboxExceptionOccured() throws Exception {
-        String parentId = "parentId";
+        MailboxCreationId parentId = MailboxCreationId.of("0");
+        MailboxId parentMailboxId = mailboxIdFactory.fromString(parentId.getCreationId());
         MailboxCreationId mailboxCreationId = MailboxCreationId.of("1");
         SetMailboxesRequest request = SetMailboxesRequest.builder()
                 .create(mailboxCreationId, MailboxCreateRequest.builder().name("name").parentId(parentId).build())
                 .build();
 
         MailboxSession mailboxSession = mock(MailboxSession.class);
-        when(mailboxUtils.getMailboxNameFromId(parentId, mailboxSession))
+        when(mailboxUtils.getMailboxNameFromId(parentMailboxId, mailboxSession))
             .thenThrow(new MailboxException());
 
         SetMailboxesResponse setMailboxesResponse = sut.process(request, mailboxSession);

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMailboxesMethodTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMailboxesMethodTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMailboxesMethodTest.java
index 831b70c..6be6dc8 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMailboxesMethodTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMailboxesMethodTest.java
@@ -34,6 +34,8 @@ import org.apache.james.jmap.model.SetMailboxesResponse;
 import org.apache.james.jmap.model.mailbox.Mailbox;
 import org.apache.james.jmap.model.mailbox.MailboxCreateRequest;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.inmemory.InMemoryId;
+import org.apache.james.mailbox.model.MailboxId;
 import org.junit.Test;
 
 import com.google.common.collect.ImmutableList;
@@ -92,7 +94,7 @@ public class SetMailboxesMethodTest {
         MailboxCreateRequest fooFolder = MailboxCreateRequest.builder().name("fooFolder").build();
         SetMailboxesRequest creationRequest = SetMailboxesRequest.builder().create(creationId, fooFolder).build();
 
-        Mailbox createdfooFolder = Mailbox.builder().name("fooFolder").id("fooId").build();
+        Mailbox createdfooFolder = Mailbox.builder().name("fooFolder").id(InMemoryId.of(123)).build();
         SetMailboxesResponse creationResponse = SetMailboxesResponse.builder().created(creationId, createdfooFolder).build();
         JmapResponse jmapResponse = JmapResponse.builder()
             .response(creationResponse)
@@ -113,7 +115,7 @@ public class SetMailboxesMethodTest {
 
     @Test
     public void processShouldCallDestructorProcessorWhenCreationRequest() {
-        ImmutableList<String> deletions = ImmutableList.of("1");
+        ImmutableList<MailboxId> deletions = ImmutableList.of(InMemoryId.of(1));
         SetMailboxesRequest destructionRequest = SetMailboxesRequest.builder().destroy(deletions).build();
 
         SetMailboxesResponse destructionResponse = SetMailboxesResponse.builder().destroyed(deletions).build();

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessorTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessorTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessorTest.java
index 204365f..0fdc0a5 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessorTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMailboxesUpdateProcessorTest.java
@@ -34,6 +34,7 @@ import org.apache.james.jmap.utils.MailboxUtils;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.junit.Before;
 import org.junit.Test;
@@ -56,8 +57,8 @@ public class SetMailboxesUpdateProcessorTest {
     @Test
     public void processShouldReturnNotUpdatedWhenMailboxExceptionOccured() throws Exception {
         // Given
-        String mailboxId = "1";
-        String newParentId = "newParentId";
+        InMemoryId mailboxId = InMemoryId.of(1);
+        InMemoryId newParentId = InMemoryId.of(2);
         MailboxPath newParentMailboxPath = new MailboxPath("#private", "user", "newParentName");
         SetMailboxesRequest request = SetMailboxesRequest.builder()
                 .update(mailboxId, MailboxUpdateRequest.builder().parentId(newParentId).build())

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMessagesCreationProcessorTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMessagesCreationProcessorTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMessagesCreationProcessorTest.java
index 79bc2f0..e65a3c6 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMessagesCreationProcessorTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetMessagesCreationProcessorTest.java
@@ -61,11 +61,11 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.exception.AttachmentNotFoundException;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.mailbox.model.AttachmentId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
-import org.apache.james.mailbox.store.TestId;
 import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.MessageMapper;
 import org.apache.mailet.Mail;
@@ -80,9 +80,9 @@ public class SetMessagesCreationProcessorTest {
     
     private static final String USER = "user@example.com";
     private static final String OUTBOX = "outbox";
-    private static final TestId OUTBOX_ID = TestId.of(12345);
+    private static final InMemoryId OUTBOX_ID = InMemoryId.of(12345);
     private static final String DRAFTS = "drafts";
-    private static final TestId DRAFTS_ID = TestId.of(12);
+    private static final InMemoryId DRAFTS_ID = InMemoryId.of(12);
     private static final String NAMESPACE = "#private";
 
     private final CreationMessage.Builder creationMessageBuilder = CreationMessage.builder()


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