You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by rc...@apache.org on 2019/12/03 02:02:11 UTC

[james-project] branch master updated (089d792 -> bfca47b)

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

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


    from 089d792  JAMES-2990 Force to use UUID in CassandraPreviewStore
     new 50b76a8  JAMES-2997 Introduce MessageFastViewPrecomputedProperties POJO
     new 3a30dda  JAMES-2997 Move MessagePreviewStore to a projections package
     new d8fda29  JAMES-2997 Move Preview in a model package
     new 07ec7fd  JAMES-2997 s/MessagePreviewStore/MessageFastViewProjection/
     new 9698dee  JAMES-2997 Move MemoryMessagePreviewStore to a projections package
     new b96305a  JAMES-2997 MessageFastViewProjection should rely on MessageFastViewPrecomputedProperties
     new f107618  JAMES-2997 Add hasAttachment to MessageFastViewPrecomputedProperties
     new 2ef4a1d  JAMES-2997 Update Cassandra table name and description
     new a718f6d  [Refactoring] MessageUtils::MessageChangedFlags can be static
     new 1877092  [Refactoring] JPAMessageMapper should not rely on MessageUtils for Uid & ModSeq
     new e3a04cb  [Refactoring] MessageUtils is only used by JPA
     new 8c25ad2  [Refactoring] Rework store subscription
     new e7ac327  [Refactoring] Remove JPASubscriptionManager
     new f0766eb  [Refactoring] Isolation issues for Derby inMemry database
     new bfca47b  [REFACTORING] Remove temporal coupling in JPASubscriptionMapper

The 15 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../user/CassandraSubscriptionMapper.java          | 17 +---
 .../james/mailbox/jpa/JPASubscriptionManager.java  | 43 ----------
 .../james/mailbox/jpa/mail/JPAMessageMapper.java   | 13 +--
 .../james/mailbox/jpa}/mail/MessageUtils.java      | 44 +++++-----
 .../mailbox/jpa/user/JPASubscriptionMapper.java    | 85 +++++++++++++++----
 .../mailbox/jpa/user/model/JPASubscription.java    | 62 +++++++-------
 .../main/resources/META-INF/spring/mailbox-jpa.xml |  2 +-
 .../mailbox/jpa/JPASubscriptionManagerTest.java    |  3 +-
 .../james/mailbox/jpa}/mail/MessageUtilsTest.java  | 16 +---
 .../maildir/user/MaildirSubscriptionMapper.java    | 18 +---
 .../inmemory/user/InMemorySubscriptionMapper.java  | 51 ++++++-----
 .../mailbox/store/StoreSubscriptionManager.java    | 35 ++------
 .../mailbox/store/user/SubscriptionMapper.java     | 11 ---
 .../mailbox/store/user/model/Subscription.java     | 46 +++++++++-
 .../store/user/model/impl/SimpleSubscription.java  | 61 -------------
 .../mailbox/store/user/SubscriptionMapperTest.java | 41 +++------
 .../mpt/imapmailbox/jpa/host/JPAHostSystem.java    |  4 +-
 .../james/modules/data/CassandraJmapModule.java    | 12 +--
 server/container/guice/jpa-guice/pom.xml           | 10 +++
 .../james/modules/mailbox/JPAMailboxModule.java    |  8 +-
 .../CassandraMessageFastViewProjection.java}       | 39 ++++++---
 .../CassandraMessageFastViewProjectionModule.java} | 24 +++---
 .../CassandraMessageFastViewProjectionTable.java}  |  7 +-
 .../CassandraMessageFastViewProjectionTest.java}   | 18 ++--
 .../james/jmap/api/{preview => model}/Preview.java |  2 +-
 .../MessageFastViewPrecomputedProperties.java      | 99 ++++++++++++++++++++++
 .../MessageFastViewProjection.java}                |  8 +-
 .../MemoryMessageFastViewProjection.java}          | 20 ++---
 .../jmap/api/{preview => model}/PreviewTest.java   |  2 +-
 .../MessageFastViewPrecomputedPropertiesTest.java  |  9 +-
 .../MessageFastViewProjectionContract.java}        | 72 ++++++++++------
 .../MemoryMessageFastViewProjectionTest.java}      | 14 +--
 .../apache/james/jmap/draft/model/PreviewDTO.java  |  2 +-
 .../draft/model/message/view/MessageFullView.java  |  2 +-
 .../model/message/view/MessageFullViewFactory.java |  2 +-
 .../jmap/draft/json/ParsingWritingObjects.java     |  2 +-
 .../james/jmap/draft/model/PreviewDTOTest.java     |  2 +-
 .../jmap/draft/model/SetMessagesResponseTest.java  |  2 +-
 .../message/view/MessageFullViewFactoryTest.java   |  2 +-
 .../model/message/view/MessageFullViewTest.java    |  2 +-
 40 files changed, 472 insertions(+), 440 deletions(-)
 delete mode 100644 mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPASubscriptionManager.java
 rename mailbox/{store/src/main/java/org/apache/james/mailbox/store => jpa/src/main/java/org/apache/james/mailbox/jpa}/mail/MessageUtils.java (80%)
 rename mailbox/{store/src/test/java/org/apache/james/mailbox/store => jpa/src/test/java/org/apache/james/mailbox/jpa}/mail/MessageUtilsTest.java (90%)
 delete mode 100644 mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/impl/SimpleSubscription.java
 rename server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/{preview/CassandraMessagePreviewStore.java => projections/CassandraMessageFastViewProjection.java} (68%)
 rename server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/{preview/CassandraMessagePreviewModule.java => projections/CassandraMessageFastViewProjectionModule.java} (56%)
 rename server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/{preview/table/CassandraMessagePreviewTable.java => projections/table/CassandraMessageFastViewProjectionTable.java} (85%)
 rename server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/{preview/CassandraMessagePreviewStoreTest.java => projections/CassandraMessageFastViewProjectionTest.java} (82%)
 rename server/data/data-jmap/src/main/java/org/apache/james/jmap/api/{preview => model}/Preview.java (98%)
 create mode 100644 server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewPrecomputedProperties.java
 rename server/data/data-jmap/src/main/java/org/apache/james/jmap/api/{preview/MessagePreviewStore.java => projections/MessageFastViewProjection.java} (83%)
 rename server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/{preview/MemoryMessagePreviewStore.java => projections/MemoryMessageFastViewProjection.java} (72%)
 rename server/data/data-jmap/src/test/java/org/apache/james/jmap/api/{preview => model}/PreviewTest.java (99%)
 copy mailbox/api/src/test/java/org/apache/james/mailbox/extractor/ParsedContentTest.java => server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewPrecomputedPropertiesTest.java (88%)
 rename server/data/data-jmap/src/test/java/org/apache/james/jmap/api/{preview/MessagePreviewStoreContract.java => projections/MessageFastViewProjectionContract.java} (69%)
 rename server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/{preview/MemoryMessagePreviewStoreTest.java => projections/MemoryMessageFastViewProjectionTest.java} (78%)


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


[james-project] 03/15: JAMES-2997 Move Preview in a model package

Posted by rc...@apache.org.
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 d8fda29d7a2fc432f19cea0e17015076a6626a37
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Dec 2 11:38:20 2019 +0700

    JAMES-2997 Move Preview in a model package
---
 .../james/jmap/cassandra/projections/CassandraMessagePreviewStore.java  | 2 +-
 .../main/java/org/apache/james/jmap/api/{preview => model}/Preview.java | 2 +-
 .../jmap/api/projections/MessageFastViewPrecomputedProperties.java      | 2 +-
 .../java/org/apache/james/jmap/api/projections/MessagePreviewStore.java | 2 +-
 .../org/apache/james/jmap/memory/preview/MemoryMessagePreviewStore.java | 2 +-
 .../java/org/apache/james/jmap/api/{preview => model}/PreviewTest.java  | 2 +-
 .../apache/james/jmap/api/projections/MessagePreviewStoreContract.java  | 2 +-
 .../src/main/java/org/apache/james/jmap/draft/model/PreviewDTO.java     | 2 +-
 .../org/apache/james/jmap/draft/model/message/view/MessageFullView.java | 2 +-
 .../james/jmap/draft/model/message/view/MessageFullViewFactory.java     | 2 +-
 .../java/org/apache/james/jmap/draft/json/ParsingWritingObjects.java    | 2 +-
 .../src/test/java/org/apache/james/jmap/draft/model/PreviewDTOTest.java | 2 +-
 .../java/org/apache/james/jmap/draft/model/SetMessagesResponseTest.java | 2 +-
 .../james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java | 2 +-
 .../apache/james/jmap/draft/model/message/view/MessageFullViewTest.java | 2 +-
 15 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewStore.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewStore.java
index 7ee5607..b0ce580 100644
--- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewStore.java
+++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewStore.java
@@ -30,7 +30,7 @@ import static org.apache.james.jmap.cassandra.projections.table.CassandraMessage
 import javax.inject.Inject;
 
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
-import org.apache.james.jmap.api.preview.Preview;
+import org.apache.james.jmap.api.model.Preview;
 import org.apache.james.jmap.api.projections.MessagePreviewStore;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
 import org.apache.james.mailbox.model.MessageId;
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/preview/Preview.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/model/Preview.java
similarity index 98%
rename from server/data/data-jmap/src/main/java/org/apache/james/jmap/api/preview/Preview.java
rename to server/data/data-jmap/src/main/java/org/apache/james/jmap/api/model/Preview.java
index 90c2fe2..ed69078 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/preview/Preview.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/model/Preview.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.api.preview;
+package org.apache.james.jmap.api.model;
 
 import java.util.Objects;
 
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewPrecomputedProperties.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewPrecomputedProperties.java
index 567f01f..ee2cdca 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewPrecomputedProperties.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewPrecomputedProperties.java
@@ -21,7 +21,7 @@ package org.apache.james.jmap.api.projections;
 
 import java.util.Objects;
 
-import org.apache.james.jmap.api.preview.Preview;
+import org.apache.james.jmap.api.model.Preview;
 
 import com.google.common.base.Preconditions;
 
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessagePreviewStore.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessagePreviewStore.java
index 1a90c0f..00a126c 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessagePreviewStore.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessagePreviewStore.java
@@ -19,7 +19,7 @@
 
 package org.apache.james.jmap.api.projections;
 
-import org.apache.james.jmap.api.preview.Preview;
+import org.apache.james.jmap.api.model.Preview;
 import org.apache.james.mailbox.model.MessageId;
 import org.reactivestreams.Publisher;
 
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/preview/MemoryMessagePreviewStore.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/preview/MemoryMessagePreviewStore.java
index 11d8b0d..49ae891 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/preview/MemoryMessagePreviewStore.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/preview/MemoryMessagePreviewStore.java
@@ -21,7 +21,7 @@ package org.apache.james.jmap.memory.preview;
 
 import java.util.concurrent.ConcurrentHashMap;
 
-import org.apache.james.jmap.api.preview.Preview;
+import org.apache.james.jmap.api.model.Preview;
 import org.apache.james.jmap.api.projections.MessagePreviewStore;
 import org.apache.james.mailbox.model.MessageId;
 import org.reactivestreams.Publisher;
diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/preview/PreviewTest.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/model/PreviewTest.java
similarity index 99%
rename from server/data/data-jmap/src/test/java/org/apache/james/jmap/api/preview/PreviewTest.java
rename to server/data/data-jmap/src/test/java/org/apache/james/jmap/api/model/PreviewTest.java
index 8a897b2..5198ac2 100644
--- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/preview/PreviewTest.java
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/model/PreviewTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.api.preview;
+package org.apache.james.jmap.api.model;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatCode;
diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessagePreviewStoreContract.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessagePreviewStoreContract.java
index f653255..0d4ec17 100644
--- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessagePreviewStoreContract.java
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessagePreviewStoreContract.java
@@ -27,7 +27,7 @@ import java.time.Duration;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.IntStream;
 
-import org.apache.james.jmap.api.preview.Preview;
+import org.apache.james.jmap.api.model.Preview;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.util.concurrency.ConcurrentTestRunner;
 import org.assertj.core.api.SoftAssertions;
diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/PreviewDTO.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/PreviewDTO.java
index 6b2457c..4984845 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/PreviewDTO.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/PreviewDTO.java
@@ -22,7 +22,7 @@ package org.apache.james.jmap.draft.model;
 import java.util.Objects;
 import java.util.Optional;
 
-import org.apache.james.jmap.api.preview.Preview;
+import org.apache.james.jmap.api.model.Preview;
 
 import com.fasterxml.jackson.annotation.JsonValue;
 import com.google.common.annotations.VisibleForTesting;
diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFullView.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFullView.java
index 40399c9..aac8eda 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFullView.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFullView.java
@@ -25,7 +25,7 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.function.Predicate;
 
-import org.apache.james.jmap.api.preview.Preview;
+import org.apache.james.jmap.api.model.Preview;
 import org.apache.james.jmap.draft.methods.JmapResponseWriterImpl;
 import org.apache.james.jmap.draft.model.Attachment;
 import org.apache.james.jmap.draft.model.BlobId;
diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactory.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactory.java
index bc17419..913d547 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactory.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactory.java
@@ -30,7 +30,7 @@ import java.util.Set;
 import javax.inject.Inject;
 import javax.mail.internet.SharedInputStream;
 
-import org.apache.james.jmap.api.preview.Preview;
+import org.apache.james.jmap.api.model.Preview;
 import org.apache.james.jmap.draft.model.Attachment;
 import org.apache.james.jmap.draft.model.BlobId;
 import org.apache.james.jmap.draft.model.Keywords;
diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/json/ParsingWritingObjects.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/json/ParsingWritingObjects.java
index 0f355ff..dab006b 100644
--- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/json/ParsingWritingObjects.java
+++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/json/ParsingWritingObjects.java
@@ -24,7 +24,7 @@ import java.util.Optional;
 
 import javax.mail.Flags;
 
-import org.apache.james.jmap.api.preview.Preview;
+import org.apache.james.jmap.api.model.Preview;
 import org.apache.james.jmap.draft.model.BlobId;
 import org.apache.james.jmap.draft.model.Emailer;
 import org.apache.james.jmap.draft.model.Keyword;
diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/PreviewDTOTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/PreviewDTOTest.java
index 95b1a79..470e476 100644
--- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/PreviewDTOTest.java
+++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/PreviewDTOTest.java
@@ -23,7 +23,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.Optional;
 
-import org.apache.james.jmap.api.preview.Preview;
+import org.apache.james.jmap.api.model.Preview;
 import org.junit.jupiter.api.Test;
 
 import nl.jqno.equalsverifier.EqualsVerifier;
diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/SetMessagesResponseTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/SetMessagesResponseTest.java
index 94c678b..b668490 100644
--- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/SetMessagesResponseTest.java
+++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/SetMessagesResponseTest.java
@@ -25,7 +25,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import java.time.Instant;
 
 import org.apache.commons.lang3.NotImplementedException;
-import org.apache.james.jmap.api.preview.Preview;
+import org.apache.james.jmap.api.model.Preview;
 import org.apache.james.jmap.draft.model.message.view.MessageFullView;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.model.MessageId;
diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java
index e0c3ff9..cc71703 100644
--- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java
+++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java
@@ -35,7 +35,7 @@ import java.util.Optional;
 import javax.mail.Flags;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.james.jmap.api.preview.Preview;
+import org.apache.james.jmap.api.model.Preview;
 import org.apache.james.jmap.draft.model.Attachment;
 import org.apache.james.jmap.draft.model.BlobId;
 import org.apache.james.jmap.draft.model.Emailer;
diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewTest.java
index 81c64e6..2cdf070 100644
--- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewTest.java
+++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewTest.java
@@ -24,7 +24,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import java.time.Instant;
 import java.util.Optional;
 
-import org.apache.james.jmap.api.preview.Preview;
+import org.apache.james.jmap.api.model.Preview;
 import org.apache.james.jmap.draft.model.Attachment;
 import org.apache.james.jmap.draft.model.BlobId;
 import org.apache.james.jmap.draft.model.Emailer;


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


[james-project] 10/15: [Refactoring] JPAMessageMapper should not rely on MessageUtils for Uid & ModSeq

Posted by rc...@apache.org.
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 18770922121c94d18cbe649ec04ac0bba461568d
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Nov 22 09:45:22 2019 +0700

    [Refactoring] JPAMessageMapper should not rely on MessageUtils for Uid & ModSeq
---
 .../james/mailbox/jpa/mail/JPAMessageMapper.java   | 10 ++++++---
 .../james/mailbox/store/mail/MessageUtils.java     | 25 +++++++---------------
 .../james/mailbox/store/mail/MessageUtilsTest.java | 12 -----------
 3 files changed, 15 insertions(+), 32 deletions(-)

diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
index 5ef053b..c319fe6 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
@@ -69,10 +69,14 @@ public class JPAMessageMapper extends JPATransactionalMapper implements MessageM
     private static final int UNLIMITED = -1;
 
     private final MessageUtils messageMetadataMapper;
+    private final UidProvider uidProvider;
+    private final ModSeqProvider modSeqProvider;
 
     public JPAMessageMapper(UidProvider uidProvider, ModSeqProvider modSeqProvider, EntityManagerFactory entityManagerFactory) {
         super(entityManagerFactory);
         this.messageMetadataMapper = new MessageUtils(uidProvider, modSeqProvider);
+        this.uidProvider = uidProvider;
+        this.modSeqProvider = modSeqProvider;
     }
 
     @Override
@@ -315,17 +319,17 @@ public class JPAMessageMapper extends JPATransactionalMapper implements MessageM
 
     @Override
     public MessageMetaData copy(Mailbox mailbox, MailboxMessage original) throws MailboxException {
-        return copy(mailbox, messageMetadataMapper.nextUid(mailbox), messageMetadataMapper.nextModSeq(mailbox), original);  
+        return copy(mailbox, uidProvider.nextUid(mailbox), modSeqProvider.nextModSeq(mailbox), original);
     }
 
     @Override
     public Optional<MessageUid> getLastUid(Mailbox mailbox) throws MailboxException {
-        return messageMetadataMapper.getLastUid(mailbox);
+        return uidProvider.lastUid(mailbox);
     }
 
     @Override
     public ModSeq getHighestModSeq(Mailbox mailbox) throws MailboxException {
-        return messageMetadataMapper.getHighestModSeq(mailbox);
+        return modSeqProvider.highestModSeq(mailbox);
     }
 
     @Override
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageUtils.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageUtils.java
index 38a46f5..55dcf8a 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageUtils.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageUtils.java
@@ -21,7 +21,6 @@ package org.apache.james.mailbox.store.mail;
 
 import java.util.Iterator;
 import java.util.List;
-import java.util.Optional;
 
 import javax.mail.Flags;
 
@@ -43,25 +42,10 @@ public class MessageUtils {
     public MessageUtils(UidProvider uidProvider, ModSeqProvider modSeqProvider) {
         Preconditions.checkNotNull(uidProvider);
         Preconditions.checkNotNull(modSeqProvider);
+
         this.uidProvider = uidProvider;
         this.modSeqProvider = modSeqProvider;
     }
-    
-    public ModSeq getHighestModSeq(Mailbox mailbox) throws MailboxException {
-        return modSeqProvider.highestModSeq(mailbox);
-    }
-
-    public Optional<MessageUid> getLastUid(Mailbox mailbox) throws MailboxException {
-        return uidProvider.lastUid(mailbox);
-    }
-
-    public MessageUid nextUid(Mailbox mailbox) throws MailboxException {
-        return uidProvider.nextUid(mailbox);
-    }
-
-    public ModSeq nextModSeq(Mailbox mailbox) throws MailboxException {
-        return modSeqProvider.nextModSeq(mailbox);
-    }
 
     public void enrichMessage(Mailbox mailbox, MailboxMessage message) throws MailboxException { 
         message.setUid(nextUid(mailbox));
@@ -96,6 +80,13 @@ public class MessageUtils {
         return new MessageChangedFlags(updatedFlags.build().iterator(), changedFlags.build());
     }
 
+    MessageUid nextUid(Mailbox mailbox) throws MailboxException {
+        return uidProvider.nextUid(mailbox);
+    }
+
+    ModSeq nextModSeq(Mailbox mailbox) throws MailboxException {
+        return modSeqProvider.nextModSeq(mailbox);
+    }
     
     public static class MessageChangedFlags {
         private final Iterator<UpdatedFlags> updatedFlags;
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/MessageUtilsTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/MessageUtilsTest.java
index c44cea1..fbf2a2a 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/MessageUtilsTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/MessageUtilsTest.java
@@ -80,24 +80,12 @@ public class MessageUtilsTest {
     }
     
     @Test
-    public void getHighestModSeqShouldCallModSeqProvider() throws Exception {
-        messageUtils.getHighestModSeq(mailbox);
-        verify(modSeqProvider).highestModSeq(eq(mailbox));
-    }
-    
-    @Test
     public void nextModSeqShouldCallModSeqProvider() throws Exception {
         messageUtils.nextModSeq(mailbox);
         verify(modSeqProvider).nextModSeq(eq(mailbox));
     }
     
     @Test
-    public void getLastUidShouldCallUidProvider() throws Exception {
-        messageUtils.getLastUid(mailbox);
-        verify(uidProvider).lastUid(eq(mailbox));
-    }
-    
-    @Test
     public void nextUidShouldCallUidProvider() throws Exception {
         messageUtils.nextUid(mailbox);
         verify(uidProvider).nextUid(eq(mailbox));


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


[james-project] 01/15: JAMES-2997 Introduce MessageFastViewPrecomputedProperties POJO

Posted by rc...@apache.org.
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 50b76a8091de14b04d273a34ad22a20ac4ebd0ed
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Dec 2 11:27:27 2019 +0700

    JAMES-2997 Introduce MessageFastViewPrecomputedProperties POJO
    
    For now this only contains a Preview. In the really close future this
    will contain also the 'hasAttachment' property.
---
 .../MessageFastViewPrecomputedProperties.java      | 75 ++++++++++++++++++++++
 .../MessageFastViewPrecomputedPropertiesTest.java  | 32 +++++++++
 2 files changed, 107 insertions(+)

diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/preview/MessageFastViewPrecomputedProperties.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/preview/MessageFastViewPrecomputedProperties.java
new file mode 100644
index 0000000..bf814f8
--- /dev/null
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/preview/MessageFastViewPrecomputedProperties.java
@@ -0,0 +1,75 @@
+/****************************************************************
+ * 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.preview;
+
+import java.util.Objects;
+
+import com.google.common.base.Preconditions;
+
+public class MessageFastViewPrecomputedProperties {
+    public static class Builder {
+        @FunctionalInterface
+        public interface RequirePreview {
+            FinalStage preview(Preview preview);
+        }
+
+        public static class FinalStage {
+            private final Preview preview;
+
+            private FinalStage(Preview preview) {
+                Preconditions.checkNotNull(preview, "'preview' cannot be null");
+                this.preview = preview;
+            }
+
+            public MessageFastViewPrecomputedProperties build() {
+                return new MessageFastViewPrecomputedProperties(preview);
+            }
+        }
+    }
+
+    public static Builder.RequirePreview builder() {
+        return preview -> new Builder.FinalStage(preview);
+    }
+
+    private final Preview preview;
+
+    private MessageFastViewPrecomputedProperties(Preview preview) {
+        this.preview = preview;
+    }
+
+    public Preview getPreview() {
+        return preview;
+    }
+
+    @Override
+    public final boolean equals(Object o) {
+        if (o instanceof MessageFastViewPrecomputedProperties) {
+            MessageFastViewPrecomputedProperties that = (MessageFastViewPrecomputedProperties) o;
+
+            return Objects.equals(this.preview, that.preview);
+        }
+        return false;
+    }
+
+    @Override
+    public final int hashCode() {
+        return Objects.hash(preview);
+    }
+}
diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/preview/MessageFastViewPrecomputedPropertiesTest.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/preview/MessageFastViewPrecomputedPropertiesTest.java
new file mode 100644
index 0000000..fe0064f
--- /dev/null
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/preview/MessageFastViewPrecomputedPropertiesTest.java
@@ -0,0 +1,32 @@
+/****************************************************************
+ * 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.preview;
+
+import org.junit.jupiter.api.Test;
+
+import nl.jqno.equalsverifier.EqualsVerifier;
+
+class MessageFastViewPrecomputedPropertiesTest {
+    @Test
+    void shouldMatchBeanContract() {
+        EqualsVerifier.forClass(MessageFastViewPrecomputedProperties.class)
+            .verify();
+    }
+}
\ No newline at end of file


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


[james-project] 14/15: [Refactoring] Isolation issues for Derby inMemry database

Posted by rc...@apache.org.
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 f0766ebd0924f6b39feb1165f86163cb549027c4
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Nov 25 10:57:36 2019 +0700

    [Refactoring] Isolation issues for Derby inMemry database
---
 server/container/guice/jpa-guice/pom.xml | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/server/container/guice/jpa-guice/pom.xml b/server/container/guice/jpa-guice/pom.xml
index 59cd67d..37d05ef 100644
--- a/server/container/guice/jpa-guice/pom.xml
+++ b/server/container/guice/jpa-guice/pom.xml
@@ -195,6 +195,16 @@
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <!-- Isolation issues with Derby inMemory database -->
+                    <reuseForks>false</reuseForks>
+                    <!-- Speed up a bit things -->
+                    <forkCount>1C</forkCount>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-dependency-plugin</artifactId>
                 <executions>
                     <execution>


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


[james-project] 08/15: JAMES-2997 Update Cassandra table name and description

Posted by rc...@apache.org.
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 2ef4a1d6e506aca463037a26ba7eff8e22dae162
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Dec 2 14:38:55 2019 +0700

    JAMES-2997 Update Cassandra table name and description
---
 .../cassandra/projections/CassandraMessageFastViewProjectionModule.java | 2 +-
 .../projections/table/CassandraMessageFastViewProjectionTable.java      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionModule.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionModule.java
index 0b7df7d..0f50a60 100644
--- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionModule.java
+++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionModule.java
@@ -34,7 +34,7 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 
 public interface CassandraMessageFastViewProjectionModule {
     CassandraModule MODULE = CassandraModule.table(TABLE_NAME)
-        .comment("Storing the JMAP preview property extracted from message bodies")
+        .comment("Storing the JMAP projections for MessageFastView, an aggregation of JMAP properties expected to be fast to fetch.")
         .options(options -> options
             .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/table/CassandraMessageFastViewProjectionTable.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/table/CassandraMessageFastViewProjectionTable.java
index add0037..8f96fc3 100644
--- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/table/CassandraMessageFastViewProjectionTable.java
+++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/table/CassandraMessageFastViewProjectionTable.java
@@ -20,7 +20,7 @@
 package org.apache.james.jmap.cassandra.projections.table;
 
 public interface CassandraMessageFastViewProjectionTable {
-    String TABLE_NAME = "message_preview";
+    String TABLE_NAME = "message_fast_view_projection";
 
     String MESSAGE_ID = "messageId";
     String PREVIEW = "preview";


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


[james-project] 09/15: [Refactoring] MessageUtils::MessageChangedFlags can be static

Posted by rc...@apache.org.
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 a718f6d346fbf42c85d416d8fca7914dc353b2c0
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Nov 22 09:27:37 2019 +0700

    [Refactoring] MessageUtils::MessageChangedFlags can be static
---
 .../src/main/java/org/apache/james/mailbox/store/mail/MessageUtils.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageUtils.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageUtils.java
index 0840858..38a46f5 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageUtils.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageUtils.java
@@ -97,7 +97,7 @@ public class MessageUtils {
     }
 
     
-    public class MessageChangedFlags {
+    public static class MessageChangedFlags {
         private final Iterator<UpdatedFlags> updatedFlags;
         private final List<MailboxMessage> changedFlags;
 


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


[james-project] 02/15: JAMES-2997 Move MessagePreviewStore to a projections package

Posted by rc...@apache.org.
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 3a30ddafd1d64d43e7c997877f197d8d661945a3
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Dec 2 11:36:59 2019 +0700

    JAMES-2997 Move MessagePreviewStore to a projections package
---
 .../org/apache/james/modules/data/CassandraJmapModule.java     |  6 +++---
 .../CassandraMessagePreviewModule.java                         |  4 ++--
 .../{preview => projections}/CassandraMessagePreviewStore.java | 10 +++++-----
 .../table/CassandraMessagePreviewTable.java                    |  2 +-
 .../CassandraMessagePreviewStoreTest.java                      |  6 +++---
 .../MessageFastViewPrecomputedProperties.java                  |  4 +++-
 .../jmap/api/{preview => projections}/MessagePreviewStore.java |  3 ++-
 .../james/jmap/memory/preview/MemoryMessagePreviewStore.java   |  2 +-
 .../MessageFastViewPrecomputedPropertiesTest.java              |  2 +-
 .../{preview => projections}/MessagePreviewStoreContract.java  |  3 ++-
 .../jmap/memory/preview/MemoryMessagePreviewStoreTest.java     |  4 ++--
 11 files changed, 25 insertions(+), 21 deletions(-)

diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraJmapModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraJmapModule.java
index 8cdfe65..8759d3e 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraJmapModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraJmapModule.java
@@ -24,14 +24,14 @@ import org.apache.james.eventsourcing.eventstore.cassandra.dto.EventDTOModule;
 import org.apache.james.jmap.api.access.AccessTokenRepository;
 import org.apache.james.jmap.api.filtering.FilteringManagement;
 import org.apache.james.jmap.api.filtering.impl.EventSourcingFilteringManagement;
-import org.apache.james.jmap.api.preview.MessagePreviewStore;
+import org.apache.james.jmap.api.projections.MessagePreviewStore;
 import org.apache.james.jmap.api.vacation.NotificationRegistry;
 import org.apache.james.jmap.api.vacation.VacationRepository;
 import org.apache.james.jmap.cassandra.access.CassandraAccessModule;
 import org.apache.james.jmap.cassandra.access.CassandraAccessTokenRepository;
 import org.apache.james.jmap.cassandra.filtering.FilteringRuleSetDefineDTOModules;
-import org.apache.james.jmap.cassandra.preview.CassandraMessagePreviewModule;
-import org.apache.james.jmap.cassandra.preview.CassandraMessagePreviewStore;
+import org.apache.james.jmap.cassandra.projections.CassandraMessagePreviewModule;
+import org.apache.james.jmap.cassandra.projections.CassandraMessagePreviewStore;
 import org.apache.james.jmap.cassandra.vacation.CassandraNotificationRegistry;
 import org.apache.james.jmap.cassandra.vacation.CassandraNotificationRegistryModule;
 import org.apache.james.jmap.cassandra.vacation.CassandraVacationModule;
diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/preview/CassandraMessagePreviewModule.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewModule.java
similarity index 93%
rename from server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/preview/CassandraMessagePreviewModule.java
rename to server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewModule.java
index c9b942a..a85d67e 100644
--- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/preview/CassandraMessagePreviewModule.java
+++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewModule.java
@@ -17,14 +17,14 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.cassandra.preview;
+package org.apache.james.jmap.cassandra.projections;
 
 import static com.datastax.driver.core.DataType.text;
 import static com.datastax.driver.core.DataType.uuid;
 
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.backends.cassandra.utils.CassandraConstants;
-import org.apache.james.jmap.cassandra.preview.table.CassandraMessagePreviewTable;
+import org.apache.james.jmap.cassandra.projections.table.CassandraMessagePreviewTable;
 
 import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 
diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/preview/CassandraMessagePreviewStore.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewStore.java
similarity index 90%
rename from server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/preview/CassandraMessagePreviewStore.java
rename to server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewStore.java
index f97b024..7ee5607 100644
--- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/preview/CassandraMessagePreviewStore.java
+++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewStore.java
@@ -17,21 +17,21 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.cassandra.preview;
+package org.apache.james.jmap.cassandra.projections;
 
 import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
-import static org.apache.james.jmap.cassandra.preview.table.CassandraMessagePreviewTable.MESSAGE_ID;
-import static org.apache.james.jmap.cassandra.preview.table.CassandraMessagePreviewTable.PREVIEW;
-import static org.apache.james.jmap.cassandra.preview.table.CassandraMessagePreviewTable.TABLE_NAME;
+import static org.apache.james.jmap.cassandra.projections.table.CassandraMessagePreviewTable.MESSAGE_ID;
+import static org.apache.james.jmap.cassandra.projections.table.CassandraMessagePreviewTable.PREVIEW;
+import static org.apache.james.jmap.cassandra.projections.table.CassandraMessagePreviewTable.TABLE_NAME;
 
 import javax.inject.Inject;
 
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
-import org.apache.james.jmap.api.preview.MessagePreviewStore;
 import org.apache.james.jmap.api.preview.Preview;
+import org.apache.james.jmap.api.projections.MessagePreviewStore;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
 import org.apache.james.mailbox.model.MessageId;
 import org.reactivestreams.Publisher;
diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/preview/table/CassandraMessagePreviewTable.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/table/CassandraMessagePreviewTable.java
similarity index 95%
rename from server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/preview/table/CassandraMessagePreviewTable.java
rename to server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/table/CassandraMessagePreviewTable.java
index df849f2..4826263 100644
--- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/preview/table/CassandraMessagePreviewTable.java
+++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/table/CassandraMessagePreviewTable.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.cassandra.preview.table;
+package org.apache.james.jmap.cassandra.projections.table;
 
 public interface CassandraMessagePreviewTable {
     String TABLE_NAME = "message_preview";
diff --git a/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/preview/CassandraMessagePreviewStoreTest.java b/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewStoreTest.java
similarity index 94%
rename from server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/preview/CassandraMessagePreviewStoreTest.java
rename to server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewStoreTest.java
index 9369f39..c8d638b 100644
--- a/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/preview/CassandraMessagePreviewStoreTest.java
+++ b/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewStoreTest.java
@@ -17,13 +17,13 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.cassandra.preview;
+package org.apache.james.jmap.cassandra.projections;
 
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.apache.james.backends.cassandra.CassandraClusterExtension;
-import org.apache.james.jmap.api.preview.MessagePreviewStore;
-import org.apache.james.jmap.api.preview.MessagePreviewStoreContract;
+import org.apache.james.jmap.api.projections.MessagePreviewStore;
+import org.apache.james.jmap.api.projections.MessagePreviewStoreContract;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.TestMessageId;
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/preview/MessageFastViewPrecomputedProperties.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewPrecomputedProperties.java
similarity index 96%
rename from server/data/data-jmap/src/main/java/org/apache/james/jmap/api/preview/MessageFastViewPrecomputedProperties.java
rename to server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewPrecomputedProperties.java
index bf814f8..567f01f 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/preview/MessageFastViewPrecomputedProperties.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewPrecomputedProperties.java
@@ -17,10 +17,12 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.api.preview;
+package org.apache.james.jmap.api.projections;
 
 import java.util.Objects;
 
+import org.apache.james.jmap.api.preview.Preview;
+
 import com.google.common.base.Preconditions;
 
 public class MessageFastViewPrecomputedProperties {
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/preview/MessagePreviewStore.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessagePreviewStore.java
similarity index 93%
rename from server/data/data-jmap/src/main/java/org/apache/james/jmap/api/preview/MessagePreviewStore.java
rename to server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessagePreviewStore.java
index c772b80..1a90c0f 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/preview/MessagePreviewStore.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessagePreviewStore.java
@@ -17,8 +17,9 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.api.preview;
+package org.apache.james.jmap.api.projections;
 
+import org.apache.james.jmap.api.preview.Preview;
 import org.apache.james.mailbox.model.MessageId;
 import org.reactivestreams.Publisher;
 
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/preview/MemoryMessagePreviewStore.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/preview/MemoryMessagePreviewStore.java
index 58bf9c4..11d8b0d 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/preview/MemoryMessagePreviewStore.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/preview/MemoryMessagePreviewStore.java
@@ -21,8 +21,8 @@ package org.apache.james.jmap.memory.preview;
 
 import java.util.concurrent.ConcurrentHashMap;
 
-import org.apache.james.jmap.api.preview.MessagePreviewStore;
 import org.apache.james.jmap.api.preview.Preview;
+import org.apache.james.jmap.api.projections.MessagePreviewStore;
 import org.apache.james.mailbox.model.MessageId;
 import org.reactivestreams.Publisher;
 
diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/preview/MessageFastViewPrecomputedPropertiesTest.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewPrecomputedPropertiesTest.java
similarity index 96%
rename from server/data/data-jmap/src/test/java/org/apache/james/jmap/api/preview/MessageFastViewPrecomputedPropertiesTest.java
rename to server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewPrecomputedPropertiesTest.java
index fe0064f..3fac143 100644
--- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/preview/MessageFastViewPrecomputedPropertiesTest.java
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewPrecomputedPropertiesTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.api.preview;
+package org.apache.james.jmap.api.projections;
 
 import org.junit.jupiter.api.Test;
 
diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/preview/MessagePreviewStoreContract.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessagePreviewStoreContract.java
similarity index 98%
rename from server/data/data-jmap/src/test/java/org/apache/james/jmap/api/preview/MessagePreviewStoreContract.java
rename to server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessagePreviewStoreContract.java
index bb8546f..f653255 100644
--- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/preview/MessagePreviewStoreContract.java
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessagePreviewStoreContract.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.api.preview;
+package org.apache.james.jmap.api.projections;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatCode;
@@ -27,6 +27,7 @@ import java.time.Duration;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.IntStream;
 
+import org.apache.james.jmap.api.preview.Preview;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.util.concurrency.ConcurrentTestRunner;
 import org.assertj.core.api.SoftAssertions;
diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/preview/MemoryMessagePreviewStoreTest.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/preview/MemoryMessagePreviewStoreTest.java
index 73d7809..8e1827b 100644
--- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/preview/MemoryMessagePreviewStoreTest.java
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/preview/MemoryMessagePreviewStoreTest.java
@@ -19,8 +19,8 @@
 
 package org.apache.james.jmap.memory.preview;
 
-import org.apache.james.jmap.api.preview.MessagePreviewStore;
-import org.apache.james.jmap.api.preview.MessagePreviewStoreContract;
+import org.apache.james.jmap.api.projections.MessagePreviewStore;
+import org.apache.james.jmap.api.projections.MessagePreviewStoreContract;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.TestMessageId;
 import org.junit.jupiter.api.BeforeEach;


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


[james-project] 11/15: [Refactoring] MessageUtils is only used by JPA

Posted by rc...@apache.org.
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 e3a04cb12f273bb9b4f961155b9a59ace1b1ec11
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Nov 22 09:47:18 2019 +0700

    [Refactoring] MessageUtils is only used by JPA
---
 .../james/mailbox/jpa/mail/JPAMessageMapper.java      |  3 +--
 .../apache/james/mailbox/jpa}/mail/MessageUtils.java  | 19 ++++++++++++-------
 .../james/mailbox/jpa}/mail/MessageUtilsTest.java     |  4 +++-
 3 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
index c319fe6..601a731 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
@@ -35,6 +35,7 @@ import org.apache.james.mailbox.ModSeq;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.jpa.JPAId;
 import org.apache.james.mailbox.jpa.JPATransactionalMapper;
+import org.apache.james.mailbox.jpa.mail.MessageUtils.MessageChangedFlags;
 import org.apache.james.mailbox.jpa.mail.model.JPAMailbox;
 import org.apache.james.mailbox.jpa.mail.model.openjpa.AbstractJPAMailboxMessage;
 import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAEncryptedMailboxMessage;
@@ -48,8 +49,6 @@ import org.apache.james.mailbox.model.MessageRange.Type;
 import org.apache.james.mailbox.model.UpdatedFlags;
 import org.apache.james.mailbox.store.FlagsUpdateCalculator;
 import org.apache.james.mailbox.store.mail.MessageMapper;
-import org.apache.james.mailbox.store.mail.MessageUtils;
-import org.apache.james.mailbox.store.mail.MessageUtils.MessageChangedFlags;
 import org.apache.james.mailbox.store.mail.ModSeqProvider;
 import org.apache.james.mailbox.store.mail.UidProvider;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageUtils.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/MessageUtils.java
similarity index 85%
rename from mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageUtils.java
rename to mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/MessageUtils.java
index 55dcf8a..bd5d513 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageUtils.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/MessageUtils.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.store.mail;
+package org.apache.james.mailbox.jpa.mail;
 
 import java.util.Iterator;
 import java.util.List;
@@ -30,16 +30,19 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.Mailbox;
 import org.apache.james.mailbox.model.UpdatedFlags;
 import org.apache.james.mailbox.store.FlagsUpdateCalculator;
+import org.apache.james.mailbox.store.mail.ModSeqProvider;
+import org.apache.james.mailbox.store.mail.UidProvider;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 
-public class MessageUtils {
+class MessageUtils {
     private final UidProvider uidProvider;
     private final ModSeqProvider modSeqProvider;
 
-    public MessageUtils(UidProvider uidProvider, ModSeqProvider modSeqProvider) {
+    MessageUtils(UidProvider uidProvider, ModSeqProvider modSeqProvider) {
         Preconditions.checkNotNull(uidProvider);
         Preconditions.checkNotNull(modSeqProvider);
 
@@ -47,13 +50,13 @@ public class MessageUtils {
         this.modSeqProvider = modSeqProvider;
     }
 
-    public void enrichMessage(Mailbox mailbox, MailboxMessage message) throws MailboxException { 
+    void enrichMessage(Mailbox mailbox, MailboxMessage message) throws MailboxException {
         message.setUid(nextUid(mailbox));
         message.setModSeq(nextModSeq(mailbox));
     }
 
-    public MessageChangedFlags updateFlags(Mailbox mailbox, FlagsUpdateCalculator flagsUpdateCalculator, 
-            Iterator<MailboxMessage> messages) throws MailboxException {
+    MessageChangedFlags updateFlags(Mailbox mailbox, FlagsUpdateCalculator flagsUpdateCalculator,
+                                    Iterator<MailboxMessage> messages) throws MailboxException {
         ImmutableList.Builder<UpdatedFlags> updatedFlags = ImmutableList.builder();
         ImmutableList.Builder<MailboxMessage> changedFlags = ImmutableList.builder();
 
@@ -80,15 +83,17 @@ public class MessageUtils {
         return new MessageChangedFlags(updatedFlags.build().iterator(), changedFlags.build());
     }
 
+    @VisibleForTesting
     MessageUid nextUid(Mailbox mailbox) throws MailboxException {
         return uidProvider.nextUid(mailbox);
     }
 
+    @VisibleForTesting
     ModSeq nextModSeq(Mailbox mailbox) throws MailboxException {
         return modSeqProvider.nextModSeq(mailbox);
     }
     
-    public static class MessageChangedFlags {
+    static class MessageChangedFlags {
         private final Iterator<UpdatedFlags> updatedFlags;
         private final List<MailboxMessage> changedFlags;
 
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/MessageUtilsTest.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/MessageUtilsTest.java
similarity index 96%
rename from mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/MessageUtilsTest.java
rename to mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/MessageUtilsTest.java
index fbf2a2a..368a2dc 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/MessageUtilsTest.java
+++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/MessageUtilsTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.store.mail;
+package org.apache.james.mailbox.jpa.mail;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.ArgumentMatchers.eq;
@@ -33,6 +33,8 @@ import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.ModSeq;
 import org.apache.james.mailbox.model.Mailbox;
 import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.mailbox.store.mail.ModSeqProvider;
+import org.apache.james.mailbox.store.mail.UidProvider;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;


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


[james-project] 04/15: JAMES-2997 s/MessagePreviewStore/MessageFastViewProjection/

Posted by rc...@apache.org.
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 07ec7fd345be3465d498ac35c3d034a25f322b57
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Dec 2 11:39:28 2019 +0700

    JAMES-2997 s/MessagePreviewStore/MessageFastViewProjection/
---
 .../org/apache/james/modules/data/CassandraJmapModule.java | 12 ++++++------
 ...wStore.java => CassandraMessageFastViewProjection.java} | 12 ++++++------
 ....java => CassandraMessageFastViewProjectionModule.java} | 10 +++++-----
 ...e.java => CassandraMessageFastViewProjectionTable.java} |  2 +-
 ...st.java => CassandraMessageFastViewProjectionTest.java} | 14 +++++++-------
 ...agePreviewStore.java => MessageFastViewProjection.java} |  2 +-
 ...viewStore.java => MemoryMessageFastViewProjection.java} |  6 +++---
 ...ontract.java => MessageFastViewProjectionContract.java} |  4 ++--
 ...eTest.java => MemoryMessageFastViewProjectionTest.java} | 12 ++++++------
 9 files changed, 37 insertions(+), 37 deletions(-)

diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraJmapModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraJmapModule.java
index 8759d3e..06ac5e9 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraJmapModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/data/CassandraJmapModule.java
@@ -24,14 +24,14 @@ import org.apache.james.eventsourcing.eventstore.cassandra.dto.EventDTOModule;
 import org.apache.james.jmap.api.access.AccessTokenRepository;
 import org.apache.james.jmap.api.filtering.FilteringManagement;
 import org.apache.james.jmap.api.filtering.impl.EventSourcingFilteringManagement;
-import org.apache.james.jmap.api.projections.MessagePreviewStore;
+import org.apache.james.jmap.api.projections.MessageFastViewProjection;
 import org.apache.james.jmap.api.vacation.NotificationRegistry;
 import org.apache.james.jmap.api.vacation.VacationRepository;
 import org.apache.james.jmap.cassandra.access.CassandraAccessModule;
 import org.apache.james.jmap.cassandra.access.CassandraAccessTokenRepository;
 import org.apache.james.jmap.cassandra.filtering.FilteringRuleSetDefineDTOModules;
-import org.apache.james.jmap.cassandra.projections.CassandraMessagePreviewModule;
-import org.apache.james.jmap.cassandra.projections.CassandraMessagePreviewStore;
+import org.apache.james.jmap.cassandra.projections.CassandraMessageFastViewProjection;
+import org.apache.james.jmap.cassandra.projections.CassandraMessageFastViewProjectionModule;
 import org.apache.james.jmap.cassandra.vacation.CassandraNotificationRegistry;
 import org.apache.james.jmap.cassandra.vacation.CassandraNotificationRegistryModule;
 import org.apache.james.jmap.cassandra.vacation.CassandraVacationModule;
@@ -58,14 +58,14 @@ public class CassandraJmapModule extends AbstractModule {
         bind(EventSourcingFilteringManagement.class).in(Scopes.SINGLETON);
         bind(FilteringManagement.class).to(EventSourcingFilteringManagement.class);
 
-        bind(CassandraMessagePreviewStore.class).in(Scopes.SINGLETON);
-        bind(MessagePreviewStore.class).to(CassandraMessagePreviewStore.class);
+        bind(CassandraMessageFastViewProjection.class).in(Scopes.SINGLETON);
+        bind(MessageFastViewProjection.class).to(CassandraMessageFastViewProjection.class);
 
         Multibinder<CassandraModule> cassandraDataDefinitions = Multibinder.newSetBinder(binder(), CassandraModule.class);
         cassandraDataDefinitions.addBinding().toInstance(CassandraAccessModule.MODULE);
         cassandraDataDefinitions.addBinding().toInstance(CassandraVacationModule.MODULE);
         cassandraDataDefinitions.addBinding().toInstance(CassandraNotificationRegistryModule.MODULE);
-        cassandraDataDefinitions.addBinding().toInstance(CassandraMessagePreviewModule.MODULE);
+        cassandraDataDefinitions.addBinding().toInstance(CassandraMessageFastViewProjectionModule.MODULE);
 
         Multibinder<EventDTOModule<?, ?>> eventDTOModuleBinder = Multibinder.newSetBinder(binder(), new TypeLiteral<EventDTOModule<?, ?>>() {});
         eventDTOModuleBinder.addBinding().toInstance(FilteringRuleSetDefineDTOModules.FILTERING_RULE_SET_DEFINED);
diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewStore.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjection.java
similarity index 91%
rename from server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewStore.java
rename to server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjection.java
index b0ce580..afdb547 100644
--- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewStore.java
+++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjection.java
@@ -23,15 +23,15 @@ import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
-import static org.apache.james.jmap.cassandra.projections.table.CassandraMessagePreviewTable.MESSAGE_ID;
-import static org.apache.james.jmap.cassandra.projections.table.CassandraMessagePreviewTable.PREVIEW;
-import static org.apache.james.jmap.cassandra.projections.table.CassandraMessagePreviewTable.TABLE_NAME;
+import static org.apache.james.jmap.cassandra.projections.table.CassandraMessageFastViewProjectionTable.MESSAGE_ID;
+import static org.apache.james.jmap.cassandra.projections.table.CassandraMessageFastViewProjectionTable.PREVIEW;
+import static org.apache.james.jmap.cassandra.projections.table.CassandraMessageFastViewProjectionTable.TABLE_NAME;
 
 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.MessagePreviewStore;
+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;
@@ -41,7 +41,7 @@ import com.datastax.driver.core.Session;
 import com.datastax.driver.core.querybuilder.QueryBuilder;
 import com.google.common.base.Preconditions;
 
-public class CassandraMessagePreviewStore implements MessagePreviewStore {
+public class CassandraMessageFastViewProjection implements MessageFastViewProjection {
 
     private final CassandraAsyncExecutor cassandraAsyncExecutor;
 
@@ -50,7 +50,7 @@ public class CassandraMessagePreviewStore implements MessagePreviewStore {
     private final PreparedStatement deleteStatement;
 
     @Inject
-    CassandraMessagePreviewStore(Session session) {
+    CassandraMessageFastViewProjection(Session session) {
         this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session);
 
         this.deleteStatement = session.prepare(QueryBuilder.delete()
diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewModule.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionModule.java
similarity index 86%
rename from server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewModule.java
rename to server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionModule.java
index a85d67e..5c56e9b 100644
--- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewModule.java
+++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionModule.java
@@ -24,18 +24,18 @@ import static com.datastax.driver.core.DataType.uuid;
 
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.backends.cassandra.utils.CassandraConstants;
-import org.apache.james.jmap.cassandra.projections.table.CassandraMessagePreviewTable;
+import org.apache.james.jmap.cassandra.projections.table.CassandraMessageFastViewProjectionTable;
 
 import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 
-public interface CassandraMessagePreviewModule {
-    CassandraModule MODULE = CassandraModule.table(CassandraMessagePreviewTable.TABLE_NAME)
+public interface CassandraMessageFastViewProjectionModule {
+    CassandraModule MODULE = CassandraModule.table(CassandraMessageFastViewProjectionTable.TABLE_NAME)
         .comment("Storing the JMAP preview property extracted from message bodies")
         .options(options -> options
             .caching(SchemaBuilder.KeyCaching.ALL,
                 SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
-            .addPartitionKey(CassandraMessagePreviewTable.MESSAGE_ID, uuid())
-            .addColumn(CassandraMessagePreviewTable.PREVIEW, text()))
+            .addPartitionKey(CassandraMessageFastViewProjectionTable.MESSAGE_ID, uuid())
+            .addColumn(CassandraMessageFastViewProjectionTable.PREVIEW, text()))
         .build();
 }
diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/table/CassandraMessagePreviewTable.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/table/CassandraMessageFastViewProjectionTable.java
similarity index 95%
rename from server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/table/CassandraMessagePreviewTable.java
rename to server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/table/CassandraMessageFastViewProjectionTable.java
index 4826263..4035626 100644
--- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/table/CassandraMessagePreviewTable.java
+++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/table/CassandraMessageFastViewProjectionTable.java
@@ -19,7 +19,7 @@
 
 package org.apache.james.jmap.cassandra.projections.table;
 
-public interface CassandraMessagePreviewTable {
+public interface CassandraMessageFastViewProjectionTable {
     String TABLE_NAME = "message_preview";
 
     String MESSAGE_ID = "messageId";
diff --git a/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewStoreTest.java b/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionTest.java
similarity index 85%
rename from server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewStoreTest.java
rename to server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionTest.java
index c8d638b..3803fbe 100644
--- a/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/projections/CassandraMessagePreviewStoreTest.java
+++ b/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionTest.java
@@ -22,8 +22,8 @@ package org.apache.james.jmap.cassandra.projections;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.apache.james.backends.cassandra.CassandraClusterExtension;
-import org.apache.james.jmap.api.projections.MessagePreviewStore;
-import org.apache.james.jmap.api.projections.MessagePreviewStoreContract;
+import org.apache.james.jmap.api.projections.MessageFastViewProjection;
+import org.apache.james.jmap.api.projections.MessageFastViewProjectionContract;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.TestMessageId;
@@ -31,22 +31,22 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-class CassandraMessagePreviewStoreTest implements MessagePreviewStoreContract {
+class CassandraMessageFastViewProjectionTest implements MessageFastViewProjectionContract {
 
     @RegisterExtension
-    static CassandraClusterExtension cassandra = new CassandraClusterExtension(CassandraMessagePreviewModule.MODULE);
+    static CassandraClusterExtension cassandra = new CassandraClusterExtension(CassandraMessageFastViewProjectionModule.MODULE);
 
-    private CassandraMessagePreviewStore testee;
+    private CassandraMessageFastViewProjection testee;
     private CassandraMessageId.Factory cassandraMessageIdFactory;
 
     @BeforeEach
     void setUp() {
         cassandraMessageIdFactory = new CassandraMessageId.Factory();
-        testee = new CassandraMessagePreviewStore(cassandra.getCassandraCluster().getConf());
+        testee = new CassandraMessageFastViewProjection(cassandra.getCassandraCluster().getConf());
     }
 
     @Override
-    public MessagePreviewStore testee() {
+    public MessageFastViewProjection testee() {
         return testee;
     }
 
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessagePreviewStore.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewProjection.java
similarity index 97%
rename from server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessagePreviewStore.java
rename to server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewProjection.java
index 00a126c..8245651 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessagePreviewStore.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewProjection.java
@@ -23,7 +23,7 @@ import org.apache.james.jmap.api.model.Preview;
 import org.apache.james.mailbox.model.MessageId;
 import org.reactivestreams.Publisher;
 
-public interface MessagePreviewStore {
+public interface MessageFastViewProjection {
 
     Publisher<Void> store(MessageId messageId, Preview preview);
 
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/preview/MemoryMessagePreviewStore.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/preview/MemoryMessageFastViewProjection.java
similarity index 91%
rename from server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/preview/MemoryMessagePreviewStore.java
rename to server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/preview/MemoryMessageFastViewProjection.java
index 49ae891..d1f177a 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/preview/MemoryMessagePreviewStore.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/preview/MemoryMessageFastViewProjection.java
@@ -22,7 +22,7 @@ package org.apache.james.jmap.memory.preview;
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.james.jmap.api.model.Preview;
-import org.apache.james.jmap.api.projections.MessagePreviewStore;
+import org.apache.james.jmap.api.projections.MessageFastViewProjection;
 import org.apache.james.mailbox.model.MessageId;
 import org.reactivestreams.Publisher;
 
@@ -30,11 +30,11 @@ import com.google.common.base.Preconditions;
 
 import reactor.core.publisher.Mono;
 
-public class MemoryMessagePreviewStore implements MessagePreviewStore {
+public class MemoryMessageFastViewProjection implements MessageFastViewProjection {
 
     private final ConcurrentHashMap<MessageId, Preview> previews;
 
-    public MemoryMessagePreviewStore() {
+    public MemoryMessageFastViewProjection() {
         this.previews = new ConcurrentHashMap<>();
     }
 
diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessagePreviewStoreContract.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionContract.java
similarity index 98%
rename from server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessagePreviewStoreContract.java
rename to server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionContract.java
index 0d4ec17..eddb59e 100644
--- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessagePreviewStoreContract.java
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionContract.java
@@ -35,12 +35,12 @@ import org.junit.jupiter.api.Test;
 
 import reactor.core.publisher.Mono;
 
-public interface MessagePreviewStoreContract {
+public interface MessageFastViewProjectionContract {
 
     Preview PREVIEW_1 = Preview.from("preview 1");
     Preview PREVIEW_2 = Preview.from("preview 2");
 
-    MessagePreviewStore testee();
+    MessageFastViewProjection testee();
 
     MessageId newMessageId();
 
diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/preview/MemoryMessagePreviewStoreTest.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/preview/MemoryMessageFastViewProjectionTest.java
similarity index 80%
rename from server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/preview/MemoryMessagePreviewStoreTest.java
rename to server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/preview/MemoryMessageFastViewProjectionTest.java
index 8e1827b..1e2033f 100644
--- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/preview/MemoryMessagePreviewStoreTest.java
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/preview/MemoryMessageFastViewProjectionTest.java
@@ -19,25 +19,25 @@
 
 package org.apache.james.jmap.memory.preview;
 
-import org.apache.james.jmap.api.projections.MessagePreviewStore;
-import org.apache.james.jmap.api.projections.MessagePreviewStoreContract;
+import org.apache.james.jmap.api.projections.MessageFastViewProjection;
+import org.apache.james.jmap.api.projections.MessageFastViewProjectionContract;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.TestMessageId;
 import org.junit.jupiter.api.BeforeEach;
 
-class MemoryMessagePreviewStoreTest implements MessagePreviewStoreContract {
+class MemoryMessageFastViewProjectionTest implements MessageFastViewProjectionContract {
 
-    private MemoryMessagePreviewStore testee;
+    private MemoryMessageFastViewProjection testee;
     private TestMessageId.Factory messageIdFactory;
 
     @BeforeEach
     void setUp() {
         messageIdFactory = new TestMessageId.Factory();
-        testee = new MemoryMessagePreviewStore();
+        testee = new MemoryMessageFastViewProjection();
     }
 
     @Override
-    public MessagePreviewStore testee() {
+    public MessageFastViewProjection testee() {
         return testee;
     }
 


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


[james-project] 07/15: JAMES-2997 Add hasAttachment to MessageFastViewPrecomputedProperties

Posted by rc...@apache.org.
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 f107618aca43e88dc69fec64992c12d87f1c6371
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Dec 2 12:00:34 2019 +0700

    JAMES-2997 Add hasAttachment to MessageFastViewPrecomputedProperties
---
 .../CassandraMessageFastViewProjection.java        |  8 +++--
 .../CassandraMessageFastViewProjectionModule.java  | 18 ++++++-----
 .../CassandraMessageFastViewProjectionTable.java   |  1 +
 .../MessageFastViewPrecomputedProperties.java      | 36 +++++++++++++++++-----
 .../MessageFastViewProjectionContract.java         |  5 +++
 5 files changed, 52 insertions(+), 16 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 387b39f..47fa83d 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
@@ -23,6 +23,7 @@ import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
+import static org.apache.james.jmap.cassandra.projections.table.CassandraMessageFastViewProjectionTable.HAS_ATTACHMENT;
 import static org.apache.james.jmap.cassandra.projections.table.CassandraMessageFastViewProjectionTable.MESSAGE_ID;
 import static org.apache.james.jmap.cassandra.projections.table.CassandraMessageFastViewProjectionTable.PREVIEW;
 import static org.apache.james.jmap.cassandra.projections.table.CassandraMessageFastViewProjectionTable.TABLE_NAME;
@@ -61,7 +62,8 @@ public class CassandraMessageFastViewProjection implements MessageFastViewProjec
 
         this.storeStatement = session.prepare(insertInto(TABLE_NAME)
             .value(MESSAGE_ID, bindMarker(MESSAGE_ID))
-            .value(PREVIEW, bindMarker(PREVIEW)));
+            .value(PREVIEW, bindMarker(PREVIEW))
+            .value(HAS_ATTACHMENT, bindMarker(HAS_ATTACHMENT)));
 
         this.retrieveStatement = session.prepare(select()
             .from(TABLE_NAME)
@@ -74,7 +76,8 @@ public class CassandraMessageFastViewProjection implements MessageFastViewProjec
 
         return cassandraAsyncExecutor.executeVoid(storeStatement.bind()
             .setUUID(MESSAGE_ID, ((CassandraMessageId) messageId).get())
-            .setString(PREVIEW, precomputedProperties.getPreview().getValue()));
+            .setString(PREVIEW, precomputedProperties.getPreview().getValue())
+            .setBool(HAS_ATTACHMENT, precomputedProperties.hasAttachment()));
     }
 
     @Override
@@ -103,6 +106,7 @@ public class CassandraMessageFastViewProjection implements MessageFastViewProjec
     private MessageFastViewPrecomputedProperties fromRow(Row row) {
         return MessageFastViewPrecomputedProperties.builder()
             .preview(Preview.from(row.getString(PREVIEW)))
+            .hasAttachment(row.getBool(HAS_ATTACHMENT))
             .build();
     }
 }
diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionModule.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionModule.java
index 5c56e9b..0b7df7d 100644
--- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionModule.java
+++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionModule.java
@@ -19,23 +19,27 @@
 
 package org.apache.james.jmap.cassandra.projections;
 
+import static com.datastax.driver.core.DataType.cboolean;
 import static com.datastax.driver.core.DataType.text;
 import static com.datastax.driver.core.DataType.uuid;
+import static org.apache.james.backends.cassandra.utils.CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION;
+import static org.apache.james.jmap.cassandra.projections.table.CassandraMessageFastViewProjectionTable.HAS_ATTACHMENT;
+import static org.apache.james.jmap.cassandra.projections.table.CassandraMessageFastViewProjectionTable.MESSAGE_ID;
+import static org.apache.james.jmap.cassandra.projections.table.CassandraMessageFastViewProjectionTable.PREVIEW;
+import static org.apache.james.jmap.cassandra.projections.table.CassandraMessageFastViewProjectionTable.TABLE_NAME;
 
 import org.apache.james.backends.cassandra.components.CassandraModule;
-import org.apache.james.backends.cassandra.utils.CassandraConstants;
-import org.apache.james.jmap.cassandra.projections.table.CassandraMessageFastViewProjectionTable;
 
 import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 
 public interface CassandraMessageFastViewProjectionModule {
-    CassandraModule MODULE = CassandraModule.table(CassandraMessageFastViewProjectionTable.TABLE_NAME)
+    CassandraModule MODULE = CassandraModule.table(TABLE_NAME)
         .comment("Storing the JMAP preview property extracted from message bodies")
         .options(options -> options
-            .caching(SchemaBuilder.KeyCaching.ALL,
-                SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
+            .caching(SchemaBuilder.KeyCaching.ALL, SchemaBuilder.rows(DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
-            .addPartitionKey(CassandraMessageFastViewProjectionTable.MESSAGE_ID, uuid())
-            .addColumn(CassandraMessageFastViewProjectionTable.PREVIEW, text()))
+            .addPartitionKey(MESSAGE_ID, uuid())
+            .addColumn(PREVIEW, text())
+            .addColumn(HAS_ATTACHMENT, cboolean()))
         .build();
 }
diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/table/CassandraMessageFastViewProjectionTable.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/table/CassandraMessageFastViewProjectionTable.java
index 4035626..add0037 100644
--- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/table/CassandraMessageFastViewProjectionTable.java
+++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/table/CassandraMessageFastViewProjectionTable.java
@@ -24,4 +24,5 @@ public interface CassandraMessageFastViewProjectionTable {
 
     String MESSAGE_ID = "messageId";
     String PREVIEW = "preview";
+    String HAS_ATTACHMENT = "hasAttachment";
 }
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewPrecomputedProperties.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewPrecomputedProperties.java
index ee2cdca..452f7fd 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewPrecomputedProperties.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewPrecomputedProperties.java
@@ -29,49 +29,71 @@ public class MessageFastViewPrecomputedProperties {
     public static class Builder {
         @FunctionalInterface
         public interface RequirePreview {
-            FinalStage preview(Preview preview);
+            RequireHasAttachment preview(Preview preview);
+        }
+
+        @FunctionalInterface
+        public interface RequireHasAttachment {
+            FinalStage hasAttachment(boolean hasAttachment);
+
+            default FinalStage hasAttachment() {
+                return hasAttachment(true);
+            }
+
+            default FinalStage noAttachments() {
+                return hasAttachment(false);
+            }
         }
 
         public static class FinalStage {
             private final Preview preview;
+            private final boolean hasAttachment;
 
-            private FinalStage(Preview preview) {
+            private FinalStage(Preview preview, boolean hasAttachment) {
+                this.hasAttachment = hasAttachment;
                 Preconditions.checkNotNull(preview, "'preview' cannot be null");
                 this.preview = preview;
             }
 
             public MessageFastViewPrecomputedProperties build() {
-                return new MessageFastViewPrecomputedProperties(preview);
+                return new MessageFastViewPrecomputedProperties(preview, hasAttachment);
             }
         }
     }
 
     public static Builder.RequirePreview builder() {
-        return preview -> new Builder.FinalStage(preview);
+        return preview -> hasAttachment -> new Builder.FinalStage(preview, hasAttachment);
     }
 
     private final Preview preview;
+    private final boolean hasAttachment;
 
-    private MessageFastViewPrecomputedProperties(Preview preview) {
+    private MessageFastViewPrecomputedProperties(Preview preview, boolean hasAttachment) {
         this.preview = preview;
+        this.hasAttachment = hasAttachment;
     }
 
     public Preview getPreview() {
         return preview;
     }
 
+    public boolean hasAttachment() {
+        return hasAttachment;
+    }
+
     @Override
     public final boolean equals(Object o) {
         if (o instanceof MessageFastViewPrecomputedProperties) {
             MessageFastViewPrecomputedProperties that = (MessageFastViewPrecomputedProperties) o;
 
-            return Objects.equals(this.preview, that.preview);
+            return Objects.equals(this.preview, that.preview)
+                && Objects.equals(this.hasAttachment, that.hasAttachment);
         }
         return false;
     }
 
     @Override
     public final int hashCode() {
-        return Objects.hash(preview);
+        return Objects.hash(preview, hasAttachment);
     }
 }
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 f752125..d2dfdfe 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
@@ -41,9 +41,11 @@ public interface MessageFastViewProjectionContract {
     Preview PREVIEW_2 = Preview.from("preview 2");
     MessageFastViewPrecomputedProperties MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_1 = MessageFastViewPrecomputedProperties.builder()
         .preview(PREVIEW_1)
+        .hasAttachment()
         .build();
     MessageFastViewPrecomputedProperties MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_2 = MessageFastViewPrecomputedProperties.builder()
         .preview(PREVIEW_2)
+        .noAttachments()
         .build();
 
     MessageFastViewProjection testee();
@@ -146,6 +148,7 @@ public interface MessageFastViewProjectionContract {
             .reactorOperation((thread, step) -> testee()
                 .store(messageIds.get(thread), MessageFastViewPrecomputedProperties.builder()
                     .preview(Preview.from(String.valueOf(step)))
+                    .hasAttachment()
                     .build()))
             .threadCount(threadCount)
             .operationCount(stepCount)
@@ -157,6 +160,7 @@ public interface MessageFastViewProjectionContract {
                     .block())
                 .isEqualTo(MessageFastViewPrecomputedProperties.builder()
                     .preview(Preview.from(String.valueOf(stepCount - 1)))
+                    .hasAttachment()
                     .build()));
     }
 
@@ -170,6 +174,7 @@ public interface MessageFastViewProjectionContract {
             .reactorOperation((thread, step) -> testee()
                 .store(messageId, MessageFastViewPrecomputedProperties.builder()
                     .preview(Preview.from(String.valueOf(step * threadCount + thread)))
+                    .hasAttachment()
                     .build()))
             .threadCount(threadCount)
             .operationCount(operationCount)


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


[james-project] 05/15: JAMES-2997 Move MemoryMessagePreviewStore to a projections package

Posted by rc...@apache.org.
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 9698deed470928d1f4b653a080c0a593f4f98d0b
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Dec 2 11:45:14 2019 +0700

    JAMES-2997 Move MemoryMessagePreviewStore to a projections package
---
 .../{preview => projections}/MemoryMessageFastViewProjection.java       | 2 +-
 .../{preview => projections}/MemoryMessageFastViewProjectionTest.java   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/preview/MemoryMessageFastViewProjection.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/projections/MemoryMessageFastViewProjection.java
similarity index 97%
rename from server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/preview/MemoryMessageFastViewProjection.java
rename to server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/projections/MemoryMessageFastViewProjection.java
index d1f177a..f049349 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/preview/MemoryMessageFastViewProjection.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/projections/MemoryMessageFastViewProjection.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.memory.preview;
+package org.apache.james.jmap.memory.projections;
 
 import java.util.concurrent.ConcurrentHashMap;
 
diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/preview/MemoryMessageFastViewProjectionTest.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/projections/MemoryMessageFastViewProjectionTest.java
similarity index 97%
rename from server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/preview/MemoryMessageFastViewProjectionTest.java
rename to server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/projections/MemoryMessageFastViewProjectionTest.java
index 1e2033f..275c176 100644
--- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/preview/MemoryMessageFastViewProjectionTest.java
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/projections/MemoryMessageFastViewProjectionTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.memory.preview;
+package org.apache.james.jmap.memory.projections;
 
 import org.apache.james.jmap.api.projections.MessageFastViewProjection;
 import org.apache.james.jmap.api.projections.MessageFastViewProjectionContract;


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


[james-project] 12/15: [Refactoring] Rework store subscription

Posted by rc...@apache.org.
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 8c25ad26cd6819a8bfbd048fd9e95b1d05043533
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Nov 22 10:50:52 2019 +0700

    [Refactoring] Rework store subscription
    
     - Subscription should be a POJO
    
     - Read before write should not be enforced at the store level
       - This is an anti-pattern for Cassandra
       - Move this behaviour in JPA subscription mapper
       - This behavior stand in the way of Subscription POJOification
    
     - Fix concurrency issues for memory subscriptions
       - External read - before - write out of lock is not thread safe
---
 .../user/CassandraSubscriptionMapper.java          | 17 ++----
 .../james/mailbox/jpa/JPASubscriptionManager.java  | 10 +---
 .../mailbox/jpa/user/JPASubscriptionMapper.java    | 58 +++++++++++++-------
 .../mailbox/jpa/user/model/JPASubscription.java    | 62 ++++++++++------------
 .../maildir/user/MaildirSubscriptionMapper.java    | 18 +------
 .../inmemory/user/InMemorySubscriptionMapper.java  | 51 +++++++++---------
 .../mailbox/store/StoreSubscriptionManager.java    | 35 +++---------
 .../mailbox/store/user/SubscriptionMapper.java     | 11 ----
 .../mailbox/store/user/model/Subscription.java     | 46 ++++++++++++++--
 .../store/user/model/impl/SimpleSubscription.java  | 61 ---------------------
 .../mailbox/store/user/SubscriptionMapperTest.java | 41 ++++----------
 11 files changed, 158 insertions(+), 252 deletions(-)

diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java
index bc9e7ff..df22d6c 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java
@@ -35,9 +35,7 @@ import org.apache.james.core.Username;
 import org.apache.james.mailbox.store.transaction.NonTransactionalMapper;
 import org.apache.james.mailbox.store.user.SubscriptionMapper;
 import org.apache.james.mailbox.store.user.model.Subscription;
-import org.apache.james.mailbox.store.user.model.impl.SimpleSubscription;
 
-import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.Session;
 import com.datastax.driver.core.querybuilder.QueryBuilder;
 
@@ -59,21 +57,12 @@ public class CassandraSubscriptionMapper extends NonTransactionalMapper implemen
     }
 
     @Override
-    public Subscription findMailboxSubscriptionForUser(Username user, String mailbox) {
-        ResultSet results = session.execute(select(MAILBOX)
-            .from(TABLE_NAME)
-            .where(eq(USER, user.asString()))
-            .and(eq(MAILBOX, mailbox)));
-        return !results.isExhausted() ? new SimpleSubscription(user, mailbox) : null;
-    }
-
-    @Override
     public List<Subscription> findSubscriptionsForUser(Username user) {
         return cassandraUtils.convertToStream(
             session.execute(select(MAILBOX)
                 .from(TABLE_NAME)
                 .where(eq(USER, user.asString()))))
-            .map((row) -> new SimpleSubscription(user, row.getString(MAILBOX)))
+            .map((row) -> new Subscription(user, row.getString(MAILBOX)))
             .collect(Collectors.toList());
     }
 
@@ -84,11 +73,11 @@ public class CassandraSubscriptionMapper extends NonTransactionalMapper implemen
             .value(MAILBOX, subscription.getMailbox()));
     }
 
-    public List<SimpleSubscription> list() {
+    public List<Subscription> list() {
         return cassandraUtils.convertToStream(
             session.execute(select(FIELDS)
                 .from(TABLE_NAME)))
-            .map((row) -> new SimpleSubscription(Username.of(row.getString(USER)), row.getString(MAILBOX)))
+            .map((row) -> new Subscription(Username.of(row.getString(USER)), row.getString(MAILBOX)))
             .collect(Collectors.toList());
     }
 
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPASubscriptionManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPASubscriptionManager.java
index 7fb342e..1cd1bad 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPASubscriptionManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPASubscriptionManager.java
@@ -20,14 +20,10 @@ package org.apache.james.mailbox.jpa;
 
 import javax.inject.Inject;
 
-import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.jpa.user.model.JPASubscription;
 import org.apache.james.mailbox.store.StoreSubscriptionManager;
-import org.apache.james.mailbox.store.user.model.Subscription;
 
 /**
  * JPA implementation of {@link StoreSubscriptionManager}
- *
  */
 public class JPASubscriptionManager extends StoreSubscriptionManager {
     
@@ -35,9 +31,5 @@ public class JPASubscriptionManager extends StoreSubscriptionManager {
     public JPASubscriptionManager(JPAMailboxSessionMapperFactory mapperFactory) {
         super(mapperFactory);
     }
-    
-    @Override
-    protected Subscription createSubscription(MailboxSession session, String mailbox) {
-        return new JPASubscription(session.getUser(), mailbox);
-    }
+
 }
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/JPASubscriptionMapper.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/JPASubscriptionMapper.java
index a096632..157f263 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/JPASubscriptionMapper.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/JPASubscriptionMapper.java
@@ -18,8 +18,13 @@
  ****************************************************************/
 package org.apache.james.mailbox.jpa.user;
 
+import static org.apache.james.mailbox.jpa.user.model.JPASubscription.FIND_MAILBOX_SUBSCRIPTION_FOR_USER;
+import static org.apache.james.mailbox.jpa.user.model.JPASubscription.FIND_SUBSCRIPTIONS_FOR_USER;
+
 import java.util.List;
+import java.util.Optional;
 
+import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.NoResultException;
 import javax.persistence.PersistenceException;
@@ -27,9 +32,12 @@ import javax.persistence.PersistenceException;
 import org.apache.james.core.Username;
 import org.apache.james.mailbox.exception.SubscriptionException;
 import org.apache.james.mailbox.jpa.JPATransactionalMapper;
+import org.apache.james.mailbox.jpa.user.model.JPASubscription;
 import org.apache.james.mailbox.store.user.SubscriptionMapper;
 import org.apache.james.mailbox.store.user.model.Subscription;
 
+import com.github.steveash.guavate.Guavate;
+
 /**
  * JPA implementation of a {@link SubscriptionMapper}. This class is not thread-safe!
  */
@@ -39,46 +47,60 @@ public class JPASubscriptionMapper extends JPATransactionalMapper implements Sub
         super(entityManagerFactory);
     }
 
-    
     @Override
-    public Subscription findMailboxSubscriptionForUser(Username user, String mailbox) throws SubscriptionException {
+    public void save(Subscription subscription) throws SubscriptionException {
+        EntityManager entityManager = getEntityManager();
         try {
-            return (Subscription) getEntityManager().createNamedQuery("findFindMailboxSubscriptionForUser")
-            .setParameter("userParam", user.asString())
-                .setParameter("mailboxParam", mailbox)
-                .getSingleResult();
-        } catch (NoResultException e) {
-            return null;
+            if (!exists(entityManager, subscription)) {
+                entityManager.persist(new JPASubscription(subscription));
+            }
         } catch (PersistenceException e) {
             throw new SubscriptionException(e);
         }
     }
 
     @Override
-    public void save(Subscription subscription) throws SubscriptionException {
+    public List<Subscription> findSubscriptionsForUser(Username user) throws SubscriptionException {
         try {
-            getEntityManager().persist(subscription);
+            return getEntityManager().createNamedQuery(FIND_SUBSCRIPTIONS_FOR_USER, JPASubscription.class)
+                .setParameter("userParam", user.asString())
+                .getResultList()
+                .stream()
+                .map(JPASubscription::toSubscription)
+                .collect(Guavate.toImmutableList());
         } catch (PersistenceException e) {
             throw new SubscriptionException(e);
         }
     }
 
     @Override
-    @SuppressWarnings("unchecked")
-    public List<Subscription> findSubscriptionsForUser(Username user) throws SubscriptionException {
+    public void delete(Subscription subscription) throws SubscriptionException {
+        EntityManager entityManager = getEntityManager();
         try {
-            return (List<Subscription>) getEntityManager().createNamedQuery("findSubscriptionsForUser")
-                .setParameter("userParam", user.asString())
-                .getResultList();
+            findJpaSubscription(entityManager, subscription)
+                .ifPresent(entityManager::remove);
         } catch (PersistenceException e) {
             throw new SubscriptionException(e);
         }
     }
 
-    @Override
-    public void delete(Subscription subscription) throws SubscriptionException {
+    private Optional<JPASubscription> findJpaSubscription(EntityManager entityManager, Subscription subscription) {
+        return entityManager.createNamedQuery(FIND_MAILBOX_SUBSCRIPTION_FOR_USER, JPASubscription.class)
+            .setParameter("userParam", subscription.getUser().asString())
+            .setParameter("mailboxParam", subscription.getMailbox())
+            .getResultList()
+            .stream()
+            .findFirst();
+    }
+
+    private boolean exists(EntityManager entityManager, Subscription subscription) throws SubscriptionException {
         try {
-            getEntityManager().remove(subscription);
+            return !entityManager.createNamedQuery(FIND_MAILBOX_SUBSCRIPTION_FOR_USER, JPASubscription.class)
+                .setParameter("userParam", subscription.getUser().asString())
+                .setParameter("mailboxParam", subscription.getMailbox())
+                .getResultList().isEmpty();
+        } catch (NoResultException e) {
+            return false;
         } catch (PersistenceException e) {
             throw new SubscriptionException(e);
         }
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/model/JPASubscription.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/model/JPASubscription.java
index 785ce13..951ca15 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/model/JPASubscription.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/model/JPASubscription.java
@@ -18,6 +18,8 @@
  ****************************************************************/
 package org.apache.james.mailbox.jpa.user.model;
 
+import java.util.Objects;
+
 import javax.persistence.Basic;
 import javax.persistence.Column;
 import javax.persistence.Entity;
@@ -44,15 +46,20 @@ import org.apache.james.mailbox.store.user.model.Subscription;
                         "MAILBOX_NAME"})
 )
 @NamedQueries({
-    @NamedQuery(name = "findFindMailboxSubscriptionForUser",
+    @NamedQuery(name = JPASubscription.FIND_MAILBOX_SUBSCRIPTION_FOR_USER,
         query = "SELECT subscription FROM Subscription subscription WHERE subscription.username = :userParam AND subscription.mailbox = :mailboxParam"),          
-    @NamedQuery(name = "findSubscriptionsForUser",
-        query = "SELECT subscription FROM Subscription subscription WHERE subscription.username = :userParam")                  
+    @NamedQuery(name = JPASubscription.FIND_SUBSCRIPTIONS_FOR_USER,
+        query = "SELECT subscription FROM Subscription subscription WHERE subscription.username = :userParam"),
+    @NamedQuery(name = JPASubscription.DELETE_SUBSCRIPTION,
+        query = "DELETE subscription FROM Subscription subscription WHERE subscription.username = :userParam AND subscription.mailbox = :mailboxParam")
 })
-public class JPASubscription implements Subscription {
+public class JPASubscription {
+    public static final String DELETE_SUBSCRIPTION = "deleteSubscription";
+    public static final String FIND_SUBSCRIPTIONS_FOR_USER = "findSubscriptionsForUser";
+    public static final String FIND_MAILBOX_SUBSCRIPTION_FOR_USER = "findFindMailboxSubscriptionForUser";
 
     private static final String TO_STRING_SEPARATOR = "  ";
-    
+
     /** Primary key */
     @GeneratedValue
     @Id 
@@ -79,49 +86,38 @@ public class JPASubscription implements Subscription {
     
     /**
      * Constructs a user subscription.
-     * @param username not null
-     * @param mailbox not null
      */
-    public JPASubscription(Username username, String mailbox) {
+    public JPASubscription(Subscription subscription) {
         super();
-        this.username = username.asString();
-        this.mailbox = mailbox;
+        this.username = subscription.getUser().asString();
+        this.mailbox = subscription.getMailbox();
     }
 
-    @Override
     public String getMailbox() {
         return mailbox;
     }
-    
-    @Override
+
     public Username getUser() {
         return Username.of(username);
     }
 
-    @Override
-    public int hashCode() {
-        final int PRIME = 31;
-        int result = 1;
-        result = PRIME * result + (int) (id ^ (id >>> 32));
-        return result;
+    public Subscription toSubscription() {
+        return new Subscription(Username.of(username), mailbox);
     }
 
     @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj == null) {
-            return false;
-        }
-        if (getClass() != obj.getClass()) {
-            return false;
-        }
-        final JPASubscription other = (JPASubscription) obj;
-        if (id != other.id) {
-            return false;
+    public final boolean equals(Object o) {
+        if (o instanceof JPASubscription) {
+            JPASubscription that = (JPASubscription) o;
+
+            return Objects.equals(this.id, that.id);
         }
-        return true;
+        return false;
+    }
+
+    @Override
+    public final int hashCode() {
+        return Objects.hash(id);
     }
 
     /**
diff --git a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/user/MaildirSubscriptionMapper.java b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/user/MaildirSubscriptionMapper.java
index dee6ac7..0d6275b 100644
--- a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/user/MaildirSubscriptionMapper.java
+++ b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/user/MaildirSubscriptionMapper.java
@@ -35,7 +35,6 @@ import org.apache.james.mailbox.maildir.MaildirStore;
 import org.apache.james.mailbox.store.transaction.NonTransactionalMapper;
 import org.apache.james.mailbox.store.user.SubscriptionMapper;
 import org.apache.james.mailbox.store.user.model.Subscription;
-import org.apache.james.mailbox.store.user.model.impl.SimpleSubscription;
 
 import com.github.steveash.guavate.Guavate;
 import com.google.common.collect.ImmutableSet;
@@ -69,26 +68,11 @@ public class MaildirSubscriptionMapper extends NonTransactionalMapper implements
     public List<Subscription> findSubscriptionsForUser(Username user) throws SubscriptionException {
         Set<String> subscriptionNames = readSubscriptionsForUser(user);
         return subscriptionNames.stream()
-            .map(subscription -> new SimpleSubscription(user, subscription))
+            .map(subscription -> new Subscription(user, subscription))
             .collect(Guavate.toImmutableList());
     }
 
     @Override
-    public Subscription findMailboxSubscriptionForUser(Username user, String mailbox) throws SubscriptionException {
-        File userRoot = new File(store.userRoot(user));
-        Set<String> subscriptionNames;
-        try {
-            subscriptionNames = readSubscriptions(userRoot);
-        } catch (IOException e) {
-            throw new SubscriptionException(e);
-        }
-        if (subscriptionNames.contains(mailbox)) {
-            return new SimpleSubscription(user, mailbox);
-        }
-        return null;
-    }
-
-    @Override
     public void save(Subscription subscription) throws SubscriptionException {
         // TODO: we need some kind of file locking here
         Set<String> subscriptionNames = readSubscriptionsForUser(subscription.getUser());
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java
index a94de8c..663fe71 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java
@@ -19,58 +19,57 @@
 package org.apache.james.mailbox.inmemory.user;
 
 import java.util.List;
+import java.util.Set;
 
 import org.apache.james.core.Username;
 import org.apache.james.mailbox.store.transaction.NonTransactionalMapper;
 import org.apache.james.mailbox.store.user.SubscriptionMapper;
 import org.apache.james.mailbox.store.user.model.Subscription;
 
-import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ListMultimap;
-import com.google.common.collect.Multimaps;
+import com.github.steveash.guavate.Guavate;
+import com.google.common.collect.HashBasedTable;
+import com.google.common.collect.Table;
 
 public class InMemorySubscriptionMapper extends NonTransactionalMapper implements SubscriptionMapper {
+    private enum ValueHolder {
+        INSTANCE
+    }
     
-    private final ListMultimap<Username, Subscription> subscriptionsByUser;
+    private final Table<Username, String, ValueHolder> subscriptionsByUser;
     
     public InMemorySubscriptionMapper() {
-        subscriptionsByUser = Multimaps.synchronizedListMultimap(ArrayListMultimap.create());
+        subscriptionsByUser = HashBasedTable.create();
     }
 
     @Override
-    public synchronized void delete(Subscription subscription) {
-        subscriptionsByUser.remove(subscription.getUser(), subscription);
-    }
-
-    @Override
-    public Subscription findMailboxSubscriptionForUser(Username user, String mailbox) {
-        final List<Subscription> subscriptions = ImmutableList.copyOf(subscriptionsByUser.get(user));
-        if (subscriptions != null) {
-            return subscriptions.stream()
-                .filter(subscription -> subscription.getMailbox().equals(mailbox))
-                .findFirst()
-                .orElse(null);
+    public void delete(Subscription subscription) {
+        synchronized (subscriptionsByUser) {
+            subscriptionsByUser.remove(subscription.getUser(), subscription.getMailbox());
         }
-        return null;
     }
 
     @Override
     public List<Subscription> findSubscriptionsForUser(Username user) {
-        final List<Subscription> subcriptions = subscriptionsByUser.get(user);
-        if (subcriptions == null) {
-            return ImmutableList.of();
+        synchronized (subscriptionsByUser) {
+            Set<String> subscriptions = subscriptionsByUser.row(user).keySet();
+
+            return subscriptions.stream()
+                .map(mailbox -> new Subscription(user, mailbox))
+                .collect(Guavate.toImmutableList());
         }
-        return ImmutableList.copyOf(subcriptions);
     }
 
     @Override
-    public synchronized void save(Subscription subscription) {
-        subscriptionsByUser.put(subscription.getUser(), subscription);
+    public void save(Subscription subscription) {
+        synchronized (subscriptionsByUser) {
+            subscriptionsByUser.put(subscription.getUser(), subscription.getMailbox(), ValueHolder.INSTANCE);
+        }
     }
     
     public void deleteAll() {
-        subscriptionsByUser.clear();
+        synchronized (subscriptionsByUser) {
+            subscriptionsByUser.clear();
+        }
     }
 
     @Override
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreSubscriptionManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreSubscriptionManager.java
index f678ff1..d589de4 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreSubscriptionManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreSubscriptionManager.java
@@ -33,13 +33,11 @@ import org.apache.james.mailbox.store.transaction.Mapper;
 import org.apache.james.mailbox.store.user.SubscriptionMapper;
 import org.apache.james.mailbox.store.user.SubscriptionMapperFactory;
 import org.apache.james.mailbox.store.user.model.Subscription;
-import org.apache.james.mailbox.store.user.model.impl.SimpleSubscription;
 
 /**
  * Manages subscriptions for Users and Mailboxes.
  */
 public class StoreSubscriptionManager implements SubscriptionManager {
-
     private static final int INITIAL_SIZE = 32;
     
     protected SubscriptionMapperFactory mapperFactory;
@@ -50,30 +48,18 @@ public class StoreSubscriptionManager implements SubscriptionManager {
     }
 
     @Override
-    public void subscribe(final MailboxSession session, final String mailbox) throws SubscriptionException {
-        final SubscriptionMapper mapper = mapperFactory.getSubscriptionMapper(session);
+    public void subscribe(MailboxSession session, String mailbox) throws SubscriptionException {
+        SubscriptionMapper mapper = mapperFactory.getSubscriptionMapper(session);
         try {
             mapper.execute(Mapper.toTransaction(() -> {
-                Subscription subscription = mapper.findMailboxSubscriptionForUser(session.getUser(), mailbox);
-                if (subscription == null) {
-                    Subscription newSubscription = createSubscription(session, mailbox);
-                    mapper.save(newSubscription);
-                }
+                Subscription newSubscription = new Subscription(session.getUser(), mailbox);
+                mapper.save(newSubscription);
             }));
         } catch (MailboxException e) {
             throw new SubscriptionException(e);
         }
     }
 
-    /**
-     * Create Subscription for the given user and mailbox. By default a {@link SimpleSubscription} will get returned.
-     * 
-     * If you need something more special just override this method
-     */
-    protected Subscription createSubscription(MailboxSession session, String mailbox) {
-        return new SimpleSubscription(session.getUser(), mailbox);
-    }
-
     @Override
     public Collection<String> subscriptions(MailboxSession session) throws SubscriptionException {
         return mapperFactory.getSubscriptionMapper(session)
@@ -84,15 +70,10 @@ public class StoreSubscriptionManager implements SubscriptionManager {
     }
 
     @Override
-    public void unsubscribe(final MailboxSession session, final String mailbox) throws SubscriptionException {
-        final SubscriptionMapper mapper = mapperFactory.getSubscriptionMapper(session);
+    public void unsubscribe(MailboxSession session, String mailbox) throws SubscriptionException {
+        SubscriptionMapper mapper = mapperFactory.getSubscriptionMapper(session);
         try {
-            mapper.execute(Mapper.toTransaction(() -> {
-                Subscription subscription = mapper.findMailboxSubscriptionForUser(session.getUser(), mailbox);
-                if (subscription != null) {
-                    mapper.delete(subscription);
-                }
-            }));
+            mapper.execute(Mapper.toTransaction(() -> mapper.delete(new Subscription(session.getUser(), mailbox))));
         } catch (MailboxException e) {
             throw new SubscriptionException(e);
         }
@@ -109,6 +90,4 @@ public class StoreSubscriptionManager implements SubscriptionManager {
     public void startProcessingRequest(MailboxSession session) {
         // Do nothing        
     }
-    
-    
 }
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/SubscriptionMapper.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/SubscriptionMapper.java
index 0b10e5c..524d2e5 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/SubscriptionMapper.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/SubscriptionMapper.java
@@ -30,17 +30,6 @@ import org.apache.james.mailbox.store.user.model.Subscription;
  *
  */
 public interface SubscriptionMapper extends Mapper {
-
-
-    /**
-     * Finds any subscriptions for a given user to the given mailbox.
-     * @param user not null
-     * @param mailbox not null
-     * @return <code>Subscription</code>, 
-     * or null when the user is not subscribed to the given mailbox
-     */
-    Subscription findMailboxSubscriptionForUser(Username user, String mailbox) throws SubscriptionException;
-
     /**
      * Saves the given subscription.
      * @param subscription not null
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/Subscription.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/Subscription.java
index c2ad141..284b4bd 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/Subscription.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/Subscription.java
@@ -20,14 +20,24 @@ package org.apache.james.mailbox.store.user.model;
 
 import org.apache.james.core.Username;
 
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Objects;
+
 /**
  * 
  * Subscription of a mailbox to a user
  */
-public interface Subscription {
+public class Subscription {
+    private final Username user;
+    private final String mailbox;
+
+    public Subscription(Username user, String mailbox) {
+        this.user = user;
+        this.mailbox = mailbox;
+    }
 
     /**
-     * Gets the name of the mailbox to which 
+     * Gets the name of the mailbox to which
      * the user is subscribed.
      * Note that subscriptions must be maintained
      * beyond the lifetime of a particular instance
@@ -35,13 +45,41 @@ public interface Subscription {
      * 
      * @return not null
      */
-    String getMailbox();
+    public String getMailbox() {
+        return mailbox;
+    }
 
     /**
      * Gets the name of the subscribed user.
      * 
      * @return not null
      */
-    Username getUser();
+    public Username getUser() {
+        return user;
+    }
+
+    @Override
+    public final boolean equals(Object o) {
+        if (o instanceof Subscription) {
+            Subscription that = (Subscription) o;
+
+            return Objects.equal(this.user, that.user)
+                && Objects.equal(this.mailbox, that.mailbox);
+        }
+        return false;
+    }
+
+    @Override
+    public final int hashCode() {
+        return Objects.hashCode(user, mailbox);
+    }
+
 
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+            .add("user", user)
+            .add("mailbox", mailbox)
+            .toString();
+    }
 }
\ No newline at end of file
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/impl/SimpleSubscription.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/impl/SimpleSubscription.java
deleted file mode 100644
index 2d01c99..0000000
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/impl/SimpleSubscription.java
+++ /dev/null
@@ -1,61 +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.mailbox.store.user.model.impl;
-
-import org.apache.james.core.Username;
-import org.apache.james.mailbox.store.user.model.Subscription;
-
-import com.google.common.base.Objects;
-
-public class SimpleSubscription implements Subscription {
-
-    private final Username user;
-    private final String mailbox;
-    
-    public SimpleSubscription(Username user, String mailbox) {
-        this.user = user;
-        this.mailbox = mailbox;
-    }
-
-    @Override
-    public String getMailbox() {
-        return mailbox;
-    }
-
-    @Override
-    public Username getUser() {
-        return user;
-    }
-
-    @Override
-    public final boolean equals(Object o) {
-        if (o instanceof SimpleSubscription) {
-            SimpleSubscription that = (SimpleSubscription) o;
-
-            return Objects.equal(this.user, that.user)
-                && Objects.equal(this.mailbox, that.mailbox);
-        }
-        return false;
-    }
-
-    @Override
-    public final int hashCode() {
-        return Objects.hashCode(user, mailbox);
-    }
-}
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/user/SubscriptionMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/user/SubscriptionMapperTest.java
index 81a5286..eefa7a2 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/user/SubscriptionMapperTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/user/SubscriptionMapperTest.java
@@ -26,7 +26,6 @@ import java.util.List;
 import org.apache.james.core.Username;
 import org.apache.james.mailbox.exception.SubscriptionException;
 import org.apache.james.mailbox.store.user.model.Subscription;
-import org.apache.james.mailbox.store.user.model.impl.SimpleSubscription;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -53,15 +52,8 @@ public abstract class SubscriptionMapperTest {
     }
 
     @Test
-    void findMailboxSubscriptionForUserShouldReturnNullByDefault() throws SubscriptionException {
-        Subscription subscriptions = testee.findMailboxSubscriptionForUser(USER_1,MAILBOX_1);
-
-        assertThat(subscriptions).isNull();
-    }
-
-    @Test
     void findMailboxSubscriptionForUserShouldReturnSubscription() throws SubscriptionException {
-        SimpleSubscription subscription = new SimpleSubscription(USER_1, MAILBOX_1);
+        Subscription subscription = new Subscription(USER_1, MAILBOX_1);
         testee.save(subscription);
 
         List<Subscription> results = testee.findSubscriptionsForUser(USER_1);
@@ -71,8 +63,8 @@ public abstract class SubscriptionMapperTest {
 
     @Test
     void findSubscriptionsForUserShouldReturnSubscriptions() throws SubscriptionException {
-        SimpleSubscription subscription1 = new SimpleSubscription(USER_1, MAILBOX_1);
-        SimpleSubscription subscription2 = new SimpleSubscription(USER_1, MAILBOX_2);
+        Subscription subscription1 = new Subscription(USER_1, MAILBOX_1);
+        Subscription subscription2 = new Subscription(USER_1, MAILBOX_2);
         testee.save(subscription1);
         testee.save(subscription2);
 
@@ -83,8 +75,8 @@ public abstract class SubscriptionMapperTest {
 
     @Test
     void findSubscriptionsForUserShouldReturnOnlyUserSubscriptions() throws SubscriptionException {
-        SimpleSubscription subscription1 = new SimpleSubscription(USER_1,MAILBOX_1);
-        SimpleSubscription subscription2 = new SimpleSubscription(USER_2,MAILBOX_2);
+        Subscription subscription1 = new Subscription(USER_1,MAILBOX_1);
+        Subscription subscription2 = new Subscription(USER_2,MAILBOX_2);
         testee.save(subscription1);
         testee.save(subscription2);
 
@@ -94,32 +86,19 @@ public abstract class SubscriptionMapperTest {
     }
 
     @Test
-    void findMailboxSubscriptionForUserShouldReturnOnlyUserSubscriptions() throws SubscriptionException {
-        SimpleSubscription subscription1 = new SimpleSubscription(USER_1,MAILBOX_1);
-        SimpleSubscription subscription2 = new SimpleSubscription(USER_2,MAILBOX_1);
+    void findSubscriptionsForUserShouldNotReturnDuplicates() throws SubscriptionException {
+        Subscription subscription1 = new Subscription(USER_1,MAILBOX_1);
         testee.save(subscription1);
-        testee.save(subscription2);
-
-        Subscription result = testee.findMailboxSubscriptionForUser(USER_1,MAILBOX_1);
-
-        assertThat(result).isEqualTo(result);
-    }
-
-    @Test
-    void findMailboxSubscriptionForUserShouldReturnSubscriptionConcerningTheMailbox() throws SubscriptionException {
-        SimpleSubscription subscription1 = new SimpleSubscription(USER_1,MAILBOX_1);
-        SimpleSubscription subscription2 = new SimpleSubscription(USER_1,MAILBOX_2);
         testee.save(subscription1);
-        testee.save(subscription2);
 
-        Subscription result = testee.findMailboxSubscriptionForUser(USER_1,MAILBOX_1);
+        List<Subscription> results = testee.findSubscriptionsForUser(USER_1);
 
-        assertThat(result).isEqualTo(result);
+        assertThat(results).containsExactly(subscription1);
     }
 
     @Test
     void deleteShouldRemoveSubscription() throws SubscriptionException {
-        SimpleSubscription subscription = new SimpleSubscription(USER_1, MAILBOX_1);
+        Subscription subscription = new Subscription(USER_1, MAILBOX_1);
         testee.save(subscription);
 
         testee.delete(subscription);


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


[james-project] 13/15: [Refactoring] Remove JPASubscriptionManager

Posted by rc...@apache.org.
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 e7ac327338adc72e97d8d25a5948f037dfa82a4c
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Nov 22 10:52:55 2019 +0700

    [Refactoring] Remove JPASubscriptionManager
---
 .../james/mailbox/jpa/JPASubscriptionManager.java  | 35 ----------------------
 .../main/resources/META-INF/spring/mailbox-jpa.xml |  2 +-
 .../mailbox/jpa/JPASubscriptionManagerTest.java    |  3 +-
 .../mpt/imapmailbox/jpa/host/JPAHostSystem.java    |  4 +--
 .../james/modules/mailbox/JPAMailboxModule.java    |  8 +++--
 5 files changed, 10 insertions(+), 42 deletions(-)

diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPASubscriptionManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPASubscriptionManager.java
deleted file mode 100644
index 1cd1bad..0000000
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPASubscriptionManager.java
+++ /dev/null
@@ -1,35 +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.mailbox.jpa;
-
-import javax.inject.Inject;
-
-import org.apache.james.mailbox.store.StoreSubscriptionManager;
-
-/**
- * JPA implementation of {@link StoreSubscriptionManager}
- */
-public class JPASubscriptionManager extends StoreSubscriptionManager {
-    
-    @Inject
-    public JPASubscriptionManager(JPAMailboxSessionMapperFactory mapperFactory) {
-        super(mapperFactory);
-    }
-
-}
diff --git a/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml b/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml
index d41a13d..8dd4aba 100644
--- a/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml
+++ b/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml
@@ -44,7 +44,7 @@
         <constructor-arg index="8" ref="indexer" />
     </bean>
     
-    <bean id ="jpa-subscriptionManager" class="org.apache.james.mailbox.jpa.JPASubscriptionManager">
+    <bean id ="jpa-subscriptionManager" class="org.apache.james.mailbox.store.StoreSubscriptionManager">
         <constructor-arg index="0" ref="jpa-sessionMapperFactory"/>
     </bean>
     <bean id="jpa-sessionMapperFactory" class="org.apache.james.mailbox.jpa.JPAMailboxSessionMapperFactory">
diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPASubscriptionManagerTest.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPASubscriptionManagerTest.java
index d799321..cda60c3 100644
--- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPASubscriptionManagerTest.java
+++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPASubscriptionManagerTest.java
@@ -25,6 +25,7 @@ import org.apache.james.mailbox.SubscriptionManager;
 import org.apache.james.mailbox.SubscriptionManagerContract;
 import org.apache.james.mailbox.jpa.mail.JPAModSeqProvider;
 import org.apache.james.mailbox.jpa.mail.JPAUidProvider;
+import org.apache.james.mailbox.store.StoreSubscriptionManager;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 
@@ -47,7 +48,7 @@ class JPASubscriptionManagerTest implements SubscriptionManagerContract {
             new JPAUidProvider(entityManagerFactory),
             new JPAModSeqProvider(entityManagerFactory));
 
-        subscriptionManager = new JPASubscriptionManager(mapperFactory);
+        subscriptionManager = new StoreSubscriptionManager(mapperFactory);
     }
 
     @AfterEach
diff --git a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
index 6689e3c..afcef57 100644
--- a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
+++ b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
@@ -38,7 +38,6 @@ import org.apache.james.mailbox.events.InVMEventBus;
 import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.jpa.JPAMailboxFixture;
 import org.apache.james.mailbox.jpa.JPAMailboxSessionMapperFactory;
-import org.apache.james.mailbox.jpa.JPASubscriptionManager;
 import org.apache.james.mailbox.jpa.mail.JPAModSeqProvider;
 import org.apache.james.mailbox.jpa.mail.JPAUidProvider;
 import org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager;
@@ -48,6 +47,7 @@ import org.apache.james.mailbox.jpa.quota.JpaCurrentQuotaManager;
 import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreRightManager;
+import org.apache.james.mailbox.store.StoreSubscriptionManager;
 import org.apache.james.mailbox.store.event.MailboxAnnotationListener;
 import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
@@ -119,7 +119,7 @@ public class JPAHostSystem extends JamesImapHostSystem {
         eventBus.register(quotaUpdater);
         eventBus.register(new MailboxAnnotationListener(mapperFactory, sessionProvider));
 
-        SubscriptionManager subscriptionManager = new JPASubscriptionManager(mapperFactory);
+        SubscriptionManager subscriptionManager = new StoreSubscriptionManager(mapperFactory);
         
         ImapProcessor defaultImapProcessorFactory =
                 DefaultImapProcessorFactory.createDefaultProcessor(
diff --git a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
index b3afb95..16dce61 100644
--- a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
+++ b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
@@ -35,7 +35,6 @@ import org.apache.james.mailbox.events.MailboxListener;
 import org.apache.james.mailbox.indexer.ReIndexer;
 import org.apache.james.mailbox.jpa.JPAId;
 import org.apache.james.mailbox.jpa.JPAMailboxSessionMapperFactory;
-import org.apache.james.mailbox.jpa.JPASubscriptionManager;
 import org.apache.james.mailbox.jpa.mail.JPAModSeqProvider;
 import org.apache.james.mailbox.jpa.mail.JPAUidProvider;
 import org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager;
@@ -47,12 +46,14 @@ import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.MailboxManagerConfiguration;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.StoreMailboxManager;
+import org.apache.james.mailbox.store.StoreSubscriptionManager;
 import org.apache.james.mailbox.store.event.MailboxAnnotationListener;
 import org.apache.james.mailbox.store.mail.MailboxMapperFactory;
 import org.apache.james.mailbox.store.mail.MessageMapperFactory;
 import org.apache.james.mailbox.store.mail.ModSeqProvider;
 import org.apache.james.mailbox.store.mail.UidProvider;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
+import org.apache.james.mailbox.store.user.SubscriptionMapperFactory;
 import org.apache.james.modules.data.JPAEntityManagerModule;
 import org.apache.james.utils.MailboxManagerDefinition;
 import org.apache.mailbox.tools.indexer.ReIndexerImpl;
@@ -74,7 +75,7 @@ public class JPAMailboxModule extends AbstractModule {
         bind(JPAMailboxSessionMapperFactory.class).in(Scopes.SINGLETON);
         bind(OpenJPAMailboxManager.class).in(Scopes.SINGLETON);
         bind(JVMMailboxPathLocker.class).in(Scopes.SINGLETON);
-        bind(JPASubscriptionManager.class).in(Scopes.SINGLETON);
+        bind(StoreSubscriptionManager.class).in(Scopes.SINGLETON);
         bind(JPAModSeqProvider.class).in(Scopes.SINGLETON);
         bind(JPAUidProvider.class).in(Scopes.SINGLETON);
         bind(UserRepositoryAuthenticator.class).in(Scopes.SINGLETON);
@@ -85,6 +86,7 @@ public class JPAMailboxModule extends AbstractModule {
         bind(DefaultMessageId.Factory.class).in(Scopes.SINGLETON);
         bind(ReIndexerImpl.class).in(Scopes.SINGLETON);
 
+        bind(SubscriptionMapperFactory.class).to(JPAMailboxSessionMapperFactory.class);
         bind(MessageMapperFactory.class).to(JPAMailboxSessionMapperFactory.class);
         bind(MailboxMapperFactory.class).to(JPAMailboxSessionMapperFactory.class);
         bind(MailboxSessionMapperFactory.class).to(JPAMailboxSessionMapperFactory.class);
@@ -92,7 +94,7 @@ public class JPAMailboxModule extends AbstractModule {
 
         bind(ModSeqProvider.class).to(JPAModSeqProvider.class);
         bind(UidProvider.class).to(JPAUidProvider.class);
-        bind(SubscriptionManager.class).to(JPASubscriptionManager.class);
+        bind(SubscriptionManager.class).to(StoreSubscriptionManager.class);
         bind(MailboxPathLocker.class).to(JVMMailboxPathLocker.class);
         bind(Authenticator.class).to(UserRepositoryAuthenticator.class);
         bind(MailboxManager.class).to(OpenJPAMailboxManager.class);


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


[james-project] 06/15: JAMES-2997 MessageFastViewProjection should rely on MessageFastViewPrecomputedProperties

Posted by rc...@apache.org.
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 <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[james-project] 15/15: [REFACTORING] Remove temporal coupling in JPASubscriptionMapper

Posted by rc...@apache.org.
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 bfca47b42167f8ca9e794a2dde44063990d6a9cb
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Dec 2 14:09:22 2019 +0700

    [REFACTORING] Remove temporal coupling in JPASubscriptionMapper
---
 .../mailbox/jpa/user/JPASubscriptionMapper.java    | 27 ++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/JPASubscriptionMapper.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/JPASubscriptionMapper.java
index 157f263..3a64c45 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/JPASubscriptionMapper.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/JPASubscriptionMapper.java
@@ -26,6 +26,7 @@ import java.util.Optional;
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
+import javax.persistence.EntityTransaction;
 import javax.persistence.NoResultException;
 import javax.persistence.PersistenceException;
 
@@ -50,11 +51,24 @@ public class JPASubscriptionMapper extends JPATransactionalMapper implements Sub
     @Override
     public void save(Subscription subscription) throws SubscriptionException {
         EntityManager entityManager = getEntityManager();
+        EntityTransaction transaction = entityManager.getTransaction();
+        boolean localTransaction = !transaction.isActive();
+        if (localTransaction) {
+            transaction.begin();
+        }
         try {
             if (!exists(entityManager, subscription)) {
                 entityManager.persist(new JPASubscription(subscription));
             }
+            if (localTransaction) {
+                if (transaction.isActive()) {
+                    transaction.commit();
+                }
+            }
         } catch (PersistenceException e) {
+            if (transaction.isActive()) {
+                transaction.rollback();
+            }
             throw new SubscriptionException(e);
         }
     }
@@ -76,10 +90,23 @@ public class JPASubscriptionMapper extends JPATransactionalMapper implements Sub
     @Override
     public void delete(Subscription subscription) throws SubscriptionException {
         EntityManager entityManager = getEntityManager();
+        EntityTransaction transaction = entityManager.getTransaction();
+        boolean localTransaction = !transaction.isActive();
+        if (localTransaction) {
+            transaction.begin();
+        }
         try {
             findJpaSubscription(entityManager, subscription)
                 .ifPresent(entityManager::remove);
+            if (localTransaction) {
+                if (transaction.isActive()) {
+                    transaction.commit();
+                }
+            }
         } catch (PersistenceException e) {
+            if (transaction.isActive()) {
+                transaction.rollback();
+            }
             throw new SubscriptionException(e);
         }
     }


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