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:43:57 UTC

[01/10] james-project git commit: JAMES-1818 Introduce mailboxId serializer/deserializer

Repository: james-project
Updated Branches:
  refs/heads/master 4a2550182 -> 47cfda6cc


JAMES-1818 Introduce mailboxId serializer/deserializer


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

Branch: refs/heads/master
Commit: 460b650cf702a78d816865a34c72d9088dd03f12
Parents: 4a25501
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Tue Aug 30 11:05:37 2016 +0200
Committer: Raphael Ouazana <ra...@linagora.com>
Committed: Mon Sep 5 14:41:59 2016 +0200

----------------------------------------------------------------------
 .../james/jmap/json/ObjectMapperFactory.java    |  74 +++++++++++-
 .../jmap/json/ObjectMapperFactoryTest.java      | 117 +++++++++++++++++++
 .../jmap/json/ParsingWritingObjectsTest.java    |   9 +-
 .../jmap/methods/JmapRequestParserImplTest.java |  11 +-
 .../methods/JmapResponseWriterImplTest.java     |  16 +--
 .../james/jmap/methods/RequestHandlerTest.java  |   6 +-
 .../org/apache/james/jmap/model/FilterTest.java |   3 +-
 7 files changed, 215 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/460b650c/server/protocols/jmap/src/main/java/org/apache/james/jmap/json/ObjectMapperFactory.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/json/ObjectMapperFactory.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/json/ObjectMapperFactory.java
index 29b5471..79742f4 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/json/ObjectMapperFactory.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/json/ObjectMapperFactory.java
@@ -19,12 +19,26 @@
 
 package org.apache.james.jmap.json;
 
+import java.io.IOException;
 import java.util.Set;
 
+import javax.inject.Inject;
+
+import org.apache.james.mailbox.model.MailboxId;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationContext;
 import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.KeyDeserializer;
 import com.fasterxml.jackson.databind.Module;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.module.SimpleModule;
 import com.fasterxml.jackson.datatype.guava.GuavaModule;
 import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
 import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
@@ -32,17 +46,71 @@ import com.google.common.collect.ImmutableSet;
 
 public class ObjectMapperFactory {
 
-    private static final Set<Module> JACKSON_MODULES = ImmutableSet.of(new Jdk8Module(), new JavaTimeModule(), new GuavaModule());
+    private static final ImmutableSet.Builder<Module> JACKSON_BASE_MODULES = ImmutableSet.<Module>builder().add(new Jdk8Module(), new JavaTimeModule(), new GuavaModule());
+    private final Set<Module> jacksonModules;
+    
+    @Inject
+    public ObjectMapperFactory(MailboxId.Factory mailboxIdFactory) {
+        SimpleModule mailboxIdModule = new SimpleModule();
+        mailboxIdModule.addDeserializer(MailboxId.class, new MailboxIdDeserializer(mailboxIdFactory));
+        mailboxIdModule.addSerializer(MailboxId.class, new MailboxIdSerializer());
+        mailboxIdModule.addKeyDeserializer(MailboxId.class, new MailboxIdKeyDeserializer(mailboxIdFactory));
+        mailboxIdModule.addKeySerializer(MailboxId.class, new MailboxIdKeySerializer());
+        jacksonModules = JACKSON_BASE_MODULES.add(mailboxIdModule).build();
+    }
 
     public ObjectMapper forParsing() {
         return new ObjectMapper()
-                .registerModules(JACKSON_MODULES)
+                .registerModules(jacksonModules)
                 .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
     }
 
     public ObjectMapper forWriting() {
         return new ObjectMapper()
-                .registerModules(JACKSON_MODULES)
+                .registerModules(jacksonModules)
                 .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
     }
+
+    public static class MailboxIdDeserializer extends JsonDeserializer<MailboxId> {
+        private MailboxId.Factory factory;
+
+        public MailboxIdDeserializer(MailboxId.Factory factory) {
+            this.factory = factory;
+        }
+
+        @Override
+        public MailboxId deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
+            return factory.fromString(p.getValueAsString());
+        }
+    }
+
+    public static class MailboxIdSerializer extends JsonSerializer<MailboxId> {
+
+        @Override
+        public void serialize(MailboxId value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {
+            gen.writeString(value.serialize());
+        }
+    }
+
+    public static class MailboxIdKeyDeserializer extends KeyDeserializer {
+        private MailboxId.Factory factory;
+
+        public MailboxIdKeyDeserializer(MailboxId.Factory factory) {
+            this.factory = factory;
+        }
+
+        @Override
+        public Object deserializeKey(String key, DeserializationContext ctxt) throws IOException, JsonProcessingException {
+            return factory.fromString(key);
+        }
+    }
+
+    public static class MailboxIdKeySerializer extends JsonSerializer<MailboxId> {
+
+        @Override
+        public void serialize(MailboxId value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {
+            gen.writeFieldName(value.serialize());
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/460b650c/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ObjectMapperFactoryTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ObjectMapperFactoryTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ObjectMapperFactoryTest.java
new file mode 100644
index 0000000..8e3a635
--- /dev/null
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ObjectMapperFactoryTest.java
@@ -0,0 +1,117 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.jmap.json;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.Map;
+
+import org.apache.james.mailbox.inmemory.InMemoryId;
+import org.apache.james.mailbox.model.MailboxId;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableMap;
+
+public class ObjectMapperFactoryTest {
+    
+    private ObjectMapperFactory testee;
+
+    @Before
+    public void setup() {
+        testee = new ObjectMapperFactory(new InMemoryId.Factory());
+    }
+
+    @Test
+    public void mailboxIdShouldBeDeserializable() throws Exception {
+        String json = "{ \"mailboxId\": \"123\"}";
+        MailboxIdTestContainer expected = new MailboxIdTestContainer(InMemoryId.of(123));
+        MailboxIdTestContainer actual = testee.forParsing().readValue(json, MailboxIdTestContainer.class);
+        assertThat(actual).isEqualToComparingFieldByField(expected);
+    }
+
+    @Test
+    public void mailboxIdShouldBeSerializable() throws Exception {
+        MailboxIdTestContainer container = new MailboxIdTestContainer(InMemoryId.of(123));
+        String expectedJson = "{\"mailboxId\":\"123\"}";
+        String actual = testee.forWriting().writeValueAsString(container);
+        assertThat(actual).isEqualTo(expectedJson);
+    }
+
+    @Test
+    public void mailboxIdShouldBeDeserializableWhenKey() throws Exception {
+        String json = "{ \"map\": {\"123\": \"value\"}}";
+        MailboxIdKeyTestContainer expected = new MailboxIdKeyTestContainer(ImmutableMap.of(InMemoryId.of(123), "value"));
+        MailboxIdKeyTestContainer actual = testee.forParsing().readValue(json, MailboxIdKeyTestContainer.class);
+        assertThat(actual).isEqualToComparingFieldByField(expected);
+    }
+
+    @Test
+    public void mailboxIdShouldBeSerializableWhenKeyWithoutToString() throws Exception {
+        ObjectMapperFactory testeeWithoutToString = new ObjectMapperFactory(new KeyWithoutToString.Factory());
+        MailboxIdKeyTestContainer container = new MailboxIdKeyTestContainer(ImmutableMap.of(new KeyWithoutToString("key"), "value"));
+        String expectedJson = "{\"map\":{\"key\":\"value\"}}";
+        String actual = testeeWithoutToString.forWriting().writeValueAsString(container);
+        assertThat(actual).isEqualTo(expectedJson);
+    }
+
+    public static class MailboxIdTestContainer {
+        public MailboxId mailboxId;
+
+        public MailboxIdTestContainer() {
+        }
+
+        public MailboxIdTestContainer(MailboxId mailboxId) {
+            this.mailboxId = mailboxId;
+        }
+    }
+
+    public static class MailboxIdKeyTestContainer {
+        public Map<MailboxId, String> map;
+
+        public MailboxIdKeyTestContainer() {
+        }
+
+        public MailboxIdKeyTestContainer(Map<MailboxId, String> map) {
+            this.map = map;
+        }
+    }
+
+    public static class KeyWithoutToString implements MailboxId {
+        private String value;
+
+        public KeyWithoutToString(String value) {
+            this.value = value;
+        }
+
+        @Override
+        public String serialize() {
+            return value;
+        }
+
+        public static class Factory implements MailboxId.Factory {
+
+            @Override
+            public MailboxId fromString(String serialized) {
+                return new KeyWithoutToString(serialized);
+            }
+            
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/460b650c/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 0106d71..b001060 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
@@ -30,6 +30,7 @@ import org.apache.james.jmap.methods.GetMessagesMethod;
 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.Test;
 
 import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
@@ -41,7 +42,7 @@ public class ParsingWritingObjectsTest {
     public void parsingJsonShouldWorkOnSubMessage() throws Exception {
         SubMessage expected = SUB_MESSAGE;
 
-        SubMessage subMessage = new ObjectMapperFactory().forParsing()
+        SubMessage subMessage = new ObjectMapperFactory(new InMemoryId.Factory()).forParsing()
             .readValue(IOUtils.toString(ClassLoader.getSystemResource("json/subMessage.json")), SubMessage.class);
 
         assertThat(subMessage).isEqualToComparingFieldByField(expected);
@@ -51,7 +52,7 @@ public class ParsingWritingObjectsTest {
     public void writingJsonShouldWorkOnSubMessage() throws Exception {
         String expected = IOUtils.toString(ClassLoader.getSystemResource("json/subMessage.json"));
 
-        String json = new ObjectMapperFactory().forWriting()
+        String json = new ObjectMapperFactory(new InMemoryId.Factory()).forWriting()
                 .writeValueAsString(SUB_MESSAGE);
 
         assertThatJson(json)
@@ -64,7 +65,7 @@ public class ParsingWritingObjectsTest {
     public void parsingJsonShouldWorkOnMessage() throws Exception {
         Message expected = MESSAGE;
 
-        Message message = new ObjectMapperFactory().forParsing()
+        Message message = new ObjectMapperFactory(new InMemoryId.Factory()).forParsing()
             .readValue(IOUtils.toString(ClassLoader.getSystemResource("json/message.json")), Message.class);
 
         assertThat(message).isEqualToComparingFieldByField(expected);
@@ -78,7 +79,7 @@ public class ParsingWritingObjectsTest {
                 .addFilter(JmapResponseWriterImpl.PROPERTIES_FILTER, SimpleBeanPropertyFilter.serializeAll())
                 .addFilter(GetMessagesMethod.HEADERS_FILTER, SimpleBeanPropertyFilter.serializeAll());
 
-        String json = new ObjectMapperFactory().forWriting()
+        String json = new ObjectMapperFactory(new InMemoryId.Factory()).forWriting()
                 .setFilterProvider(filterProvider)
                 .writeValueAsString(MESSAGE);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/460b650c/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 1d62863..879de19 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
@@ -21,6 +21,8 @@ package org.apache.james.jmap.methods;
 
 import org.apache.james.jmap.json.ObjectMapperFactory;
 import org.apache.james.jmap.model.ProtocolRequest;
+import org.apache.james.mailbox.inmemory.InMemoryId;
+import org.junit.Before;
 import org.junit.Test;
 
 import com.fasterxml.jackson.databind.JsonNode;
@@ -28,6 +30,12 @@ import com.fasterxml.jackson.databind.node.JsonNodeFactory;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
 public class JmapRequestParserImplTest {
+    private JmapRequestParserImpl jmapRequestParserImpl;
+
+    @Before
+    public void setup() {
+        jmapRequestParserImpl = new JmapRequestParserImpl(new ObjectMapperFactory(new InMemoryId.Factory()));
+    }
 
     @Test(expected=IllegalArgumentException.class)
     public void extractJmapRequestShouldThrowWhenNullRequestClass() throws Exception {
@@ -35,7 +43,6 @@ public class JmapRequestParserImplTest {
                 new ObjectNode(new JsonNodeFactory(false)).putObject("{\"id\": \"id\"}"),
                 new ObjectNode(new JsonNodeFactory(false)).textNode("#1")} ;
 
-        JmapRequestParserImpl jmapRequestParserImpl = new JmapRequestParserImpl(new ObjectMapperFactory());
         jmapRequestParserImpl.extractJmapRequest(ProtocolRequest.deserialize(nodes), null);
     }
 
@@ -47,7 +54,6 @@ public class JmapRequestParserImplTest {
                 parameters,
                 new ObjectNode(new JsonNodeFactory(false)).textNode("#1")} ;
 
-        JmapRequestParserImpl jmapRequestParserImpl = new JmapRequestParserImpl(new ObjectMapperFactory());
         jmapRequestParserImpl.extractJmapRequest(ProtocolRequest.deserialize(nodes), RequestClass.class);
     }
 
@@ -58,7 +64,6 @@ public class JmapRequestParserImplTest {
                 parameters,
                 new ObjectNode(new JsonNodeFactory(false)).textNode("#1")} ;
 
-        JmapRequestParserImpl jmapRequestParserImpl = new JmapRequestParserImpl(new ObjectMapperFactory());
         jmapRequestParserImpl.extractJmapRequest(ProtocolRequest.deserialize(nodes), RequestClass.class);
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/460b650c/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 8f35e43..b943a9a 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
@@ -32,6 +32,8 @@ import org.apache.james.jmap.model.ClientId;
 import org.apache.james.jmap.model.Property;
 import org.apache.james.jmap.model.ProtocolRequest;
 import org.apache.james.jmap.model.ProtocolResponse;
+import org.apache.james.mailbox.inmemory.InMemoryId;
+import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
 
@@ -44,6 +46,12 @@ import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 
 public class JmapResponseWriterImplTest {
+    private JmapResponseWriterImpl jmapResponseWriterImpl;
+
+    @Before
+    public void setup() {
+        jmapResponseWriterImpl = new JmapResponseWriterImpl(new ObjectMapperFactory(new InMemoryId.Factory()));
+    }
 
     @Ignore
     @Test(expected=IllegalStateException.class)
@@ -52,7 +60,6 @@ public class JmapResponseWriterImplTest {
         String expectedClientId = "#1";
         String expectedId = "myId";
 
-        JmapResponseWriterImpl jmapResponseWriterImpl = new JmapResponseWriterImpl(new ObjectMapperFactory());
         Stream<ProtocolResponse> response = jmapResponseWriterImpl.formatMethodResponse(Stream.of(JmapResponse
                 .builder()
                 .clientId(ClientId.of(expectedClientId))
@@ -73,7 +80,6 @@ public class JmapResponseWriterImplTest {
         ResponseClass responseClass = new ResponseClass();
         responseClass.id = expectedId;
 
-        JmapResponseWriterImpl jmapResponseWriterImpl = new JmapResponseWriterImpl(new ObjectMapperFactory());
         List<ProtocolResponse> response = jmapResponseWriterImpl.formatMethodResponse(
                 Stream.of(JmapResponse
                 .builder()
@@ -101,7 +107,6 @@ public class JmapResponseWriterImplTest {
         responseClass.list = ImmutableList.of(new ObjectResponseClass.Foo("id", "name"));
         Property property = () -> "id";
 
-        JmapResponseWriterImpl jmapResponseWriterImpl = new JmapResponseWriterImpl(new ObjectMapperFactory());
         List<ProtocolResponse> response = jmapResponseWriterImpl.formatMethodResponse(
                 Stream.of(JmapResponse
                 .builder()
@@ -126,7 +131,6 @@ public class JmapResponseWriterImplTest {
         responseClass.list = ImmutableList.of(new ObjectResponseClass.Foo("id", "name"));
         Property property = () -> "id";
 
-        JmapResponseWriterImpl jmapResponseWriterImpl = new JmapResponseWriterImpl(new ObjectMapperFactory());
         @SuppressWarnings("unused")
         Stream<ProtocolResponse> ignoredResponse = jmapResponseWriterImpl.formatMethodResponse(
                 Stream.of(JmapResponse
@@ -159,8 +163,6 @@ public class JmapResponseWriterImplTest {
         Property idProperty = () -> "id";
         Property nameProperty = () -> "name";
 
-        JmapResponseWriterImpl jmapResponseWriterImpl = new JmapResponseWriterImpl(new ObjectMapperFactory());
-
         List<ProtocolResponse> response = jmapResponseWriterImpl.formatMethodResponse(
                 Stream.of(JmapResponse
                             .builder()
@@ -210,7 +212,6 @@ public class JmapResponseWriterImplTest {
                 parameters,
                 new ObjectNode(new JsonNodeFactory(false)).textNode(expectedClientId)} ;
 
-        JmapResponseWriterImpl jmapResponseWriterImpl = new JmapResponseWriterImpl(new ObjectMapperFactory());
         List<ProtocolResponse> response = jmapResponseWriterImpl.formatMethodResponse(
                 Stream.of(JmapResponse
                     .builder()
@@ -234,7 +235,6 @@ public class JmapResponseWriterImplTest {
                 parameters,
                 new ObjectNode(new JsonNodeFactory(false)).textNode(expectedClientId)} ;
 
-        JmapResponseWriterImpl jmapResponseWriterImpl = new JmapResponseWriterImpl(new ObjectMapperFactory());
         List<ProtocolResponse> response = jmapResponseWriterImpl.formatMethodResponse(
                 Stream.of(JmapResponse
                     .builder()

http://git-wip-us.apache.org/repos/asf/james-project/blob/460b650c/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/RequestHandlerTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/RequestHandlerTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/RequestHandlerTest.java
index 2ad4f09..8725dd6 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/RequestHandlerTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/RequestHandlerTest.java
@@ -36,6 +36,7 @@ import org.apache.james.jmap.model.ClientId;
 import org.apache.james.jmap.model.ProtocolRequest;
 import org.apache.james.jmap.model.ProtocolResponse;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -123,8 +124,9 @@ public class RequestHandlerTest {
 
     @Before
     public void setup() {
-        jmapRequestParser = new JmapRequestParserImpl(new ObjectMapperFactory());
-        jmapResponseWriter = new JmapResponseWriterImpl(new ObjectMapperFactory());
+        ObjectMapperFactory objectMapperFactory = new ObjectMapperFactory(new InMemoryId.Factory());
+        jmapRequestParser = new JmapRequestParserImpl(objectMapperFactory);
+        jmapResponseWriter = new JmapResponseWriterImpl(objectMapperFactory);
         mockHttpServletRequest = mock(HttpServletRequest.class);
         testee = new RequestHandler(ImmutableSet.of(new TestMethod()), jmapRequestParser, jmapResponseWriter);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/460b650c/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/FilterTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/FilterTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/FilterTest.java
index 7588bad..00fb904 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/FilterTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/FilterTest.java
@@ -19,6 +19,7 @@
 package org.apache.james.jmap.model;
 
 import org.apache.james.jmap.json.ObjectMapperFactory;
+import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -32,7 +33,7 @@ public class FilterTest {
 
     @Before
     public void setup() {
-        parser = new ObjectMapperFactory().forParsing();
+        parser = new ObjectMapperFactory(new InMemoryId.Factory()).forParsing();
     }
 
     @Test


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


[10/10] james-project git commit: JAMES-1818 Remove useless calls of MailboxUtils

Posted by ro...@apache.org.
JAMES-1818 Remove useless calls of MailboxUtils


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

Branch: refs/heads/master
Commit: 268f001185bf3bd7a41ff6940b38241fd99dca89
Parents: df3a8a0
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Wed Aug 31 16:40:58 2016 +0200
Committer: Raphael Ouazana <ra...@linagora.com>
Committed: Mon Sep 5 14:42:01 2016 +0200

----------------------------------------------------------------------
 .../jmap/methods/GetMessageListMethod.java      |  12 +-
 .../methods/SetMailboxesCreationProcessor.java  |  18 ++-
 .../SetMailboxesDestructionProcessor.java       |   4 +-
 .../methods/SetMailboxesUpdateProcessor.java    |  22 ++--
 .../apache/james/jmap/utils/MailboxUtils.java   |  26 ----
 .../SetMailboxesCreationProcessorTest.java      |   6 +-
 .../SetMailboxesUpdateProcessorTest.java        |   7 +-
 .../james/jmap/utils/MailboxUtilsTest.java      | 123 -------------------
 8 files changed, 44 insertions(+), 174 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/268f0011/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 5b476ef..f2a859b 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
@@ -39,7 +39,6 @@ import org.apache.james.jmap.model.GetMessageListResponse;
 import org.apache.james.jmap.model.GetMessagesRequest;
 import org.apache.james.jmap.model.MessageId;
 import org.apache.james.jmap.utils.FilterToSearchQuery;
-import org.apache.james.jmap.utils.MailboxUtils;
 import org.apache.james.jmap.utils.SortToComparatorConvertor;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
@@ -78,17 +77,15 @@ public class GetMessageListMethod implements Method {
     private final MailboxManager mailboxManager;
     private final int maximumLimit;
     private final GetMessagesMethod getMessagesMethod;
-    private final MailboxUtils mailboxUtils;
     private final Factory mailboxIdFactory;
 
     @Inject
     @VisibleForTesting public GetMessageListMethod(MailboxManager mailboxManager,
-            @Named(MAXIMUM_LIMIT) int maximumLimit, GetMessagesMethod getMessagesMethod, MailboxUtils mailboxUtils, MailboxId.Factory mailboxIdFactory) {
+            @Named(MAXIMUM_LIMIT) int maximumLimit, GetMessagesMethod getMessagesMethod, MailboxId.Factory mailboxIdFactory) {
 
         this.mailboxManager = mailboxManager;
         this.maximumLimit = maximumLimit;
         this.getMessagesMethod = getMessagesMethod;
-        this.mailboxUtils = mailboxUtils;
         this.mailboxIdFactory = mailboxIdFactory;
     }
 
@@ -140,7 +137,7 @@ public class GetMessageListMethod implements Method {
         for (Map.Entry<MailboxId, Collection<Long>> mailboxResults: searchResults.entrySet()) {
             try {
                 aggregate(mailboxSession, messages, mailboxResults);
-            } catch (MailboxNotFoundException e) {
+            } catch (MailboxException e) {
                 LOGGER.error("Error retrieving mailbox", e);
                 throw Throwables.propagate(e);
             }
@@ -148,9 +145,8 @@ public class GetMessageListMethod implements Method {
         return messages;
     }
 
-    private void aggregate(MailboxSession mailboxSession, Multimap<MailboxPath, MessageResult> aggregation, Map.Entry<MailboxId, Collection<Long>> mailboxResults) throws MailboxNotFoundException {
-        MailboxPath mailboxPath = mailboxUtils.mailboxPathFromMailboxId(mailboxResults.getKey(), mailboxSession)
-            .orElseThrow(() -> new MailboxNotFoundException(mailboxResults.getKey().serialize()));
+    private void aggregate(MailboxSession mailboxSession, Multimap<MailboxPath, MessageResult> aggregation, Map.Entry<MailboxId, Collection<Long>> mailboxResults) throws MailboxNotFoundException, MailboxException {
+        MailboxPath mailboxPath = mailboxManager.getMailbox(mailboxResults.getKey(), mailboxSession).getMailboxPath();
         MessageManager messageManager = getMessageManager(mailboxPath, mailboxSession)
             .orElseThrow(() -> new MailboxNotFoundException(mailboxPath));
         List<MessageResult> mailboxMessages = MessageRange.toRanges(mailboxResults.getValue()).stream()

http://git-wip-us.apache.org/repos/asf/james-project/blob/268f0011/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 cc4cb4d..01dc2d7 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,6 +40,7 @@ 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.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxId.Factory;
 import org.apache.james.mailbox.model.MailboxPath;
@@ -144,7 +145,7 @@ public class SetMailboxesCreationProcessor implements SetMailboxesProcessor {
             MailboxCreationId parentId = mailboxRequest.getParentId().get();
             String parentName = getMailboxNameFromId(parentId, mailboxSession)
                     .orElseGet(Throwing.supplier(() ->
-                        mailboxUtils.getMailboxNameFromId(creationIdsToCreatedMailboxId.get(parentId), mailboxSession)
+                        getMailboxNameFromId(creationIdsToCreatedMailboxId.get(parentId), mailboxSession)
                             .orElseThrow(() -> new MailboxParentNotFoundException(parentId))
                     ));
 
@@ -155,7 +156,7 @@ public class SetMailboxesCreationProcessor implements SetMailboxesProcessor {
     }
 
     private Optional<String> getMailboxNameFromId(MailboxCreationId creationId, MailboxSession mailboxSession) {
-        ThrowingFunction<? super MailboxId, Optional<String>> toName = parentId -> mailboxUtils.getMailboxNameFromId(parentId, mailboxSession);
+        ThrowingFunction<? super MailboxId, Optional<String>> toName = parentId -> getMailboxNameFromId(parentId, mailboxSession);
         return getMailboxIdFromCreationId(creationId)
                 .flatMap(Throwing.function(toName).sneakyThrow());
     }
@@ -167,4 +168,17 @@ public class SetMailboxesCreationProcessor implements SetMailboxesProcessor {
             return Optional.empty();
         }
     }
+
+    @VisibleForTesting
+    Optional<String> getMailboxNameFromId(MailboxId mailboxId, MailboxSession mailboxSession) throws MailboxException {
+        if (mailboxId == null) {
+            return Optional.empty();
+        }
+        try {
+            return Optional.of(mailboxManager.getMailbox(mailboxId, mailboxSession).getMailboxPath().getName());
+        } catch (MailboxNotFoundException e) {
+            return Optional.empty();
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/268f0011/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 9fa4aab..a777c44 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
@@ -39,6 +39,7 @@ 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.MailboxPath;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -96,7 +97,8 @@ public class SetMailboxesDestructionProcessor implements SetMailboxesProcessor {
             Mailbox mailbox = entry.getValue();
             preconditions(mailbox, mailboxSession);
 
-            mailboxManager.deleteMailbox(mailboxUtils.getMailboxPath(mailbox, mailboxSession), mailboxSession);
+            MailboxPath mailboxPath = mailboxManager.getMailbox(mailbox.getId(), mailboxSession).getMailboxPath();
+            mailboxManager.deleteMailbox(mailboxPath, mailboxSession);
             builder.destroyed(entry.getKey());
         } catch (MailboxHasChildException e) {
             builder.notDestroyed(entry.getKey(), SetError.builder()

http://git-wip-us.apache.org/repos/asf/james-project/blob/268f0011/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 69a07fe..438e101 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
@@ -43,6 +43,8 @@ import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 
+import com.github.fge.lambdas.Throwing;
+import com.github.fge.lambdas.functions.ThrowingFunction;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Splitter;
 import com.google.common.collect.Iterables;
@@ -156,8 +158,11 @@ public class SetMailboxesUpdateProcessor implements SetMailboxesProcessor {
 
         if (isParentIdInRequest(updateRequest)) {
             MailboxId newParentId = updateRequest.getParentId().get();
-            mailboxUtils.mailboxPathFromMailboxId(newParentId, mailboxSession)
-                    .orElseThrow(() -> new MailboxParentNotFoundException(newParentId));
+            try {
+                mailboxManager.getMailbox(newParentId, mailboxSession);
+            } catch (MailboxNotFoundException e) {
+                throw new MailboxParentNotFoundException(newParentId);
+            }
             if (mustChangeParent(mailbox.getParentId(), newParentId) && mailboxUtils.hasChildren(mailbox.getId(), mailboxSession)) {
                 throw new MailboxHasChildException();
             }
@@ -176,14 +181,14 @@ public class SetMailboxesUpdateProcessor implements SetMailboxesProcessor {
     }
 
     private void updateMailbox(Mailbox mailbox, MailboxUpdateRequest updateRequest, MailboxSession mailboxSession) throws MailboxException {
-        MailboxPath originMailboxPath = mailboxUtils.getMailboxPath(mailbox, mailboxSession);
+        MailboxPath originMailboxPath = mailboxManager.getMailbox(mailbox.getId(), mailboxSession).getMailboxPath();
         MailboxPath destinationMailboxPath = computeNewMailboxPath(mailbox, originMailboxPath, updateRequest, mailboxSession);
         if (!originMailboxPath.equals(destinationMailboxPath)) {
             mailboxManager.renameMailbox(originMailboxPath, destinationMailboxPath, mailboxSession);
         }
     }
 
-    private MailboxPath computeNewMailboxPath(Mailbox mailbox, MailboxPath originMailboxPath, MailboxUpdateRequest updateRequest, MailboxSession mailboxSession) {
+    private MailboxPath computeNewMailboxPath(Mailbox mailbox, MailboxPath originMailboxPath, MailboxUpdateRequest updateRequest, MailboxSession mailboxSession) throws MailboxException {
         Optional<MailboxId> parentId = updateRequest.getParentId();
         if (parentId == null) {
             return new MailboxPath(mailboxSession.getPersonalSpace(), 
@@ -194,8 +199,9 @@ public class SetMailboxesUpdateProcessor implements SetMailboxesProcessor {
         MailboxPath modifiedMailboxPath = updateRequest.getName()
                 .map(newName -> computeMailboxPathWithNewName(originMailboxPath, newName))
                 .orElse(originMailboxPath);
+        ThrowingFunction<MailboxId, MailboxPath> computeNewMailboxPath = parentMailboxId -> computeMailboxPathWithNewParentId(modifiedMailboxPath, parentMailboxId, mailboxSession);
         return parentId
-                .map(parentMailboxId -> computeMailboxPathWithNewParentId(modifiedMailboxPath, parentMailboxId, mailboxSession))
+                .map(Throwing.function(computeNewMailboxPath).sneakyThrow())
                 .orElse(modifiedMailboxPath);
     }
 
@@ -203,10 +209,10 @@ public class SetMailboxesUpdateProcessor implements SetMailboxesProcessor {
         return new MailboxPath(originMailboxPath, newName);
     }
 
-    private MailboxPath computeMailboxPathWithNewParentId(MailboxPath originMailboxPath, MailboxId parentMailboxId, MailboxSession mailboxSession) {
-        Optional<MailboxPath> newParentMailboxPath = mailboxUtils.mailboxPathFromMailboxId(parentMailboxId, mailboxSession);
+    private MailboxPath computeMailboxPathWithNewParentId(MailboxPath originMailboxPath, MailboxId parentMailboxId, MailboxSession mailboxSession) throws MailboxException {
+        MailboxPath newParentMailboxPath = mailboxManager.getMailbox(parentMailboxId, mailboxSession).getMailboxPath();
         String lastName = getCurrentMailboxName(originMailboxPath, mailboxSession);
-        return new MailboxPath(originMailboxPath, newParentMailboxPath.get().getName() + mailboxSession.getPathDelimiter() + lastName);
+        return new MailboxPath(originMailboxPath, newParentMailboxPath.getName() + mailboxSession.getPathDelimiter() + lastName);
     }
 
     private String getCurrentMailboxName(MailboxPath originMailboxPath, MailboxSession mailboxSession) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/268f0011/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 bfb9acc..666b149 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
@@ -40,7 +40,6 @@ import org.slf4j.LoggerFactory;
 import com.github.fge.lambdas.Throwing;
 import com.github.fge.lambdas.functions.ThrowingFunction;
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
 import com.google.common.base.Splitter;
 
 public class MailboxUtils {
@@ -99,12 +98,6 @@ public class MailboxUtils {
         return name;
     }
 
-    public Optional<String> getMailboxNameFromId(MailboxId mailboxId, MailboxSession mailboxSession) throws MailboxException {
-        return getMailboxFromId(mailboxId, mailboxSession)
-                .map(Throwing.function(MessageManager::getMailboxPath).sneakyThrow())
-                .map(MailboxPath::getName);
-    }
-
     private Optional<MessageManager> getMailboxFromId(MailboxId mailboxId, MailboxSession mailboxSession) throws MailboxException {
         try {
             return Optional.of(mailboxManager.getMailbox(mailboxId, mailboxSession));
@@ -132,29 +125,10 @@ public class MailboxUtils {
         }
     }
 
-    public MailboxPath getMailboxPath(Mailbox mailbox, MailboxSession mailboxSession) {
-        return new MailboxPath(mailboxSession.getPersonalSpace(), mailboxSession.getUser().getUserName(), getMailboxName(mailbox, mailboxSession));
-    }
-
-    private String getMailboxName(Mailbox mailbox, MailboxSession mailboxSession) {
-        if (mailbox.getParentId().isPresent()) {
-            return getMailboxName(mailboxFromMailboxId(mailbox.getParentId().get(), mailboxSession).get(), mailboxSession) +
-                    mailboxSession.getPathDelimiter() + mailbox.getName();
-        }
-        return mailbox.getName();
-    }
-
     public boolean hasChildren(MailboxId mailboxId, MailboxSession mailboxSession) throws MailboxException {
         return getMailboxFromId(mailboxId, mailboxSession)
                 .map(Throwing.function(MessageManager::getMailboxPath).sneakyThrow())
                 .map(Throwing.function(path -> mailboxManager.hasChildren(path, mailboxSession)))
                 .orElse(false);
     }
-
-    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/268f0011/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 f8f67bc..fdf8f31 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
@@ -43,12 +43,14 @@ public class SetMailboxesCreationProcessorTest {
     private MailboxUtils mailboxUtils;
     private Factory mailboxIdFactory;
     private SetMailboxesCreationProcessor sut;
+    private MailboxManager mailboxManager;
 
     @Before
     public void setup() {
         mailboxUtils = mock(MailboxUtils.class);
+        mailboxManager = mock(MailboxManager.class);
         mailboxIdFactory = new InMemoryId.Factory();
-        sut = new SetMailboxesCreationProcessor(mock(MailboxManager.class), mailboxUtils, mailboxIdFactory);
+        sut = new SetMailboxesCreationProcessor(mailboxManager, mailboxUtils, mailboxIdFactory);
     }
 
     @Test
@@ -61,7 +63,7 @@ public class SetMailboxesCreationProcessorTest {
                 .build();
 
         MailboxSession mailboxSession = mock(MailboxSession.class);
-        when(mailboxUtils.getMailboxNameFromId(parentMailboxId, mailboxSession))
+        when(mailboxManager.getMailbox(parentMailboxId, mailboxSession))
             .thenThrow(new MailboxException());
 
         SetMailboxesResponse setMailboxesResponse = sut.process(request, mailboxSession);

http://git-wip-us.apache.org/repos/asf/james-project/blob/268f0011/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 0fdc0a5..377681c 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
@@ -33,9 +33,9 @@ import org.apache.james.jmap.model.mailbox.MailboxUpdateRequest;
 import org.apache.james.jmap.utils.MailboxUtils;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageManager;
 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;
 
@@ -59,15 +59,14 @@ public class SetMailboxesUpdateProcessorTest {
         // Given
         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())
                 .build();
         Mailbox mailbox = Mailbox.builder().id(mailboxId).name("name").role(Optional.empty()).build();
         when(mockedMailboxUtils.mailboxFromMailboxId(mailboxId, mockedMailboxSession))
             .thenReturn(Optional.of(mailbox));
-        when(mockedMailboxUtils.mailboxPathFromMailboxId(newParentId, mockedMailboxSession))
-            .thenReturn(Optional.of(newParentMailboxPath));
+        when(mockedMailboxManager.getMailbox(newParentId, mockedMailboxSession))
+            .thenReturn(mock(MessageManager.class));
         when(mockedMailboxUtils.hasChildren(mailboxId, mockedMailboxSession))
             .thenThrow(new MailboxException());
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/268f0011/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/MailboxUtilsTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/MailboxUtilsTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/MailboxUtilsTest.java
index ef0a93c..f374a04 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/MailboxUtilsTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/MailboxUtilsTest.java
@@ -102,27 +102,6 @@ public class MailboxUtilsTest {
     }
 
     @Test
-    public void getMailboxNameFromIdShouldReturnNotEmptyWhenMailboxExists() throws Exception {
-        String expected = "mailbox";
-        MailboxPath mailboxPath = new MailboxPath("#private", user, expected);
-        mailboxManager.createMailbox(mailboxPath, mailboxSession);
-        MailboxId mailboxId = mailboxMapperFactory.getMailboxMapper(mailboxSession)
-            .findMailboxByPath(mailboxPath)
-            .getMailboxId();
-
-        Optional<String> optionalName = sut.getMailboxNameFromId(mailboxId, mailboxSession);
-        assertThat(optionalName).isPresent();
-        String name = optionalName.get();
-        assertThat(name).isEqualTo(expected);
-    }
-
-    @Test
-    public void getMailboxNameFromIdShouldReturnEmptyWhenMailboxDoesntExist() throws Exception {
-        Optional<String> optionalName = sut.getMailboxNameFromId(InMemoryId.of(987), mailboxSession);
-        assertThat(optionalName).isEmpty();
-    }
-
-    @Test
     public void getParentIdFromMailboxPathShouldReturNullWhenRootMailbox() throws Exception {
         MailboxPath mailboxPath = new MailboxPath("#private", user, "mailbox");
         mailboxManager.createMailbox(mailboxPath, mailboxSession);
@@ -183,108 +162,6 @@ public class MailboxUtilsTest {
     }
 
     @Test
-    public void mailboxPathFromMailboxIdShouldReturnPresentWhenExists() throws Exception {
-        MailboxPath mailboxPath = new MailboxPath("#private", user, "myBox");
-        mailboxManager.createMailbox(mailboxPath, mailboxSession);
-        MailboxId mailboxId = mailboxMapperFactory.getMailboxMapper(mailboxSession)
-                .findMailboxByPath(mailboxPath)
-                .getMailboxId();
-
-        Optional<MailboxPath> actual = sut.mailboxPathFromMailboxId(mailboxId, mailboxSession);
-        assertThat(actual).isPresent();
-        assertThat(actual.get()).isEqualTo(mailboxPath);
-    }
-
-    @Test
-    public void mailboxPathFromMailboxIdShouldReturnAbsentWhenDoesntExist() throws Exception {
-        Optional<MailboxPath> mailboxPath = sut.mailboxPathFromMailboxId(InMemoryId.of(123), mailboxSession);
-        assertThat(mailboxPath).isEmpty();
-    }
-
-    @Test(expected = IllegalStateException.class)
-    public void mailboxPathFromMailboxIdShouldThrowWhenNullMailboxId() throws Exception {
-        sut.mailboxPathFromMailboxId(null, mailboxSession);
-    }
-
-    @Test(expected = IllegalStateException.class)
-    public void mailboxPathFromMailboxIdShouldThrowWhenNullMailboxSession() throws Exception {
-        sut.mailboxPathFromMailboxId(InMemoryId.of(123), null);
-    }
-
-    @Test(expected = IllegalStateException.class)
-    public void mailboxPathFromMailboxIdShouldThrowWhenNullMailboxSessionAndMailboxId() throws Exception {
-        sut.mailboxPathFromMailboxId(null, null);
-    }
-
-    @Test
-    public void getMailboxPathShouldReturnThePathWhenRootMailbox() throws Exception {
-        MailboxPath expected = new MailboxPath("#private", user, "myBox");
-        mailboxManager.createMailbox(expected, mailboxSession);
-        MailboxId mailboxId = mailboxMapperFactory.getMailboxMapper(mailboxSession)
-                .findMailboxByPath(expected)
-                .getMailboxId();
-
-        Mailbox mailbox = Mailbox.builder()
-                .id(mailboxId)
-                .name("myBox")
-                .build();
-
-        MailboxPath mailboxPath = sut.getMailboxPath(mailbox, mailboxSession);
-        assertThat(mailboxPath).isEqualTo(expected);
-    }
-
-    @Test
-    public void getMailboxPathShouldReturnThePathWhenChildMailbox() throws Exception {
-        MailboxPath parentMailboxPath = new MailboxPath("#private", user, "inbox");
-        mailboxManager.createMailbox(parentMailboxPath, mailboxSession);
-        MailboxId parentId = mailboxMapperFactory.getMailboxMapper(mailboxSession)
-                .findMailboxByPath(parentMailboxPath)
-                .getMailboxId();
-
-        MailboxPath expected = new MailboxPath("#private", user, "inbox.myBox");
-        mailboxManager.createMailbox(expected, mailboxSession);
-        MailboxId mailboxId = mailboxMapperFactory.getMailboxMapper(mailboxSession)
-                .findMailboxByPath(expected)
-                .getMailboxId();
-
-        Mailbox mailbox = Mailbox.builder()
-                .id(mailboxId)
-                .name("myBox")
-                .parentId(parentId)
-                .build();
-
-        MailboxPath mailboxPath = sut.getMailboxPath(mailbox, mailboxSession);
-        assertThat(mailboxPath).isEqualTo(expected);
-    }
-
-    @Test
-    public void getMailboxPathShouldReturnThePathWhenChildOfChildMailbox() throws Exception {
-        MailboxPath parentMailboxPath = new MailboxPath("#private", user, "inbox");
-        mailboxManager.createMailbox(parentMailboxPath, mailboxSession);
-
-        MailboxPath childMailboxPath = new MailboxPath("#private", user, "inbox.child");
-        mailboxManager.createMailbox(childMailboxPath, mailboxSession);
-        MailboxId childId = mailboxMapperFactory.getMailboxMapper(mailboxSession)
-                .findMailboxByPath(childMailboxPath)
-                .getMailboxId();
-
-        MailboxPath expected = new MailboxPath("#private", user, "inbox.child.myBox");
-        mailboxManager.createMailbox(expected, mailboxSession);
-        MailboxId mailboxId = mailboxMapperFactory.getMailboxMapper(mailboxSession)
-                .findMailboxByPath(expected)
-                .getMailboxId();
-
-        Mailbox mailbox = Mailbox.builder()
-                .id(mailboxId)
-                .name("myBox")
-                .parentId(childId)
-                .build();
-
-        MailboxPath mailboxPath = sut.getMailboxPath(mailbox, mailboxSession);
-        assertThat(mailboxPath).isEqualTo(expected);
-    }
-
-    @Test
     public void hasChildrenShouldReturnFalseWhenNoChild() throws Exception {
         MailboxPath mailboxPath = new MailboxPath("#private", user, "myBox");
         mailboxManager.createMailbox(mailboxPath, mailboxSession);


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


[09/10] james-project git commit: Fix warnings

Posted by ro...@apache.org.
Fix warnings


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

Branch: refs/heads/master
Commit: 4cdd9f8d1d5b0c03ae84fd820d88f1bdb22c2d13
Parents: 7ecb7ef
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Wed Aug 31 17:18:13 2016 +0200
Committer: Raphael Ouazana <ra...@linagora.com>
Committed: Mon Sep 5 14:42:01 2016 +0200

----------------------------------------------------------------------
 .../org/apache/james/mailbox/model/MailboxAnnotationTest.java    | 4 ----
 .../james/mailbox/store/mail/model/AnnotationMapperTest.java     | 3 ---
 .../test/java/org/apache/james/transport/matchers/AllTest.java   | 1 -
 .../org/apache/james/imap/decode/ImapRequestLineReaderTest.java  | 1 -
 4 files changed, 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/4cdd9f8d/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAnnotationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAnnotationTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAnnotationTest.java
index fc114bc..10d7c62 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAnnotationTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAnnotationTest.java
@@ -25,10 +25,6 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.guava.api.Assertions.assertThat;
 
 public class MailboxAnnotationTest {
-    private static final String ASTERISK_CHARACTER = "*";
-
-    private static final String PERCENT_CHARACTER = "%";
-
     private static final MailboxAnnotationKey ANNOTATION_KEY = new MailboxAnnotationKey("/private/comment");
     private static final String ANNOTATION_VALUE = "anyValue";
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/4cdd9f8d/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AnnotationMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AnnotationMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AnnotationMapperTest.java
index c1fdf6c..a48a6e2 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AnnotationMapperTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AnnotationMapperTest.java
@@ -21,8 +21,6 @@ package org.apache.james.mailbox.store.mail.model;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-import java.util.List;
-
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxAnnotation;
 import org.apache.james.mailbox.model.MailboxAnnotationKey;
@@ -35,7 +33,6 @@ import org.xenei.junit.contract.ContractTest;
 import org.xenei.junit.contract.IProducer;
 
 import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
 
 @Contract(MapperProvider.class)
 public class AnnotationMapperTest<T extends MapperProvider> {

http://git-wip-us.apache.org/repos/asf/james-project/blob/4cdd9f8d/mailet/standard/src/test/java/org/apache/james/transport/matchers/AllTest.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/test/java/org/apache/james/transport/matchers/AllTest.java b/mailet/standard/src/test/java/org/apache/james/transport/matchers/AllTest.java
index ecf4b61..b3c207f 100644
--- a/mailet/standard/src/test/java/org/apache/james/transport/matchers/AllTest.java
+++ b/mailet/standard/src/test/java/org/apache/james/transport/matchers/AllTest.java
@@ -29,7 +29,6 @@ import org.apache.mailet.Matcher;
 import org.apache.mailet.base.test.FakeMail;
 import org.apache.mailet.base.test.FakeMailContext;
 import org.apache.mailet.base.test.FakeMatcherConfig;
-import org.apache.mailet.base.test.MailUtil;
 import org.junit.Before;
 import org.junit.Test;
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/4cdd9f8d/protocols/imap/src/test/java/org/apache/james/imap/decode/ImapRequestLineReaderTest.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/test/java/org/apache/james/imap/decode/ImapRequestLineReaderTest.java b/protocols/imap/src/test/java/org/apache/james/imap/decode/ImapRequestLineReaderTest.java
index 63c628a..7c285ed 100644
--- a/protocols/imap/src/test/java/org/apache/james/imap/decode/ImapRequestLineReaderTest.java
+++ b/protocols/imap/src/test/java/org/apache/james/imap/decode/ImapRequestLineReaderTest.java
@@ -23,7 +23,6 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 import com.google.common.base.Charsets;
 import org.apache.james.protocols.imap.DecodingException;
-import org.junit.Before;
 import org.junit.Test;
 
 import java.io.ByteArrayInputStream;


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


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

Posted by ro...@apache.org.
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


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

Posted by ro...@apache.org.
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/GetMailboxesRequestTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/GetMailboxesRequestTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/GetMailboxesRequestTest.java
index ca78fd8..52e663f 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/GetMailboxesRequestTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/GetMailboxesRequestTest.java
@@ -22,6 +22,7 @@ package org.apache.james.jmap.model;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import org.apache.commons.lang.NotImplementedException;
+import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.junit.Test;
 
 import com.google.common.collect.ImmutableList;
@@ -50,10 +51,10 @@ public class GetMailboxesRequestTest {
     @Test
     public void idsShouldBePresentWhenListIsNotEmpty() {
         GetMailboxesRequest getMailboxesRequest = GetMailboxesRequest.builder()
-            .ids(ImmutableList.of("123"))
+            .ids(ImmutableList.of(InMemoryId.of(123)))
             .build();
         assertThat(getMailboxesRequest.getIds()).isPresent();
-        assertThat(getMailboxesRequest.getIds().get()).containsExactly("123");
+        assertThat(getMailboxesRequest.getIds().get()).containsExactly(InMemoryId.of(123));
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
index 5a22883..d489272 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
@@ -32,10 +32,10 @@ import javax.mail.Flags.Flag;
 import org.apache.commons.io.IOUtils;
 import org.apache.james.jmap.model.MessageFactory.MetaDataWithContent;
 import org.apache.james.jmap.utils.HtmlTextExtractor;
+import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.model.AttachmentId;
 import org.apache.james.mailbox.model.Cid;
 import org.apache.james.mailbox.model.MessageAttachment;
-import org.apache.james.mailbox.store.TestId;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -44,7 +44,7 @@ import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 
 public class MessageFactoryTest {
-    private static final TestId MAILBOX_ID = TestId.of(18L);
+    private static final InMemoryId MAILBOX_ID = InMemoryId.of(18L);
     private static final ZoneId UTC_ZONE_ID = ZoneId.of("Z");
     private static final ZonedDateTime ZONED_DATE = ZonedDateTime.of(2015, 07, 14, 12, 30, 42, 0, UTC_ZONE_ID);
     private static final Date INTERNAL_DATE = Date.from(ZONED_DATE.toInstant());
@@ -145,7 +145,7 @@ public class MessageFactoryTest {
                 .id(MessageId.of("user|box|2"))
                 .blobId(BlobId.of("2"))
                 .threadId("user|box|2")
-                .mailboxIds(ImmutableList.of(MAILBOX_ID.serialize()))
+                .mailboxIds(ImmutableList.of(MAILBOX_ID))
                 .inReplyToMessageId("<SN...@phx.gbl>")
                 .headers(headersMap)
                 .from(user)

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java
index 8953bc1..3ae8f28 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java
@@ -23,6 +23,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 import java.time.ZonedDateTime;
 import java.util.Optional;
 
+import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.junit.Test;
 
 import com.google.common.collect.ImmutableList;
@@ -99,13 +100,13 @@ public class MessageTest {
     @Test
     public void buildShouldWorkWhenMandatoryFieldsArePresent() {
         ZonedDateTime currentDate = ZonedDateTime.now();
-        Message expected = new Message(MessageId.of("user|box|1"), BlobId.of("blobId"), "threadId", ImmutableList.of("mailboxId"), Optional.empty(), false, false, false, false, false, ImmutableMap.of("key", "value"), Optional.empty(),
+        Message expected = new Message(MessageId.of("user|box|1"), BlobId.of("blobId"), "threadId", ImmutableList.of(InMemoryId.of(456)), Optional.empty(), false, false, false, false, false, ImmutableMap.of("key", "value"), Optional.empty(),
                 ImmutableList.of(), ImmutableList.of(), ImmutableList.of(), ImmutableList.of(), "subject", currentDate, 123, "preview", Optional.empty(), Optional.empty(), ImmutableList.of(), ImmutableMap.of());
         Message tested = Message.builder()
                 .id(MessageId.of("user|box|1"))
                 .blobId(BlobId.of("blobId"))
                 .threadId("threadId")
-                .mailboxIds(ImmutableList.of("mailboxId"))
+                .mailboxIds(ImmutableList.of(InMemoryId.of(456)))
                 .headers(ImmutableMap.of("key", "value"))
                 .subject("subject")
                 .size(123)
@@ -129,7 +130,7 @@ public class MessageTest {
             .id(MessageId.of("user|box|1"))
             .blobId(BlobId.of("blobId"))
             .threadId("threadId")
-            .mailboxIds(ImmutableList.of("mailboxId"))
+            .mailboxIds(ImmutableList.of(InMemoryId.of(456)))
             .headers(ImmutableMap.of("key", "value"))
             .subject("subject")
             .size(123)
@@ -160,7 +161,7 @@ public class MessageTest {
                 MessageId.of("user|box|1"),
                 BlobId.of("blobId"),
                 "threadId",
-                ImmutableList.of("mailboxId"),
+                ImmutableList.of(InMemoryId.of(456)),
                 Optional.of("inReplyToMessageId"), 
                 true,
                 true,
@@ -185,7 +186,7 @@ public class MessageTest {
             .id(MessageId.of("user|box|1"))
             .blobId(BlobId.of("blobId"))
             .threadId("threadId")
-            .mailboxIds(ImmutableList.of("mailboxId"))
+            .mailboxIds(ImmutableList.of(InMemoryId.of(456)))
             .inReplyToMessageId("inReplyToMessageId")
             .isUnread(true)
             .isFlagged(true)
@@ -215,7 +216,7 @@ public class MessageTest {
             .id(MessageId.of("user|box|1"))
             .blobId(BlobId.of("blobId"))
             .threadId("threadId")
-            .mailboxIds(ImmutableList.of("mailboxId"))
+            .mailboxIds(ImmutableList.of(InMemoryId.of(456)))
             .headers(ImmutableMap.of("key", "value"))
             .subject("subject")
             .size(1)
@@ -235,7 +236,7 @@ public class MessageTest {
             .id(MessageId.of("user|box|1"))
             .blobId(BlobId.of("blobId"))
             .threadId("threadId")
-            .mailboxIds(ImmutableList.of("mailboxId"))
+            .mailboxIds(ImmutableList.of(InMemoryId.of(456)))
             .headers(ImmutableMap.of("key", "value"))
             .subject("subject")
             .size(1)

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/SetMailboxesRequestTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/SetMailboxesRequestTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/SetMailboxesRequestTest.java
index 9a0d984..e2d884f 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/SetMailboxesRequestTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/SetMailboxesRequestTest.java
@@ -24,6 +24,8 @@ import org.apache.commons.lang.NotImplementedException;
 import org.apache.james.jmap.model.mailbox.MailboxCreateRequest;
 import org.apache.james.jmap.model.mailbox.MailboxUpdateRequest;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.inmemory.InMemoryId;
+import org.apache.james.mailbox.model.MailboxId;
 import org.junit.Test;
 
 import com.google.common.collect.ImmutableList;
@@ -45,11 +47,11 @@ public class SetMailboxesRequestTest {
     public void builderShouldWork() throws MailboxException {
         //Given
         MailboxCreationId creationId = MailboxCreationId.of("creationId");
-        String mailboxId = "mailboxId";
+        InMemoryId mailboxId = InMemoryId.of(123);
         MailboxCreateRequest mailboxRequest = MailboxCreateRequest.builder()
             .name("mailboxRequest")
             .build();
-        ImmutableList<String> destroy = ImmutableList.of("destroyId");
+        ImmutableList<MailboxId> destroy = ImmutableList.of(InMemoryId.of(456));
         MailboxUpdateRequest mailboxUpdateRequest = MailboxUpdateRequest.builder()
             .name("mailboxUpdateRequest")
             .build();

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/SetMailboxesResponseTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/SetMailboxesResponseTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/SetMailboxesResponseTest.java
index 959fce6..ec735f3 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/SetMailboxesResponseTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/SetMailboxesResponseTest.java
@@ -22,6 +22,8 @@ package org.apache.james.jmap.model;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import org.apache.james.jmap.model.mailbox.Mailbox;
+import org.apache.james.mailbox.inmemory.InMemoryId;
+import org.apache.james.mailbox.model.MailboxId;
 import org.junit.Test;
 
 import com.google.common.collect.ImmutableList;
@@ -33,14 +35,14 @@ public class SetMailboxesResponseTest {
     public void builderShouldWork() {
         ImmutableMap<MailboxCreationId, Mailbox> created = ImmutableMap.of(MailboxCreationId.of("1"),
             Mailbox.builder()
-                .id("1")
+                .id(InMemoryId.of(1))
                 .name("myBox")
                 .build());
-        ImmutableList<String> updated = ImmutableList.of("2");
-        ImmutableList<String> destroyed = ImmutableList.of("3");
+        ImmutableList<MailboxId> updated = ImmutableList.of(InMemoryId.of(2));
+        ImmutableList<MailboxId> destroyed = ImmutableList.of(InMemoryId.of(3));
         ImmutableMap<MailboxCreationId, SetError> notCreated = ImmutableMap.of(MailboxCreationId.of("dead-beef-defec8"), SetError.builder().type("created").build());
-        ImmutableMap<String, SetError> notUpdated = ImmutableMap.of("4", SetError.builder().type("updated").build());
-        ImmutableMap<String, SetError> notDestroyed  = ImmutableMap.of("5", SetError.builder().type("destroyed").build());
+        ImmutableMap<MailboxId, SetError> notUpdated = ImmutableMap.of(InMemoryId.of(4), SetError.builder().type("updated").build());
+        ImmutableMap<MailboxId, SetError> notDestroyed  = ImmutableMap.of(InMemoryId.of(5), SetError.builder().type("destroyed").build());
         SetMailboxesResponse expected = new SetMailboxesResponse(created, updated, destroyed, notCreated, notUpdated, notDestroyed);
 
         SetMailboxesResponse setMessagesResponse = SetMailboxesResponse.builder()
@@ -61,9 +63,9 @@ public class SetMailboxesResponseTest {
         SetMailboxesResponse.Builder emptyBuilder = SetMailboxesResponse.builder();
         SetMailboxesResponse testee = SetMailboxesResponse.builder()
                 .created(buildMailbox(MailboxCreationId.of("1")))
-                .destroyed("2")
+                .destroyed(InMemoryId.of(2))
                 .notCreated(ImmutableMap.of(MailboxCreationId.of("dead-beef-defec8"), SetError.builder().type("type").build()))
-                .notDestroyed(ImmutableMap.of("3", SetError.builder().type("type").build()))
+                .notDestroyed(ImmutableMap.of(InMemoryId.of(3), SetError.builder().type("type").build()))
                 .build();
 
         // When
@@ -74,7 +76,7 @@ public class SetMailboxesResponseTest {
 
     private ImmutableMap<MailboxCreationId, Mailbox> buildMailbox(MailboxCreationId mailboxId) {
         return ImmutableMap.of(mailboxId, Mailbox.builder()
-                .id(mailboxId.getCreationId())
+                .id(InMemoryId.of(Long.valueOf(mailboxId.getCreationId())))
                 .name(mailboxId.getCreationId())
                 .build());
     }
@@ -100,10 +102,10 @@ public class SetMailboxesResponseTest {
     @Test
     public void mergeIntoShouldMergeDestroyedLists() {
         // Given
-        String buildersDestroyedMessageId = "1";
+        InMemoryId buildersDestroyedMessageId = InMemoryId.of(1);
         SetMailboxesResponse.Builder nonEmptyBuilder = SetMailboxesResponse.builder()
                 .destroyed(buildersDestroyedMessageId);
-        String destroyedMessageId = "2";
+        InMemoryId destroyedMessageId = InMemoryId.of(2);
         SetMailboxesResponse testee = SetMailboxesResponse.builder()
                 .destroyed(destroyedMessageId)
                 .build();

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/SetMessagesResponseTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/SetMessagesResponseTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/SetMessagesResponseTest.java
index 24402a9..e79a044 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/SetMessagesResponseTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/SetMessagesResponseTest.java
@@ -25,6 +25,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import java.time.ZonedDateTime;
 
 import org.apache.commons.lang.NotImplementedException;
+import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.junit.Test;
 
 import com.google.common.collect.ImmutableList;
@@ -58,7 +59,7 @@ public class SetMessagesResponseTest {
                 .id(MessageId.of("user|created|1"))
                 .blobId(BlobId.of("blobId"))
                 .threadId("threadId")
-                .mailboxIds(ImmutableList.of("mailboxId"))
+                .mailboxIds(ImmutableList.of(InMemoryId.of(123)))
                 .headers(ImmutableMap.of("key", "value"))
                 .subject("subject")
                 .size(123)

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/mailbox/MailboxTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/mailbox/MailboxTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/mailbox/MailboxTest.java
index 760d890..1ac869f 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/mailbox/MailboxTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/mailbox/MailboxTest.java
@@ -23,6 +23,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.Optional;
 
+import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.junit.Test;
 
 public class MailboxTest {
@@ -45,36 +46,29 @@ public class MailboxTest {
     }
 
     @Test(expected=IllegalStateException.class)
-    public void buildShouldThrowWhenIdIsEmpty() {
-        Mailbox.builder()
-            .id("")
-            .build();
-    }
-
-    @Test(expected=IllegalStateException.class)
     public void buildShouldThrowWhenNameIsNull() {
         Mailbox.builder()
-            .id("id")
+            .id(InMemoryId.of(1))
             .build();
     }
 
     @Test(expected=IllegalStateException.class)
     public void buildShouldThrowWhenNameIsEmpty() {
         Mailbox.builder()
-            .id("id")
+            .id(InMemoryId.of(1))
             .name("")
             .build();
     }
 
     @Test
     public void buildShouldWork() {
-        Mailbox expectedMailbox = new Mailbox("id", "name", Optional.of("parentId"), Optional.of(Role.DRAFTS), SortOrder.of(123),
+        Mailbox expectedMailbox = new Mailbox(InMemoryId.of(1), "name", Optional.of(InMemoryId.of(0)), Optional.of(Role.DRAFTS), SortOrder.of(123),
                 true, true, true, true, true, true, true, 456, 789, 741, 852);
 
         Mailbox mailbox = Mailbox.builder()
-            .id("id")
+            .id(InMemoryId.of(1))
             .name("name")
-            .parentId("parentId")
+            .parentId(InMemoryId.of(0))
             .role(Optional.of(Role.DRAFTS))
             .sortOrder(SortOrder.of(123))
             .mustBeOnlyMailbox(true)
@@ -96,7 +90,7 @@ public class MailboxTest {
     @Test
     public void parentIdDefaultValueIsEmpty() {
         Mailbox mailbox = Mailbox.builder()
-            .id("id")
+            .id(InMemoryId.of(0))
             .name("name")
             .build();
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/mailbox/MailboxUpdateRequestTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/mailbox/MailboxUpdateRequestTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/mailbox/MailboxUpdateRequestTest.java
index a2ec816..1623dd8 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/mailbox/MailboxUpdateRequestTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/mailbox/MailboxUpdateRequestTest.java
@@ -23,6 +23,8 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.Optional;
 
+import org.apache.james.mailbox.inmemory.InMemoryId;
+import org.apache.james.mailbox.model.MailboxId;
 import org.junit.Test;
 
 public class MailboxUpdateRequestTest {
@@ -32,7 +34,7 @@ public class MailboxUpdateRequestTest {
         //Given
         MailboxUpdateRequest testee = MailboxUpdateRequest.builder().name("my box").build() ;
         //When
-        Optional<String> actual = testee.getParentId();
+        Optional<MailboxId> actual = testee.getParentId();
         //Then
         assertThat(actual).isEmpty();
     }
@@ -42,7 +44,7 @@ public class MailboxUpdateRequestTest {
         //Given
         MailboxUpdateRequest testee = MailboxUpdateRequest.builder().name("my box").parentId(null).build() ;
         //When
-        Optional<String> actual = testee.getParentId();
+        Optional<MailboxId> actual = testee.getParentId();
         //Then
         assertThat(actual).isNull();
     }
@@ -50,10 +52,10 @@ public class MailboxUpdateRequestTest {
     @Test
     public void getParentIdShouldReturnParentIdWhenParentIdGiven() throws Exception {
         //Given
-        String expected = "A";
+        InMemoryId expected = InMemoryId.of(123);
         MailboxUpdateRequest testee = MailboxUpdateRequest.builder().parentId(expected).name("my box").build() ;
         //When
-        Optional<String> actual = testee.getParentId();
+        Optional<MailboxId> actual = testee.getParentId();
         //Then
         assertThat(actual).contains(expected);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/MailFactoryTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/MailFactoryTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/MailFactoryTest.java
index eb97d96..e0a3099 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/MailFactoryTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/MailFactoryTest.java
@@ -36,7 +36,7 @@ import org.apache.james.jmap.utils.HtmlTextExtractor;
 import org.apache.james.jmap.utils.MailboxBasedHtmlTextExtractor;
 import org.apache.james.mailbox.FlagsBuilder;
 import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.store.TestId;
+import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailAddress;
@@ -70,7 +70,7 @@ public class MailFactoryTest {
                 .internalDate(new Date())
                 .sharedContent(new SharedByteArrayInputStream(content.getBytes(Charsets.UTF_8)))
                 .attachments(ImmutableList.of())
-                .mailboxId(TestId.of(3))
+                .mailboxId(InMemoryId.of(3))
                 .messageId(MessageId.of("test|test|2"))
                 .build();
         HtmlTextExtractor htmlTextExtractor = new MailboxBasedHtmlTextExtractor(new DefaultTextExtractor());

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/MailboxUtilsTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/MailboxUtilsTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/MailboxUtilsTest.java
index e233e9d..6c76622 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/MailboxUtilsTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/MailboxUtilsTest.java
@@ -26,6 +26,7 @@ import java.util.Optional;
 import org.apache.james.jmap.model.mailbox.Mailbox;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
 import org.apache.james.mailbox.model.MailboxId;
@@ -63,8 +64,6 @@ public class MailboxUtilsTest {
 
         Optional<Mailbox> optionalMailbox = sut.mailboxFromMailboxPath(mailboxPath, mailboxSession);
         assertThat(optionalMailbox).isPresent();
-        Mailbox mailbox = optionalMailbox.get();
-        assertThat(mailbox.getId()).isNotEmpty();
     }
 
     @Test
@@ -111,7 +110,7 @@ public class MailboxUtilsTest {
             .findMailboxByPath(mailboxPath)
             .getMailboxId();
 
-        Optional<String> optionalName = sut.getMailboxNameFromId(mailboxId.serialize(), mailboxSession);
+        Optional<String> optionalName = sut.getMailboxNameFromId(mailboxId, mailboxSession);
         assertThat(optionalName).isPresent();
         String name = optionalName.get();
         assertThat(name).isEqualTo(expected);
@@ -119,7 +118,7 @@ public class MailboxUtilsTest {
 
     @Test
     public void getMailboxNameFromIdShouldReturnEmptyWhenMailboxDoesntExist() throws Exception {
-        Optional<String> optionalName = sut.getMailboxNameFromId("unknown", mailboxSession);
+        Optional<String> optionalName = sut.getMailboxNameFromId(InMemoryId.of(987), mailboxSession);
         assertThat(optionalName).isEmpty();
     }
 
@@ -172,14 +171,14 @@ public class MailboxUtilsTest {
                 .findMailboxByPath(mailboxPath)
                 .getMailboxId();
 
-        Optional<Mailbox> mailbox = sut.mailboxFromMailboxId(mailboxId.serialize(), mailboxSession);
+        Optional<Mailbox> mailbox = sut.mailboxFromMailboxId(mailboxId, mailboxSession);
         assertThat(mailbox).isPresent();
-        assertThat(mailbox.get().getId()).isEqualTo(mailboxId.serialize());
+        assertThat(mailbox.get().getId()).isEqualTo(mailboxId);
     }
 
     @Test
     public void mailboxFromMailboxIdShouldReturnAbsentWhenDoesntExist() throws Exception {
-        Optional<Mailbox> mailbox = sut.mailboxFromMailboxId("123", mailboxSession);
+        Optional<Mailbox> mailbox = sut.mailboxFromMailboxId(InMemoryId.of(123), mailboxSession);
         assertThat(mailbox).isEmpty();
     }
 
@@ -191,14 +190,14 @@ public class MailboxUtilsTest {
                 .findMailboxByPath(mailboxPath)
                 .getMailboxId();
 
-        Optional<MailboxPath> actual = sut.mailboxPathFromMailboxId(mailboxId.serialize(), mailboxSession);
+        Optional<MailboxPath> actual = sut.mailboxPathFromMailboxId(mailboxId, mailboxSession);
         assertThat(actual).isPresent();
         assertThat(actual.get()).isEqualTo(mailboxPath);
     }
 
     @Test
     public void mailboxPathFromMailboxIdShouldReturnAbsentWhenDoesntExist() throws Exception {
-        Optional<MailboxPath> mailboxPath = sut.mailboxPathFromMailboxId("123", mailboxSession);
+        Optional<MailboxPath> mailboxPath = sut.mailboxPathFromMailboxId(InMemoryId.of(123), mailboxSession);
         assertThat(mailboxPath).isEmpty();
     }
 
@@ -209,7 +208,7 @@ public class MailboxUtilsTest {
 
     @Test(expected = IllegalStateException.class)
     public void mailboxPathFromMailboxIdShouldThrowWhenNullMailboxSession() throws Exception {
-        sut.mailboxPathFromMailboxId("A", null);
+        sut.mailboxPathFromMailboxId(InMemoryId.of(123), null);
     }
 
     @Test(expected = IllegalStateException.class)
@@ -217,11 +216,6 @@ public class MailboxUtilsTest {
         sut.mailboxPathFromMailboxId(null, null);
     }
 
-    @Test(expected = IllegalStateException.class)
-    public void mailboxPathFromMailboxIdShouldReturnAbsentWhenEmptyMailboxId() throws Exception {
-        sut.mailboxPathFromMailboxId("", mailboxSession);
-    }
-
     @Test
     public void getMailboxPathShouldReturnThePathWhenRootMailbox() throws Exception {
         MailboxPath expected = new MailboxPath("#private", user, "myBox");
@@ -231,7 +225,7 @@ public class MailboxUtilsTest {
                 .getMailboxId();
 
         Mailbox mailbox = Mailbox.builder()
-                .id(mailboxId.serialize())
+                .id(mailboxId)
                 .name("myBox")
                 .build();
 
@@ -254,9 +248,9 @@ public class MailboxUtilsTest {
                 .getMailboxId();
 
         Mailbox mailbox = Mailbox.builder()
-                .id(mailboxId.serialize())
+                .id(mailboxId)
                 .name("myBox")
-                .parentId(parentId.serialize())
+                .parentId(parentId)
                 .build();
 
         MailboxPath mailboxPath = sut.getMailboxPath(mailbox, mailboxSession);
@@ -281,9 +275,9 @@ public class MailboxUtilsTest {
                 .getMailboxId();
 
         Mailbox mailbox = Mailbox.builder()
-                .id(mailboxId.serialize())
+                .id(mailboxId)
                 .name("myBox")
-                .parentId(childId.serialize())
+                .parentId(childId)
                 .build();
 
         MailboxPath mailboxPath = sut.getMailboxPath(mailbox, mailboxSession);
@@ -298,7 +292,7 @@ public class MailboxUtilsTest {
                 .findMailboxByPath(mailboxPath)
                 .getMailboxId();
 
-        assertThat(sut.hasChildren(mailboxId.serialize(), mailboxSession)).isFalse();
+        assertThat(sut.hasChildren(mailboxId, mailboxSession)).isFalse();
     }
 
     @Test
@@ -312,6 +306,6 @@ public class MailboxUtilsTest {
         MailboxPath mailboxPath = new MailboxPath("#private", user, "inbox.myBox");
         mailboxManager.createMailbox(mailboxPath, mailboxSession);
 
-        assertThat(sut.hasChildren(parentId.serialize(), mailboxSession)).isTrue();
+        assertThat(sut.hasChildren(parentId, mailboxSession)).isTrue();
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/SortingHierarchicalCollectionsTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/SortingHierarchicalCollectionsTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/SortingHierarchicalCollectionsTest.java
index 1437f88..732b05c 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/SortingHierarchicalCollectionsTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/SortingHierarchicalCollectionsTest.java
@@ -26,14 +26,22 @@ import java.util.stream.Collectors;
 
 import org.apache.james.jmap.model.mailbox.Mailbox;
 import org.apache.james.jmap.utils.DependencyGraph.CycleDetectedException;
+import org.apache.james.mailbox.inmemory.InMemoryId;
+import org.apache.james.mailbox.model.MailboxId;
 import org.junit.Before;
 import org.junit.Test;
 
 import com.google.common.collect.ImmutableList;
 
 public class SortingHierarchicalCollectionsTest {
+    private static final InMemoryId INBOX_ID = InMemoryId.of(0);
+    private static final InMemoryId A_ID = InMemoryId.of(1);
+    private static final InMemoryId B_ID = InMemoryId.of(2);
+    private static final InMemoryId C_ID = InMemoryId.of(3);
+    private static final InMemoryId D_ID = InMemoryId.of(4);
+    private static final InMemoryId E_ID = InMemoryId.of(5);
 
-    private SortingHierarchicalCollections<Mailbox, String> sut;
+    private SortingHierarchicalCollections<Mailbox, MailboxId> sut;
 
     @Before
     public void setup() {
@@ -43,12 +51,12 @@ public class SortingHierarchicalCollectionsTest {
     @Test
     public void sortFromRootToLeafShouldReturnOrderedMailbox() {
         // Given
-        Mailbox inbox = Mailbox.builder().name("INBOX").id("INBOX").build();
-        Mailbox a = Mailbox.builder().name("A").id("A").parentId("INBOX").build();
-        Mailbox b = Mailbox.builder().name("B").id("B").parentId("INBOX").build();
-        Mailbox c = Mailbox.builder().name("C").id("C").parentId("B").build();
-        Mailbox d = Mailbox.builder().name("D").id("D").parentId("A").build();
-        Mailbox e = Mailbox.builder().name("E").id("E").parentId("C").build();
+        Mailbox inbox = Mailbox.builder().name("INBOX").id(INBOX_ID).build();
+        Mailbox a = Mailbox.builder().name("A").id(A_ID).parentId(INBOX_ID).build();
+        Mailbox b = Mailbox.builder().name("B").id(B_ID).parentId(INBOX_ID).build();
+        Mailbox c = Mailbox.builder().name("C").id(C_ID).parentId(B_ID).build();
+        Mailbox d = Mailbox.builder().name("D").id(D_ID).parentId(A_ID).build();
+        Mailbox e = Mailbox.builder().name("E").id(E_ID).parentId(C_ID).build();
         ImmutableList<Mailbox> input = ImmutableList.of(b, c, d, a, inbox, e);
 
         // When
@@ -67,9 +75,9 @@ public class SortingHierarchicalCollectionsTest {
 
     @Test
     public void sortFromRootToLeafOrphanMailboxesShouldReturnInput() {
-        Mailbox a = Mailbox.builder().name("A").id("A").build();
-        Mailbox b = Mailbox.builder().name("B").id("B").build();
-        Mailbox c = Mailbox.builder().name("C").id("C").build();
+        Mailbox a = Mailbox.builder().name("A").id(A_ID).build();
+        Mailbox b = Mailbox.builder().name("B").id(B_ID).build();
+        Mailbox c = Mailbox.builder().name("C").id(C_ID).build();
 
         ImmutableList<Mailbox> input = ImmutableList.of(a, b, c);
         List<String> result = sut.sortFromRootToLeaf(input).stream()
@@ -81,8 +89,8 @@ public class SortingHierarchicalCollectionsTest {
 
     @Test(expected=CycleDetectedException.class)
     public void sortFromRootToLeafWithLoopShouldThrow() {
-        Mailbox a = Mailbox.builder().name("A").id("A").parentId("B").build();
-        Mailbox b = Mailbox.builder().name("B").id("B").parentId("A").build();
+        Mailbox a = Mailbox.builder().name("A").id(A_ID).parentId(B_ID).build();
+        Mailbox b = Mailbox.builder().name("B").id(B_ID).parentId(A_ID).build();
 
         ImmutableList<Mailbox> input = ImmutableList.of(a, b);
 
@@ -92,12 +100,12 @@ public class SortingHierarchicalCollectionsTest {
     @Test
     public void sortFromLeafToRootShouldReturnOrderedMailbox() {
         //Given
-        Mailbox inbox = Mailbox.builder().name("INBOX").id("INBOX").build();
-        Mailbox a = Mailbox.builder().name("A").id("A").parentId("INBOX").build();
-        Mailbox b = Mailbox.builder().name("B").id("B").parentId("INBOX").build();
-        Mailbox c = Mailbox.builder().name("C").id("C").parentId("B").build();
-        Mailbox d = Mailbox.builder().name("D").id("D").parentId("A").build();
-        Mailbox e = Mailbox.builder().name("E").id("E").parentId("C").build();
+        Mailbox inbox = Mailbox.builder().name("INBOX").id(INBOX_ID).build();
+        Mailbox a = Mailbox.builder().name("A").id(A_ID).parentId(INBOX_ID).build();
+        Mailbox b = Mailbox.builder().name("B").id(B_ID).parentId(INBOX_ID).build();
+        Mailbox c = Mailbox.builder().name("C").id(C_ID).parentId(B_ID).build();
+        Mailbox d = Mailbox.builder().name("D").id(D_ID).parentId(A_ID).build();
+        Mailbox e = Mailbox.builder().name("E").id(E_ID).parentId(C_ID).build();
 
         ImmutableList<Mailbox> input = ImmutableList.of(b, c, d, a, inbox, e);
 
@@ -116,9 +124,9 @@ public class SortingHierarchicalCollectionsTest {
 
     @Test
     public void sortFromLeafToRootOrphanMailboxesShouldReturnInput() {
-        Mailbox a = Mailbox.builder().name("A").id("A").build();
-        Mailbox b = Mailbox.builder().name("B").id("B").build();
-        Mailbox c = Mailbox.builder().name("C").id("C").build();
+        Mailbox a = Mailbox.builder().name("A").id(A_ID).build();
+        Mailbox b = Mailbox.builder().name("B").id(B_ID).build();
+        Mailbox c = Mailbox.builder().name("C").id(C_ID).build();
 
         ImmutableList<Mailbox> input = ImmutableList.of(a, b, c);
         List<String> result = sut.sortFromLeafToRoot(input).stream()
@@ -130,8 +138,8 @@ public class SortingHierarchicalCollectionsTest {
 
     @Test(expected=CycleDetectedException.class)
     public void sortFromLeafToRootWithLoopShouldThrow() {
-        Mailbox a = Mailbox.builder().name("A").id("A").parentId("B").build();
-        Mailbox b = Mailbox.builder().name("B").id("B").parentId("A").build();
+        Mailbox a = Mailbox.builder().name("A").id(A_ID).parentId(B_ID).build();
+        Mailbox b = Mailbox.builder().name("B").id(B_ID).parentId(A_ID).build();
 
         ImmutableList<Mailbox> input = ImmutableList.of(a, b);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8ec9ab93/server/protocols/jmap/src/test/resources/json/message.json
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/resources/json/message.json b/server/protocols/jmap/src/test/resources/json/message.json
index 72d37bd..e246358 100644
--- a/server/protocols/jmap/src/test/resources/json/message.json
+++ b/server/protocols/jmap/src/test/resources/json/message.json
@@ -2,7 +2,7 @@
     "id": "username|mailbox|1",
     "blobId": "myBlobId",
     "threadId": "myThreadId",
-    "mailboxIds": ["mailboxId1", "mailboxId2"],
+    "mailboxIds": ["1", "2"],
     "inReplyToMessageId": "myInReplyToMessageId",
     "isUnread": true,
     "isFlagged": true,


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


[04/10] james-project git commit: JAMES-1818 Use getMailboxById in MailboxUtils

Posted by ro...@apache.org.
JAMES-1818 Use getMailboxById in MailboxUtils


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

Branch: refs/heads/master
Commit: df3a8a0bb2927e8af394d0e8e1985a7d4d9d168c
Parents: 22ed8ef
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Tue Aug 30 17:14:06 2016 +0200
Committer: Raphael Ouazana <ra...@linagora.com>
Committed: Mon Sep 5 14:42:00 2016 +0200

----------------------------------------------------------------------
 .../apache/james/jmap/utils/MailboxUtils.java   | 60 ++++++++++----------
 .../jmap/methods/GetMailboxesMethodTest.java    |  2 +-
 .../james/jmap/utils/MailboxUtilsTest.java      |  2 +-
 3 files changed, 33 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/df3a8a0b/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 8bb4ba3..bfb9acc 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
@@ -31,13 +31,14 @@ import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.store.mail.MailboxMapperFactory;
 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;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Splitter;
@@ -46,38 +47,40 @@ public class MailboxUtils {
 
     private static final boolean DONT_RESET_RECENT = false;
     private static final Logger LOGGER = LoggerFactory.getLogger(MailboxUtils.class);
-    private static final String WILDCARD = "%";
 
     private final MailboxManager mailboxManager;
-    private final MailboxMapperFactory mailboxMapperFactory;
 
     @Inject
     @VisibleForTesting
-    public MailboxUtils(MailboxManager mailboxManager, MailboxMapperFactory mailboxMapperFactory) {
+    public MailboxUtils(MailboxManager mailboxManager) {
         this.mailboxManager = mailboxManager;
-        this.mailboxMapperFactory = mailboxMapperFactory;
     }
 
     public Optional<Mailbox> mailboxFromMailboxPath(MailboxPath mailboxPath, MailboxSession mailboxSession) {
         try {
-            Optional<Role> role = Role.from(mailboxPath.getName());
             MessageManager mailbox = mailboxManager.getMailbox(mailboxPath, mailboxSession);
-            MessageManager.MetaData mailboxMetaData = getMailboxMetaData(mailbox, mailboxSession);
-            return Optional.ofNullable(Mailbox.builder()
-                    .id(mailbox.getId())
-                    .name(getName(mailboxPath, mailboxSession))
-                    .parentId(getParentIdFromMailboxPath(mailboxPath, mailboxSession).orElse(null))
-                    .role(role)
-                    .unreadMessages(mailboxMetaData.getUnseenCount())
-                    .totalMessages(mailboxMetaData.getMessageCount())
-                    .sortOrder(SortOrder.getSortOrder(role))
-                    .build());
+            return mailboxFromMessageManager(mailbox, mailboxSession);
         } catch (MailboxException e) {
-            LOGGER.warn("Cannot find mailbox for :" + mailboxPath.getName(), e);
+            LOGGER.warn("Cannot find mailbox for: " + mailboxPath.getName(), e);
             return Optional.empty();
         }
     }
 
+    private Optional<Mailbox> mailboxFromMessageManager(MessageManager messageManager, MailboxSession mailboxSession) throws MailboxException {
+        MailboxPath mailboxPath = messageManager.getMailboxPath();
+        Optional<Role> role = Role.from(mailboxPath.getName());
+        MessageManager.MetaData mailboxMetaData = getMailboxMetaData(messageManager, mailboxSession);
+        return Optional.ofNullable(Mailbox.builder()
+                .id(messageManager.getId())
+                .name(getName(mailboxPath, mailboxSession))
+                .parentId(getParentIdFromMailboxPath(mailboxPath, mailboxSession).orElse(null))
+                .role(role)
+                .unreadMessages(mailboxMetaData.getUnseenCount())
+                .totalMessages(mailboxMetaData.getMessageCount())
+                .sortOrder(SortOrder.getSortOrder(role))
+                .build());
+    }
+
     private MessageManager.MetaData getMailboxMetaData(MessageManager messageManager, MailboxSession mailboxSession) throws MailboxException {
         return messageManager.getMetaData(DONT_RESET_RECENT, mailboxSession, MessageManager.MetaData.FetchGroup.UNSEEN_COUNT);
     }
@@ -98,15 +101,16 @@ public class MailboxUtils {
 
     public Optional<String> getMailboxNameFromId(MailboxId mailboxId, MailboxSession mailboxSession) throws MailboxException {
         return getMailboxFromId(mailboxId, mailboxSession)
-                .map(org.apache.james.mailbox.store.mail.model.Mailbox::getName);
+                .map(Throwing.function(MessageManager::getMailboxPath).sneakyThrow())
+                .map(MailboxPath::getName);
     }
 
-    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().equals(mailboxId))
-                .findFirst();
+    private Optional<MessageManager> getMailboxFromId(MailboxId mailboxId, MailboxSession mailboxSession) throws MailboxException {
+        try {
+            return Optional.of(mailboxManager.getMailbox(mailboxId, mailboxSession));
+        } catch (MailboxNotFoundException e) {
+            return Optional.empty();
+        }
     }
 
     @VisibleForTesting Optional<MailboxId> getParentIdFromMailboxPath(MailboxPath mailboxPath, MailboxSession mailboxSession) throws MailboxException {
@@ -119,12 +123,10 @@ public class MailboxUtils {
     }
 
     public Optional<Mailbox> mailboxFromMailboxId(MailboxId mailboxId, MailboxSession mailboxSession) {
+        ThrowingFunction<MessageManager, Optional<Mailbox>> toMailbox = path -> mailboxFromMessageManager(path, mailboxSession);
         try {
             return getMailboxFromId(mailboxId, mailboxSession)
-                .flatMap(jamesMailbox ->
-                    mailboxFromMailboxPath(new MailboxPath(jamesMailbox.getNamespace(), mailboxSession.getUser().getUserName(), jamesMailbox.getName()), 
-                            mailboxSession)
-                );
+                .flatMap(Throwing.function(toMailbox).sneakyThrow());
         } catch (MailboxException e) {
             return Optional.empty();
         }
@@ -144,7 +146,7 @@ public class MailboxUtils {
 
     public boolean hasChildren(MailboxId mailboxId, MailboxSession mailboxSession) throws MailboxException {
         return getMailboxFromId(mailboxId, mailboxSession)
-                .map(mailbox -> new MailboxPath(mailbox.getNamespace(), mailbox.getUser(), mailbox.getName()))
+                .map(Throwing.function(MessageManager::getMailboxPath).sneakyThrow())
                 .map(Throwing.function(path -> mailboxManager.hasChildren(path, mailboxSession)))
                 .orElse(false);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/df3a8a0b/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 e321085..e3461d4 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
@@ -82,7 +82,7 @@ public class GetMailboxesMethodTest {
         MessageParser messageParser = new MessageParser();
         mailboxManager = new StoreMailboxManager(mailboxMapperFactory, new MockAuthenticator(), aclResolver, groupMembershipResolver, messageParser);
         mailboxManager.init();
-        mailboxUtils = new MailboxUtils(mailboxManager, mailboxMapperFactory);
+        mailboxUtils = new MailboxUtils(mailboxManager);
 
         getMailboxesMethod = new GetMailboxesMethod(mailboxManager, mailboxUtils);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/df3a8a0b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/MailboxUtilsTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/MailboxUtilsTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/MailboxUtilsTest.java
index 6c76622..ef0a93c 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/MailboxUtilsTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/MailboxUtilsTest.java
@@ -54,7 +54,7 @@ public class MailboxUtilsTest {
         mailboxMapperFactory = new InMemoryMailboxSessionMapperFactory();
         user = "user@domain.org";
         mailboxSession = mailboxManager.login(user, "pass", LOGGER);
-        sut = new MailboxUtils(mailboxManager, mailboxMapperFactory);
+        sut = new MailboxUtils(mailboxManager);
     }
 
     @Test


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


[08/10] james-project git commit: JAMES-1818 Introduce MailboxFactory to simplify MailboxUtils

Posted by ro...@apache.org.
JAMES-1818 Introduce MailboxFactory to simplify MailboxUtils


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

Branch: refs/heads/master
Commit: 7ecb7ef5804d8115ee64b1f2e734f87b99609939
Parents: 268f001
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Wed Aug 31 17:06:19 2016 +0200
Committer: Raphael Ouazana <ra...@linagora.com>
Committed: Mon Sep 5 14:42:01 2016 +0200

----------------------------------------------------------------------
 .../org/apache/james/jmap/JMAPCommonModule.java |   2 +
 .../james/jmap/methods/GetMailboxesMethod.java  |  10 +-
 .../methods/SetMailboxesCreationProcessor.java  |  10 +-
 .../SetMailboxesDestructionProcessor.java       |   7 +-
 .../methods/SetMailboxesUpdateProcessor.java    |   7 +-
 .../apache/james/jmap/model/MailboxFactory.java | 112 +++++++++++++
 .../apache/james/jmap/utils/MailboxUtils.java   |  85 +---------
 .../jmap/methods/GetMailboxesMethodTest.java    |  10 +-
 .../SetMailboxesCreationProcessorTest.java      |   7 +-
 .../SetMailboxesUpdateProcessorTest.java        |   7 +-
 .../james/jmap/model/MailboxFactoryTest.java    | 165 +++++++++++++++++++
 .../james/jmap/utils/MailboxUtilsTest.java      | 109 ------------
 12 files changed, 317 insertions(+), 214 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/7ecb7ef5/server/container/guice/guice-common/src/main/java/org/apache/james/jmap/JMAPCommonModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/jmap/JMAPCommonModule.java b/server/container/guice/guice-common/src/main/java/org/apache/james/jmap/JMAPCommonModule.java
index e9d5c6f..c6bd8a3 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/jmap/JMAPCommonModule.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/jmap/JMAPCommonModule.java
@@ -30,6 +30,7 @@ import org.apache.james.jmap.crypto.JamesSignatureHandler;
 import org.apache.james.jmap.crypto.SignatureHandler;
 import org.apache.james.jmap.crypto.SignedTokenFactory;
 import org.apache.james.jmap.crypto.SignedTokenManager;
+import org.apache.james.jmap.model.MailboxFactory;
 import org.apache.james.jmap.model.MessageContentExtractor;
 import org.apache.james.jmap.model.MessageFactory;
 import org.apache.james.jmap.model.MessagePreviewGenerator;
@@ -62,6 +63,7 @@ public class JMAPCommonModule extends AbstractModule {
         bind(MailSpool.class).in(Scopes.SINGLETON);
         bind(MailFactory.class).in(Scopes.SINGLETON);
         bind(AutomaticallySentMailDetectorImpl.class).in(Scopes.SINGLETON);
+        bind(MailboxFactory.class).in(Scopes.SINGLETON);
         bind(MessageFactory.class).in(Scopes.SINGLETON);
         bind(MessagePreviewGenerator.class).in(Scopes.SINGLETON);
         bind(MessageContentExtractor.class).in(Scopes.SINGLETON);

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ecb7ef5/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 3e739ed..446336f 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
@@ -30,9 +30,9 @@ import javax.inject.Inject;
 import org.apache.james.jmap.model.ClientId;
 import org.apache.james.jmap.model.GetMailboxesRequest;
 import org.apache.james.jmap.model.GetMailboxesResponse;
+import org.apache.james.jmap.model.MailboxFactory;
 import org.apache.james.jmap.model.MailboxProperty;
 import org.apache.james.jmap.model.mailbox.Mailbox;
-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;
@@ -53,12 +53,12 @@ public class GetMailboxesMethod implements Method {
     private static final Method.Response.Name RESPONSE_NAME = Method.Response.name("mailboxes");
 
     private final MailboxManager mailboxManager; 
-    private final MailboxUtils mailboxUtils;
+    private final MailboxFactory mailboxFactory;
 
     @Inject
-    @VisibleForTesting public GetMailboxesMethod(MailboxManager mailboxManager, MailboxUtils mailboxUtils) {
+    @VisibleForTesting public GetMailboxesMethod(MailboxManager mailboxManager, MailboxFactory mailboxFactory) {
         this.mailboxManager = mailboxManager;
-        this.mailboxUtils = mailboxUtils;
+        this.mailboxFactory = mailboxFactory;
     }
 
     @Override
@@ -92,7 +92,7 @@ public class GetMailboxesMethod implements Method {
             retrieveUserMailboxes(mailboxSession)
                 .stream()
                 .map(MailboxMetaData::getPath)
-                .map(mailboxPath -> mailboxUtils.mailboxFromMailboxPath(mailboxPath, mailboxSession))
+                .map(mailboxPath -> mailboxFactory.fromMailboxPath(mailboxPath, mailboxSession))
                 .filter(Optional::isPresent)
                 .map(Optional::get)
                 .filter(filterMailboxesById(mailboxesRequest.getIds()))

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ecb7ef5/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 01dc2d7..28e36f6 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
@@ -28,13 +28,13 @@ import javax.inject.Inject;
 import org.apache.james.jmap.exceptions.MailboxNameException;
 import org.apache.james.jmap.exceptions.MailboxParentNotFoundException;
 import org.apache.james.jmap.model.MailboxCreationId;
+import org.apache.james.jmap.model.MailboxFactory;
 import org.apache.james.jmap.model.SetError;
 import org.apache.james.jmap.model.SetMailboxesRequest;
 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.jmap.utils.DependencyGraph.CycleDetectedException;
-import org.apache.james.jmap.utils.MailboxUtils;
 import org.apache.james.jmap.utils.SortingHierarchicalCollections;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
@@ -57,18 +57,18 @@ public class SetMailboxesCreationProcessor implements SetMailboxesProcessor {
 
     private final MailboxManager mailboxManager;
     private final SortingHierarchicalCollections<Map.Entry<MailboxCreationId, MailboxCreateRequest>, MailboxCreationId> sortingHierarchicalCollections;
-    private final MailboxUtils mailboxUtils;
+    private final MailboxFactory mailboxFactory;
     private final Factory mailboxIdFactory;
 
     @Inject
     @VisibleForTesting
-    SetMailboxesCreationProcessor(MailboxManager mailboxManager, MailboxUtils mailboxUtils, MailboxId.Factory mailboxIdFactory) {
+    SetMailboxesCreationProcessor(MailboxManager mailboxManager, MailboxFactory mailboxFactory, MailboxId.Factory mailboxIdFactory) {
         this.mailboxManager = mailboxManager;
         this.sortingHierarchicalCollections =
             new SortingHierarchicalCollections<Map.Entry<MailboxCreationId, MailboxCreateRequest>, MailboxCreationId>(
                 x -> x.getKey(),
                 x -> x.getValue().getParentId());
-        this.mailboxUtils = mailboxUtils;
+        this.mailboxFactory = mailboxFactory;
         this.mailboxIdFactory = mailboxIdFactory;
     }
 
@@ -101,7 +101,7 @@ public class SetMailboxesCreationProcessor implements SetMailboxesProcessor {
             ensureValidMailboxName(mailboxRequest, mailboxSession);
             MailboxPath mailboxPath = getMailboxPath(mailboxRequest, creationIdsToCreatedMailboxId, mailboxSession);
             mailboxManager.createMailbox(mailboxPath, mailboxSession);
-            Optional<Mailbox> mailbox = mailboxUtils.mailboxFromMailboxPath(mailboxPath, mailboxSession);
+            Optional<Mailbox> mailbox = mailboxFactory.fromMailboxPath(mailboxPath, mailboxSession);
             if (mailbox.isPresent()) {
                 builder.created(mailboxCreationId, mailbox.get());
                 creationIdsToCreatedMailboxId.put(mailboxCreationId, mailbox.get().getId());

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ecb7ef5/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 a777c44..ea06438 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
@@ -27,6 +27,7 @@ import javax.inject.Inject;
 
 import org.apache.james.jmap.exceptions.MailboxHasChildException;
 import org.apache.james.jmap.exceptions.SystemMailboxNotUpdatableException;
+import org.apache.james.jmap.model.MailboxFactory;
 import org.apache.james.jmap.model.SetError;
 import org.apache.james.jmap.model.SetMailboxesRequest;
 import org.apache.james.jmap.model.SetMailboxesResponse;
@@ -53,16 +54,18 @@ public class SetMailboxesDestructionProcessor implements SetMailboxesProcessor {
     private final MailboxManager mailboxManager;
     private final SortingHierarchicalCollections<Map.Entry<MailboxId, Mailbox>, MailboxId> sortingHierarchicalCollections;
     private final MailboxUtils mailboxUtils;
+    private final MailboxFactory mailboxFactory;
 
     @Inject
     @VisibleForTesting
-    SetMailboxesDestructionProcessor(MailboxManager mailboxManager, MailboxUtils mailboxUtils) {
+    SetMailboxesDestructionProcessor(MailboxManager mailboxManager, MailboxUtils mailboxUtils, MailboxFactory mailboxFactory) {
         this.mailboxManager = mailboxManager;
         this.sortingHierarchicalCollections =
             new SortingHierarchicalCollections<>(
                     Entry::getKey,
                     x -> x.getValue().getParentId());
         this.mailboxUtils = mailboxUtils;
+        this.mailboxFactory = mailboxFactory;
     }
 
     public SetMailboxesResponse process(SetMailboxesRequest request, MailboxSession mailboxSession) {
@@ -79,7 +82,7 @@ public class SetMailboxesDestructionProcessor implements SetMailboxesProcessor {
     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))
+            .map(id -> mailboxFactory.fromMailboxId(id, mailboxSession))
             .filter(Optional::isPresent)
             .map(Optional::get)
             .forEach(mailbox -> idToMailboxBuilder.put(mailbox.getId(), mailbox));

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ecb7ef5/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 438e101..0f52829 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
@@ -27,6 +27,7 @@ import org.apache.james.jmap.exceptions.MailboxHasChildException;
 import org.apache.james.jmap.exceptions.MailboxNameException;
 import org.apache.james.jmap.exceptions.MailboxParentNotFoundException;
 import org.apache.james.jmap.exceptions.SystemMailboxNotUpdatableException;
+import org.apache.james.jmap.model.MailboxFactory;
 import org.apache.james.jmap.model.SetError;
 import org.apache.james.jmap.model.SetMailboxesRequest;
 import org.apache.james.jmap.model.SetMailboxesResponse;
@@ -53,12 +54,14 @@ public class SetMailboxesUpdateProcessor implements SetMailboxesProcessor {
 
     private final MailboxUtils mailboxUtils;
     private final MailboxManager mailboxManager;
+    private final MailboxFactory mailboxFactory;
 
     @Inject
     @VisibleForTesting
-    SetMailboxesUpdateProcessor(MailboxUtils mailboxUtils, MailboxManager mailboxManager) {
+    SetMailboxesUpdateProcessor(MailboxUtils mailboxUtils, MailboxManager mailboxManager, MailboxFactory mailboxFactory) {
         this.mailboxUtils = mailboxUtils;
         this.mailboxManager = mailboxManager;
+        this.mailboxFactory = mailboxFactory;
     }
 
     @Override
@@ -126,7 +129,7 @@ public class SetMailboxesUpdateProcessor implements SetMailboxesProcessor {
     }
 
     private Mailbox getMailbox(MailboxId mailboxId, MailboxSession mailboxSession) throws MailboxNotFoundException {
-        return mailboxUtils.mailboxFromMailboxId(mailboxId, mailboxSession)
+        return mailboxFactory.fromMailboxId(mailboxId, mailboxSession)
                 .orElseThrow(() -> new MailboxNotFoundException(mailboxId.serialize()));
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ecb7ef5/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxFactory.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxFactory.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxFactory.java
new file mode 100644
index 0000000..7ac9e42
--- /dev/null
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxFactory.java
@@ -0,0 +1,112 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.jmap.model;
+
+import java.util.List;
+import java.util.Optional;
+
+import javax.inject.Inject;
+
+import org.apache.james.jmap.model.mailbox.Mailbox;
+import org.apache.james.jmap.model.mailbox.Role;
+import org.apache.james.jmap.model.mailbox.SortOrder;
+import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageManager;
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.MailboxId;
+import org.apache.james.mailbox.model.MailboxPath;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Splitter;
+
+public class MailboxFactory {
+    private static final boolean DONT_RESET_RECENT = false;
+    private static final Logger LOGGER = LoggerFactory.getLogger(MailboxFactory.class);
+
+    private final MailboxManager mailboxManager;
+
+    @Inject
+    public MailboxFactory(MailboxManager mailboxManager) {
+        this.mailboxManager = mailboxManager;
+    }
+    
+    public Optional<Mailbox> fromMailboxPath(MailboxPath mailboxPath, MailboxSession mailboxSession) {
+        try {
+            MessageManager mailbox = mailboxManager.getMailbox(mailboxPath, mailboxSession);
+            return fromMessageManager(mailbox, mailboxSession);
+        } catch (MailboxException e) {
+            LOGGER.warn("Cannot find mailbox for: " + mailboxPath.getName(), e);
+            return Optional.empty();
+        }
+    }
+
+    public Optional<Mailbox> fromMailboxId(MailboxId mailboxId, MailboxSession mailboxSession) {
+        try {
+            MessageManager mailbox = mailboxManager.getMailbox(mailboxId, mailboxSession);
+            return fromMessageManager(mailbox, mailboxSession);
+        } catch (MailboxException e) {
+            return Optional.empty();
+        }
+    }
+
+    private Optional<Mailbox> fromMessageManager(MessageManager messageManager, MailboxSession mailboxSession) throws MailboxException {
+        MailboxPath mailboxPath = messageManager.getMailboxPath();
+        Optional<Role> role = Role.from(mailboxPath.getName());
+        MessageManager.MetaData mailboxMetaData = getMailboxMetaData(messageManager, mailboxSession);
+        return Optional.ofNullable(Mailbox.builder()
+                .id(messageManager.getId())
+                .name(getName(mailboxPath, mailboxSession))
+                .parentId(getParentIdFromMailboxPath(mailboxPath, mailboxSession).orElse(null))
+                .role(role)
+                .unreadMessages(mailboxMetaData.getUnseenCount())
+                .totalMessages(mailboxMetaData.getMessageCount())
+                .sortOrder(SortOrder.getSortOrder(role))
+                .build());
+    }
+
+    private MessageManager.MetaData getMailboxMetaData(MessageManager messageManager, MailboxSession mailboxSession) throws MailboxException {
+        return messageManager.getMetaData(DONT_RESET_RECENT, mailboxSession, MessageManager.MetaData.FetchGroup.UNSEEN_COUNT);
+    }
+
+    @VisibleForTesting String getName(MailboxPath mailboxPath, MailboxSession mailboxSession) {
+        String name = mailboxPath.getName();
+        if (name.contains(String.valueOf(mailboxSession.getPathDelimiter()))) {
+            List<String> levels = Splitter.on(mailboxSession.getPathDelimiter()).splitToList(name);
+            return levels.get(levels.size() - 1);
+        }
+        return name;
+    }
+
+    @VisibleForTesting Optional<MailboxId> getParentIdFromMailboxPath(MailboxPath mailboxPath, MailboxSession mailboxSession) throws MailboxException {
+        List<MailboxPath> levels = mailboxPath.getHierarchyLevels(mailboxSession.getPathDelimiter());
+        if (levels.size() <= 1) {
+            return Optional.empty();
+        }
+        MailboxPath parent = levels.get(levels.size() - 2);
+        return Optional.of(getMailboxId(parent, mailboxSession));
+    }
+
+    private MailboxId getMailboxId(MailboxPath mailboxPath, MailboxSession mailboxSession) throws MailboxException {
+        return mailboxManager.getMailbox(mailboxPath, mailboxSession)
+                .getId();
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ecb7ef5/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 666b149..e94fd58 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
@@ -19,34 +19,21 @@ O * Licensed to the Apache Software Foundation (ASF) under one   *
 
 package org.apache.james.jmap.utils;
 
-import java.util.List;
 import java.util.Optional;
 
 import javax.inject.Inject;
 
-import org.apache.james.jmap.model.mailbox.Mailbox;
-import org.apache.james.jmap.model.mailbox.Role;
-import org.apache.james.jmap.model.mailbox.SortOrder;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.MailboxId;
-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;
-import com.google.common.base.Splitter;
 
 public class MailboxUtils {
-
-    private static final boolean DONT_RESET_RECENT = false;
-    private static final Logger LOGGER = LoggerFactory.getLogger(MailboxUtils.class);
-
     private final MailboxManager mailboxManager;
 
     @Inject
@@ -55,47 +42,11 @@ public class MailboxUtils {
         this.mailboxManager = mailboxManager;
     }
 
-    public Optional<Mailbox> mailboxFromMailboxPath(MailboxPath mailboxPath, MailboxSession mailboxSession) {
-        try {
-            MessageManager mailbox = mailboxManager.getMailbox(mailboxPath, mailboxSession);
-            return mailboxFromMessageManager(mailbox, mailboxSession);
-        } catch (MailboxException e) {
-            LOGGER.warn("Cannot find mailbox for: " + mailboxPath.getName(), e);
-            return Optional.empty();
-        }
-    }
-
-    private Optional<Mailbox> mailboxFromMessageManager(MessageManager messageManager, MailboxSession mailboxSession) throws MailboxException {
-        MailboxPath mailboxPath = messageManager.getMailboxPath();
-        Optional<Role> role = Role.from(mailboxPath.getName());
-        MessageManager.MetaData mailboxMetaData = getMailboxMetaData(messageManager, mailboxSession);
-        return Optional.ofNullable(Mailbox.builder()
-                .id(messageManager.getId())
-                .name(getName(mailboxPath, mailboxSession))
-                .parentId(getParentIdFromMailboxPath(mailboxPath, mailboxSession).orElse(null))
-                .role(role)
-                .unreadMessages(mailboxMetaData.getUnseenCount())
-                .totalMessages(mailboxMetaData.getMessageCount())
-                .sortOrder(SortOrder.getSortOrder(role))
-                .build());
-    }
-
-    private MessageManager.MetaData getMailboxMetaData(MessageManager messageManager, MailboxSession mailboxSession) throws MailboxException {
-        return messageManager.getMetaData(DONT_RESET_RECENT, mailboxSession, MessageManager.MetaData.FetchGroup.UNSEEN_COUNT);
-    }
-
-    private MailboxId getMailboxId(MailboxPath mailboxPath, MailboxSession mailboxSession) throws MailboxException {
-        return mailboxManager.getMailbox(mailboxPath, mailboxSession)
-                .getId();
-    }
-
-    @VisibleForTesting String getName(MailboxPath mailboxPath, MailboxSession mailboxSession) {
-        String name = mailboxPath.getName();
-        if (name.contains(String.valueOf(mailboxSession.getPathDelimiter()))) {
-            List<String> levels = Splitter.on(mailboxSession.getPathDelimiter()).splitToList(name);
-            return levels.get(levels.size() - 1);
-        }
-        return name;
+    public boolean hasChildren(MailboxId mailboxId, MailboxSession mailboxSession) throws MailboxException {
+        return getMailboxFromId(mailboxId, mailboxSession)
+                .map(Throwing.function(MessageManager::getMailboxPath).sneakyThrow())
+                .map(Throwing.function(path -> mailboxManager.hasChildren(path, mailboxSession)))
+                .orElse(false);
     }
 
     private Optional<MessageManager> getMailboxFromId(MailboxId mailboxId, MailboxSession mailboxSession) throws MailboxException {
@@ -105,30 +56,4 @@ public class MailboxUtils {
             return Optional.empty();
         }
     }
-
-    @VisibleForTesting Optional<MailboxId> getParentIdFromMailboxPath(MailboxPath mailboxPath, MailboxSession mailboxSession) throws MailboxException {
-        List<MailboxPath> levels = mailboxPath.getHierarchyLevels(mailboxSession.getPathDelimiter());
-        if (levels.size() <= 1) {
-            return Optional.empty();
-        }
-        MailboxPath parent = levels.get(levels.size() - 2);
-        return Optional.of(getMailboxId(parent, mailboxSession));
-    }
-
-    public Optional<Mailbox> mailboxFromMailboxId(MailboxId mailboxId, MailboxSession mailboxSession) {
-        ThrowingFunction<MessageManager, Optional<Mailbox>> toMailbox = path -> mailboxFromMessageManager(path, mailboxSession);
-        try {
-            return getMailboxFromId(mailboxId, mailboxSession)
-                .flatMap(Throwing.function(toMailbox).sneakyThrow());
-        } catch (MailboxException e) {
-            return Optional.empty();
-        }
-    }
-
-    public boolean hasChildren(MailboxId mailboxId, MailboxSession mailboxSession) throws MailboxException {
-        return getMailboxFromId(mailboxId, mailboxSession)
-                .map(Throwing.function(MessageManager::getMailboxPath).sneakyThrow())
-                .map(Throwing.function(path -> mailboxManager.hasChildren(path, mailboxSession)))
-                .orElse(false);
-    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ecb7ef5/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 e3461d4..be20137 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
@@ -34,10 +34,10 @@ import javax.mail.Flags;
 import org.apache.james.jmap.model.ClientId;
 import org.apache.james.jmap.model.GetMailboxesRequest;
 import org.apache.james.jmap.model.GetMailboxesResponse;
+import org.apache.james.jmap.model.MailboxFactory;
 import org.apache.james.jmap.model.mailbox.Mailbox;
 import org.apache.james.jmap.model.mailbox.Role;
 import org.apache.james.jmap.model.mailbox.SortOrder;
-import org.apache.james.jmap.utils.MailboxUtils;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
@@ -71,7 +71,7 @@ public class GetMailboxesMethodTest {
     private GetMailboxesMethod getMailboxesMethod;
     private ClientId clientId;
     private InMemoryMailboxSessionMapperFactory mailboxMapperFactory;
-    private MailboxUtils mailboxUtils;
+    private MailboxFactory mailboxFactory;
 
     @Before
     public void setup() throws Exception {
@@ -82,9 +82,9 @@ public class GetMailboxesMethodTest {
         MessageParser messageParser = new MessageParser();
         mailboxManager = new StoreMailboxManager(mailboxMapperFactory, new MockAuthenticator(), aclResolver, groupMembershipResolver, messageParser);
         mailboxManager.init();
-        mailboxUtils = new MailboxUtils(mailboxManager);
+        mailboxFactory = new MailboxFactory(mailboxManager);
 
-        getMailboxesMethod = new GetMailboxesMethod(mailboxManager, mailboxUtils);
+        getMailboxesMethod = new GetMailboxesMethod(mailboxManager, mailboxFactory);
     }
 
     @Test
@@ -112,7 +112,7 @@ public class GetMailboxesMethodTest {
             .thenReturn(ImmutableList.of(new MailboxPath("namespace", "user", "name")));
         when(mockedMailboxManager.getMailbox(any(MailboxPath.class), any()))
             .thenThrow(new MailboxException());
-        GetMailboxesMethod testee = new GetMailboxesMethod(mockedMailboxManager, mailboxUtils);
+        GetMailboxesMethod testee = new GetMailboxesMethod(mockedMailboxManager, mailboxFactory);
         
         GetMailboxesRequest getMailboxesRequest = GetMailboxesRequest.builder()
                 .build();

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ecb7ef5/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 fdf8f31..c16aa4e 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
@@ -24,11 +24,11 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import org.apache.james.jmap.model.MailboxCreationId;
+import org.apache.james.jmap.model.MailboxFactory;
 import org.apache.james.jmap.model.SetError;
 import org.apache.james.jmap.model.SetMailboxesRequest;
 import org.apache.james.jmap.model.SetMailboxesResponse;
 import org.apache.james.jmap.model.mailbox.MailboxCreateRequest;
-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;
@@ -40,17 +40,16 @@ import org.junit.Test;
 
 public class SetMailboxesCreationProcessorTest {
 
-    private MailboxUtils mailboxUtils;
     private Factory mailboxIdFactory;
+    private MailboxFactory mailboxFactory;
     private SetMailboxesCreationProcessor sut;
     private MailboxManager mailboxManager;
 
     @Before
     public void setup() {
-        mailboxUtils = mock(MailboxUtils.class);
         mailboxManager = mock(MailboxManager.class);
         mailboxIdFactory = new InMemoryId.Factory();
-        sut = new SetMailboxesCreationProcessor(mailboxManager, mailboxUtils, mailboxIdFactory);
+        sut = new SetMailboxesCreationProcessor(mailboxManager, mailboxFactory, mailboxIdFactory);
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ecb7ef5/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 377681c..ec1cc15 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
@@ -25,6 +25,7 @@ import static org.mockito.Mockito.when;
 
 import java.util.Optional;
 
+import org.apache.james.jmap.model.MailboxFactory;
 import org.apache.james.jmap.model.SetError;
 import org.apache.james.jmap.model.SetMailboxesRequest;
 import org.apache.james.jmap.model.SetMailboxesResponse;
@@ -43,6 +44,7 @@ public class SetMailboxesUpdateProcessorTest {
 
     private MailboxManager mockedMailboxManager;
     private MailboxUtils mockedMailboxUtils;
+    private MailboxFactory mockedMailboxFactory;
     private MailboxSession mockedMailboxSession;
     private SetMailboxesUpdateProcessor sut;
 
@@ -50,8 +52,9 @@ public class SetMailboxesUpdateProcessorTest {
     public void setup() {
         mockedMailboxManager = mock(MailboxManager.class);
         mockedMailboxUtils = mock(MailboxUtils.class);
+        mockedMailboxFactory = mock(MailboxFactory.class);
         mockedMailboxSession = mock(MailboxSession.class);
-        sut = new SetMailboxesUpdateProcessor(mockedMailboxUtils, mockedMailboxManager);
+        sut = new SetMailboxesUpdateProcessor(mockedMailboxUtils, mockedMailboxManager, mockedMailboxFactory);
     }
 
     @Test
@@ -63,7 +66,7 @@ public class SetMailboxesUpdateProcessorTest {
                 .update(mailboxId, MailboxUpdateRequest.builder().parentId(newParentId).build())
                 .build();
         Mailbox mailbox = Mailbox.builder().id(mailboxId).name("name").role(Optional.empty()).build();
-        when(mockedMailboxUtils.mailboxFromMailboxId(mailboxId, mockedMailboxSession))
+        when(mockedMailboxFactory.fromMailboxId(mailboxId, mockedMailboxSession))
             .thenReturn(Optional.of(mailbox));
         when(mockedMailboxManager.getMailbox(newParentId, mockedMailboxSession))
             .thenReturn(mock(MessageManager.class));

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ecb7ef5/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java
new file mode 100644
index 0000000..e404b70
--- /dev/null
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java
@@ -0,0 +1,165 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.jmap.model;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.Optional;
+
+import org.apache.james.jmap.model.mailbox.Mailbox;
+import org.apache.james.jmap.utils.MailboxUtilsTest;
+import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.inmemory.InMemoryId;
+import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
+import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
+import org.apache.james.mailbox.model.MailboxId;
+import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.store.mail.MailboxMapperFactory;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MailboxFactoryTest {
+    private static final Logger LOGGER = LoggerFactory.getLogger(MailboxUtilsTest.class);
+
+    private MailboxManager mailboxManager;
+    private MailboxMapperFactory mailboxMapperFactory;
+    private MailboxSession mailboxSession;
+    private String user;
+    private MailboxFactory sut;
+
+    @Before
+    public void setup() throws Exception {
+        InMemoryIntegrationResources inMemoryIntegrationResources = new InMemoryIntegrationResources();
+        mailboxManager = inMemoryIntegrationResources.createMailboxManager(inMemoryIntegrationResources.createGroupMembershipResolver());
+        mailboxMapperFactory = new InMemoryMailboxSessionMapperFactory();
+        user = "user@domain.org";
+        mailboxSession = mailboxManager.login(user, "pass", LOGGER);
+        sut = new MailboxFactory(mailboxManager);
+    }
+
+
+    @Test
+    public void mailboxFromMailboxIdShouldReturnAbsentWhenDoesntExist() throws Exception {
+        Optional<Mailbox> mailbox = sut.fromMailboxId(InMemoryId.of(123), mailboxSession);
+        assertThat(mailbox).isEmpty();
+    }
+
+    @Test
+    public void mailboxFromMailboxIdShouldReturnPresentWhenExists() throws Exception {
+        MailboxPath mailboxPath = new MailboxPath("#private", user, "myBox");
+        mailboxManager.createMailbox(mailboxPath, mailboxSession);
+        MailboxId mailboxId = mailboxMapperFactory.getMailboxMapper(mailboxSession)
+                .findMailboxByPath(mailboxPath)
+                .getMailboxId();
+
+        Optional<Mailbox> mailbox = sut.fromMailboxId(mailboxId, mailboxSession);
+        assertThat(mailbox).isPresent();
+        assertThat(mailbox.get().getId()).isEqualTo(mailboxId);
+    }
+
+    @Test
+    public void mailboxFromMailboxPathShouldReturnNotEmptyWhenMailboxExists() throws Exception {
+        MailboxPath mailboxPath = new MailboxPath("#private", user, "mailbox");
+        mailboxManager.createMailbox(mailboxPath, mailboxSession);
+
+        Optional<Mailbox> optionalMailbox = sut.fromMailboxPath(mailboxPath, mailboxSession);
+        assertThat(optionalMailbox).isPresent();
+    }
+
+    @Test
+    public void mailboxFromMailboxPathShouldReturnEmptyWhenMailboxDoesntExist() throws Exception {
+        MailboxPath mailboxPath = new MailboxPath("#private", user, "mailbox");
+
+        Optional<Mailbox> optionalMailbox = sut.fromMailboxPath(mailboxPath, mailboxSession);
+        assertThat(optionalMailbox).isEmpty();
+    }
+
+
+    @Test
+    public void getNameShouldReturnMailboxNameWhenRootMailbox() throws Exception {
+        String expected = "mailbox";
+        MailboxPath mailboxPath = new MailboxPath("#private", user, expected);
+
+        String name = sut.getName(mailboxPath, mailboxSession);
+        assertThat(name).isEqualTo(expected);
+    }
+
+    @Test
+    public void getNameShouldReturnMailboxNameWhenChildMailbox() throws Exception {
+        String expected = "mailbox";
+        MailboxPath mailboxPath = new MailboxPath("#private", user, "inbox." + expected);
+
+        String name = sut.getName(mailboxPath, mailboxSession);
+        assertThat(name).isEqualTo(expected);
+    }
+
+    @Test
+    public void getNameShouldReturnMailboxNameWhenChildOfChildMailbox() throws Exception {
+        String expected = "mailbox";
+        MailboxPath mailboxPath = new MailboxPath("#private", user, "inbox.children." + expected);
+
+        String name = sut.getName(mailboxPath, mailboxSession);
+        assertThat(name).isEqualTo(expected);
+    }
+
+    @Test
+    public void getParentIdFromMailboxPathShouldReturNullWhenRootMailbox() throws Exception {
+        MailboxPath mailboxPath = new MailboxPath("#private", user, "mailbox");
+        mailboxManager.createMailbox(mailboxPath, mailboxSession);
+
+        Optional<MailboxId> id = sut.getParentIdFromMailboxPath(mailboxPath, mailboxSession);
+        assertThat(id).isEmpty();
+    }
+
+    @Test
+    public void getParentIdFromMailboxPathShouldReturnParentIdWhenChildMailbox() throws Exception {
+        MailboxPath parentMailboxPath = new MailboxPath("#private", user, "inbox");
+        mailboxManager.createMailbox(parentMailboxPath, mailboxSession);
+        MailboxId parentId = mailboxMapperFactory.getMailboxMapper(mailboxSession)
+                .findMailboxByPath(parentMailboxPath)
+                .getMailboxId();
+
+        MailboxPath mailboxPath = new MailboxPath("#private", user, "inbox.mailbox");
+        mailboxManager.createMailbox(mailboxPath, mailboxSession);
+
+        Optional<MailboxId> id = sut.getParentIdFromMailboxPath(mailboxPath, mailboxSession);
+        assertThat(id).contains(parentId);
+    }
+
+    @Test
+    public void getParentIdFromMailboxPathShouldReturnParentIdWhenChildOfChildMailbox() throws Exception {
+        MailboxPath mailboxPath = new MailboxPath("#private", user, "inbox.children.mailbox");
+        mailboxManager.createMailbox(new MailboxPath("#private", user, "inbox"), mailboxSession);
+
+        MailboxPath parentMailboxPath = new MailboxPath("#private", user, "inbox.children");
+        mailboxManager.createMailbox(parentMailboxPath, mailboxSession);
+        MailboxId parentId = mailboxMapperFactory.getMailboxMapper(mailboxSession)
+                .findMailboxByPath(parentMailboxPath)
+                .getMailboxId();
+
+        mailboxManager.createMailbox(mailboxPath, mailboxSession);
+
+        Optional<MailboxId> id = sut.getParentIdFromMailboxPath(mailboxPath, mailboxSession);
+        assertThat(id).contains(parentId);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ecb7ef5/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/MailboxUtilsTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/MailboxUtilsTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/MailboxUtilsTest.java
index f374a04..dc85e3e 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/MailboxUtilsTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/MailboxUtilsTest.java
@@ -21,12 +21,8 @@ package org.apache.james.jmap.utils;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-import java.util.Optional;
-
-import org.apache.james.jmap.model.mailbox.Mailbox;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
 import org.apache.james.mailbox.model.MailboxId;
@@ -56,111 +52,6 @@ public class MailboxUtilsTest {
         mailboxSession = mailboxManager.login(user, "pass", LOGGER);
         sut = new MailboxUtils(mailboxManager);
     }
-
-    @Test
-    public void mailboxFromMailboxPathShouldReturnNotEmptyWhenMailboxExists() throws Exception {
-        MailboxPath mailboxPath = new MailboxPath("#private", user, "mailbox");
-        mailboxManager.createMailbox(mailboxPath, mailboxSession);
-
-        Optional<Mailbox> optionalMailbox = sut.mailboxFromMailboxPath(mailboxPath, mailboxSession);
-        assertThat(optionalMailbox).isPresent();
-    }
-
-    @Test
-    public void mailboxFromMailboxPathShouldReturnEmptyWhenMailboxDoesntExist() throws Exception {
-        MailboxPath mailboxPath = new MailboxPath("#private", user, "mailbox");
-
-        Optional<Mailbox> optionalMailbox = sut.mailboxFromMailboxPath(mailboxPath, mailboxSession);
-        assertThat(optionalMailbox).isEmpty();
-    }
-
-    @Test
-    public void getNameShouldReturnMailboxNameWhenRootMailbox() throws Exception {
-        String expected = "mailbox";
-        MailboxPath mailboxPath = new MailboxPath("#private", user, expected);
-
-        String name = sut.getName(mailboxPath, mailboxSession);
-        assertThat(name).isEqualTo(expected);
-    }
-
-    @Test
-    public void getNameShouldReturnMailboxNameWhenChildMailbox() throws Exception {
-        String expected = "mailbox";
-        MailboxPath mailboxPath = new MailboxPath("#private", user, "inbox." + expected);
-
-        String name = sut.getName(mailboxPath, mailboxSession);
-        assertThat(name).isEqualTo(expected);
-    }
-
-    @Test
-    public void getNameShouldReturnMailboxNameWhenChildOfChildMailbox() throws Exception {
-        String expected = "mailbox";
-        MailboxPath mailboxPath = new MailboxPath("#private", user, "inbox.children." + expected);
-
-        String name = sut.getName(mailboxPath, mailboxSession);
-        assertThat(name).isEqualTo(expected);
-    }
-
-    @Test
-    public void getParentIdFromMailboxPathShouldReturNullWhenRootMailbox() throws Exception {
-        MailboxPath mailboxPath = new MailboxPath("#private", user, "mailbox");
-        mailboxManager.createMailbox(mailboxPath, mailboxSession);
-
-        Optional<MailboxId> id = sut.getParentIdFromMailboxPath(mailboxPath, mailboxSession);
-        assertThat(id).isEmpty();
-    }
-
-    @Test
-    public void getParentIdFromMailboxPathShouldReturnParentIdWhenChildMailbox() throws Exception {
-        MailboxPath parentMailboxPath = new MailboxPath("#private", user, "inbox");
-        mailboxManager.createMailbox(parentMailboxPath, mailboxSession);
-        MailboxId parentId = mailboxMapperFactory.getMailboxMapper(mailboxSession)
-                .findMailboxByPath(parentMailboxPath)
-                .getMailboxId();
-
-        MailboxPath mailboxPath = new MailboxPath("#private", user, "inbox.mailbox");
-        mailboxManager.createMailbox(mailboxPath, mailboxSession);
-
-        Optional<MailboxId> id = sut.getParentIdFromMailboxPath(mailboxPath, mailboxSession);
-        assertThat(id).contains(parentId);
-    }
-
-    @Test
-    public void getParentIdFromMailboxPathShouldReturnParentIdWhenChildOfChildMailbox() throws Exception {
-        MailboxPath mailboxPath = new MailboxPath("#private", user, "inbox.children.mailbox");
-        mailboxManager.createMailbox(new MailboxPath("#private", user, "inbox"), mailboxSession);
-
-        MailboxPath parentMailboxPath = new MailboxPath("#private", user, "inbox.children");
-        mailboxManager.createMailbox(parentMailboxPath, mailboxSession);
-        MailboxId parentId = mailboxMapperFactory.getMailboxMapper(mailboxSession)
-                .findMailboxByPath(parentMailboxPath)
-                .getMailboxId();
-
-        mailboxManager.createMailbox(mailboxPath, mailboxSession);
-
-        Optional<MailboxId> id = sut.getParentIdFromMailboxPath(mailboxPath, mailboxSession);
-        assertThat(id).contains(parentId);
-    }
-
-    @Test
-    public void mailboxFromMailboxIdShouldReturnPresentWhenExists() throws Exception {
-        MailboxPath mailboxPath = new MailboxPath("#private", user, "myBox");
-        mailboxManager.createMailbox(mailboxPath, mailboxSession);
-        MailboxId mailboxId = mailboxMapperFactory.getMailboxMapper(mailboxSession)
-                .findMailboxByPath(mailboxPath)
-                .getMailboxId();
-
-        Optional<Mailbox> mailbox = sut.mailboxFromMailboxId(mailboxId, mailboxSession);
-        assertThat(mailbox).isPresent();
-        assertThat(mailbox.get().getId()).isEqualTo(mailboxId);
-    }
-
-    @Test
-    public void mailboxFromMailboxIdShouldReturnAbsentWhenDoesntExist() throws Exception {
-        Optional<Mailbox> mailbox = sut.mailboxFromMailboxId(InMemoryId.of(123), mailboxSession);
-        assertThat(mailbox).isEmpty();
-    }
-
     @Test
     public void hasChildrenShouldReturnFalseWhenNoChild() throws Exception {
         MailboxPath mailboxPath = new MailboxPath("#private", user, "myBox");


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


[02/10] james-project git commit: JAMES-1818 Introduce getMailboxById and its implementations

Posted by ro...@apache.org.
JAMES-1818 Introduce getMailboxById and its implementations


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

Branch: refs/heads/master
Commit: 22ed8ef29d62d32060f1acd5cb528e5bdab557ce
Parents: ed7268e
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Wed Aug 17 14:48:59 2016 +0200
Committer: Raphael Ouazana <ra...@linagora.com>
Committed: Mon Sep 5 14:42:00 2016 +0200

----------------------------------------------------------------------
 .../apache/james/mailbox/MailboxManager.java    | 17 +++-
 .../apache/james/mailbox/MailboxSession.java    |  2 +
 .../james/mailbox/mock/MockMailboxSession.java  |  8 ++
 .../mailbox/caching/CachingMailboxMapper.java   | 21 +++--
 .../cassandra/mail/CassandraMailboxMapper.java  | 12 +++
 .../mailbox/hbase/mail/HBaseMailboxMapper.java  | 27 +++++++
 .../hbase/mail/HBaseMailboxMapperTest.java      | 19 ++++-
 .../mailbox/jcr/mail/JCRMailboxMapper.java      | 13 ++++
 .../mailbox/jpa/mail/JPAMailboxMapper.java      | 13 ++++
 .../maildir/mail/MaildirMailboxMapper.java      |  7 ++
 .../inmemory/mail/InMemoryMailboxMapper.java    | 11 +++
 .../mailbox/store/SimpleMailboxSession.java     |  8 ++
 .../mailbox/store/StoreMailboxManager.java      | 39 +++++++++-
 .../james/mailbox/store/mail/MailboxMapper.java | 12 +++
 .../mailbox/store/StoreMailboxManagerTest.java  | 82 +++++++++++++++++---
 .../store/mail/model/MailboxMapperTest.java     | 17 ++++
 .../james/imap/processor/LSubProcessorTest.java |  5 ++
 .../base/MailboxEventAnalyserTest.java          |  5 +-
 .../FirstUserConnectionFilterThreadTest.java    |  5 ++
 .../jmap/methods/GetMessagesMethodTest.java     |  5 ++
 .../methods/SetVacationResponseMethodTest.java  |  5 ++
 21 files changed, 308 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/22ed8ef2/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
index d993c4e..450c4fa 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
@@ -115,13 +115,12 @@ public interface MailboxManager extends RequestAware, MailboxListenerSupport {
     char getDelimiter();
 
     /**
-     * Gets an session suitable for IMAP.
+     * Gets an object managing the given mailbox.
      * 
      * @param mailboxPath
      *            the Path of the mailbox, not null
      * @param session
      *            the context for this call, not null
-     * @return <code>ImapMailboxSession</code>, not null
      * @throws MailboxException
      *             when the mailbox cannot be opened
      * @throws MailboxNotFoundException
@@ -130,6 +129,20 @@ public interface MailboxManager extends RequestAware, MailboxListenerSupport {
     MessageManager getMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException;
 
     /**
+     * Gets an object managing the given mailbox.
+     * 
+     * @param mailboxId
+     *            the Id of the mailbox, not null
+     * @param session
+     *            the context for this call, not null
+     * @throws MailboxException
+     *             when the mailbox cannot be opened
+     * @throws MailboxNotFoundException
+     *             when the given mailbox does not exist
+     */
+    MessageManager getMailbox(MailboxId mailboxId, MailboxSession session) throws MailboxException;
+
+    /**
      * Creates a new mailbox. Any intermediary mailboxes missing from the
      * hierarchy should be created.
      * 

http://git-wip-us.apache.org/repos/asf/james-project/blob/22ed8ef2/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxSession.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
index a9c66e1..55fbe88 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
@@ -115,6 +115,8 @@ public interface MailboxSession {
          * @return not null, when empty the default local should be used
          */
         List<Locale> getLocalePreferences();
+        
+        boolean isSameUser(String username);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/22ed8ef2/mailbox/api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java b/mailbox/api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java
index a77f225..9a241a7 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/mock/MockMailboxSession.java
@@ -54,6 +54,14 @@ public class MockMailboxSession implements MailboxSession{
             public List<Locale> getLocalePreferences() {
                 return new ArrayList<Locale>();
             }
+
+            @Override
+            public boolean isSameUser(String other) {
+                if (username == null) {
+                    return other == null;
+                }
+                return username.equalsIgnoreCase(other);
+            }
         };
     }
     

http://git-wip-us.apache.org/repos/asf/james-project/blob/22ed8ef2/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java
index 4c1debe..c311b1d 100644
--- a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java
+++ b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java
@@ -23,6 +23,7 @@ import java.util.List;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.MailboxACL;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -76,12 +77,20 @@ public class CachingMailboxMapper implements MailboxMapper {
 		}
 	}
 
-	@Override
-	public List<Mailbox> findMailboxWithPathLike(MailboxPath mailboxPath)
-			throws MailboxException {
-		// TODO possible to meaningfully cache it?
-		return underlying.findMailboxWithPathLike(mailboxPath);
-	}
+    @Override
+    public Mailbox findMailboxById(MailboxId mailboxId)
+            throws MailboxException {
+        // TODO possible to meaningfully cache it?
+        return underlying.findMailboxById(mailboxId);
+    }
+
+
+    @Override
+    public List<Mailbox> findMailboxWithPathLike(MailboxPath mailboxPath)
+            throws MailboxException {
+        // TODO possible to meaningfully cache it?
+        return underlying.findMailboxWithPathLike(mailboxPath);
+    }
 
 	@Override
 	public boolean hasChildren(Mailbox mailbox, char delimiter)

http://git-wip-us.apache.org/repos/asf/james-project/blob/22ed8ef2/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
index 853e19c..1e81978 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
@@ -45,6 +45,7 @@ import org.apache.james.mailbox.cassandra.table.CassandraMailboxTable.MailboxBas
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.MailboxACL;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -92,6 +93,17 @@ public class CassandraMailboxMapper implements MailboxMapper {
     }
 
     @Override
+    public Mailbox findMailboxById(MailboxId id) throws MailboxException {
+        CassandraId mailboxId = (CassandraId) id;
+        ResultSet resultSet = session.execute(select(FIELDS).from(TABLE_NAME).where(eq(ID, mailboxId.asUuid())));
+        if (resultSet.isExhausted()) {
+            throw new MailboxNotFoundException(id.serialize());
+        } else {
+            return mailbox(resultSet.one());
+        }
+    }
+
+    @Override
     public List<Mailbox> findMailboxWithPathLike(MailboxPath path) throws MailboxException {
         Pattern regex = Pattern.compile(constructEscapedRegexForMailboxNameMatching(path));
         return getMailboxFilteredByNamespaceAndUserStream(path.getNamespace(), path.getUser())

http://git-wip-us.apache.org/repos/asf/james-project/blob/22ed8ef2/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java
index 628cd8c..8c89e9d 100644
--- a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java
+++ b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java
@@ -36,6 +36,7 @@ import java.util.List;
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.client.Delete;
+import org.apache.hadoop.hbase.client.Get;
 import org.apache.hadoop.hbase.client.HTable;
 import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.client.Result;
@@ -54,6 +55,7 @@ import org.apache.james.mailbox.hbase.HBaseId;
 import org.apache.james.mailbox.hbase.HBaseNonTransactionalMapper;
 import org.apache.james.mailbox.hbase.mail.model.HBaseMailbox;
 import org.apache.james.mailbox.model.MailboxACL;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -123,6 +125,31 @@ public class HBaseMailboxMapper extends HBaseNonTransactionalMapper implements M
             }
         }
     }
+
+    @Override
+    public Mailbox findMailboxById(MailboxId id) throws MailboxException, MailboxNotFoundException {
+        HBaseId mailboxId = (HBaseId)id;
+        HTable mailboxes = null;
+        try {
+            mailboxes = new HTable(conf, MAILBOXES_TABLE);
+            Get get = new Get(mailboxId.toBytes());
+            Result result = mailboxes.get(get);
+            if (result == null) {
+                throw new MailboxNotFoundException(mailboxId.serialize());
+            }
+            return mailboxFromResult(result);
+        } catch (IOException ex) {
+            throw new MailboxException("IOException in HBase cluster during get()", ex);
+        } finally {
+            if (mailboxes != null) {
+                try {
+                    mailboxes.close();
+                } catch (IOException ex) {
+                    throw new MailboxException("Error closing table " + mailboxes, ex);
+                }
+            }
+        }
+    }
     
     @Override
     public List<Mailbox> findMailboxWithPathLike(MailboxPath mailboxPath) throws MailboxException {

http://git-wip-us.apache.org/repos/asf/james-project/blob/22ed8ef2/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapperTest.java b/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapperTest.java
index 27b5c86..35dc9ff 100644
--- a/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapperTest.java
+++ b/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapperTest.java
@@ -47,9 +47,11 @@ import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.hbase.HBaseClusterSingleton;
+import org.apache.james.mailbox.hbase.HBaseId;
 import org.apache.james.mailbox.hbase.io.ChunkInputStream;
 import org.apache.james.mailbox.hbase.io.ChunkOutputStream;
 import org.apache.james.mailbox.hbase.mail.model.HBaseMailbox;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.junit.Before;
@@ -69,6 +71,7 @@ public class HBaseMailboxMapperTest {
     private static HBaseMailboxMapper mapper;
     private static List<HBaseMailbox> mailboxList;
     private static List<MailboxPath> pathsList;
+    private static List<HBaseId> idsList;
     private static final int NAMESPACES = 5;
     private static final int USERS = 5;
     private static final int MAILBOX_NO = 5;
@@ -108,6 +111,7 @@ public class HBaseMailboxMapperTest {
     @Test
     public void testMailboxMapperScenario() throws Exception {
         testFindMailboxByPath();
+        testFindMailboxById();
         testFindMailboxWithPathLike();
         testList();
         testSave();
@@ -131,6 +135,16 @@ public class HBaseMailboxMapperTest {
         }
     }
 
+    private void testFindMailboxById() throws Exception {
+        LOG.info("findMailboxById");
+        HBaseMailbox mailbox;
+        for (MailboxId id : idsList) {
+            LOG.info("Searching for " + id.serialize());
+            mailbox = (HBaseMailbox) mapper.findMailboxById(id);
+            assertEquals(mailbox.getMailboxId(), id);
+        }
+    }
+
     /**
      * Test of findMailboxWithPathLike method, of class HBaseMailboxMapper.
      */
@@ -301,6 +315,7 @@ public class HBaseMailboxMapperTest {
     private static void fillMailboxList() {
         mailboxList = new ArrayList<HBaseMailbox>();
         pathsList = new ArrayList<MailboxPath>();
+        idsList = new ArrayList<HBaseId>();
         MailboxPath path;
         String name;
         for (int i = 0; i < NAMESPACES; i++) {
@@ -313,7 +328,9 @@ public class HBaseMailboxMapperTest {
                     }
                     path = new MailboxPath("namespace" + i, "user" + j, name);
                     pathsList.add(path);
-                    mailboxList.add(new HBaseMailbox(path, 13));
+                    HBaseMailbox mailbox = new HBaseMailbox(path, 13);
+                    mailboxList.add(mailbox);
+                    idsList.add(mailbox.getMailboxId());
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/22ed8ef2/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMailboxMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMailboxMapper.java b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMailboxMapper.java
index 3ad6988..c546a8c 100644
--- a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMailboxMapper.java
+++ b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMailboxMapper.java
@@ -40,6 +40,7 @@ import org.apache.james.mailbox.jcr.AbstractJCRScalingMapper;
 import org.apache.james.mailbox.jcr.MailboxSessionJCRRepository;
 import org.apache.james.mailbox.jcr.mail.model.JCRMailbox;
 import org.apache.james.mailbox.model.MailboxACL;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -108,6 +109,18 @@ public class JCRMailboxMapper extends AbstractJCRScalingMapper implements Mailbo
         }
     }
 
+    @Override
+    public Mailbox findMailboxById(MailboxId id) throws MailboxException, MailboxNotFoundException {
+        try {
+            Node node = getSession().getNodeByIdentifier(id.serialize());
+            return new JCRMailbox(node, getLogger());
+        } catch (PathNotFoundException e) {
+            throw new MailboxNotFoundException(id.serialize());
+        } catch (RepositoryException e) {
+            throw new MailboxException("Unable to find mailbox " + id.serialize(), e);
+        }
+    }
+
 
     /*
      * (non-Javadoc)

http://git-wip-us.apache.org/repos/asf/james-project/blob/22ed8ef2/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
index fd64f9c..c3c7a3a 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
@@ -33,6 +33,7 @@ import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.jpa.JPAId;
 import org.apache.james.mailbox.jpa.JPATransactionalMapper;
 import org.apache.james.mailbox.model.MailboxACL;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -98,6 +99,18 @@ public class JPAMailboxMapper extends JPATransactionalMapper implements MailboxM
         } 
     }
 
+    @Override
+    public Mailbox findMailboxById(MailboxId id) throws MailboxException, MailboxNotFoundException {
+        JPAId mailboxId = (JPAId)id;
+        try {
+            return (Mailbox) getEntityManager().createNamedQuery("findMailboxById").setParameter("idParam", mailboxId.getRawId()).getSingleResult();
+        } catch (NoResultException e) {
+            throw new MailboxNotFoundException(mailboxId.serialize());
+        } catch (PersistenceException e) {
+            throw new MailboxException("Search of mailbox " + mailboxId.serialize() + " failed", e);
+        } 
+    }
+
     /**
      * @see org.apache.james.mailbox.store.mail.MailboxMapper#delete(Mailbox)
      */

http://git-wip-us.apache.org/repos/asf/james-project/blob/22ed8ef2/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
index 629afb9..73c02d3 100644
--- a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
+++ b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
@@ -37,6 +37,7 @@ import org.apache.james.mailbox.maildir.MaildirMessageName;
 import org.apache.james.mailbox.maildir.MaildirStore;
 import org.apache.james.mailbox.model.MailboxACL;
 import org.apache.james.mailbox.model.MailboxConstants;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -113,6 +114,12 @@ public class MaildirMailboxMapper extends NonTransactionalMapper implements Mail
         return cacheMailbox(mailbox);
     }
     
+    @Override
+    public Mailbox findMailboxById(MailboxId id) throws MailboxException, MailboxNotFoundException {
+        MaildirId mailboxId = (MaildirId)id;
+        return getCachedMailbox(mailboxId);
+    }
+    
     /**
      * @see org.apache.james.mailbox.store.mail.MailboxMapper#findMailboxWithPathLike(org.apache.james.mailbox.model.MailboxPath)
      */

http://git-wip-us.apache.org/repos/asf/james-project/blob/22ed8ef2/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java
index 2afecc0..3862b68 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java
@@ -28,6 +28,7 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.model.MailboxACL;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -75,6 +76,16 @@ public class InMemoryMailboxMapper implements MailboxMapper {
         }
     }
 
+    public synchronized Mailbox findMailboxById(MailboxId id) throws MailboxException {
+        InMemoryId mailboxId = (InMemoryId)id;
+        Mailbox result = mailboxesById.get(mailboxId);
+        if (result == null) {
+            throw new MailboxNotFoundException(mailboxId.serialize());
+        } else {
+            return result;
+        }
+    }
+
     /**
      * @see org.apache.james.mailbox.store.mail.MailboxMapper#findMailboxWithPathLike(org.apache.james.mailbox.model.MailboxPath)
      */

http://git-wip-us.apache.org/repos/asf/james-project/blob/22ed8ef2/mailbox/store/src/main/java/org/apache/james/mailbox/store/SimpleMailboxSession.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/SimpleMailboxSession.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/SimpleMailboxSession.java
index d6f1db0..24e5374 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/SimpleMailboxSession.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/SimpleMailboxSession.java
@@ -198,4 +198,12 @@ public class SimpleMailboxSession implements MailboxSession, MailboxSession.User
         return type;
     }
 
+    @Override
+    public boolean isSameUser(String username) {
+        if (this.userName == null) {
+            return username == null;
+        }
+        return this.userName.equalsIgnoreCase(username);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/22ed8ef2/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 18f4727..09bba85 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -39,6 +39,7 @@ import org.apache.james.mailbox.MailboxPathLocker.LockAwareExecution;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MailboxSession.SessionType;
 import org.apache.james.mailbox.MailboxSessionIdGenerator;
+import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.RequestAware;
 import org.apache.james.mailbox.StandardMailboxMetaDataComparator;
 import org.apache.james.mailbox.acl.GroupMembershipResolver;
@@ -399,7 +400,7 @@ public class StoreMailboxManager implements MailboxManager {
     }
 
     @Override
-    public org.apache.james.mailbox.MessageManager getMailbox(MailboxPath mailboxPath, MailboxSession session)
+    public MessageManager getMailbox(MailboxPath mailboxPath, MailboxSession session)
             throws MailboxException {
         final MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session);
         Mailbox mailboxRow = mapper.findMailboxByPath(mailboxPath);
@@ -411,13 +412,43 @@ public class StoreMailboxManager implements MailboxManager {
         } else {
             session.getLog().debug("Loaded mailbox " + mailboxPath);
 
-            StoreMessageManager m = createMessageManager(mailboxRow, session);
-            m.setFetchBatchSize(fetchBatchSize);
-            return m;
+            StoreMessageManager messageManager = createMessageManager(mailboxRow, session);
+            messageManager.setFetchBatchSize(fetchBatchSize);
+            return messageManager;
         }
     }
 
     @Override
+    public MessageManager getMailbox(MailboxId mailboxId, MailboxSession session)
+            throws MailboxException {
+        MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session);
+        Mailbox mailboxRow = mapper.findMailboxById(mailboxId);
+
+        if (mailboxRow == null) {
+            session.getLog().info("Mailbox '" + mailboxId.serialize() + "' not found.");
+            throw new MailboxNotFoundException(mailboxId.serialize());
+        }
+        
+        if (! belongsToCurrentUser(mailboxRow, session)) {
+            session.getLog().info("Mailbox '" + mailboxId.serialize() + "' does not belong to user '" + session.getUser() + "' but to '" + mailboxRow.getUser());
+            throw new MailboxNotFoundException(mailboxId.serialize());
+        }
+
+        session.getLog().debug("Loaded mailbox " + mailboxId.serialize());
+
+        StoreMessageManager messageManager = createMessageManager(mailboxRow, session);
+        messageManager.setFetchBatchSize(fetchBatchSize);
+        return messageManager;
+    }
+
+    private boolean belongsToCurrentUser(Mailbox mailbox, MailboxSession session) {
+        if (session.getUser() == null) {
+            return mailbox.getUser() == null;
+        }
+        return session.getUser().isSameUser(mailbox.getUser());
+    }
+
+    @Override
     public void createMailbox(MailboxPath mailboxPath, final MailboxSession mailboxSession)
             throws MailboxException {
         mailboxSession.getLog().debug("createMailbox " + mailboxPath);

http://git-wip-us.apache.org/repos/asf/james-project/blob/22ed8ef2/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java
index a1f5878..f46a2f8 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java
@@ -23,6 +23,7 @@ import java.util.List;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.MailboxACL;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.transaction.Mapper;
@@ -63,6 +64,17 @@ public interface MailboxMapper extends Mapper {
             throws MailboxException, MailboxNotFoundException;
 
     /**
+     * Return the {@link Mailbox} for the given name
+     * 
+     * @param mailboxId
+     * @return mailbox
+     * @throws MailboxException
+     * @throws MailboxNotFoundException
+     */
+    Mailbox findMailboxById(MailboxId mailboxId)
+            throws MailboxException, MailboxNotFoundException;
+
+    /**
      * Return a List of {@link Mailbox} which name is like the given name
      * 
      * @param mailboxPath

http://git-wip-us.apache.org/repos/asf/james-project/blob/22ed8ef2/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
index 1fa865d..975e3e3 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
@@ -20,10 +20,20 @@
 package org.apache.james.mailbox.store;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageManager;
 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.exception.MailboxNotFoundException;
+import org.apache.james.mailbox.mock.MockMailboxSession;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.store.mail.MailboxMapper;
+import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
 import org.junit.Before;
@@ -31,17 +41,26 @@ import org.junit.Test;
 
 public class StoreMailboxManagerTest {
 
+    private static final String CURRENT_USER = "user";
+    private static final MailboxId MAILBOX_ID = TestId.of(123);
     public static final int UID_VALIDITY = 42;
     private StoreMailboxManager storeMailboxManager;
+    private MailboxMapper mockedMailboxMapper;
+    private MailboxSession mockedMailboxSession;
 
     @Before
-    public void setUp() {
-        storeMailboxManager = new StoreMailboxManager(null, new MockAuthenticator(), new JVMMailboxPathLocker(), new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), new MessageParser());
+    public void setUp() throws MailboxException {
+        MailboxSessionMapperFactory mockedMapperFactory = mock(MailboxSessionMapperFactory.class);
+        mockedMailboxSession = new MockMailboxSession(CURRENT_USER);
+        mockedMailboxMapper = mock(MailboxMapper.class);
+        when(mockedMapperFactory.getMailboxMapper(mockedMailboxSession))
+            .thenReturn(mockedMailboxMapper);
+        storeMailboxManager = new StoreMailboxManager(mockedMapperFactory, new MockAuthenticator(), new JVMMailboxPathLocker(), new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), new MessageParser());
     }
 
     @Test
     public void belongsToNamespaceAndUserShouldReturnTrueWithIdenticalMailboxes() {
-        MailboxPath path = new MailboxPath("namespace", "user", "name");
+        MailboxPath path = new MailboxPath("namespace", CURRENT_USER, "name");
         assertThat(storeMailboxManager.belongsToNamespaceAndUser(path, new SimpleMailbox(path, UID_VALIDITY))).isTrue();
     }
 
@@ -53,9 +72,9 @@ public class StoreMailboxManagerTest {
 
     @Test
     public void belongsToNamespaceAndUserShouldReturnTrueWithIdenticalMailboxesWithNullNamespace() {
-        MailboxPath path = new MailboxPath(null, "user", "name");
+        MailboxPath path = new MailboxPath(null, CURRENT_USER, "name");
         assertThat(storeMailboxManager.belongsToNamespaceAndUser(path,
-            new SimpleMailbox(new MailboxPath(null, "user", "name"), UID_VALIDITY))).isTrue();
+            new SimpleMailbox(new MailboxPath(null, CURRENT_USER, "name"), UID_VALIDITY))).isTrue();
     }
 
     @Test
@@ -67,21 +86,21 @@ public class StoreMailboxManagerTest {
 
     @Test
     public void belongsToNamespaceAndUserShouldReturnTrueWithMailboxWithSameNamespaceAndUser() {
-        MailboxPath path = new MailboxPath("namespace", "user", "name");
+        MailboxPath path = new MailboxPath("namespace", CURRENT_USER, "name");
         assertThat(storeMailboxManager.belongsToNamespaceAndUser(path,
-            new SimpleMailbox(new MailboxPath("namespace", "user", "name2"), UID_VALIDITY))).isTrue();
+            new SimpleMailbox(new MailboxPath("namespace", CURRENT_USER, "name2"), UID_VALIDITY))).isTrue();
     }
 
     @Test
     public void belongsToNamespaceAndUserShouldReturnFalseWithDifferentNamespace() {
-        MailboxPath path = new MailboxPath("namespace", "user", "name");
+        MailboxPath path = new MailboxPath("namespace", CURRENT_USER, "name");
         assertThat(storeMailboxManager.belongsToNamespaceAndUser(path,
-            new SimpleMailbox(new MailboxPath("namespace2", "user", "name"), UID_VALIDITY))).isFalse();
+            new SimpleMailbox(new MailboxPath("namespace2", CURRENT_USER, "name"), UID_VALIDITY))).isFalse();
     }
 
     @Test
     public void belongsToNamespaceAndUserShouldReturnFalseWithDifferentUser() {
-        MailboxPath path = new MailboxPath("namespace", "user", "name");
+        MailboxPath path = new MailboxPath("namespace", CURRENT_USER, "name");
         assertThat(storeMailboxManager.belongsToNamespaceAndUser(path,
             new SimpleMailbox(new MailboxPath("namespace", "user2", "name"), UID_VALIDITY))).isFalse();
     }
@@ -89,7 +108,7 @@ public class StoreMailboxManagerTest {
     public void belongsToNamespaceAndUserShouldReturnFalseWithOneOfTheUserNull() {
         MailboxPath path = new MailboxPath("namespace", null, "name");
         assertThat(storeMailboxManager.belongsToNamespaceAndUser(path,
-            new SimpleMailbox(new MailboxPath("namespace", "user", "name"), UID_VALIDITY))).isFalse();
+            new SimpleMailbox(new MailboxPath("namespace", CURRENT_USER, "name"), UID_VALIDITY))).isFalse();
     }
     @Test
     public void belongsToNamespaceAndUserShouldReturnFalseIfNamespaceAreDifferentWithNullUser() {
@@ -98,6 +117,47 @@ public class StoreMailboxManagerTest {
             new SimpleMailbox(new MailboxPath("namespace2", null, "name"), UID_VALIDITY))).isFalse();
     }
 
+    @Test(expected = MailboxNotFoundException.class)
+    public void getMailboxShouldThrowWhenUnknownId() throws Exception {
+        when(mockedMailboxMapper.findMailboxById(MAILBOX_ID)).thenReturn(null);
 
+        storeMailboxManager.getMailbox(MAILBOX_ID, mockedMailboxSession);
+    }
+
+    @Test
+    public void getMailboxShouldReturnMailboxManagerWhenKnownId() throws Exception {
+        Mailbox mockedMailbox = mock(Mailbox.class);
+        when(mockedMailbox.getUser()).thenReturn(CURRENT_USER);
+        when(mockedMailbox.getMailboxId()).thenReturn(MAILBOX_ID);
+        when(mockedMailboxMapper.findMailboxById(MAILBOX_ID)).thenReturn(mockedMailbox);
+
+        MessageManager expected = storeMailboxManager.getMailbox(MAILBOX_ID, mockedMailboxSession);
+
+        assertThat(expected.getId()).isEqualTo(MAILBOX_ID);
+    }
+
+    @Test
+    public void getMailboxShouldReturnMailboxManagerWhenKnownIdAndDifferentCaseUser() throws Exception {
+        Mailbox mockedMailbox = mock(Mailbox.class);
+        when(mockedMailbox.getUser()).thenReturn("uSEr");
+        when(mockedMailbox.getMailboxId()).thenReturn(MAILBOX_ID);
+        when(mockedMailboxMapper.findMailboxById(MAILBOX_ID)).thenReturn(mockedMailbox);
+
+        MessageManager expected = storeMailboxManager.getMailbox(MAILBOX_ID, mockedMailboxSession);
+
+        assertThat(expected.getId()).isEqualTo(MAILBOX_ID);
+    }
+
+    @Test(expected = MailboxNotFoundException.class)
+    public void getMailboxShouldThrowWhenMailboxDoesNotMatchUser() throws Exception {
+        Mailbox mockedMailbox = mock(Mailbox.class);
+        when(mockedMailbox.getUser()).thenReturn("other.user");
+        when(mockedMailbox.getMailboxId()).thenReturn(MAILBOX_ID);
+        when(mockedMailboxMapper.findMailboxById(MAILBOX_ID)).thenReturn(mockedMailbox);
+
+        MessageManager expected = storeMailboxManager.getMailbox(MAILBOX_ID, mockedMailboxSession);
+
+        assertThat(expected.getId()).isEqualTo(MAILBOX_ID);
+    }
 }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/22ed8ef2/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java
index 2bf50c4..d80c252 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java
@@ -26,6 +26,7 @@ import java.util.List;
 
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
@@ -248,7 +249,23 @@ public class MailboxMapperTest<T extends MapperProvider> {
         MailboxPath regexPath = new MailboxPath(benwaInboxPath.getNamespace(), benwaInboxPath.getUser(), "INB?X");
         assertThat(mailboxMapper.findMailboxWithPathLike(regexPath)).isEmpty();
     }
+
+    @ContractTest
+    public void findMailboxByIdShouldReturnExistingMailbox() throws MailboxException {
+        saveAll();
+        Mailbox actual = mailboxMapper.findMailboxById(benwaInboxMailbox.getMailboxId());
+        assertThat(actual).isEqualTo(benwaInboxMailbox);
+    }
     
+    @ContractTest
+    public void findMailboxByIdShouldFailWhenAbsent() throws MailboxException {
+        expected.expect(MailboxNotFoundException.class);
+        saveAll();
+        MailboxId removed = benwaInboxMailbox.getMailboxId();
+        mailboxMapper.delete(benwaInboxMailbox);
+        mailboxMapper.findMailboxById(removed);
+    }
+
     private void saveAll() throws MailboxException{
         mailboxMapper.save(benwaInboxMailbox);
         mailboxMapper.save(benwaWorkMailbox);

http://git-wip-us.apache.org/repos/asf/james-project/blob/22ed8ef2/protocols/imap/src/test/java/org/apache/james/imap/processor/LSubProcessorTest.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/LSubProcessorTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/LSubProcessorTest.java
index 58856f9..709754f 100644
--- a/protocols/imap/src/test/java/org/apache/james/imap/processor/LSubProcessorTest.java
+++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/LSubProcessorTest.java
@@ -263,6 +263,11 @@ public class LSubProcessorTest {
                 public String getUserName() {
                     return "test";
                 }
+
+                @Override
+                public boolean isSameUser(String username) {
+                    return "test".equalsIgnoreCase(username);
+                }
                 
             }));     
             oneOf(manager).subscriptions(with(same(mailboxSession)));will(returnValue(subscriptions));     

http://git-wip-us.apache.org/repos/asf/james-project/blob/22ed8ef2/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
index c6d2e89..39bcb27 100644
--- a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
+++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
@@ -338,7 +338,10 @@ public class MailboxEventAnalyserTest {
                 }
             };
         }
-        
+
+        public MessageManager getMailbox(MailboxId mailboxId, MailboxSession session) throws MailboxException {
+            return getMailbox((MailboxPath)null, session);
+        }
         
         public char getDelimiter() {
             return '.';

http://git-wip-us.apache.org/repos/asf/james-project/blob/22ed8ef2/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java
index c64cace..bde96d6 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java
@@ -136,6 +136,11 @@ public class FirstUserConnectionFilterThreadTest {
         }
 
         @Override
+        public MessageManager getMailbox(MailboxId mailboxId, MailboxSession session) throws MailboxException {
+            return null;
+        }
+
+        @Override
         public void createMailbox(MailboxPath mailboxPath, MailboxSession mailboxSession) throws MailboxException {
         }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/22ed8ef2/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java
index 8b2ccdd..09f06e0 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java
@@ -98,6 +98,11 @@ public class GetMessagesMethodTest {
         public List<Locale> getLocalePreferences() {
             return ImmutableList.of();
         }
+
+        @Override
+        public boolean isSameUser(String username) {
+            return this.username.equalsIgnoreCase(username);
+        }
     }
     
     private static final User ROBERT = new User("robert", "secret");

http://git-wip-us.apache.org/repos/asf/james-project/blob/22ed8ef2/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetVacationResponseMethodTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetVacationResponseMethodTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetVacationResponseMethodTest.java
index 85c9a5e..485ec15 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetVacationResponseMethodTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetVacationResponseMethodTest.java
@@ -68,6 +68,11 @@ public class SetVacationResponseMethodTest {
         public List<Locale> getLocalePreferences() {
             return null;
         }
+
+        @Override
+        public boolean isSameUser(String username) {
+            return USERNAME.equalsIgnoreCase(username);
+        }
     };
     public static final String SUBJECT = "subject";
 


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


[03/10] james-project git commit: JAMES-1818 Introduce MailboxManager.hasChildren and use it in MailboxUtils

Posted by ro...@apache.org.
JAMES-1818 Introduce MailboxManager.hasChildren and use it in MailboxUtils


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

Branch: refs/heads/master
Commit: ed7268ed28ce86c78497055f61e98f2d775e6809
Parents: 8ec9ab9
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Tue Aug 30 16:00:06 2016 +0200
Committer: Raphael Ouazana <ra...@linagora.com>
Committed: Mon Sep 5 14:42:00 2016 +0200

----------------------------------------------------------------------
 .../main/java/org/apache/james/mailbox/MailboxManager.java    | 2 ++
 .../org/apache/james/mailbox/store/StoreMailboxManager.java   | 7 +++++++
 .../james/imap/processor/base/MailboxEventAnalyserTest.java   | 5 +++++
 .../main/java/org/apache/james/jmap/utils/MailboxUtils.java   | 4 ++--
 .../james/jmap/FirstUserConnectionFilterThreadTest.java       | 5 +++++
 5 files changed, 21 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/ed7268ed/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
index e2cbdac..d993c4e 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
@@ -428,4 +428,6 @@ public interface MailboxManager extends RequestAware, MailboxListenerSupport {
      * @throws MailboxException in case of selected mailbox does not exist
      */
     void updateAnnotations(MailboxPath mailboxPath, MailboxSession session, List<MailboxAnnotation> mailboxAnnotations) throws MailboxException;
+    
+    boolean hasChildren(MailboxPath mailboxPath, MailboxSession session) throws MailboxException;
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/ed7268ed/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index e974e18..18f4727 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -771,4 +771,11 @@ public class StoreMailboxManager implements MailboxManager {
         AnnotationMapper annotationMapper = getAnnotationMapper(mailboxPath, session);
         return annotationMapper.getAnnotationsByKeysWithAllDepth(keys);
     }
+
+    @Override
+    public boolean hasChildren(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
+        MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session);
+        Mailbox mailbox = mapper.findMailboxByPath(mailboxPath);
+        return mapper.hasChildren(mailbox, session.getPathDelimiter());
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/ed7268ed/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
index 35d1a4e..c6d2e89 100644
--- a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
+++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
@@ -423,6 +423,11 @@ public class MailboxEventAnalyserTest {
             return null;
         }
 
+        @Override
+        public boolean hasChildren(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
+            return false;
+        }
+
     };
     
     private final class MyMailboxSession implements MailboxSession {

http://git-wip-us.apache.org/repos/asf/james-project/blob/ed7268ed/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 3584420..8bb4ba3 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
@@ -144,8 +144,8 @@ public class MailboxUtils {
 
     public boolean hasChildren(MailboxId mailboxId, MailboxSession mailboxSession) throws MailboxException {
         return getMailboxFromId(mailboxId, mailboxSession)
-                .map(Throwing.function(mailbox -> 
-                    mailboxMapperFactory.getMailboxMapper(mailboxSession).hasChildren(mailbox, mailboxSession.getPathDelimiter())))
+                .map(mailbox -> new MailboxPath(mailbox.getNamespace(), mailbox.getUser(), mailbox.getName()))
+                .map(Throwing.function(path -> mailboxManager.hasChildren(path, mailboxSession)))
                 .orElse(false);
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/ed7268ed/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java
index 7cde34c..c64cace 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/FirstUserConnectionFilterThreadTest.java
@@ -251,6 +251,11 @@ public class FirstUserConnectionFilterThreadTest {
                 Set<MailboxAnnotationKey> keys) throws MailboxException {
             return null;
         }
+
+        @Override
+        public boolean hasChildren(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
+            return false;
+        }
     }
 }
 


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


[07/10] james-project git commit: JAMES-1818 Finally remove store main dependency

Posted by ro...@apache.org.
JAMES-1818 Finally remove store main dependency


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

Branch: refs/heads/master
Commit: 47cfda6cc0e767607b73517022c6f11c2152c4e7
Parents: 4cdd9f8
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Wed Aug 31 19:23:06 2016 +0200
Committer: Raphael Ouazana <ra...@linagora.com>
Committed: Mon Sep 5 14:42:01 2016 +0200

----------------------------------------------------------------------
 server/pom.xml                |  1 +
 server/protocols/jmap/pom.xml | 14 ++++++++++----
 2 files changed, 11 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/47cfda6c/server/pom.xml
----------------------------------------------------------------------
diff --git a/server/pom.xml b/server/pom.xml
index f07d7bf..d8d6773 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -119,6 +119,7 @@
         <productName>Apache-James Mail Server</productName>
 
         <activemq.version>5.7.0</activemq.version>
+        <apache-mime4j.version>0.8.0-SNAPSHOT</apache-mime4j.version>
         <camel.version>2.13.4</camel.version>
         <derby.version>10.9.1.0</derby.version>
         <hadoop.version>1.1.1</hadoop.version>

http://git-wip-us.apache.org/repos/asf/james-project/blob/47cfda6c/server/protocols/jmap/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/pom.xml b/server/protocols/jmap/pom.xml
index 3b67c3a..5f0436e 100644
--- a/server/protocols/jmap/pom.xml
+++ b/server/protocols/jmap/pom.xml
@@ -169,10 +169,6 @@
                     <scope>test</scope>
                     <type>test-jar</type>
                 </dependency>
-                <dependency>
-                    <groupId>org.apache.james</groupId>
-                    <artifactId>apache-james-mailbox-store</artifactId>
-                </dependency>
                  <dependency>
                     <groupId>org.apache.james</groupId>
                     <artifactId>apache-james-mailbox-store</artifactId>
@@ -192,6 +188,16 @@
                 </dependency>
                 <dependency>
                     <groupId>org.apache.james</groupId>
+                    <artifactId>apache-mime4j-core</artifactId>
+                    <version>${apache-mime4j.version}</version>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.james</groupId>
+                    <artifactId>apache-mime4j-dom</artifactId>
+                    <version>${apache-mime4j.version}</version>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.james</groupId>
                     <artifactId>james-server-core</artifactId>
                 </dependency>
                 <dependency>


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