You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2020/12/28 07:43:34 UTC

[james-project] 02/16: JAMES-3469 Pojoify */changes State & Limit

This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 626b74041b6e240c221cf917d56c0a20a3a50b2c
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Dec 21 10:57:52 2020 +0700

    JAMES-3469 Pojoify */changes State & Limit
    
    This enable reuse of these POJOs for Email/changes.
    
    Also, add unit tests for these POJOs
    
    Move data validation from *ChangeRepository into the POJOs themselves.
    
    Other improvements includes:
     - toString method for state
     - State.INITIAL constant should be final
     - State.of should reject null values
     - Limit.of should reject negative or zero values
---
 .../james/modules/mailbox/MemoryMailboxModule.java |  2 +-
 .../change/CassandraMailboxChangeRepository.java   | 15 ++--
 .../Limit.java}                                    | 22 +++---
 .../james/jmap/api/change/MailboxChange.java       | 65 -----------------
 .../jmap/api/change/MailboxChangeRepository.java   |  2 -
 .../james/jmap/api/change/MailboxChanges.java      | 18 ++---
 .../org/apache/james/jmap/api/change/State.java    | 81 ++++++++++++++++++++++
 .../api/exception/ChangeNotFoundException.java     |  8 +--
 .../change/MemoryMailboxChangeRepository.java      |  6 +-
 .../apache/james/jmap/api/change/LimitTest.java}   | 44 ++++++------
 .../change/MailboxChangeRepositoryContract.java    |  2 -
 .../apache/james/jmap/api/change/StateTest.java}   | 49 +++++++------
 .../change/MemoryMailboxChangeRepositoryTest.java  |  8 +--
 .../contract/MailboxChangesMethodContract.scala    |  2 +-
 .../memory/MemoryMailboxChangesMethodTest.java     |  6 +-
 .../scala/org/apache/james/jmap/core/Session.scala |  4 +-
 .../apache/james/jmap/json/MailboxSerializer.scala |  2 +-
 .../org/apache/james/jmap/mail/MailboxGet.scala    |  2 +-
 .../james/jmap/method/MailboxChangesMethod.scala   |  2 +-
 .../jmap/change/MailboxChangeListenerTest.scala    |  3 +-
 20 files changed, 185 insertions(+), 158 deletions(-)

diff --git a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
index 6bd4002..da8950e 100644
--- a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
+++ b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
@@ -25,8 +25,8 @@ import javax.inject.Singleton;
 
 import org.apache.james.adapter.mailbox.UserRepositoryAuthenticator;
 import org.apache.james.adapter.mailbox.UserRepositoryAuthorizator;
-import org.apache.james.jmap.api.change.MailboxChange.State;
 import org.apache.james.jmap.api.change.MailboxChangeRepository;
+import org.apache.james.jmap.api.change.State;
 import org.apache.james.jmap.memory.change.MemoryMailboxChangeRepository;
 import org.apache.james.mailbox.AttachmentContentLoader;
 import org.apache.james.mailbox.AttachmentManager;
diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeRepository.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeRepository.java
index b17175a..4fe0c0e 100644
--- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeRepository.java
+++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeRepository.java
@@ -21,10 +21,11 @@ package org.apache.james.jmap.cassandra.change;
 
 import java.util.Optional;
 
+import org.apache.james.jmap.api.change.Limit;
 import org.apache.james.jmap.api.change.MailboxChange;
-import org.apache.james.jmap.api.change.MailboxChange.Limit;
 import org.apache.james.jmap.api.change.MailboxChangeRepository;
 import org.apache.james.jmap.api.change.MailboxChanges;
+import org.apache.james.jmap.api.change.State;
 import org.apache.james.jmap.api.model.AccountId;
 
 import reactor.core.publisher.Mono;
@@ -37,22 +38,22 @@ public class CassandraMailboxChangeRepository implements MailboxChangeRepository
     }
 
     @Override
-    public Mono<MailboxChanges> getSinceState(AccountId accountId, MailboxChange.State state, Optional<Limit> maxChanges) {
+    public Mono<MailboxChanges> getSinceState(AccountId accountId, State state, Optional<Limit> maxChanges) {
         return Mono.empty();
     }
 
     @Override
-    public Mono<MailboxChanges> getSinceStateWithDelegation(AccountId accountId, MailboxChange.State state, Optional<Limit> maxChanges) {
+    public Mono<MailboxChanges> getSinceStateWithDelegation(AccountId accountId, State state, Optional<Limit> maxChanges) {
         return Mono.empty();
     }
 
     @Override
-    public Mono<MailboxChange.State> getLatestState(AccountId accountId) {
-        return Mono.just(MailboxChange.State.INITIAL);
+    public Mono<State> getLatestState(AccountId accountId) {
+        return Mono.just(State.INITIAL);
     }
 
     @Override
-    public Mono<MailboxChange.State> getLatestStateWithDelegation(AccountId accountId) {
-        return Mono.just(MailboxChange.State.INITIAL);
+    public Mono<State> getLatestStateWithDelegation(AccountId accountId) {
+        return Mono.just(State.INITIAL);
     }
 }
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/exception/ChangeNotFoundException.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/Limit.java
similarity index 74%
copy from server/data/data-jmap/src/main/java/org/apache/james/jmap/api/exception/ChangeNotFoundException.java
copy to server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/Limit.java
index 9fcc4a0..ebec8db 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/exception/ChangeNotFoundException.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/Limit.java
@@ -17,19 +17,23 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.api.exception;
+package org.apache.james.jmap.api.change;
 
-import org.apache.james.jmap.api.change.MailboxChange;
+import com.google.common.base.Preconditions;
 
-public class ChangeNotFoundException extends RuntimeException {
-    private final MailboxChange.State state;
+public class Limit {
+    public static Limit of(int value) {
+        Preconditions.checkArgument(value > 0, "'limit' needs to be strictly positive");
+        return new Limit(value);
+    }
+
+    private final int value;
 
-    public ChangeNotFoundException(MailboxChange.State state, String msg) {
-        super(msg);
-        this.state = state;
+    private Limit(int value) {
+        this.value = value;
     }
 
-    public MailboxChange.State getState() {
-        return state;
+    public int getValue() {
+        return value;
     }
 }
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChange.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChange.java
index 4bdcb2c..f242cc0 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChange.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChange.java
@@ -22,9 +22,7 @@ package org.apache.james.jmap.api.change;
 import java.time.Clock;
 import java.time.ZonedDateTime;
 import java.util.List;
-import java.util.Objects;
 import java.util.Optional;
-import java.util.UUID;
 import java.util.stream.Stream;
 
 import javax.inject.Inject;
@@ -51,69 +49,6 @@ import com.github.steveash.guavate.Guavate;
 import com.google.common.collect.ImmutableList;
 
 public class MailboxChange {
-
-    public static class State {
-        public static State INITIAL = of(UUID.fromString("2c9f1b12-b35a-43e6-9af2-0106fb53a943"));
-
-        public interface Factory {
-            State generate();
-        }
-
-        public static class DefaultFactory implements Factory {
-
-            @Override
-            public State generate() {
-                return of(UUID.randomUUID());
-            }
-        }
-
-        public static State of(UUID value) {
-            return new State(value);
-        }
-
-        private final UUID value;
-
-        private State(UUID value) {
-            this.value = value;
-        }
-
-        public UUID getValue() {
-            return value;
-        }
-
-        @Override
-        public final boolean equals(Object o) {
-            if (o instanceof State) {
-                State state = (State) o;
-
-                return Objects.equals(this.value, state.value);
-            }
-            return false;
-        }
-
-        @Override
-        public final int hashCode() {
-            return Objects.hash(value);
-        }
-    }
-
-    public static class Limit {
-
-        public static Limit of(int value) {
-            return new Limit(value);
-        }
-
-        private final int value;
-
-        private Limit(int value) {
-            this.value = value;
-        }
-
-        public int getValue() {
-            return value;
-        }
-    }
-
     @FunctionalInterface
     public interface RequiredAccountId {
         RequiredState accountId(AccountId accountId);
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChangeRepository.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChangeRepository.java
index 39779b6..d90b968 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChangeRepository.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChangeRepository.java
@@ -21,8 +21,6 @@ package org.apache.james.jmap.api.change;
 
 import java.util.Optional;
 
-import org.apache.james.jmap.api.change.MailboxChange.Limit;
-import org.apache.james.jmap.api.change.MailboxChange.State;
 import org.apache.james.jmap.api.model.AccountId;
 
 import reactor.core.publisher.Mono;
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChanges.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChanges.java
index a3f9366..cbd1deb 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChanges.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChanges.java
@@ -39,10 +39,10 @@ public class MailboxChanges {
     public static class MailboxChangesBuilder {
 
         public static class MailboxChangeCollector implements Collector<MailboxChange, MailboxChangesBuilder, MailboxChanges> {
-            private final MailboxChange.Limit limit;
-            private final MailboxChange.State state;
+            private final Limit limit;
+            private final State state;
 
-            public MailboxChangeCollector(MailboxChange.State state, MailboxChange.Limit limit) {
+            public MailboxChangeCollector(State state, Limit limit) {
                 this.limit = limit;
                 this.state = state;
             }
@@ -72,15 +72,15 @@ public class MailboxChanges {
             }
         }
 
-        private MailboxChange.State state;
+        private State state;
         private boolean hasMoreChanges;
         private boolean canAddMoreItem;
-        private MailboxChange.Limit limit;
+        private Limit limit;
         private Set<MailboxId> created;
         private Set<MailboxId> updated;
         private Set<MailboxId> destroyed;
 
-        public MailboxChangesBuilder(MailboxChange.State state, MailboxChange.Limit limit) {
+        public MailboxChangesBuilder(State state, Limit limit) {
             this.limit = limit;
             this.state = state;
             this.hasMoreChanges = false;
@@ -121,13 +121,13 @@ public class MailboxChanges {
         }
     }
 
-    private MailboxChange.State newState;
+    private State newState;
     private final boolean hasMoreChanges;
     private final Set<MailboxId> created;
     private final Set<MailboxId> updated;
     private final Set<MailboxId> destroyed;
 
-    private MailboxChanges(MailboxChange.State newState, boolean hasMoreChanges, Set<MailboxId> created, Set<MailboxId> updated, Set<MailboxId> destroyed) {
+    private MailboxChanges(State newState, boolean hasMoreChanges, Set<MailboxId> created, Set<MailboxId> updated, Set<MailboxId> destroyed) {
         this.newState = newState;
         this.hasMoreChanges = hasMoreChanges;
         this.created = created;
@@ -135,7 +135,7 @@ public class MailboxChanges {
         this.destroyed = destroyed;
     }
 
-    public MailboxChange.State getNewState() {
+    public State getNewState() {
         return newState;
     }
 
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/State.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/State.java
new file mode 100644
index 0000000..f4ed004
--- /dev/null
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/State.java
@@ -0,0 +1,81 @@
+/****************************************************************
+ * 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.api.change;
+
+import java.util.Objects;
+import java.util.UUID;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Preconditions;
+
+public class State {
+    public interface Factory {
+        Factory DEFAULT = new DefaultFactory();
+
+        State generate();
+    }
+
+    public static class DefaultFactory implements Factory {
+        @Override
+        public State generate() {
+            return of(UUID.randomUUID());
+        }
+    }
+
+    public static final State INITIAL = of(UUID.fromString("2c9f1b12-b35a-43e6-9af2-0106fb53a943"));
+
+    public static State of(UUID value) {
+        Preconditions.checkNotNull(value, "State 'value' should not be null.");
+
+        return new State(value);
+    }
+
+    private final UUID value;
+
+    private State(UUID value) {
+        this.value = value;
+    }
+
+    public UUID getValue() {
+        return value;
+    }
+
+    @Override
+    public final boolean equals(Object o) {
+        if (o instanceof State) {
+            State state = (State) o;
+
+            return Objects.equals(this.value, state.value);
+        }
+        return false;
+    }
+
+    @Override
+    public final int hashCode() {
+        return Objects.hash(value);
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+            .add("value", value)
+            .toString();
+    }
+}
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/exception/ChangeNotFoundException.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/exception/ChangeNotFoundException.java
index 9fcc4a0..d0663c3 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/exception/ChangeNotFoundException.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/exception/ChangeNotFoundException.java
@@ -19,17 +19,17 @@
 
 package org.apache.james.jmap.api.exception;
 
-import org.apache.james.jmap.api.change.MailboxChange;
+import org.apache.james.jmap.api.change.State;
 
 public class ChangeNotFoundException extends RuntimeException {
-    private final MailboxChange.State state;
+    private final State state;
 
-    public ChangeNotFoundException(MailboxChange.State state, String msg) {
+    public ChangeNotFoundException(State state, String msg) {
         super(msg);
         this.state = state;
     }
 
-    public MailboxChange.State getState() {
+    public State getState() {
         return state;
     }
 }
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepository.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepository.java
index 44e5aee..ac45191 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepository.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepository.java
@@ -23,12 +23,12 @@ import java.util.Comparator;
 import java.util.Optional;
 import java.util.function.Predicate;
 
+import org.apache.james.jmap.api.change.Limit;
 import org.apache.james.jmap.api.change.MailboxChange;
-import org.apache.james.jmap.api.change.MailboxChange.Limit;
-import org.apache.james.jmap.api.change.MailboxChange.State;
 import org.apache.james.jmap.api.change.MailboxChangeRepository;
 import org.apache.james.jmap.api.change.MailboxChanges;
 import org.apache.james.jmap.api.change.MailboxChanges.MailboxChangesBuilder.MailboxChangeCollector;
+import org.apache.james.jmap.api.change.State;
 import org.apache.james.jmap.api.exception.ChangeNotFoundException;
 import org.apache.james.jmap.api.model.AccountId;
 
@@ -60,7 +60,7 @@ public class MemoryMailboxChangeRepository implements MailboxChangeRepository {
     public Mono<MailboxChanges> getSinceState(AccountId accountId, State state, Optional<Limit> maxChanges) {
         Preconditions.checkNotNull(accountId);
         Preconditions.checkNotNull(state);
-        maxChanges.ifPresent(limit -> Preconditions.checkArgument(limit.getValue() > 0, "maxChanges must be a positive integer"));
+
         if (state.equals(State.INITIAL)) {
             return Flux.fromIterable(mailboxChangeMap.get(accountId))
                 .sort(Comparator.comparing(MailboxChange::getDate))
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChangeRepository.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/LimitTest.java
similarity index 65%
copy from server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChangeRepository.java
copy to server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/LimitTest.java
index 39779b6..4d02219 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChangeRepository.java
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/LimitTest.java
@@ -19,23 +19,27 @@
 
 package org.apache.james.jmap.api.change;
 
-import java.util.Optional;
-
-import org.apache.james.jmap.api.change.MailboxChange.Limit;
-import org.apache.james.jmap.api.change.MailboxChange.State;
-import org.apache.james.jmap.api.model.AccountId;
-
-import reactor.core.publisher.Mono;
-
-public interface MailboxChangeRepository {
-
-    Mono<Void> save(MailboxChange change);
-
-    Mono<MailboxChanges> getSinceState(AccountId accountId, State state, Optional<Limit> maxChanges);
-
-    Mono<MailboxChanges> getSinceStateWithDelegation(AccountId accountId, State state, Optional<Limit> maxChanges);
-
-    Mono<State> getLatestState(AccountId accountId);
-
-    Mono<State> getLatestStateWithDelegation(AccountId accountId);
-}
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import org.junit.jupiter.api.Test;
+
+class LimitTest {
+    @Test
+    void ofShouldThrowWhenNegative() {
+        assertThatThrownBy(() -> Limit.of(-1))
+            .isInstanceOf(IllegalArgumentException.class);
+    }
+
+    @Test
+    void ofShouldThrowWhenZero() {
+        assertThatThrownBy(() -> Limit.of(0))
+            .isInstanceOf(IllegalArgumentException.class);
+    }
+
+    @Test
+    void getValueShouldReturnSuppliedValue() {
+        assertThat(Limit.of(36).getValue())
+            .isEqualTo(36);
+    }
+}
\ No newline at end of file
diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/MailboxChangeRepositoryContract.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/MailboxChangeRepositoryContract.java
index 922d0e9..81a9266 100644
--- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/MailboxChangeRepositoryContract.java
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/MailboxChangeRepositoryContract.java
@@ -27,8 +27,6 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import java.time.ZonedDateTime;
 import java.util.Optional;
 
-import org.apache.james.jmap.api.change.MailboxChange.Limit;
-import org.apache.james.jmap.api.change.MailboxChange.State;
 import org.apache.james.jmap.api.exception.ChangeNotFoundException;
 import org.apache.james.jmap.api.model.AccountId;
 import org.apache.james.mailbox.model.TestId;
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChangeRepository.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/StateTest.java
similarity index 63%
copy from server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChangeRepository.java
copy to server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/StateTest.java
index 39779b6..cbea897 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChangeRepository.java
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/StateTest.java
@@ -19,23 +19,32 @@
 
 package org.apache.james.jmap.api.change;
 
-import java.util.Optional;
-
-import org.apache.james.jmap.api.change.MailboxChange.Limit;
-import org.apache.james.jmap.api.change.MailboxChange.State;
-import org.apache.james.jmap.api.model.AccountId;
-
-import reactor.core.publisher.Mono;
-
-public interface MailboxChangeRepository {
-
-    Mono<Void> save(MailboxChange change);
-
-    Mono<MailboxChanges> getSinceState(AccountId accountId, State state, Optional<Limit> maxChanges);
-
-    Mono<MailboxChanges> getSinceStateWithDelegation(AccountId accountId, State state, Optional<Limit> maxChanges);
-
-    Mono<State> getLatestState(AccountId accountId);
-
-    Mono<State> getLatestStateWithDelegation(AccountId accountId);
-}
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.util.UUID;
+
+import org.junit.jupiter.api.Test;
+
+import nl.jqno.equalsverifier.EqualsVerifier;
+
+class StateTest {
+    @Test
+    void shouldMatchBeanContract() {
+        EqualsVerifier.forClass(State.class)
+            .verify();
+    }
+
+    @Test
+    void ofShouldThrowOnNull() {
+        assertThatThrownBy(() -> State.of(null))
+            .isInstanceOf(NullPointerException.class);
+    }
+
+    @Test
+    void getValueShouldReturnSuppliedValue() {
+        UUID uuid = UUID.randomUUID();
+        assertThat(State.of(uuid).getValue())
+            .isEqualTo(uuid);
+    }
+}
\ No newline at end of file
diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepositoryTest.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepositoryTest.java
index 6c3b74f..ae3bd27 100644
--- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepositoryTest.java
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepositoryTest.java
@@ -19,19 +19,19 @@
 
 package org.apache.james.jmap.memory.change;
 
-import org.apache.james.jmap.api.change.MailboxChange;
 import org.apache.james.jmap.api.change.MailboxChangeRepository;
 import org.apache.james.jmap.api.change.MailboxChangeRepositoryContract;
+import org.apache.james.jmap.api.change.State;
 import org.junit.jupiter.api.BeforeEach;
 
 public class MemoryMailboxChangeRepositoryTest implements MailboxChangeRepositoryContract {
     MailboxChangeRepository mailboxChangeRepository;
-    MailboxChange.State.Factory stateFactory;
+    State.Factory stateFactory;
 
     @BeforeEach
     void setup() {
         mailboxChangeRepository = new MemoryMailboxChangeRepository();
-        stateFactory = new MailboxChange.State.DefaultFactory();
+        stateFactory = new State.DefaultFactory();
     }
 
     @Override
@@ -40,7 +40,7 @@ public class MemoryMailboxChangeRepositoryTest implements MailboxChangeRepositor
     }
 
     @Override
-    public MailboxChange.State.Factory stateFactory() {
+    public State.Factory stateFactory() {
         return stateFactory;
     }
 }
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxChangesMethodContract.scala b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxChangesMethodContract.scala
index a9ce132..5d9164a 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxChangesMethodContract.scala
+++ b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxChangesMethodContract.scala
@@ -35,7 +35,7 @@ import org.apache.http.HttpStatus.SC_OK
 import org.apache.james.GuiceJamesServer
 import org.apache.james.core.Username
 import org.apache.james.jmap.api.change.MailboxChange
-import org.apache.james.jmap.api.change.MailboxChange.State
+import org.apache.james.jmap.api.change.State
 import org.apache.james.jmap.api.model.AccountId
 import org.apache.james.jmap.core.ResponseObject.SESSION_STATE
 import org.apache.james.jmap.draft.JmapGuiceProbe
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxChangesMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxChangesMethodTest.java
index 93104a9..58e6359 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxChangesMethodTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxChangesMethodTest.java
@@ -24,7 +24,7 @@ import static org.apache.james.MemoryJamesServerMain.IN_MEMORY_SERVER_AGGREGATE_
 import org.apache.james.GuiceJamesServer;
 import org.apache.james.JamesServerBuilder;
 import org.apache.james.JamesServerExtension;
-import org.apache.james.jmap.api.change.MailboxChange;
+import org.apache.james.jmap.api.change.State;
 import org.apache.james.jmap.rfc8621.contract.MailboxChangesMethodContract;
 import org.apache.james.modules.TestJMAPServerModule;
 import org.junit.jupiter.api.extension.RegisterExtension;
@@ -38,7 +38,7 @@ public class MemoryMailboxChangesMethodTest implements MailboxChangesMethodContr
         .build();
 
     @Override
-    public MailboxChange.State.Factory stateFactory() {
-        return new MailboxChange.State.DefaultFactory();
+    public State.Factory stateFactory() {
+        return new State.DefaultFactory();
     }
 }
\ No newline at end of file
diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Session.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Session.scala
index 6949488..81c3f4b 100644
--- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Session.scala
+++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Session.scala
@@ -25,12 +25,10 @@ import java.util.UUID
 
 import com.google.common.hash.Hashing
 import eu.timepit.refined.api.Refined
-import eu.timepit.refined.auto._
 import eu.timepit.refined.refineV
 import eu.timepit.refined.string.Uuid
 import org.apache.james.core.Username
-import org.apache.james.jmap.api.change.MailboxChanges
-import org.apache.james.jmap.api.change.MailboxChange.{State => JavaState}
+import org.apache.james.jmap.api.change.{MailboxChanges, State => JavaState}
 import org.apache.james.jmap.core.CapabilityIdentifier.CapabilityIdentifier
 import org.apache.james.jmap.core.Id.Id
 import org.apache.james.jmap.core.State.INSTANCE
diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/MailboxSerializer.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/MailboxSerializer.scala
index f85c08e..573f107 100644
--- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/MailboxSerializer.scala
+++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/MailboxSerializer.scala
@@ -23,7 +23,7 @@ import eu.timepit.refined._
 import eu.timepit.refined.collection.NonEmpty
 import javax.inject.Inject
 import org.apache.james.core.{Domain, Username}
-import org.apache.james.jmap.api.change.MailboxChange.Limit
+import org.apache.james.jmap.api.change.Limit
 import org.apache.james.jmap.core.CapabilityIdentifier.CapabilityIdentifier
 import org.apache.james.jmap.core.{ClientId, Properties, SetError, State}
 import org.apache.james.jmap.mail.MailboxGet.{UnparsedMailboxId, UnparsedMailboxIdConstraint}
diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxGet.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxGet.scala
index add1c6e..a3a33e0 100644
--- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxGet.scala
+++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxGet.scala
@@ -22,7 +22,7 @@ package org.apache.james.jmap.mail
 import eu.timepit.refined
 import eu.timepit.refined.api.Refined
 import eu.timepit.refined.collection.NonEmpty
-import org.apache.james.jmap.api.change.MailboxChange.Limit
+import org.apache.james.jmap.api.change.Limit
 import org.apache.james.jmap.api.change.MailboxChanges
 import org.apache.james.jmap.core.{AccountId, Properties, State}
 import org.apache.james.jmap.mail.MailboxGet.UnparsedMailboxId
diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxChangesMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxChangesMethod.scala
index c60e038..ab0003c 100644
--- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxChangesMethod.scala
+++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxChangesMethod.scala
@@ -21,7 +21,7 @@ package org.apache.james.jmap.method
 
 import eu.timepit.refined.auto._
 import javax.inject.Inject
-import org.apache.james.jmap.api.change.MailboxChange.{State => JavaState}
+import org.apache.james.jmap.api.change.{State => JavaState}
 import org.apache.james.jmap.api.change.MailboxChangeRepository
 import org.apache.james.jmap.api.model.{AccountId => JavaAccountId}
 import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, JMAP_MAIL}
diff --git a/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/change/MailboxChangeListenerTest.scala b/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/change/MailboxChangeListenerTest.scala
index a207f72..32d4be2 100644
--- a/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/change/MailboxChangeListenerTest.scala
+++ b/server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/change/MailboxChangeListenerTest.scala
@@ -22,8 +22,7 @@ package org.apache.james.jmap.change
 import java.time.{Clock, ZonedDateTime}
 
 import javax.mail.Flags
-import org.apache.james.jmap.api.change.MailboxChange.State
-import org.apache.james.jmap.api.change.{MailboxChange, MailboxChangeRepository}
+import org.apache.james.jmap.api.change.{MailboxChange, MailboxChangeRepository, State}
 import org.apache.james.jmap.api.model.AccountId
 import org.apache.james.jmap.change.MailboxChangeListenerTest.ACCOUNT_ID
 import org.apache.james.jmap.memory.change.MemoryMailboxChangeRepository


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