JAMES-2341 Move Role at API level

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

Branch: refs/heads/master
Commit: e640b76fece2fa2bfd449d840ad0d7d6cfacba90
Parents: f8c62f2
Author: Antoine Duprat <[email protected]>
Authored: Tue Feb 27 11:20:46 2018 +0100
Committer: Antoine Duprat <[email protected]>
Committed: Wed Feb 28 13:29:32 2018 +0100

----------------------------------------------------------------------
 .../java/org/apache/james/mailbox/Role.java     | 121 ++++++++++++++
 .../java/org/apache/james/mailbox/RoleTest.java | 163 +++++++++++++++++++
 .../integration/SetMessagesMethodTest.java      |   2 +-
 .../MailboxRoleNotFoundException.java           |   2 +-
 .../james/jmap/json/ObjectMapperFactory.java    |   4 +
 .../org/apache/james/jmap/json/RoleMixIn.java   |  27 +++
 .../SetMailboxesDestructionProcessor.java       |   2 +-
 .../methods/SetMailboxesUpdateProcessor.java    |   2 +-
 .../methods/SetMessagesCreationProcessor.java   |   2 +-
 .../methods/SetMessagesUpdateProcessor.java     |   2 +-
 .../apache/james/jmap/model/MailboxFactory.java |   2 +-
 .../james/jmap/model/mailbox/Mailbox.java       |   1 +
 .../model/mailbox/MailboxCreateRequest.java     |   1 +
 .../model/mailbox/MailboxUpdateRequest.java     |   1 +
 .../apache/james/jmap/model/mailbox/Role.java   | 125 --------------
 .../james/jmap/model/mailbox/SortOrder.java     |   2 +
 .../james/jmap/send/PostDequeueDecorator.java   |   2 +-
 .../jmap/utils/SystemMailboxesProvider.java     |   2 +-
 .../jmap/utils/SystemMailboxesProviderImpl.java |   2 +-
 .../jmap/methods/GetMailboxesMethodTest.java    |   2 +-
 .../SetMessagesCreationProcessorTest.java       |   2 +-
 .../model/mailbox/MailboxCreateRequestTest.java |   1 +
 .../james/jmap/model/mailbox/MailboxTest.java   |   1 +
 .../james/jmap/model/mailbox/RoleTest.java      | 162 ------------------
 .../utils/SystemMailboxesProviderImplTest.java  |   2 +-
 25 files changed, 335 insertions(+), 300 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/mailbox/api/src/main/java/org/apache/james/mailbox/Role.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/Role.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/Role.java
new file mode 100644
index 0000000..675b91b
--- /dev/null
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/Role.java
@@ -0,0 +1,121 @@
+/****************************************************************
+ * 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.mailbox;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.function.BiFunction;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableList;
+
+public class Role {
+
+    public static final String USER_DEFINED_ROLE_PREFIX = "x-";
+
+    private static final BiFunction<String, String, Boolean> 
CASE_SENSITIVE_COMPARATOR = (a, b) -> a.equals(b);
+    private static final BiFunction<String, String, Boolean> 
NON_CASE_SENSITIVE_COMPARATOR = (a, b) -> a.equalsIgnoreCase(b);
+
+    public static final Role INBOX = new Role("inbox", DefaultMailboxes.INBOX, 
NON_CASE_SENSITIVE_COMPARATOR);
+    public static final Role DRAFTS = new Role("drafts", 
DefaultMailboxes.DRAFTS, CASE_SENSITIVE_COMPARATOR);
+    public static final Role OUTBOX = new Role("outbox", 
DefaultMailboxes.OUTBOX, CASE_SENSITIVE_COMPARATOR);
+    public static final Role SENT = new Role("sent", DefaultMailboxes.SENT, 
CASE_SENSITIVE_COMPARATOR);
+    public static final Role TRASH = new Role("trash", DefaultMailboxes.TRASH, 
CASE_SENSITIVE_COMPARATOR);
+    public static final Role ARCHIVE = new Role("archive", 
DefaultMailboxes.ARCHIVE, CASE_SENSITIVE_COMPARATOR);
+    public static final Role SPAM = new Role("spam", DefaultMailboxes.SPAM, 
CASE_SENSITIVE_COMPARATOR);
+    public static final Role TEMPLATES = new Role("templates", 
DefaultMailboxes.TEMPLATES, CASE_SENSITIVE_COMPARATOR);
+    
+    private static final List<Role> ROLES = 
+            ImmutableList.<Role>of(INBOX, DRAFTS, OUTBOX, SENT, TRASH, 
ARCHIVE, SPAM, TEMPLATES);
+    
+    private final String name;
+    private final String defaultMailbox;
+    private final BiFunction<String, String, Boolean> comparator;
+
+    @VisibleForTesting Role(String name, String defaultMailbox, 
BiFunction<String, String, Boolean> comparator) {
+        this.name = name;
+        this.defaultMailbox = defaultMailbox;
+        this.comparator = comparator;
+    }
+
+    @VisibleForTesting Role(String name) {
+        this.name = name;
+        this.defaultMailbox = null;
+        this.comparator = NON_CASE_SENSITIVE_COMPARATOR;
+    }
+
+    public static Optional<Role> from(String name) {
+        Optional<Role> predefinedRole = predefinedRole(name);
+        if (predefinedRole.isPresent()) {
+            return predefinedRole;
+        } else {
+            return tryBuildCustomRole(name);
+        }
+    }
+
+    private static Optional<Role> predefinedRole(String name) {
+        return ROLES.stream()
+                .filter(role -> role.comparator.apply(role.defaultMailbox, 
name))
+                .findFirst();
+    }
+
+    private static Optional<Role> tryBuildCustomRole(String name) {
+        if (name.startsWith(USER_DEFINED_ROLE_PREFIX)) {
+            return Optional.of(new Role(name));
+        }
+        return Optional.empty();
+    }
+
+    public boolean isSystemRole() {
+        return predefinedRole(defaultMailbox).isPresent();
+    }
+
+    public String serialize() {
+        return name;
+    }
+
+    public String getDefaultMailbox() {
+        return defaultMailbox;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(name, defaultMailbox);
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        if (object instanceof Role) {
+            Role that = (Role) object;
+            return Objects.equal(this.name, that.name)
+                && Objects.equal(this.defaultMailbox, that.defaultMailbox);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+            .add("name", name)
+            .add("defaultMailbox", defaultMailbox)
+            .toString();
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/mailbox/api/src/test/java/org/apache/james/mailbox/RoleTest.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/RoleTest.java 
b/mailbox/api/src/test/java/org/apache/james/mailbox/RoleTest.java
new file mode 100644
index 0000000..134ecf3
--- /dev/null
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/RoleTest.java
@@ -0,0 +1,163 @@
+/****************************************************************
+ * 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.mailbox;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.Locale;
+import java.util.Optional;
+
+import org.apache.james.mailbox.Role;
+import org.junit.Test;
+
+public class RoleTest {
+
+    @Test
+    public void fromShouldReturnEmptyWhenUnknownValue() {
+        assertThat(Role.from("jjjj")).isEqualTo(Optional.empty());
+    }
+
+    @Test
+    public void fromShouldReturnSomethingWhenXPrefixedRole() {
+        
assertThat(Role.from("x-client-specific-role")).isEqualTo(Optional.of(new 
Role("x-client-specific-role")));
+    }
+
+    @Test
+    public void isSystemRoleShouldReturnFalseWhenXPrefixedRole() {
+        Role role = Role.from("x-client-specific-role").get();
+        assertThat(role.isSystemRole()).isFalse();
+    }
+
+    @Test
+    public void fromShouldReturnInboxWhenContainsUppercaseValueInTurkish() {
+        Locale previousLocale = Locale.getDefault();
+        Locale.setDefault(Locale.forLanguageTag("tr"));
+        try {
+            assertThat(Role.from("InBox")).isEqualTo(Optional.of(Role.INBOX));
+        } finally {
+            Locale.setDefault(previousLocale);
+        }
+    }
+
+    @Test
+    public void isSystemRoleShouldBeTrueWhenInbox() {
+        assertThat(Role.INBOX.isSystemRole()).isTrue();
+    }
+
+    @Test
+    public void isSystemRoleShouldBeTrueWhenArchive() {
+        assertThat(Role.ARCHIVE.isSystemRole()).isTrue();
+    }
+
+    @Test
+    public void isSystemRoleShouldBeTrueWhenDrafts() {
+        assertThat(Role.DRAFTS.isSystemRole()).isTrue();
+    }
+
+    @Test
+    public void isSystemRoleShouldBeTrueWhenOutbox() {
+        assertThat(Role.OUTBOX.isSystemRole()).isTrue();
+    }
+
+    @Test
+    public void isSystemRoleShouldBeTrueWhenSent() {
+        assertThat(Role.SENT.isSystemRole()).isTrue();
+    }
+
+    @Test
+    public void isSystemRoleShouldBeTrueWhenTrash() {
+        assertThat(Role.TRASH.isSystemRole()).isTrue();
+    }
+
+    @Test
+    public void isSystemRoleShouldBeTrueWhenSpam() {
+        assertThat(Role.SPAM.isSystemRole()).isTrue();
+    }
+
+    @Test
+    public void isSystemRoleShouldBeTrueWhenTemplates() {
+        assertThat(Role.TEMPLATES.isSystemRole()).isTrue();
+    }
+
+    @Test
+    public void isSystemRoleShouldBeFalseWhenUserDefinedRole() {
+        Role userRole = Role.from(Role.USER_DEFINED_ROLE_PREFIX + 
"myRole").get();
+        assertThat(userRole.isSystemRole()).isFalse();
+    }
+
+    @Test
+    public void theINBOXMailboxNameShouldBeASystemMailbox() {
+        Role role = Role.from("INBOX").get();
+        assertThat(role.isSystemRole()).isTrue();
+    }
+
+    @Test
+    public void theInBoXMailboxNameShouldBeASystemMailbox() {
+        Role role = Role.from("InBoX").get();
+        assertThat(role.isSystemRole()).isTrue();
+    }
+
+    @Test
+    public void theDraftsMailboxNameShouldBeASystemMailbox() {
+        Role role = Role.from("Drafts").get();
+        assertThat(role.isSystemRole()).isTrue();
+    }
+
+    @Test
+    public void theDrAfTsMailboxNameShouldNotBeASystemMailbox() {
+        Optional<Role> role = Role.from("DrAfTs");
+        assertThat(role).isEmpty();
+    }
+
+    @Test
+    public void theOutboxMailboxNameShouldBeASystemMailbox() {
+        Role role = Role.from("Outbox").get();
+        assertThat(role.isSystemRole()).isTrue();
+    }
+
+    @Test
+    public void theOuTbOxMailboxNameShouldNotBeASystemMailbox() {
+        Optional<Role> role = Role.from("OuTbOx");
+        assertThat(role).isEmpty();
+    }
+
+    @Test
+    public void theSentMailboxNameShouldBeASystemMailbox() {
+        Role role = Role.from("Sent").get();
+        assertThat(role.isSystemRole()).isTrue();
+    }
+
+    @Test
+    public void theSeNtMailboxNameShouldNotBeASystemMailbox() {
+        Optional<Role> role = Role.from("SeNt");
+        assertThat(role).isEmpty();
+    }
+
+    @Test
+    public void theTrashMailboxNameShouldBeASystemMailbox() {
+        Role role = Role.from("Trash").get();
+        assertThat(role.isSystemRole()).isTrue();
+    }
+
+    @Test
+    public void theTrAsHMailboxNameShouldNotBeASystemMailbox() {
+        Optional<Role> role = Role.from("TrAsH");
+        assertThat(role).isEmpty();
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
index c63b022..1fc4864 100644
--- 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
+++ 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
@@ -58,10 +58,10 @@ import org.apache.http.client.utils.URIBuilder;
 import org.apache.james.GuiceJamesServer;
 import org.apache.james.jmap.HttpJmapAuthentication;
 import org.apache.james.jmap.api.access.AccessToken;
-import org.apache.james.jmap.model.mailbox.Role;
 import org.apache.james.mailbox.DefaultMailboxes;
 import org.apache.james.mailbox.FlagsBuilder;
 import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.Role;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.Attachment;
 import org.apache.james.mailbox.model.ComposedMessageId;

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/server/protocols/jmap/src/main/java/org/apache/james/jmap/exceptions/MailboxRoleNotFoundException.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/exceptions/MailboxRoleNotFoundException.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/exceptions/MailboxRoleNotFoundException.java
index 88692c8..89d63a1 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/exceptions/MailboxRoleNotFoundException.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/exceptions/MailboxRoleNotFoundException.java
@@ -19,7 +19,7 @@
 
 package org.apache.james.jmap.exceptions;
 
-import org.apache.james.jmap.model.mailbox.Role;
+import org.apache.james.mailbox.Role;
 
 public class MailboxRoleNotFoundException extends RuntimeException {
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/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 c48527e..36c76fa 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
@@ -25,6 +25,7 @@ import java.util.Set;
 import javax.inject.Inject;
 
 import org.apache.james.jmap.model.mailbox.Rights;
+import org.apache.james.mailbox.Role;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageId;
 
@@ -70,6 +71,9 @@ public class ObjectMapperFactory {
         mailboxIdModule.addKeySerializer(MessageId.class, new 
MessageIdKeySerializer());
         mailboxIdModule.addKeyDeserializer(Rights.Username.class, new 
UsernameKeyDeserializer());
         mailboxIdModule.addDeserializer(Rights.Right.class, new 
RightDeserializer());
+
+        mailboxIdModule.setMixInAnnotation(Role.class, RoleMixIn.class);
+
         jacksonModules = JACKSON_BASE_MODULES.add(mailboxIdModule).build();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/server/protocols/jmap/src/main/java/org/apache/james/jmap/json/RoleMixIn.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/json/RoleMixIn.java 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/json/RoleMixIn.java
new file mode 100644
index 0000000..29060b4
--- /dev/null
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/json/RoleMixIn.java
@@ -0,0 +1,27 @@
+/****************************************************************
+ * 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 com.fasterxml.jackson.annotation.JsonValue;
+
+public abstract class RoleMixIn {
+
+    @JsonValue
+    abstract String serialize();
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/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 2251d82..c81a2a1 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
@@ -35,11 +35,11 @@ import org.apache.james.jmap.model.SetMailboxesRequest;
 import org.apache.james.jmap.model.SetMailboxesResponse;
 import org.apache.james.jmap.model.SetMailboxesResponse.Builder;
 import org.apache.james.jmap.model.mailbox.Mailbox;
-import org.apache.james.jmap.model.mailbox.Role;
 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;
+import org.apache.james.mailbox.Role;
 import org.apache.james.mailbox.SubscriptionManager;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.TooLongMailboxNameException;

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/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 912765f..1d2af08 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
@@ -37,11 +37,11 @@ import 
org.apache.james.jmap.model.SetMailboxesResponse.Builder;
 import org.apache.james.jmap.model.mailbox.Mailbox;
 import org.apache.james.jmap.model.mailbox.MailboxUpdateRequest;
 import org.apache.james.jmap.model.mailbox.Rights.Username;
-import org.apache.james.jmap.model.mailbox.Role;
 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.Role;
 import org.apache.james.mailbox.SubscriptionManager;
 import org.apache.james.mailbox.exception.DifferentDomainException;
 import org.apache.james.mailbox.exception.MailboxException;

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesCreationProcessor.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesCreationProcessor.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesCreationProcessor.java
index 26a50bc..c7f76ac 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesCreationProcessor.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesCreationProcessor.java
@@ -49,11 +49,11 @@ import org.apache.james.jmap.model.SetMessagesError;
 import org.apache.james.jmap.model.SetMessagesRequest;
 import org.apache.james.jmap.model.SetMessagesResponse;
 import org.apache.james.jmap.model.SetMessagesResponse.Builder;
-import org.apache.james.jmap.model.mailbox.Role;
 import org.apache.james.jmap.utils.SystemMailboxesProvider;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
+import org.apache.james.mailbox.Role;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.MailboxId;

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java
index 1a003e3..e6f230c 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java
@@ -44,12 +44,12 @@ import org.apache.james.jmap.model.SetError;
 import org.apache.james.jmap.model.SetMessagesRequest;
 import org.apache.james.jmap.model.SetMessagesResponse;
 import org.apache.james.jmap.model.UpdateMessagePatch;
-import org.apache.james.jmap.model.mailbox.Role;
 import org.apache.james.jmap.utils.SystemMailboxesProvider;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageManager.FlagsUpdateMode;
+import org.apache.james.mailbox.Role;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.FetchGroupImpl;

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/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
index fca9da2..949a6e4 100644
--- 
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
@@ -27,11 +27,11 @@ import org.apache.james.jmap.model.mailbox.Mailbox;
 import org.apache.james.jmap.model.mailbox.MailboxNamespace;
 import org.apache.james.jmap.model.mailbox.Rights;
 import org.apache.james.jmap.model.mailbox.Rights.Username;
-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.Role;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.MailboxCounters;

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/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 9c771f4..8dc0ff2 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
@@ -24,6 +24,7 @@ import java.util.Optional;
 
 import org.apache.james.jmap.methods.JmapResponseWriterImpl;
 import org.apache.james.jmap.model.Number;
+import org.apache.james.mailbox.Role;
 import org.apache.james.mailbox.model.MailboxId;
 
 import com.fasterxml.jackson.annotation.JsonFilter;

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/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 c0eb828..e473726 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
@@ -24,6 +24,7 @@ import java.util.Optional;
 
 import org.apache.commons.lang.NotImplementedException;
 import org.apache.james.jmap.model.MailboxCreationId;
+import org.apache.james.mailbox.Role;
 
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/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 81cfc4a..b5a042a 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
@@ -23,6 +23,7 @@ import java.util.Objects;
 import java.util.Optional;
 
 import org.apache.commons.lang.NotImplementedException;
+import org.apache.james.mailbox.Role;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxId;
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/Role.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/Role.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/Role.java
deleted file mode 100644
index 8f7ee17..0000000
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/Role.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/****************************************************************
- * 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.mailbox;
-
-import java.util.List;
-import java.util.Optional;
-import java.util.function.BiFunction;
-
-import org.apache.james.mailbox.DefaultMailboxes;
-
-import com.fasterxml.jackson.annotation.JsonValue;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Objects;
-import com.google.common.collect.ImmutableList;
-
-public class Role {
-
-    public static final String USER_DEFINED_ROLE_PREFIX = "x-";
-
-    private static final BiFunction<String, String, Boolean> 
CASE_SENSITIVE_COMPARATOR = (a, b) -> a.equals(b);
-    private static final BiFunction<String, String, Boolean> 
NON_CASE_SENSITIVE_COMPARATOR = (a, b) -> a.equalsIgnoreCase(b);
-
-    public static final Role INBOX = new Role("inbox", DefaultMailboxes.INBOX, 
NON_CASE_SENSITIVE_COMPARATOR);
-    public static final Role DRAFTS = new Role("drafts", 
DefaultMailboxes.DRAFTS, CASE_SENSITIVE_COMPARATOR);
-    public static final Role OUTBOX = new Role("outbox", 
DefaultMailboxes.OUTBOX, CASE_SENSITIVE_COMPARATOR);
-    public static final Role SENT = new Role("sent", DefaultMailboxes.SENT, 
CASE_SENSITIVE_COMPARATOR);
-    public static final Role TRASH = new Role("trash", DefaultMailboxes.TRASH, 
CASE_SENSITIVE_COMPARATOR);
-    public static final Role ARCHIVE = new Role("archive", 
DefaultMailboxes.ARCHIVE, CASE_SENSITIVE_COMPARATOR);
-    public static final Role SPAM = new Role("spam", DefaultMailboxes.SPAM, 
CASE_SENSITIVE_COMPARATOR);
-    public static final Role TEMPLATES = new Role("templates", 
DefaultMailboxes.TEMPLATES, CASE_SENSITIVE_COMPARATOR);
-    
-    private static final List<Role> ROLES = 
-            ImmutableList.<Role>of(INBOX, DRAFTS, OUTBOX, SENT, TRASH, 
ARCHIVE, SPAM, TEMPLATES);
-    
-    private final String name;
-    private final String defaultMailbox;
-    private final BiFunction<String, String, Boolean> comparator;
-
-    @VisibleForTesting Role(String name, String defaultMailbox, 
BiFunction<String, String, Boolean> comparator) {
-        this.name = name;
-        this.defaultMailbox = defaultMailbox;
-        this.comparator = comparator;
-    }
-
-    @VisibleForTesting Role(String name) {
-        this.name = name;
-        this.defaultMailbox = null;
-        this.comparator = NON_CASE_SENSITIVE_COMPARATOR;
-    }
-
-    public static Optional<Role> from(String name) {
-        Optional<Role> predefinedRole = predefinedRole(name);
-        if (predefinedRole.isPresent()) {
-            return predefinedRole;
-        } else {
-            return tryBuildCustomRole(name);
-        }
-    }
-
-    private static Optional<Role> predefinedRole(String name) {
-        return ROLES.stream()
-                .filter(role -> role.comparator.apply(role.defaultMailbox, 
name))
-                .findFirst();
-    }
-
-    private static Optional<Role> tryBuildCustomRole(String name) {
-        if (name.startsWith(USER_DEFINED_ROLE_PREFIX)) {
-            return Optional.of(new Role(name));
-        }
-        return Optional.empty();
-    }
-
-    public boolean isSystemRole() {
-        return predefinedRole(defaultMailbox).isPresent();
-    }
-
-    @JsonValue
-    public String serialize() {
-        return name;
-    }
-
-    public String getDefaultMailbox() {
-        return defaultMailbox;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hashCode(name, defaultMailbox);
-    }
-
-    @Override
-    public boolean equals(Object object) {
-        if (object instanceof Role) {
-            Role that = (Role) object;
-            return Objects.equal(this.name, that.name)
-                && Objects.equal(this.defaultMailbox, that.defaultMailbox);
-        }
-        return false;
-    }
-
-    @Override
-    public String toString() {
-        return MoreObjects.toStringHelper(this)
-            .add("name", name)
-            .add("defaultMailbox", defaultMailbox)
-            .toString();
-    }
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/SortOrder.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/SortOrder.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/SortOrder.java
index 6284381..27c2a65 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/SortOrder.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/SortOrder.java
@@ -20,6 +20,8 @@ package org.apache.james.jmap.model.mailbox;
 
 import java.util.Optional;
 
+import org.apache.james.mailbox.Role;
+
 import com.fasterxml.jackson.annotation.JsonValue;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java
index 9220aca..814ba8c 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java
@@ -25,13 +25,13 @@ import javax.mail.Flags;
 import javax.mail.Flags.Flag;
 
 import org.apache.james.jmap.exceptions.MailboxRoleNotFoundException;
-import org.apache.james.jmap.model.mailbox.Role;
 import org.apache.james.jmap.send.exception.MailShouldBeInOutboxException;
 import org.apache.james.jmap.utils.SystemMailboxesProvider;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageManager;
+import org.apache.james.mailbox.Role;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.FetchGroupImpl;
 import org.apache.james.mailbox.model.MailboxId;

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SystemMailboxesProvider.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SystemMailboxesProvider.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SystemMailboxesProvider.java
index 1b55c55..57e41bf 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SystemMailboxesProvider.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SystemMailboxesProvider.java
@@ -22,9 +22,9 @@ package org.apache.james.jmap.utils;
 import java.util.stream.Stream;
 
 import org.apache.james.jmap.exceptions.MailboxRoleNotFoundException;
-import org.apache.james.jmap.model.mailbox.Role;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
+import org.apache.james.mailbox.Role;
 import org.apache.james.mailbox.exception.MailboxException;
 
 public interface SystemMailboxesProvider {

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SystemMailboxesProviderImpl.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SystemMailboxesProviderImpl.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SystemMailboxesProviderImpl.java
index 500f9ab..50bd057 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SystemMailboxesProviderImpl.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/SystemMailboxesProviderImpl.java
@@ -23,10 +23,10 @@ import java.util.stream.Stream;
 
 import javax.inject.Inject;
 
-import org.apache.james.jmap.model.mailbox.Role;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
+import org.apache.james.mailbox.Role;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.MailboxMetaData;

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/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 f0f6d3f..c750526 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
@@ -37,11 +37,11 @@ import org.apache.james.jmap.model.GetMailboxesResponse;
 import org.apache.james.jmap.model.MailboxFactory;
 import org.apache.james.jmap.model.Number;
 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.Role;
 import org.apache.james.mailbox.acl.GroupMembershipResolver;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.InMemoryId;

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/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 022be44..628b67e 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
@@ -44,7 +44,6 @@ import org.apache.james.jmap.model.MessageFactory;
 import org.apache.james.jmap.model.MessagePreviewGenerator;
 import org.apache.james.jmap.model.SetMessagesRequest;
 import org.apache.james.jmap.model.SetMessagesResponse;
-import org.apache.james.jmap.model.mailbox.Role;
 import org.apache.james.jmap.send.MailFactory;
 import org.apache.james.jmap.send.MailMetadata;
 import org.apache.james.jmap.send.MailSpool;
@@ -57,6 +56,7 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.Role;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.inmemory.InMemoryId;

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/mailbox/MailboxCreateRequestTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/mailbox/MailboxCreateRequestTest.java
 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/mailbox/MailboxCreateRequestTest.java
index 72e2d37..ce719d9 100644
--- 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/mailbox/MailboxCreateRequestTest.java
+++ 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/mailbox/MailboxCreateRequestTest.java
@@ -22,6 +22,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.apache.commons.lang.NotImplementedException;
+import org.apache.james.mailbox.Role;
 import org.junit.Test;
 
 public class MailboxCreateRequestTest {

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/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 5875a5b..be674c3 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
@@ -24,6 +24,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 import java.util.Optional;
 
 import org.apache.james.jmap.model.Number;
+import org.apache.james.mailbox.Role;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.junit.Test;
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/mailbox/RoleTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/mailbox/RoleTest.java
 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/mailbox/RoleTest.java
deleted file mode 100644
index fcdcede..0000000
--- 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/mailbox/RoleTest.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/****************************************************************
- * 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.mailbox;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.util.Locale;
-import java.util.Optional;
-
-import org.junit.Test;
-
-public class RoleTest {
-
-    @Test
-    public void fromShouldReturnEmptyWhenUnknownValue() {
-        assertThat(Role.from("jjjj")).isEqualTo(Optional.empty());
-    }
-
-    @Test
-    public void fromShouldReturnSomethingWhenXPrefixedRole() {
-        
assertThat(Role.from("x-client-specific-role")).isEqualTo(Optional.of(new 
Role("x-client-specific-role")));
-    }
-
-    @Test
-    public void isSystemRoleShouldReturnFalseWhenXPrefixedRole() {
-        Role role = Role.from("x-client-specific-role").get();
-        assertThat(role.isSystemRole()).isFalse();
-    }
-
-    @Test
-    public void fromShouldReturnInboxWhenContainsUppercaseValueInTurkish() {
-        Locale previousLocale = Locale.getDefault();
-        Locale.setDefault(Locale.forLanguageTag("tr"));
-        try {
-            assertThat(Role.from("InBox")).isEqualTo(Optional.of(Role.INBOX));
-        } finally {
-            Locale.setDefault(previousLocale);
-        }
-    }
-
-    @Test
-    public void isSystemRoleShouldBeTrueWhenInbox() {
-        assertThat(Role.INBOX.isSystemRole()).isTrue();
-    }
-
-    @Test
-    public void isSystemRoleShouldBeTrueWhenArchive() {
-        assertThat(Role.ARCHIVE.isSystemRole()).isTrue();
-    }
-
-    @Test
-    public void isSystemRoleShouldBeTrueWhenDrafts() {
-        assertThat(Role.DRAFTS.isSystemRole()).isTrue();
-    }
-
-    @Test
-    public void isSystemRoleShouldBeTrueWhenOutbox() {
-        assertThat(Role.OUTBOX.isSystemRole()).isTrue();
-    }
-
-    @Test
-    public void isSystemRoleShouldBeTrueWhenSent() {
-        assertThat(Role.SENT.isSystemRole()).isTrue();
-    }
-
-    @Test
-    public void isSystemRoleShouldBeTrueWhenTrash() {
-        assertThat(Role.TRASH.isSystemRole()).isTrue();
-    }
-
-    @Test
-    public void isSystemRoleShouldBeTrueWhenSpam() {
-        assertThat(Role.SPAM.isSystemRole()).isTrue();
-    }
-
-    @Test
-    public void isSystemRoleShouldBeTrueWhenTemplates() {
-        assertThat(Role.TEMPLATES.isSystemRole()).isTrue();
-    }
-
-    @Test
-    public void isSystemRoleShouldBeFalseWhenUserDefinedRole() {
-        Role userRole = Role.from(Role.USER_DEFINED_ROLE_PREFIX + 
"myRole").get();
-        assertThat(userRole.isSystemRole()).isFalse();
-    }
-
-    @Test
-    public void theINBOXMailboxNameShouldBeASystemMailbox() {
-        Role role = Role.from("INBOX").get();
-        assertThat(role.isSystemRole()).isTrue();
-    }
-
-    @Test
-    public void theInBoXMailboxNameShouldBeASystemMailbox() {
-        Role role = Role.from("InBoX").get();
-        assertThat(role.isSystemRole()).isTrue();
-    }
-
-    @Test
-    public void theDraftsMailboxNameShouldBeASystemMailbox() {
-        Role role = Role.from("Drafts").get();
-        assertThat(role.isSystemRole()).isTrue();
-    }
-
-    @Test
-    public void theDrAfTsMailboxNameShouldNotBeASystemMailbox() {
-        Optional<Role> role = Role.from("DrAfTs");
-        assertThat(role).isEmpty();
-    }
-
-    @Test
-    public void theOutboxMailboxNameShouldBeASystemMailbox() {
-        Role role = Role.from("Outbox").get();
-        assertThat(role.isSystemRole()).isTrue();
-    }
-
-    @Test
-    public void theOuTbOxMailboxNameShouldNotBeASystemMailbox() {
-        Optional<Role> role = Role.from("OuTbOx");
-        assertThat(role).isEmpty();
-    }
-
-    @Test
-    public void theSentMailboxNameShouldBeASystemMailbox() {
-        Role role = Role.from("Sent").get();
-        assertThat(role.isSystemRole()).isTrue();
-    }
-
-    @Test
-    public void theSeNtMailboxNameShouldNotBeASystemMailbox() {
-        Optional<Role> role = Role.from("SeNt");
-        assertThat(role).isEmpty();
-    }
-
-    @Test
-    public void theTrashMailboxNameShouldBeASystemMailbox() {
-        Role role = Role.from("Trash").get();
-        assertThat(role.isSystemRole()).isTrue();
-    }
-
-    @Test
-    public void theTrAsHMailboxNameShouldNotBeASystemMailbox() {
-        Optional<Role> role = Role.from("TrAsH");
-        assertThat(role).isEmpty();
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/e640b76f/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/SystemMailboxesProviderImplTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/SystemMailboxesProviderImplTest.java
 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/SystemMailboxesProviderImplTest.java
index e2ebc95..7efcf9a 100644
--- 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/SystemMailboxesProviderImplTest.java
+++ 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/SystemMailboxesProviderImplTest.java
@@ -24,10 +24,10 @@ import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-import org.apache.james.jmap.model.mailbox.Role;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
+import org.apache.james.mailbox.Role;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.fixture.MailboxFixture;
 import org.apache.james.mailbox.mock.MockMailboxSession;


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to