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 b96305a792b5789dbadec52aed8194de641bd898
Author: Benoit Tellier <btell...@linagora.com>
AuthorDate: Mon Dec 2 11:51:23 2019 +0700

    JAMES-2997 MessageFastViewProjection should rely on 
MessageFastViewPrecomputedProperties
---
 .../CassandraMessageFastViewProjection.java        | 17 ++++--
 .../CassandraMessageFastViewProjectionTest.java    |  2 +-
 .../api/projections/MessageFastViewProjection.java |  5 +-
 .../MemoryMessageFastViewProjection.java           | 12 ++---
 .../MessageFastViewProjectionContract.java         | 60 +++++++++++++---------
 5 files changed, 57 insertions(+), 39 deletions(-)

diff --git 
a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjection.java
 
b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjection.java
index afdb547..387b39f 100644
--- 
a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjection.java
+++ 
b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjection.java
@@ -31,12 +31,14 @@ import javax.inject.Inject;
 
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.jmap.api.model.Preview;
+import 
org.apache.james.jmap.api.projections.MessageFastViewPrecomputedProperties;
 import org.apache.james.jmap.api.projections.MessageFastViewProjection;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
 import org.apache.james.mailbox.model.MessageId;
 import org.reactivestreams.Publisher;
 
 import com.datastax.driver.core.PreparedStatement;
+import com.datastax.driver.core.Row;
 import com.datastax.driver.core.Session;
 import com.datastax.driver.core.querybuilder.QueryBuilder;
 import com.google.common.base.Preconditions;
@@ -67,22 +69,21 @@ public class CassandraMessageFastViewProjection implements 
MessageFastViewProjec
     }
 
     @Override
-    public Publisher<Void> store(MessageId messageId, Preview preview) {
+    public Publisher<Void> store(MessageId messageId, 
MessageFastViewPrecomputedProperties precomputedProperties) {
         checkMessage(messageId);
 
         return cassandraAsyncExecutor.executeVoid(storeStatement.bind()
             .setUUID(MESSAGE_ID, ((CassandraMessageId) messageId).get())
-            .setString(PREVIEW, preview.getValue()));
+            .setString(PREVIEW, 
precomputedProperties.getPreview().getValue()));
     }
 
     @Override
-    public Publisher<Preview> retrieve(MessageId messageId) {
+    public Publisher<MessageFastViewPrecomputedProperties> retrieve(MessageId 
messageId) {
         checkMessage(messageId);
 
         return cassandraAsyncExecutor.executeSingleRow(retrieveStatement.bind()
                 .setUUID(MESSAGE_ID, ((CassandraMessageId) messageId).get()))
-            .map(row -> row.getString(PREVIEW))
-            .map(Preview::from);
+            .map(this::fromRow);
     }
 
     @Override
@@ -98,4 +99,10 @@ public class CassandraMessageFastViewProjection implements 
MessageFastViewProjec
         Preconditions.checkArgument(messageId instanceof CassandraMessageId,
             "MessageId type is required to be CassandraMessageId");
     }
+
+    private MessageFastViewPrecomputedProperties fromRow(Row row) {
+        return MessageFastViewPrecomputedProperties.builder()
+            .preview(Preview.from(row.getString(PREVIEW)))
+            .build();
+    }
 }
diff --git 
a/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionTest.java
 
b/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionTest.java
index 3803fbe..36f1b25 100644
--- 
a/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionTest.java
+++ 
b/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionTest.java
@@ -57,7 +57,7 @@ class CassandraMessageFastViewProjectionTest implements 
MessageFastViewProjectio
 
     @Test
     void storeShouldThrowWhenMessageIdIsNotCassandraType() {
-        assertThatThrownBy(() -> testee.store(TestMessageId.of(1), PREVIEW_1))
+        assertThatThrownBy(() -> testee.store(TestMessageId.of(1), 
MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_1))
             .isInstanceOf(IllegalArgumentException.class)
             .hasMessage("MessageId type is required to be CassandraMessageId");
     }
diff --git 
a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewProjection.java
 
b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewProjection.java
index 8245651..9dc4bad 100644
--- 
a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewProjection.java
+++ 
b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewProjection.java
@@ -19,15 +19,14 @@
 
 package org.apache.james.jmap.api.projections;
 
-import org.apache.james.jmap.api.model.Preview;
 import org.apache.james.mailbox.model.MessageId;
 import org.reactivestreams.Publisher;
 
 public interface MessageFastViewProjection {
 
-    Publisher<Void> store(MessageId messageId, Preview preview);
+    Publisher<Void> store(MessageId messageId, 
MessageFastViewPrecomputedProperties preview);
 
-    Publisher<Preview> retrieve(MessageId messageId);
+    Publisher<MessageFastViewPrecomputedProperties> retrieve(MessageId 
messageId);
 
     Publisher<Void> delete(MessageId messageId);
 }
diff --git 
a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/projections/MemoryMessageFastViewProjection.java
 
b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/projections/MemoryMessageFastViewProjection.java
index f049349..c599b8c 100644
--- 
a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/projections/MemoryMessageFastViewProjection.java
+++ 
b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/projections/MemoryMessageFastViewProjection.java
@@ -21,7 +21,7 @@ package org.apache.james.jmap.memory.projections;
 
 import java.util.concurrent.ConcurrentHashMap;
 
-import org.apache.james.jmap.api.model.Preview;
+import 
org.apache.james.jmap.api.projections.MessageFastViewPrecomputedProperties;
 import org.apache.james.jmap.api.projections.MessageFastViewProjection;
 import org.apache.james.mailbox.model.MessageId;
 import org.reactivestreams.Publisher;
@@ -32,22 +32,22 @@ import reactor.core.publisher.Mono;
 
 public class MemoryMessageFastViewProjection implements 
MessageFastViewProjection {
 
-    private final ConcurrentHashMap<MessageId, Preview> previews;
+    private final ConcurrentHashMap<MessageId, 
MessageFastViewPrecomputedProperties> previews;
 
     public MemoryMessageFastViewProjection() {
         this.previews = new ConcurrentHashMap<>();
     }
 
     @Override
-    public Publisher<Void> store(MessageId messageId, Preview preview) {
+    public Publisher<Void> store(MessageId messageId, 
MessageFastViewPrecomputedProperties precomputedProperties) {
         Preconditions.checkNotNull(messageId);
-        Preconditions.checkNotNull(preview);
+        Preconditions.checkNotNull(precomputedProperties);
 
-        return Mono.fromRunnable(() -> previews.put(messageId, preview));
+        return Mono.fromRunnable(() -> previews.put(messageId, 
precomputedProperties));
     }
 
     @Override
-    public Publisher<Preview> retrieve(MessageId messageId) {
+    public Publisher<MessageFastViewPrecomputedProperties> retrieve(MessageId 
messageId) {
         Preconditions.checkNotNull(messageId);
 
         return Mono.fromSupplier(() -> previews.get(messageId));
diff --git 
a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionContract.java
 
b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionContract.java
index eddb59e..f752125 100644
--- 
a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionContract.java
+++ 
b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionContract.java
@@ -39,6 +39,12 @@ public interface MessageFastViewProjectionContract {
 
     Preview PREVIEW_1 = Preview.from("preview 1");
     Preview PREVIEW_2 = Preview.from("preview 2");
+    MessageFastViewPrecomputedProperties 
MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_1 = 
MessageFastViewPrecomputedProperties.builder()
+        .preview(PREVIEW_1)
+        .build();
+    MessageFastViewPrecomputedProperties 
MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_2 = 
MessageFastViewPrecomputedProperties.builder()
+        .preview(PREVIEW_2)
+        .build();
 
     MessageFastViewProjection testee();
 
@@ -53,18 +59,18 @@ public interface MessageFastViewProjectionContract {
     @Test
     default void retrieveShouldReturnStoredPreview() {
         MessageId messageId = newMessageId();
-        Mono.from(testee().store(messageId, PREVIEW_1))
+        Mono.from(testee().store(messageId, 
MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_1))
             .block();
 
         assertThat(Mono.from(testee().retrieve(messageId)).block())
-            .isEqualTo(PREVIEW_1);
+            .isEqualTo(MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_1);
     }
 
     @Test
     default void retrieveShouldReturnEmptyWhenMessageIdNotFound() {
         MessageId messageId1 = newMessageId();
         MessageId messageId2 = newMessageId();
-        Mono.from(testee().store(messageId1, PREVIEW_1))
+        Mono.from(testee().store(messageId1, 
MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_1))
             .block();
 
         assertThat(Mono.from(testee().retrieve(messageId2)).blockOptional())
@@ -75,22 +81,22 @@ public interface MessageFastViewProjectionContract {
     default void 
retrieveShouldReturnTheRightPreviewWhenStoringMultipleMessageIds() {
         MessageId messageId1 = newMessageId();
         MessageId messageId2 = newMessageId();
-        Mono.from(testee().store(messageId1, PREVIEW_1))
+        Mono.from(testee().store(messageId1, 
MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_1))
             .block();
-        Mono.from(testee().store(messageId2, PREVIEW_2))
+        Mono.from(testee().store(messageId2, 
MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_2))
             .block();
 
         SoftAssertions.assertSoftly(softly -> {
            softly.assertThat(Mono.from(testee().retrieve(messageId1)).block())
-               .isEqualTo(PREVIEW_1);
+               .isEqualTo(MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_1);
            softly.assertThat(Mono.from(testee().retrieve(messageId2)).block())
-               .isEqualTo(PREVIEW_2);
+               .isEqualTo(MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_2);
         });
     }
 
     @Test
     default void storeShouldThrowWhenNullMessageId() {
-        assertThatThrownBy(() -> Mono.from(testee().store(null, 
PREVIEW_1)).block())
+        assertThatThrownBy(() -> Mono.from(testee().store(null, 
MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_1)).block())
             .isInstanceOf(NullPointerException.class);
     }
 
@@ -104,27 +110,27 @@ public interface MessageFastViewProjectionContract {
     @Test
     default void storeShouldOverrideOldRecord() {
         MessageId messageId1 = newMessageId();
-        Mono.from(testee().store(messageId1, PREVIEW_1))
+        Mono.from(testee().store(messageId1, 
MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_1))
             .block();
 
-        Mono.from(testee().store(messageId1, PREVIEW_2))
+        Mono.from(testee().store(messageId1, 
MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_2))
             .block();
 
         assertThat(Mono.from(testee().retrieve(messageId1)).block())
-            .isEqualTo(PREVIEW_2);
+            .isEqualTo(MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_2);
     }
 
     @Test
     default void storeShouldBeIdempotent() {
         MessageId messageId1 = newMessageId();
-        Mono.from(testee().store(messageId1, PREVIEW_1))
+        Mono.from(testee().store(messageId1, 
MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_1))
             .block();
 
-        Mono.from(testee().store(messageId1, PREVIEW_1))
+        Mono.from(testee().store(messageId1, 
MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_1))
             .block();
 
         assertThat(Mono.from(testee().retrieve(messageId1)).block())
-            .isEqualTo(PREVIEW_1);
+            .isEqualTo(MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_1);
     }
 
     @Test
@@ -138,7 +144,9 @@ public interface MessageFastViewProjectionContract {
 
         ConcurrentTestRunner.builder()
             .reactorOperation((thread, step) -> testee()
-                .store(messageIds.get(thread), 
Preview.from(String.valueOf(step))))
+                .store(messageIds.get(thread), 
MessageFastViewPrecomputedProperties.builder()
+                    .preview(Preview.from(String.valueOf(step)))
+                    .build()))
             .threadCount(threadCount)
             .operationCount(stepCount)
             .runSuccessfullyWithin(Duration.ofMinutes(1));
@@ -147,7 +155,9 @@ public interface MessageFastViewProjectionContract {
             .forEach(index -> assertThat(Mono.from(testee()
                     .retrieve(messageIds.get(index)))
                     .block())
-                .isEqualTo(Preview.from(String.valueOf(stepCount - 1))));
+                .isEqualTo(MessageFastViewPrecomputedProperties.builder()
+                    .preview(Preview.from(String.valueOf(stepCount - 1)))
+                    .build()));
     }
 
     @Test
@@ -158,13 +168,15 @@ public interface MessageFastViewProjectionContract {
 
         ConcurrentTestRunner.builder()
             .reactorOperation((thread, step) -> testee()
-                .store(messageId, Preview.from(String.valueOf(step * 
threadCount + thread))))
+                .store(messageId, 
MessageFastViewPrecomputedProperties.builder()
+                    .preview(Preview.from(String.valueOf(step * threadCount + 
thread)))
+                    .build()))
             .threadCount(threadCount)
             .operationCount(operationCount)
             .runSuccessfullyWithin(Duration.ofMinutes(1));
 
-        Preview preview = Mono.from(testee().retrieve(messageId)).block();
-        Integer previewAsInt = Integer.valueOf(preview.getValue());
+        MessageFastViewPrecomputedProperties preview = 
Mono.from(testee().retrieve(messageId)).block();
+        Integer previewAsInt = 
Integer.valueOf(preview.getPreview().getValue());
 
         assertThat(previewAsInt)
             .describedAs("Ensure the stored result was generated by the last 
operation of one of the threads")
@@ -187,7 +199,7 @@ public interface MessageFastViewProjectionContract {
     @Test
     default void deleteShouldDeleteStoredRecord() {
         MessageId messageId1 = newMessageId();
-        Mono.from(testee().store(messageId1, PREVIEW_1))
+        Mono.from(testee().store(messageId1, 
MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_1))
             .block();
 
         Mono.from(testee().delete(messageId1))
@@ -201,22 +213,22 @@ public interface MessageFastViewProjectionContract {
     default void deleteShouldNotDeleteAnotherRecord() {
         MessageId messageId1 = newMessageId();
         MessageId messageId2 = newMessageId();
-        Mono.from(testee().store(messageId1, PREVIEW_1))
+        Mono.from(testee().store(messageId1, 
MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_1))
             .block();
-        Mono.from(testee().store(messageId2, PREVIEW_2))
+        Mono.from(testee().store(messageId2, 
MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_2))
             .block();
 
         Mono.from(testee().delete(messageId1))
             .block();
 
         assertThat(Mono.from(testee().retrieve(messageId2)).block())
-            .isEqualTo(PREVIEW_2);
+            .isEqualTo(MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_2);
     }
 
     @Test
     default void deleteShouldBeIdempotent() {
         MessageId messageId1 = newMessageId();
-        Mono.from(testee().store(messageId1, PREVIEW_1))
+        Mono.from(testee().store(messageId1, 
MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_1))
             .block();
 
         Mono.from(testee().delete(messageId1))


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

Reply via email to