JAMES-2257 OldKeyword as Keywords

We should limit at the maximum the spread of the knowledge of OldKeywords.

In some situation an OldKeyword is a relative view of the data (during 
updates), sometine an absolute view of the data (while creating it).
When we create a message we can simply concider the OldKeywords as a normal 
Keywords.

See later on, it brings significant simplifications...


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

Branch: refs/heads/master
Commit: bf9d789b7f3e0ff4248660d71309d58b0b00dc44
Parents: 14e53dc
Author: benwa <btell...@linagora.com>
Authored: Tue Dec 12 08:51:41 2017 +0700
Committer: benwa <btell...@linagora.com>
Committed: Fri Dec 15 14:03:32 2017 +0700

----------------------------------------------------------------------
 .../org/apache/james/jmap/model/OldKeyword.java |  26 ++--
 .../apache/james/jmap/model/OldKeywordTest.java | 141 +++++++++++++++++++
 2 files changed, 157 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/bf9d789b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/OldKeyword.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/OldKeyword.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/OldKeyword.java
index a3aed3a..019d7aa 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/OldKeyword.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/OldKeyword.java
@@ -23,7 +23,10 @@ import java.util.Optional;
 
 import javax.mail.Flags;
 
-import com.google.common.annotations.VisibleForTesting;
+import org.apache.james.util.OptionalUtils;
+import org.apache.james.util.StreamUtils;
+
+import com.github.steveash.guavate.Guavate;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 
@@ -109,15 +112,6 @@ public class OldKeyword {
     private final Optional<Boolean> isDraft;
     private final Optional<Boolean> isForwarded;
 
-    @VisibleForTesting
-    OldKeyword(boolean isUnread, boolean isFlagged, boolean isAnswered, 
boolean isDraft, boolean isForwarded) {
-        this.isUnread = Optional.of(isUnread);
-        this.isFlagged = Optional.of(isFlagged);
-        this.isAnswered = Optional.of(isAnswered);
-        this.isDraft = Optional.of(isDraft);
-        this.isForwarded = Optional.of(isForwarded);
-    }
-
     private OldKeyword(Optional<Boolean> isUnread, Optional<Boolean> 
isFlagged, Optional<Boolean> isAnswered,
                       Optional<Boolean> isDraft, Optional<Boolean> 
isForwarded) {
         this.isUnread = isUnread;
@@ -191,6 +185,18 @@ public class OldKeyword {
         return newStateFlags;
     }
 
+    public Keywords asKeywords() {
+        return Keywords.factory()
+            .fromSet(StreamUtils
+                .flatten(
+                    OptionalUtils.toStream(isAnswered.filter(b -> b).map(b -> 
Keyword.ANSWERED)),
+                    OptionalUtils.toStream(isDraft.filter(b -> b).map(b -> 
Keyword.DRAFT)),
+                    OptionalUtils.toStream(isForwarded.filter(b -> b).map(b -> 
Keyword.FORWARDED)),
+                    OptionalUtils.toStream(isFlagged.filter(b -> b).map(b -> 
Keyword.FLAGGED)),
+                    OptionalUtils.toStream(isUnread.filter(b -> !b).map(b -> 
Keyword.SEEN)))
+                .collect(Guavate.toImmutableSet()));
+    }
+
     @Override
     public final boolean equals(Object other) {
         if (other instanceof OldKeyword) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/bf9d789b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/OldKeywordTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/OldKeywordTest.java
 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/OldKeywordTest.java
index e703098..9b4d8b3 100644
--- 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/OldKeywordTest.java
+++ 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/OldKeywordTest.java
@@ -37,6 +37,147 @@ public class OldKeywordTest {
     }
 
     @Test
+    public void asKeywordsShouldContainFlaggedWhenIsFlagged() {
+        Optional<OldKeyword> testee = OldKeyword.builder()
+            .isUnread(Optional.empty())
+            .isFlagged(Optional.of(true))
+            .isAnswered(Optional.empty())
+            .isDraft(Optional.empty())
+            .isForwarded(Optional.empty())
+            .computeOldKeyword();
+
+        assertThat(testee.get().asKeywords())
+            .isEqualTo(Keywords.factory().from(Keyword.FLAGGED));
+    }
+
+    @Test
+    public void asKeywordsShouldNotContainFlaggedWhenIsNotFlagged() {
+        Optional<OldKeyword> testee = OldKeyword.builder()
+            .isUnread(Optional.empty())
+            .isFlagged(Optional.of(false))
+            .isAnswered(Optional.empty())
+            .isDraft(Optional.empty())
+            .isForwarded(Optional.empty())
+            .computeOldKeyword();
+
+        assertThat(testee.get().asKeywords())
+            .isEqualTo(Keywords.factory().from());
+    }
+
+    @Test
+    public void asKeywordsShouldNotContainSeenWhenIsUnRead() {
+        Optional<OldKeyword> testee = OldKeyword.builder()
+            .isUnread(Optional.of(true))
+            .isFlagged(Optional.empty())
+            .isAnswered(Optional.empty())
+            .isDraft(Optional.empty())
+            .isForwarded(Optional.empty())
+            .computeOldKeyword();
+
+        assertThat(testee.get().asKeywords())
+            .isEqualTo(Keywords.factory().from());
+    }
+
+    @Test
+    public void asKeywordsShouldContainSeenWhenIsRead() {
+        Optional<OldKeyword> testee = OldKeyword.builder()
+            .isUnread(Optional.of(false))
+            .isFlagged(Optional.empty())
+            .isAnswered(Optional.empty())
+            .isDraft(Optional.empty())
+            .isForwarded(Optional.empty())
+            .computeOldKeyword();
+
+
+        assertThat(testee.get().asKeywords())
+            .isEqualTo(Keywords.factory().from(Keyword.SEEN));
+    }
+
+    @Test
+    public void asKeywordsShouldContainAnsweredWhenIsAnswered() {
+        Optional<OldKeyword> testee = OldKeyword.builder()
+            .isUnread(Optional.empty())
+            .isFlagged(Optional.empty())
+            .isAnswered(Optional.of(true))
+            .isDraft(Optional.empty())
+            .isForwarded(Optional.empty())
+            .computeOldKeyword();
+
+        assertThat(testee.get().asKeywords())
+            .isEqualTo(Keywords.factory().from(Keyword.ANSWERED));
+    }
+
+    @Test
+    public void asKeywordsShouldNotContainAnsweredWhenIsNotAnswered() {
+        Optional<OldKeyword> testee = OldKeyword.builder()
+            .isUnread(Optional.empty())
+            .isFlagged(Optional.empty())
+            .isAnswered(Optional.of(false))
+            .isDraft(Optional.empty())
+            .isForwarded(Optional.empty())
+            .computeOldKeyword();
+
+        assertThat(testee.get().asKeywords())
+            .isEqualTo(Keywords.factory().from());
+    }
+
+    @Test
+    public void asKeywordsShouldContainDraftWhenIsDraft() {
+        Optional<OldKeyword> testee = OldKeyword.builder()
+            .isUnread(Optional.empty())
+            .isFlagged(Optional.empty())
+            .isAnswered(Optional.empty())
+            .isDraft(Optional.of(true))
+            .isForwarded(Optional.empty())
+            .computeOldKeyword();
+
+        assertThat(testee.get().asKeywords())
+            .isEqualTo(Keywords.factory().from(Keyword.DRAFT));
+    }
+
+    @Test
+    public void asKeywordsShouldNotContainDraftWhenIsNotDraft() {
+        Optional<OldKeyword> testee = OldKeyword.builder()
+            .isUnread(Optional.empty())
+            .isFlagged(Optional.empty())
+            .isAnswered(Optional.empty())
+            .isDraft(Optional.of(false))
+            .isForwarded(Optional.empty())
+            .computeOldKeyword();
+
+        assertThat(testee.get().asKeywords())
+            .isEqualTo(Keywords.factory().from());
+    }
+
+    @Test
+    public void asKeywordsShouldContainForwardedWhenIsForwarded() {
+        Optional<OldKeyword> testee = OldKeyword.builder()
+            .isUnread(Optional.empty())
+            .isFlagged(Optional.empty())
+            .isAnswered(Optional.empty())
+            .isDraft(Optional.empty())
+            .isForwarded(Optional.of(true))
+            .computeOldKeyword();
+
+        assertThat(testee.get().asKeywords())
+            .isEqualTo(Keywords.factory().from(Keyword.FORWARDED));
+    }
+
+    @Test
+    public void asKeywordsShouldNotContainForwardedWhenIsNotForwarded() {
+        Optional<OldKeyword> testee = OldKeyword.builder()
+            .isUnread(Optional.empty())
+            .isFlagged(Optional.empty())
+            .isAnswered(Optional.empty())
+            .isDraft(Optional.empty())
+            .isForwarded(Optional.of(false))
+            .computeOldKeyword();
+
+        assertThat(testee.get().asKeywords())
+            .isEqualTo(Keywords.factory().from());
+    }
+
+    @Test
     public void computeOldKeywordsShouldReturnEmptyWhenAllEmpty() {
         Optional<OldKeyword> testee = OldKeyword.builder()
             .isUnread(Optional.empty())


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

Reply via email to