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