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 bt...@apache.org on 2017/12/15 07:15:05 UTC
[01/11] james-project git commit: JAMES-2257 Remove unused
OldKeywords parameter from Keywords
Repository: james-project
Updated Branches:
refs/heads/master 38acce230 -> 9d3bbbd31
JAMES-2257 Remove unused OldKeywords parameter from Keywords
This parameter was never used...
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/14e53dc8
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/14e53dc8
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/14e53dc8
Branch: refs/heads/master
Commit: 14e53dc8c444ebd15014ffdb5f0c8cae4f71c1ef
Parents: 0e6082e
Author: benwa <bt...@linagora.com>
Authored: Tue Dec 12 08:51:20 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Fri Dec 15 14:00:36 2017 +0700
----------------------------------------------------------------------
.../org/apache/james/jmap/model/Keywords.java | 28 +++++++-------------
.../james/jmap/utils/KeywordsCombiner.java | 4 +--
.../james/jmap/json/ParsingWritingObjects.java | 2 +-
.../apache/james/jmap/model/KeywordsTest.java | 23 ++++++++--------
4 files changed, 23 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/14e53dc8/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keywords.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keywords.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keywords.java
index 5df79fa..7a5fc79 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keywords.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keywords.java
@@ -43,7 +43,7 @@ import com.google.common.collect.ImmutableSet;
public class Keywords {
- public static final Keywords DEFAULT_VALUE = factory().fromSet(ImmutableSet.of(), Optional.empty());
+ public static final Keywords DEFAULT_VALUE = factory().fromSet(ImmutableSet.of());
private static final Logger LOGGER = LoggerFactory.getLogger(Keywords.class);
public interface KeywordsValidator {
@@ -78,27 +78,24 @@ public class Keywords {
return this;
}
- public Keywords fromSet(Set<Keyword> setKeywords, Optional<OldKeyword> oldKeyword) {
+ public Keywords fromSet(Set<Keyword> setKeywords) {
validator.orElse(keywords -> {})
.validate(setKeywords);
return new Keywords(setKeywords.stream()
.filter(filter.orElse(keyword -> true))
- .collect(Guavate.toImmutableSet()),
- oldKeyword);
+ .collect(Guavate.toImmutableSet()));
}
public Keywords from(Keyword... keywords) {
return fromSet(Arrays.stream(keywords)
- .collect(Guavate.toImmutableSet()),
- Optional.empty());
+ .collect(Guavate.toImmutableSet()));
}
public Keywords fromList(List<String> keywords) {
return fromSet(keywords.stream()
.map(Keyword::new)
- .collect(Guavate.toImmutableSet()),
- Optional.empty());
+ .collect(Guavate.toImmutableSet()));
}
@VisibleForTesting
@@ -111,7 +108,7 @@ public class Keywords {
.map(Keyword::new)
.collect(Guavate.toImmutableSet());
- return fromSet(setKeywords, Optional.empty());
+ return fromSet(setKeywords);
}
public Keywords fromFlags(Flags flags) {
@@ -120,8 +117,7 @@ public class Keywords {
.flatMap(this::asKeyword),
Stream.of(flags.getSystemFlags())
.map(Keyword::fromFlag))
- .collect(Guavate.toImmutableSet()),
- Optional.empty());
+ .collect(Guavate.toImmutableSet()));
}
private Stream<Keyword> asKeyword(String flagName) {
@@ -139,11 +135,9 @@ public class Keywords {
}
private final ImmutableSet<Keyword> keywords;
- private final Optional<OldKeyword> oldKeyword;
- private Keywords(ImmutableSet<Keyword> keywords, Optional<OldKeyword> oldKeyword) {
+ private Keywords(ImmutableSet<Keyword> keywords) {
this.keywords = keywords;
- this.oldKeyword = oldKeyword;
}
public Flags asFlags() {
@@ -181,22 +175,20 @@ public class Keywords {
public final boolean equals(Object other) {
if (other instanceof Keywords) {
Keywords otherKeyword = (Keywords) other;
- return Objects.equal(keywords, otherKeyword.keywords)
- && Objects.equal(oldKeyword, otherKeyword.oldKeyword);
+ return Objects.equal(keywords, otherKeyword.keywords);
}
return false;
}
@Override
public final int hashCode() {
- return Objects.hashCode(keywords, oldKeyword);
+ return Objects.hashCode(keywords);
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("keywords", keywords)
- .add("oldKeyword", oldKeyword)
.toString();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/14e53dc8/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/KeywordsCombiner.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/KeywordsCombiner.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/KeywordsCombiner.java
index 2dba575..185be02 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/KeywordsCombiner.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/KeywordsCombiner.java
@@ -20,7 +20,6 @@
package org.apache.james.jmap.utils;
import java.util.List;
-import java.util.Optional;
import java.util.Set;
import java.util.function.BinaryOperator;
@@ -47,8 +46,7 @@ public class KeywordsCombiner implements BinaryOperator<Keywords> {
return keywordsFactory
.fromSet(Sets.union(
union(keywords.getKeywords(), keywords2.getKeywords(), KEYWORD_NOT_TO_UNION),
- intersect(keywords.getKeywords(), keywords2.getKeywords(), KEYWORD_TO_INTERSECT)),
- Optional.empty());
+ intersect(keywords.getKeywords(), keywords2.getKeywords(), KEYWORD_TO_INTERSECT)));
}
public Set<Keyword> union(Set<Keyword> set1, Set<Keyword> set2, List<Keyword> exceptKeywords) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/14e53dc8/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ParsingWritingObjects.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ParsingWritingObjects.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ParsingWritingObjects.java
index 427a6d9..b81731a 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ParsingWritingObjects.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ParsingWritingObjects.java
@@ -77,7 +77,7 @@ public interface ParsingWritingObjects {
.threadId(Common.THREAD_ID)
.mailboxIds(Common.MAILBOX_IDS)
.inReplyToMessageId(Common.IN_REPLY_TO_MESSAGE_ID)
- .keywords(Keywords.factory().fromSet(Common.KEYWORDS, Optional.empty()))
+ .keywords(Keywords.factory().fromSet(Common.KEYWORDS))
.headers(Common.HEADERS)
.from(Common.FROM)
.to(Common.TO)
http://git-wip-us.apache.org/repos/asf/james-project/blob/14e53dc8/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/KeywordsTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/KeywordsTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/KeywordsTest.java
index 4c3ca03..29f33ba 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/KeywordsTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/KeywordsTest.java
@@ -22,7 +22,6 @@ package org.apache.james.jmap.model;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.Map;
-import java.util.Optional;
import javax.mail.Flags;
import javax.mail.Flags.Flag;
@@ -77,7 +76,7 @@ public class KeywordsTest {
@Test
public void fromSetShouldReturnKeywordsFromSetOfKeywords() throws Exception {
Keywords keywords = Keywords.factory()
- .fromSet(ImmutableSet.of(Keyword.ANSWERED), Optional.empty());
+ .fromSet(ImmutableSet.of(Keyword.ANSWERED));
assertThat(keywords.getKeywords())
.containsOnly(Keyword.ANSWERED);
@@ -86,7 +85,7 @@ public class KeywordsTest {
@Test
public void asFlagsShouldBuildFlagsFromKeywords() throws Exception {
assertThat(Keywords.factory()
- .fromSet(ImmutableSet.of(Keyword.ANSWERED), Optional.empty())
+ .fromSet(ImmutableSet.of(Keyword.ANSWERED))
.asFlags())
.isEqualTo(new Flags(Flags.Flag.ANSWERED));
}
@@ -102,7 +101,7 @@ public class KeywordsTest {
.build();
assertThat(Keywords.factory()
- .fromSet(ImmutableSet.of(Keyword.ANSWERED), Optional.empty())
+ .fromSet(ImmutableSet.of(Keyword.ANSWERED))
.asFlagsWithRecentAndDeletedFrom(originFlags))
.isEqualTo(expectedFlags);
}
@@ -118,7 +117,7 @@ public class KeywordsTest {
.build();
assertThat(Keywords.factory()
- .fromSet(ImmutableSet.of(Keyword.ANSWERED), Optional.empty())
+ .fromSet(ImmutableSet.of(Keyword.ANSWERED))
.asFlagsWithRecentAndDeletedFrom(originFlags))
.isEqualTo(expectedFlags);
}
@@ -126,7 +125,7 @@ public class KeywordsTest {
@Test
public void asMapShouldReturnEmptyWhenEmptyMapOfStringAndBoolean() throws Exception {
assertThat(Keywords.factory()
- .fromSet(ImmutableSet.of(), Optional.empty())
+ .fromSet(ImmutableSet.of())
.asMap())
.isEmpty();;
}
@@ -135,7 +134,7 @@ public class KeywordsTest {
public void asMapShouldReturnMapOfStringAndBoolean() throws Exception {
Map<String, Boolean> expectedMap = ImmutableMap.of("$Answered", Keyword.FLAG_VALUE);
assertThat(Keywords.factory()
- .fromSet(ImmutableSet.of(Keyword.ANSWERED), Optional.empty())
+ .fromSet(ImmutableSet.of(Keyword.ANSWERED))
.asMap())
.isEqualTo(expectedMap);
}
@@ -146,14 +145,14 @@ public class KeywordsTest {
Keywords.factory()
.throwOnImapNonExposedKeywords()
- .fromSet(ImmutableSet.of(Keyword.DRAFT, Keyword.DELETED), Optional.empty());
+ .fromSet(ImmutableSet.of(Keyword.DRAFT, Keyword.DELETED));
}
@Test
public void throwWhenUnsupportedKeywordShouldNotThrowWhenHaveDraft() throws Exception {
Keywords keywords = Keywords.factory()
.throwOnImapNonExposedKeywords()
- .fromSet(ImmutableSet.of(Keyword.ANSWERED, Keyword.DRAFT), Optional.empty());
+ .fromSet(ImmutableSet.of(Keyword.ANSWERED, Keyword.DRAFT));
assertThat(keywords.getKeywords())
.containsOnly(Keyword.ANSWERED, Keyword.DRAFT);
@@ -163,7 +162,7 @@ public class KeywordsTest {
public void filterUnsupportedShouldFilter() throws Exception {
Keywords keywords = Keywords.factory()
.filterImapNonExposedKeywords()
- .fromSet(ImmutableSet.of(Keyword.ANSWERED, Keyword.DELETED, Keyword.RECENT, Keyword.DRAFT), Optional.empty());
+ .fromSet(ImmutableSet.of(Keyword.ANSWERED, Keyword.DELETED, Keyword.RECENT, Keyword.DRAFT));
assertThat(keywords.getKeywords())
.containsOnly(Keyword.ANSWERED, Keyword.DRAFT);
@@ -172,7 +171,7 @@ public class KeywordsTest {
@Test
public void containsShouldReturnTrueWhenKeywordsContainKeyword() {
Keywords keywords = Keywords.factory()
- .fromSet(ImmutableSet.of(Keyword.SEEN), Optional.empty());
+ .fromSet(ImmutableSet.of(Keyword.SEEN));
assertThat(keywords.contains(Keyword.SEEN)).isTrue();
}
@@ -180,7 +179,7 @@ public class KeywordsTest {
@Test
public void containsShouldReturnFalseWhenKeywordsDoNotContainKeyword() {
Keywords keywords = Keywords.factory()
- .fromSet(ImmutableSet.of(), Optional.empty());
+ .fromSet(ImmutableSet.of());
assertThat(keywords.contains(Keyword.SEEN)).isFalse();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[02/11] james-project git commit: JAMES-2257 add builder for
oldKeywords
Posted by bt...@apache.org.
JAMES-2257 add builder for oldKeywords
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/0e6082eb
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/0e6082eb
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/0e6082eb
Branch: refs/heads/master
Commit: 0e6082eb3f5a7f5cf7b2fc0f45b9e91ba63ce564
Parents: e9ef473
Author: Luc DUZAN <ld...@linagora.com>
Authored: Mon Dec 11 18:18:53 2017 +0100
Committer: benwa <bt...@linagora.com>
Committed: Fri Dec 15 14:00:36 2017 +0700
----------------------------------------------------------------------
.../james/jmap/model/CreationMessage.java | 21 +++---
.../org/apache/james/jmap/model/OldKeyword.java | 77 ++++++++++++++++++--
.../james/jmap/model/UpdateMessagePatch.java | 21 ++----
.../apache/james/jmap/model/OldKeywordTest.java | 68 +++++++++--------
4 files changed, 126 insertions(+), 61 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/0e6082eb/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
index 625f42d..39840e5 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
@@ -59,11 +59,7 @@ public class CreationMessage {
public static class Builder {
private ImmutableList<String> mailboxIds;
private String inReplyToMessageId;
- private Optional<Boolean> isUnread = Optional.empty();
- private Optional<Boolean> isFlagged = Optional.empty();
- private Optional<Boolean> isAnswered = Optional.empty();
- private Optional<Boolean> isDraft = Optional.empty();
- private Optional<Boolean> isForwarded = Optional.empty();
+ private final OldKeyword.Builder oldKeywordBuilder;
private final ImmutableMap.Builder<String, String> headers;
private Optional<DraftEmailer> from = Optional.empty();
private final ImmutableList.Builder<DraftEmailer> to;
@@ -86,6 +82,7 @@ public class CreationMessage {
attachments = ImmutableList.builder();
attachedMessages = ImmutableMap.builder();
headers = ImmutableMap.builder();
+ oldKeywordBuilder = OldKeyword.builder();
}
public Builder mailboxId(String... mailboxIds) {
@@ -104,27 +101,27 @@ public class CreationMessage {
}
public Builder isUnread(Optional<Boolean> isUnread) {
- this.isUnread = isUnread;
+ oldKeywordBuilder.isUnread(isUnread);
return this;
}
public Builder isFlagged(Optional<Boolean> isFlagged) {
- this.isFlagged = isFlagged;
+ oldKeywordBuilder.isFlagged(isFlagged);
return this;
}
public Builder isAnswered(Optional<Boolean> isAnswered) {
- this.isAnswered = isAnswered;
+ oldKeywordBuilder.isAnswered(isAnswered);
return this;
}
public Builder isDraft(Optional<Boolean> isDraft) {
- this.isDraft = isDraft;
+ oldKeywordBuilder.isDraft(isDraft);
return this;
}
public Builder isForwarded(Optional<Boolean> isForwarded) {
- this.isForwarded = isForwarded;
+ oldKeywordBuilder.isForwarded(isForwarded);
return this;
}
@@ -221,8 +218,8 @@ public class CreationMessage {
}
Optional<Keywords> maybeKeywords = creationKeywords();
- Optional<OldKeyword> oldKeywords = OldKeyword.computeOldKeywords(
- isUnread, isFlagged, isAnswered, isDraft, isForwarded);
+ Optional<OldKeyword> oldKeywords = oldKeywordBuilder.computeOldKeyword();
+
Preconditions.checkArgument(!(maybeKeywords.isPresent() && oldKeywords.isPresent()), "Does not support keyword and is* at the same time");
return new CreationMessage(mailboxIds, Optional.ofNullable(inReplyToMessageId), headers.build(), from,
to.build(), cc.build(), bcc.build(), replyTo.build(), subject, date, Optional.ofNullable(textBody), Optional.ofNullable(htmlBody),
http://git-wip-us.apache.org/repos/asf/james-project/blob/0e6082eb/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 b240b54..a3aed3a 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
@@ -28,12 +28,79 @@ import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
public class OldKeyword {
- public static Optional<OldKeyword> computeOldKeywords(Optional<Boolean> isUnread, Optional<Boolean> isFlagged, Optional<Boolean> isAnswered,
- Optional<Boolean> isDraft, Optional<Boolean> isForwarded) {
- if (isAnswered.isPresent() || isFlagged.isPresent() || isUnread.isPresent() || isForwarded.isPresent() || isDraft.isPresent()) {
- return Optional.of(new OldKeyword(isUnread, isFlagged, isAnswered, isDraft, isForwarded));
+
+ public static class Builder {
+ private Optional<Boolean> isUnread;
+ private Optional<Boolean> isFlagged;
+ private Optional<Boolean> isAnswered;
+ private Optional<Boolean> isDraft;
+ private Optional<Boolean> isForwarded;
+
+ private Builder() {
+ isUnread = Optional.empty();
+ isFlagged = Optional.empty();
+ isAnswered = Optional.empty();
+ isDraft = Optional.empty();
+ isForwarded = Optional.empty();
+ }
+
+ public Builder isFlagged(Optional<Boolean> isFlagged) {
+ this.isFlagged = isFlagged;
+ return this;
+ }
+
+ public Builder isFlagged(boolean isFlagged) {
+ return isFlagged(Optional.of(isFlagged));
+ }
+
+ public Builder isUnread(Optional<Boolean> isUnread) {
+ this.isUnread = isUnread;
+ return this;
}
- return Optional.empty();
+
+ public Builder isUnread(boolean isUnread) {
+ return isUnread(Optional.of(isUnread));
+ }
+
+ public Builder isAnswered(Optional<Boolean> isAnswered) {
+ this.isAnswered = isAnswered;
+ return this;
+ }
+
+ public Builder isAnswered(boolean isAnswered) {
+ return isAnswered(Optional.of(isAnswered));
+ }
+
+ public Builder isDraft(Optional<Boolean> isDraft) {
+ this.isDraft = isDraft;
+ return this;
+ }
+
+ public Builder isDraft(boolean isDraft) {
+ return isDraft(Optional.of(isDraft));
+ }
+
+ public Builder isForwarded(Optional<Boolean> isForwarded) {
+ this.isForwarded = isForwarded;
+ return this;
+ }
+
+ public Builder isForwarded(boolean isForwarded) {
+ return isForwarded(Optional.of(isForwarded));
+ }
+
+ public Optional<OldKeyword> computeOldKeyword() {
+ if (isAnswered.isPresent() || isFlagged.isPresent() || isUnread.isPresent() || isForwarded.isPresent() || isDraft.isPresent()) {
+ return Optional.of(new OldKeyword(isUnread, isFlagged, isAnswered, isDraft, isForwarded));
+ }
+
+ return Optional.empty();
+ }
+
+ }
+
+ public static Builder builder() {
+ return new Builder();
}
private final Optional<Boolean> isUnread;
http://git-wip-us.apache.org/repos/asf/james-project/blob/0e6082eb/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java
index 19671a9..830181b 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java
@@ -47,11 +47,7 @@ public class UpdateMessagePatch {
@JsonPOJOBuilder(withPrefix = "")
public static class Builder {
private Optional<List<String>> mailboxIds = Optional.empty();
- private Optional<Boolean> isFlagged = Optional.empty();
- private Optional<Boolean> isUnread = Optional.empty();
- private Optional<Boolean> isAnswered = Optional.empty();
- private Optional<Boolean> isForwarded = Optional.empty();
- private Optional<Boolean> isDraft = Optional.empty();
+ private OldKeyword.Builder oldKeyworkBuilder = OldKeyword.builder();
private Optional<Map<String, Boolean>> keywords = Optional.empty();
private Set<ValidationResult> validationResult = Sets.newHashSet();
@@ -66,27 +62,27 @@ public class UpdateMessagePatch {
}
public Builder isFlagged(Boolean isFlagged) {
- this.isFlagged = Optional.of(isFlagged);
+ oldKeyworkBuilder.isFlagged(isFlagged);
return this;
}
public Builder isUnread(Boolean isUnread) {
- this.isUnread = Optional.of(isUnread);
+ oldKeyworkBuilder.isUnread(isUnread);
return this;
}
public Builder isAnswered(Boolean isAnswered) {
- this.isAnswered = Optional.of(isAnswered);
+ oldKeyworkBuilder.isAnswered(isAnswered);
return this;
}
- public Builder isDraft(Boolean isAnswered) {
- this.isDraft = Optional.of(isAnswered);
+ public Builder isDraft(Boolean isDraft) {
+ oldKeyworkBuilder.isDraft(isDraft);
return this;
}
public Builder isForwarded(Boolean isForwarded) {
- this.isForwarded = Optional.of(isForwarded);
+ oldKeyworkBuilder.isForwarded(isForwarded);
return this;
}
@@ -104,8 +100,7 @@ public class UpdateMessagePatch {
}
Optional<Keywords> mayBeKeywords = creationKeywords();
- Optional<OldKeyword> oldKeywords = OldKeyword.computeOldKeywords(
- isUnread, isFlagged, isAnswered, isDraft, isForwarded);
+ Optional<OldKeyword> oldKeywords = oldKeyworkBuilder.computeOldKeyword();
Preconditions.checkArgument(!(mayBeKeywords.isPresent() && oldKeywords.isPresent()), "Does not support keyword and is* at the same time");
return new UpdateMessagePatch(mailboxIds, mayBeKeywords, oldKeywords, ImmutableList.copyOf(validationResult));
http://git-wip-us.apache.org/repos/asf/james-project/blob/0e6082eb/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 3d28be6..e703098 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
@@ -38,60 +38,66 @@ public class OldKeywordTest {
@Test
public void computeOldKeywordsShouldReturnEmptyWhenAllEmpty() {
- Optional<Boolean> isUnread = Optional.empty();
- Optional<Boolean> isFlagged = Optional.empty();
- Optional<Boolean> isAnswered = Optional.empty();
- Optional<Boolean> isDraft = Optional.empty();
- Optional<Boolean> isForwarded = Optional.empty();
- Optional<OldKeyword> testee = OldKeyword.computeOldKeywords(isUnread, isFlagged, isAnswered, isDraft, isForwarded);
+ Optional<OldKeyword> testee = OldKeyword.builder()
+ .isUnread(Optional.empty())
+ .isFlagged(Optional.empty())
+ .isAnswered(Optional.empty())
+ .isDraft(Optional.empty())
+ .isForwarded(Optional.empty())
+ .computeOldKeyword();
assertThat(testee).isEmpty();
}
@Test
public void applyStateShouldSetFlaggedOnlyWhenIsFlagged() {
- Optional<Boolean> isUnread = Optional.empty();
- Optional<Boolean> isFlagged = Optional.of(true);
- Optional<Boolean> isAnswered = Optional.empty();
- Optional<Boolean> isDraft = Optional.empty();
- Optional<Boolean> isForwarded = Optional.empty();
- Optional<OldKeyword> testee = OldKeyword.computeOldKeywords(isUnread, isFlagged, isAnswered, isDraft, isForwarded);
+ 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().applyToState(new Flags())).isEqualTo(new Flags(Flag.FLAGGED));
}
@Test
public void applyStateShouldRemoveFlaggedWhenEmptyIsFlaggedOnFlaggedMessage() {
- Optional<Boolean> isUnread = Optional.empty();
- Optional<Boolean> isFlagged = Optional.of(false);
- Optional<Boolean> isAnswered = Optional.empty();
- Optional<Boolean> isDraft = Optional.empty();
- Optional<Boolean> isForwarded = Optional.empty();
- Optional<OldKeyword> testee = OldKeyword.computeOldKeywords(isUnread, isFlagged, isAnswered, isDraft, isForwarded);
-
+ 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().applyToState(new Flags(Flag.FLAGGED))).isEqualTo(new Flags());
}
+
@Test
public void applyStateShouldReturnUnreadFlagWhenUnreadSetOnSeenMessage() {
- Optional<Boolean> isUnread = Optional.of(true);
- Optional<Boolean> isFlagged = Optional.empty();
- Optional<Boolean> isAnswered = Optional.empty();
- Optional<Boolean> isDraft = Optional.empty();
- Optional<Boolean> isForwarded = Optional.empty();
- Optional<OldKeyword> testee = OldKeyword.computeOldKeywords(isUnread, isFlagged, isAnswered, isDraft, isForwarded);
+ 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().applyToState(new Flags(Flag.SEEN))).isEqualTo(new Flags());
}
@Test
public void applyStateShouldReturnSeenWhenPatchSetsSeenOnSeenMessage() {
- Optional<Boolean> isUnread = Optional.of(false);
- Optional<Boolean> isFlagged = Optional.empty();
- Optional<Boolean> isAnswered = Optional.empty();
- Optional<Boolean> isDraft = Optional.empty();
- Optional<Boolean> isForwarded = Optional.empty();
- Optional<OldKeyword> testee = OldKeyword.computeOldKeywords(isUnread, isFlagged, isAnswered, isDraft, isForwarded);
+ 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().applyToState(new Flags(Flag.SEEN))).isEqualTo(new Flags(Flag.SEEN));
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[03/11] james-project git commit: JAMES-2257 Correct JMAP integration
tests
Posted by bt...@apache.org.
JAMES-2257 Correct JMAP integration tests
Allow reseting draft at the same time of other flags using is\* properties
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9d2f6561
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9d2f6561
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9d2f6561
Branch: refs/heads/master
Commit: 9d2f656168ab095efb5d39923826b564e4f3d959
Parents: fb047aa
Author: benwa <bt...@linagora.com>
Authored: Tue Dec 12 10:48:17 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Fri Dec 15 14:00:36 2017 +0700
----------------------------------------------------------------------
.../integration/SetMessagesMethodTest.java | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/9d2f6561/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
index 196fb6a..2083038 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
@@ -5192,8 +5192,9 @@ public abstract class SetMessagesMethodTest {
.body(ARGUMENTS + ".list[0].isForwarded", equalTo(true));
}
+ @Ignore("JAMES-2257 isDraft is rejected during message creation")
@Test
- public void setMessagesShouldReturnErrorWhenTryingToChangeDraftFlagAmongOthers() {
+ public void setMessagesShouldNotReturnAnErrorWhenTryingToChangeDraftFlagAmongOthers() {
String messageCreationId = "creationId1337";
String fromAddress = USERNAME;
String requestBody = "[" +
@@ -5248,11 +5249,15 @@ public abstract class SetMessagesMethodTest {
.when()
.post("/jmap")
.then()
- .statusCode(400);
+ .statusCode(200)
+ .body(ARGUMENTS + ".updated", hasSize(1))
+ .body(ARGUMENTS + ".updated", contains(messageId));
+
}
+ @Ignore("JAMES-2257 isDraft is rejected during message creation")
@Test
- public void setMessagesShouldNotModifyTheMessageWhenTryingToChangeDraftFlagAmongOthers() {
+ public void setMessagesShouldModifyTheMessageWhenTryingToChangeDraftFlagAmongOthers() {
String messageCreationId = "creationId1337";
String fromAddress = USERNAME;
String requestBody = "[" +
@@ -5315,10 +5320,10 @@ public abstract class SetMessagesMethodTest {
.log().ifValidationFails()
.body(NAME, equalTo("messages"))
.body(ARGUMENTS + ".list", hasSize(1))
- .body(ARGUMENTS + ".list[0].isUnread", equalTo(true))
- .body(ARGUMENTS + ".list[0].isFlagged", equalTo(true))
- .body(ARGUMENTS + ".list[0].isAnswered", equalTo(true))
- .body(ARGUMENTS + ".list[0].isDraft", equalTo(true))
+ .body(ARGUMENTS + ".list[0].isUnread", equalTo(false))
+ .body(ARGUMENTS + ".list[0].isFlagged", equalTo(false))
+ .body(ARGUMENTS + ".list[0].isAnswered", equalTo(false))
+ .body(ARGUMENTS + ".list[0].isDraft", equalTo(false))
.body(ARGUMENTS + ".list[0].isForwarded", equalTo(true));
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[07/11] james-project git commit: JAMES-2257 OldKeyword as Keywords
Posted by bt...@apache.org.
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 <bt...@linagora.com>
Authored: Tue Dec 12 08:51:41 2017 +0700
Committer: benwa <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[06/11] james-project git commit: JAMES-2257 OldKeywords builder
empty arguments are redundant
Posted by bt...@apache.org.
JAMES-2257 OldKeywords builder empty arguments are redundant
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9d3bbbd3
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9d3bbbd3
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9d3bbbd3
Branch: refs/heads/master
Commit: 9d3bbbd313a90352037fa7041e4869c5284b3b0a
Parents: 71a6b1b
Author: benwa <bt...@linagora.com>
Authored: Tue Dec 12 16:29:59 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Fri Dec 15 14:03:32 2017 +0700
----------------------------------------------------------------------
.../apache/james/jmap/model/OldKeywordTest.java | 69 --------------------
1 file changed, 69 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/9d3bbbd3/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 46bdce4..7ef8625 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
@@ -40,11 +40,7 @@ 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())
@@ -54,11 +50,7 @@ public class OldKeywordTest {
@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())
@@ -69,10 +61,6 @@ public class OldKeywordTest {
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())
@@ -83,10 +71,6 @@ public class OldKeywordTest {
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();
@@ -97,11 +81,7 @@ public class OldKeywordTest {
@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())
@@ -111,11 +91,7 @@ public class OldKeywordTest {
@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())
@@ -125,11 +101,7 @@ public class OldKeywordTest {
@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())
@@ -139,11 +111,7 @@ public class OldKeywordTest {
@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())
@@ -153,10 +121,6 @@ public class OldKeywordTest {
@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();
@@ -167,10 +131,6 @@ public class OldKeywordTest {
@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();
@@ -181,11 +141,6 @@ public class OldKeywordTest {
@Test
public void computeOldKeywordsShouldReturnEmptyWhenAllEmpty() {
Optional<OldKeyword> testee = OldKeyword.builder()
- .isUnread(Optional.empty())
- .isFlagged(Optional.empty())
- .isAnswered(Optional.empty())
- .isDraft(Optional.empty())
- .isForwarded(Optional.empty())
.computeOldKeyword();
assertThat(testee).isEmpty();
@@ -194,11 +149,7 @@ public class OldKeywordTest {
@Test
public void applyStateShouldSetFlaggedOnlyWhenIsFlagged() {
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().applyToState(new Flags())).isEqualTo(new Flags(Flag.FLAGGED));
@@ -207,11 +158,7 @@ public class OldKeywordTest {
@Test
public void applyStateShouldRemoveFlaggedWhenEmptyIsFlaggedOnFlaggedMessage() {
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().applyToState(new Flags(Flag.FLAGGED))).isEqualTo(new Flags());
@@ -222,10 +169,6 @@ public class OldKeywordTest {
public void applyStateShouldReturnUnreadFlagWhenUnreadSetOnSeenMessage() {
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().applyToState(new Flags(Flag.SEEN))).isEqualTo(new Flags());
@@ -235,10 +178,6 @@ public class OldKeywordTest {
public void applyStateShouldReturnSeenWhenPatchSetsSeenOnSeenMessage() {
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().applyToState(new Flags(Flag.SEEN))).isEqualTo(new Flags(Flag.SEEN));
@@ -248,10 +187,6 @@ public class OldKeywordTest {
public void applyStateShouldPreserveRecentFlag() {
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().applyToState(new Flags(Flag.RECENT)))
@@ -262,10 +197,6 @@ public class OldKeywordTest {
public void applyStateShouldPreserveDeletedFlag() {
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().applyToState(new Flags(Flag.DELETED)))
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[10/11] james-project git commit: JAMES-2257 Remove now useless
OldKeywords::asFlags
Posted by bt...@apache.org.
JAMES-2257 Remove now useless OldKeywords::asFlags
We rely on Keywords::asFlags instead.
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/8ef14e2d
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/8ef14e2d
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/8ef14e2d
Branch: refs/heads/master
Commit: 8ef14e2d1e36aca43d82745d3efb4f30555732f5
Parents: bf9d789
Author: benwa <bt...@linagora.com>
Authored: Tue Dec 12 08:56:13 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Fri Dec 15 14:03:32 2017 +0700
----------------------------------------------------------------------
.../james/jmap/methods/MessageAppender.java | 8 ++++---
.../methods/SetMessagesCreationProcessor.java | 12 +++++------
.../org/apache/james/jmap/model/OldKeyword.java | 22 --------------------
3 files changed, 10 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ef14e2d/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/MessageAppender.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/MessageAppender.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/MessageAppender.java
index 7bb2edc..dd3e7e8 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/MessageAppender.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/MessageAppender.java
@@ -107,9 +107,11 @@ public class MessageAppender {
private Flags getFlags(CreationMessage message) {
return message.getOldKeyword()
- .map(OldKeyword::asFlags)
- .orElseGet(() -> keywordsOrDefault(message)
- .asFlags());
+ .map(OldKeyword::asKeywords)
+ .map(Optional::of)
+ .orElse(message.getKeywords())
+ .orElse(Keywords.DEFAULT_VALUE)
+ .asFlags();
}
private Keywords keywordsOrDefault(CreationMessage message) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ef14e2d/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesCreationProcessor.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesCreationProcessor.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesCreationProcessor.java
index 00e4c1c..21a52c0 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesCreationProcessor.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesCreationProcessor.java
@@ -45,6 +45,7 @@ import org.apache.james.jmap.model.MessageFactory;
import org.apache.james.jmap.model.MessageFactory.MetaDataWithContent;
import org.apache.james.jmap.model.MessageProperties;
import org.apache.james.jmap.model.MessageProperties.MessageProperty;
+import org.apache.james.jmap.model.OldKeyword;
import org.apache.james.jmap.model.SetError;
import org.apache.james.jmap.model.SetMessagesError;
import org.apache.james.jmap.model.SetMessagesRequest;
@@ -238,13 +239,10 @@ public class SetMessagesCreationProcessor implements SetMessagesProcessor {
private Boolean isDraft(CreationMessage creationMessage) {
- if (creationMessage.getOldKeyword().isPresent()) {
- return creationMessage.getOldKeyword().get()
- .isDraft()
- .orElse(false);
- }
- return creationMessage
- .getKeywords()
+ return creationMessage.getOldKeyword()
+ .map(OldKeyword::asKeywords)
+ .map(Optional::of)
+ .orElse(creationMessage.getKeywords())
.map(keywords -> keywords.contains(Keyword.DRAFT))
.orElse(false);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8ef14e2d/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 019d7aa..f205bb9 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
@@ -163,28 +163,6 @@ public class OldKeyword {
return newStateFlags;
}
- public Flags asFlags() {
- Flags newStateFlags = new Flags();
-
- if (isFlagged().orElse(false)) {
- newStateFlags.add(Flags.Flag.FLAGGED);
- }
- if (isAnswered().orElse(false)) {
- newStateFlags.add(Flags.Flag.ANSWERED);
- }
- if (isDraft().orElse(false)) {
- newStateFlags.add(Flags.Flag.DRAFT);
- }
- if (isForwarded().orElse(false)) {
- newStateFlags.add(new Flags("$Forwarded"));
- }
- boolean shouldMessageBeMarkSeen = isUnread().map(b -> !b).orElse(false);
- if (shouldMessageBeMarkSeen) {
- newStateFlags.add(Flags.Flag.SEEN);
- }
- return newStateFlags;
- }
-
public Keywords asKeywords() {
return Keywords.factory()
.fromSet(StreamUtils
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[09/11] james-project git commit: JAMES-2257 Centralize OldKeyword
knowledge
Posted by bt...@apache.org.
JAMES-2257 Centralize OldKeyword knowledge
We just need to explicitly handle OldKeywords in two points: during updates and during message creations. We should ensure that a single class in each process encapsulate this knowledge and don't leak
it.
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/71a6b1b1
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/71a6b1b1
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/71a6b1b1
Branch: refs/heads/master
Commit: 71a6b1b1ab70c71773cfe9df65402d832961460e
Parents: 4357889
Author: benwa <bt...@linagora.com>
Authored: Tue Dec 12 09:07:10 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Fri Dec 15 14:03:32 2017 +0700
----------------------------------------------------------------------
.../james/jmap/methods/MessageAppender.java | 16 ++-------
.../methods/SetMessagesUpdateProcessor.java | 24 ++------------
.../james/jmap/model/CreationMessage.java | 35 ++++++++++----------
.../james/jmap/model/UpdateMessagePatch.java | 16 +++------
.../apache/james/jmap/model/OldKeywordTest.java | 13 +++++++-
.../jmap/model/UpdateMessagePatchTest.java | 33 ++++++++++++++++++
6 files changed, 72 insertions(+), 65 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/71a6b1b1/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/MessageAppender.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/MessageAppender.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/MessageAppender.java
index dd3e7e8..c74f59d 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/MessageAppender.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/MessageAppender.java
@@ -30,9 +30,7 @@ import javax.mail.util.SharedByteArrayInputStream;
import org.apache.james.jmap.methods.ValueWithId.CreationMessageEntry;
import org.apache.james.jmap.model.Attachment;
import org.apache.james.jmap.model.CreationMessage;
-import org.apache.james.jmap.model.Keywords;
import org.apache.james.jmap.model.MessageFactory;
-import org.apache.james.jmap.model.OldKeyword;
import org.apache.james.mailbox.AttachmentManager;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession;
@@ -89,7 +87,7 @@ public class MessageAppender {
return MessageFactory.MetaDataWithContent.builder()
.uid(message.getUid())
- .keywords(keywordsOrDefault(createdEntry.getValue()))
+ .keywords(createdEntry.getValue().getKeywords())
.internalDate(internalDate.toInstant())
.sharedContent(content)
.size(messageContent.length)
@@ -106,17 +104,7 @@ public class MessageAppender {
}
private Flags getFlags(CreationMessage message) {
- return message.getOldKeyword()
- .map(OldKeyword::asKeywords)
- .map(Optional::of)
- .orElse(message.getKeywords())
- .orElse(Keywords.DEFAULT_VALUE)
- .asFlags();
- }
-
- private Keywords keywordsOrDefault(CreationMessage message) {
- return message.getKeywords()
- .orElse(Keywords.DEFAULT_VALUE);
+ return message.getKeywords().asFlags();
}
private ImmutableList<MessageAttachment> getMessageAttachments(MailboxSession session, ImmutableList<Attachment> attachments) throws MailboxException {
http://git-wip-us.apache.org/repos/asf/james-project/blob/71a6b1b1/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java
index 3fd703b..02ae2d2 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java
@@ -40,7 +40,6 @@ import org.apache.james.core.MailAddress;
import org.apache.james.jmap.exceptions.DraftMessageMailboxUpdateException;
import org.apache.james.jmap.exceptions.InvalidOutboxMoveException;
import org.apache.james.jmap.model.MessageProperties;
-import org.apache.james.jmap.model.OldKeyword;
import org.apache.james.jmap.model.SetError;
import org.apache.james.jmap.model.SetMessagesRequest;
import org.apache.james.jmap.model.SetMessagesResponse;
@@ -216,13 +215,6 @@ public class SetMessagesUpdateProcessor implements SetMessagesProcessor {
.orElse(previousMailboxes);
}
- private List<Flags> flagsFromOldKeyword(List<MessageResult> messagesToBeUpdated, OldKeyword oldKeyword) {
- return messagesToBeUpdated.stream()
- .map(MessageResult::getFlags)
- .map(oldKeyword::applyToState)
- .collect(Guavate.toImmutableList());
- }
-
private List<MailboxId> mailboxIdFor(Role role, MailboxSession session) throws MailboxException {
return systemMailboxesProvider.getMailboxByRole(role, session)
.map(MessageManager::getId)
@@ -260,7 +252,9 @@ public class SetMessagesUpdateProcessor implements SetMessagesProcessor {
private Stream<MailboxException> updateFlags(MessageId messageId, UpdateMessagePatch updateMessagePatch, MailboxSession mailboxSession, MessageResult messageResult) {
try {
if (!updateMessagePatch.isFlagsIdentity()) {
- messageIdManager.setFlags(newState(messageResult, updateMessagePatch), FlagsUpdateMode.REPLACE, messageId, ImmutableList.of(messageResult.getMailboxId()), mailboxSession);
+ messageIdManager.setFlags(
+ updateMessagePatch.applyToState(messageResult.getFlags()),
+ FlagsUpdateMode.REPLACE, messageId, ImmutableList.of(messageResult.getMailboxId()), mailboxSession);
}
return Stream.of();
} catch (MailboxException e) {
@@ -268,18 +262,6 @@ public class SetMessagesUpdateProcessor implements SetMessagesProcessor {
}
}
- private Flags newState(MessageResult messageResult, UpdateMessagePatch updateMessagePatch) {
- return updateMessagePatch.getOldKeyword()
- .map(oldKeyword -> firstFlagsFromOldKeyword(ImmutableList.of(messageResult), oldKeyword))
- .orElse(updateMessagePatch.applyToState(messageResult.getFlags()));
- }
-
- private Flags firstFlagsFromOldKeyword(List<MessageResult> messagesToBeUpdated, OldKeyword oldKeyword) {
- return flagsFromOldKeyword(messagesToBeUpdated, oldKeyword).stream()
- .findFirst()
- .orElse(null);
- }
-
private void setInMailboxes(MessageId messageId, UpdateMessagePatch updateMessagePatch, MailboxSession mailboxSession) throws MailboxException {
Optional<List<String>> serializedMailboxIds = updateMessagePatch.getMailboxIds();
if (serializedMailboxIds.isPresent()) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/71a6b1b1/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
index 6c7f170..fb45422 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
@@ -34,6 +34,7 @@ import javax.mail.internet.InternetAddress;
import org.apache.james.jmap.methods.ValidationResult;
import org.apache.james.jmap.model.MessageProperties.MessageProperty;
import org.apache.james.mailbox.MessageManager;
+import org.apache.james.util.OptionalUtils;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
@@ -220,10 +221,9 @@ public class CreationMessage {
Optional<Keywords> maybeKeywords = creationKeywords();
Optional<OldKeyword> oldKeywords = oldKeywordBuilder.computeOldKeyword();
- Preconditions.checkArgument(!(maybeKeywords.isPresent() && oldKeywords.isPresent()), "Does not support keyword and is* at the same time");
return new CreationMessage(mailboxIds, Optional.ofNullable(inReplyToMessageId), headers.build(), from,
to.build(), cc.build(), bcc.build(), replyTo.build(), subject, date, Optional.ofNullable(textBody), Optional.ofNullable(htmlBody),
- attachments, attachedMessages, maybeKeywords, oldKeywords);
+ attachments, attachedMessages, computeKeywords(maybeKeywords, oldKeywords));
}
private Optional<Keywords> creationKeywords() {
@@ -232,6 +232,14 @@ public class CreationMessage {
.fromMap(map));
}
+ public Keywords computeKeywords(Optional<Keywords> keywords, Optional<OldKeyword> oldKeywords) {
+ Preconditions.checkArgument(!(keywords.isPresent() && oldKeywords.isPresent()), "Does not support keyword and is* at the same time");
+ return OptionalUtils
+ .or(keywords,
+ oldKeywords.map(OldKeyword::asKeywords))
+ .orElse(Keywords.DEFAULT_VALUE);
+ }
+
}
private final ImmutableList<String> mailboxIds;
@@ -248,13 +256,12 @@ public class CreationMessage {
private final Optional<String> htmlBody;
private final ImmutableList<Attachment> attachments;
private final ImmutableMap<BlobId, SubMessage> attachedMessages;
- private final Optional<Keywords> keywords;
- private final Optional<OldKeyword> oldKeyword;
+ private final Keywords keywords;
@VisibleForTesting
CreationMessage(ImmutableList<String> mailboxIds, Optional<String> inReplyToMessageId, ImmutableMap<String, String> headers, Optional<DraftEmailer> from,
ImmutableList<DraftEmailer> to, ImmutableList<DraftEmailer> cc, ImmutableList<DraftEmailer> bcc, ImmutableList<DraftEmailer> replyTo, String subject, ZonedDateTime date, Optional<String> textBody, Optional<String> htmlBody, ImmutableList<Attachment> attachments,
- ImmutableMap<BlobId, SubMessage> attachedMessages, Optional<Keywords> keywords, Optional<OldKeyword> oldKeyword) {
+ ImmutableMap<BlobId, SubMessage> attachedMessages, Keywords keywords) {
this.mailboxIds = mailboxIds;
this.inReplyToMessageId = inReplyToMessageId;
this.headers = headers;
@@ -270,7 +277,10 @@ public class CreationMessage {
this.attachments = attachments;
this.attachedMessages = attachedMessages;
this.keywords = keywords;
- this.oldKeyword = oldKeyword;
+ }
+
+ public Keywords getKeywords() {
+ return keywords;
}
public ImmutableList<String> getMailboxIds() {
@@ -334,18 +344,7 @@ public class CreationMessage {
}
public boolean isDraft() {
- return oldKeyword
- .map(OldKeyword::isDraft)
- .orElse(keywords.map(keywords -> keywords.contains(Keyword.DRAFT)))
- .orElse(false);
- }
-
- public Optional<Keywords> getKeywords() {
- return keywords;
- }
-
- public Optional<OldKeyword> getOldKeyword() {
- return oldKeyword;
+ return keywords.contains(Keyword.DRAFT);
}
public List<ValidationResult> validate() {
http://git-wip-us.apache.org/repos/asf/james-project/blob/71a6b1b1/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java
index 830181b..34878c6 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java
@@ -135,14 +135,6 @@ public class UpdateMessagePatch {
return mailboxIds;
}
- public Optional<Keywords> getKeywords() {
- return keywords;
- }
-
- public Optional<OldKeyword> getOldKeyword() {
- return oldKeywords;
- }
-
public boolean isFlagsIdentity() {
return !oldKeywords.isPresent() && !keywords.isPresent();
}
@@ -156,8 +148,10 @@ public class UpdateMessagePatch {
}
public Flags applyToState(Flags currentFlags) {
- return keywords
- .map(keyword -> keyword.asFlagsWithRecentAndDeletedFrom(currentFlags))
- .orElse(currentFlags);
+ return oldKeywords
+ .map(oldKeyword -> oldKeyword.applyToState(currentFlags))
+ .orElse(keywords
+ .map(keyword -> keyword.asFlagsWithRecentAndDeletedFrom(currentFlags))
+ .orElse(currentFlags));
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/71a6b1b1/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 bcc079f..46bdce4 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
@@ -259,7 +259,7 @@ public class OldKeywordTest {
}
@Test
- public void applyStateShouldDeletedFlag() {
+ public void applyStateShouldPreserveDeletedFlag() {
Optional<OldKeyword> testee = OldKeyword.builder()
.isUnread(Optional.of(false))
.isFlagged(Optional.empty())
@@ -271,4 +271,15 @@ public class OldKeywordTest {
assertThat(testee.get().applyToState(new Flags(Flag.DELETED)))
.isEqualTo(new FlagsBuilder().add(Flag.DELETED, Flag.SEEN).build());
}
+
+ @Test
+ public void applyStateShouldPreserveCustomFlag() {
+ Optional<OldKeyword> testee = OldKeyword.builder()
+ .isUnread(Optional.of(false))
+ .computeOldKeyword();
+
+ String customFlag = "custom";
+ assertThat(testee.get().applyToState(new Flags(customFlag)))
+ .isEqualTo(new FlagsBuilder().add(Flag.SEEN).add(customFlag).build());
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/james-project/blob/71a6b1b1/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/UpdateMessagePatchTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/UpdateMessagePatchTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/UpdateMessagePatchTest.java
index 5b8c4a1..faf7f53 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/UpdateMessagePatchTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/UpdateMessagePatchTest.java
@@ -47,6 +47,39 @@ public class UpdateMessagePatchTest {
}
@Test
+ public void applyToStateShouldNotResetSystemFlagsWhenUsingOldKeywords() {
+ UpdateMessagePatch testee = UpdateMessagePatch.builder()
+ .isAnswered(true)
+ .build();
+
+ Flags isSeen = new Flags(Flags.Flag.SEEN);
+ assertThat(testee.applyToState(isSeen).getSystemFlags())
+ .containsExactly(Flags.Flag.ANSWERED, Flags.Flag.SEEN);
+ }
+
+ @Test
+ public void applyToStateShouldNotModifySpecifiedOldKeywordsWhenAlreadySet() {
+ UpdateMessagePatch testee = UpdateMessagePatch.builder()
+ .isAnswered(true)
+ .build();
+
+ Flags isSeen = new Flags(Flags.Flag.ANSWERED);
+ assertThat(testee.applyToState(isSeen).getSystemFlags())
+ .containsExactly(Flags.Flag.ANSWERED);
+ }
+
+ @Test
+ public void applyToStateShouldResetSpecifiedOldKeywords() {
+ UpdateMessagePatch testee = UpdateMessagePatch.builder()
+ .isAnswered(false)
+ .build();
+
+ Flags isSeen = new Flags(Flags.Flag.ANSWERED);
+ assertThat(testee.applyToState(isSeen).getSystemFlags())
+ .containsExactly();
+ }
+
+ @Test
public void applyStateShouldReturnNewFlagsWhenKeywords() {
ImmutableMap<String, Boolean> keywords = ImmutableMap.of(
"$Answered", true,
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[11/11] james-project git commit: JAMES-2257 isDraft should be a
responsibility of CreationMessage
Posted by bt...@apache.org.
JAMES-2257 isDraft should be a responsibility of CreationMessage
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/2f5f9f8c
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/2f5f9f8c
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/2f5f9f8c
Branch: refs/heads/master
Commit: 2f5f9f8c93f473b10d2ec506ea3a0f24c2b0e55f
Parents: 8ef14e2
Author: benwa <bt...@linagora.com>
Authored: Tue Dec 12 09:03:41 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Fri Dec 15 14:03:32 2017 +0700
----------------------------------------------------------------------
.../methods/SetMessagesCreationProcessor.java | 14 +----
.../james/jmap/model/CreationMessage.java | 7 +++
.../james/jmap/model/CreationMessageTest.java | 65 ++++++++++++++++++++
3 files changed, 73 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/2f5f9f8c/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesCreationProcessor.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesCreationProcessor.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesCreationProcessor.java
index 21a52c0..2f510f8 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesCreationProcessor.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesCreationProcessor.java
@@ -39,13 +39,11 @@ import org.apache.james.jmap.methods.ValueWithId.MessageWithId;
import org.apache.james.jmap.model.CreationMessage;
import org.apache.james.jmap.model.CreationMessage.DraftEmailer;
import org.apache.james.jmap.model.Envelope;
-import org.apache.james.jmap.model.Keyword;
import org.apache.james.jmap.model.Message;
import org.apache.james.jmap.model.MessageFactory;
import org.apache.james.jmap.model.MessageFactory.MetaDataWithContent;
import org.apache.james.jmap.model.MessageProperties;
import org.apache.james.jmap.model.MessageProperties.MessageProperty;
-import org.apache.james.jmap.model.OldKeyword;
import org.apache.james.jmap.model.SetError;
import org.apache.james.jmap.model.SetMessagesError;
import org.apache.james.jmap.model.SetMessagesRequest;
@@ -202,7 +200,7 @@ public class SetMessagesCreationProcessor implements SetMessagesProcessor {
private void performCreate(CreationMessageEntry entry, Builder responseBuilder, MailboxSession session) throws MailboxException, InvalidMailboxForCreationException, MessagingException, AttachmentsNotFoundException {
if (isAppendToMailboxWithRole(Role.OUTBOX, entry.getValue(), session)) {
sendMailViaOutbox(entry, responseBuilder, session);
- } else if (isDraft(entry.getValue())) {
+ } else if (entry.getValue().isDraft()) {
assertNoOutbox(entry, session);
saveDraft(entry, responseBuilder, session);
} else {
@@ -237,16 +235,6 @@ public class SetMessagesCreationProcessor implements SetMessagesProcessor {
responseBuilder.created(created.getCreationId(), created.getValue());
}
-
- private Boolean isDraft(CreationMessage creationMessage) {
- return creationMessage.getOldKeyword()
- .map(OldKeyword::asKeywords)
- .map(Optional::of)
- .orElse(creationMessage.getKeywords())
- .map(keywords -> keywords.contains(Keyword.DRAFT))
- .orElse(false);
- }
-
private void validateArguments(CreationMessageEntry entry, MailboxSession session) throws MailboxInvalidMessageCreationException, AttachmentsNotFoundException, MailboxException {
CreationMessage message = entry.getValue();
if (!message.isValid()) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/2f5f9f8c/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
index 39840e5..6c7f170 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
@@ -333,6 +333,13 @@ public class CreationMessage {
return validate().isEmpty();
}
+ public boolean isDraft() {
+ return oldKeyword
+ .map(OldKeyword::isDraft)
+ .orElse(keywords.map(keywords -> keywords.contains(Keyword.DRAFT)))
+ .orElse(false);
+ }
+
public Optional<Keywords> getKeywords() {
return keywords;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/2f5f9f8c/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/CreationMessageTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/CreationMessageTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/CreationMessageTest.java
index d31e0a1..ebc2660 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/CreationMessageTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/CreationMessageTest.java
@@ -159,4 +159,69 @@ public class CreationMessageTest {
assertThat(message.getMailboxIds()).containsExactly(mailboxId);
}
+
+ @Test
+ public void isDraftShouldBeFalseWhenNoKeywordsSpecified() {
+ String mailboxId = "123";
+ CreationMessage message = CreationMessage.builder()
+ .mailboxId(mailboxId)
+ .build();
+
+ assertThat(message.isDraft()).isFalse();
+ }
+
+ @Test
+ public void isDraftShouldBeTrueWhenOldKeywordDraft() {
+ String mailboxId = "123";
+ CreationMessage message = CreationMessage.builder()
+ .mailboxId(mailboxId)
+ .isDraft(Optional.of(true))
+ .build();
+
+ assertThat(message.isDraft()).isTrue();
+ }
+
+ @Test
+ public void isDraftShouldBeFalseWhenOldKeywordNonDraft() {
+ String mailboxId = "123";
+ CreationMessage message = CreationMessage.builder()
+ .mailboxId(mailboxId)
+ .isAnswered(Optional.of(true))
+ .build();
+
+ assertThat(message.isDraft()).isFalse();
+ }
+
+ @Test
+ public void isDraftShouldBeFalseWhenEmptyKeywords() {
+ String mailboxId = "123";
+ CreationMessage message = CreationMessage.builder()
+ .keywords(ImmutableMap.of())
+ .mailboxId(mailboxId)
+ .build();
+
+ assertThat(message.isDraft()).isFalse();
+ }
+
+ @Test
+ public void isDraftShouldBeFalseWhenKeywordsDoesNotContainsDraft() {
+ String mailboxId = "123";
+ CreationMessage message = CreationMessage.builder()
+ .keywords(ImmutableMap.of(Keyword.ANSWERED.getFlagName(), true))
+ .mailboxId(mailboxId)
+ .build();
+
+ assertThat(message.isDraft()).isFalse();
+ }
+
+ @Test
+ public void isDraftShouldBeTrueWhenKeywordsContainsDraft() {
+ String mailboxId = "123";
+ CreationMessage message = CreationMessage.builder()
+ .keywords(ImmutableMap.of(Keyword.DRAFT.getFlagName(), true))
+ .mailboxId(mailboxId)
+ .build();
+
+ assertThat(message.isDraft()).isTrue();
+ }
}
\ 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
[05/11] james-project git commit: JAMES-2257 Allow Message::isDraft
property modification via JMAP
Posted by bt...@apache.org.
JAMES-2257 Allow Message::isDraft property modification via JMAP
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/e9ef4739
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/e9ef4739
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/e9ef4739
Branch: refs/heads/master
Commit: e9ef473946a5f8a13100e18d65d19183adde4124
Parents: 9d2f656
Author: benwa <bt...@linagora.com>
Authored: Mon Dec 11 17:19:32 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Fri Dec 15 14:00:36 2017 +0700
----------------------------------------------------------------------
.../integration/SetMessagesMethodTest.java | 2 --
.../cucumber/SetMessagesMethodStepdefs.java | 21 ++++++++++++
.../test/resources/cucumber/SetMessages.feature | 5 +++
.../james/jmap/model/CreationMessage.java | 9 ++----
.../org/apache/james/jmap/model/OldKeyword.java | 10 +++++-
.../james/jmap/model/UpdateMessagePatch.java | 17 +++++-----
.../apache/james/jmap/model/OldKeywordTest.java | 34 +++++++++++++-------
7 files changed, 68 insertions(+), 30 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/e9ef4739/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
index 2083038..4b40022 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
@@ -5192,7 +5192,6 @@ public abstract class SetMessagesMethodTest {
.body(ARGUMENTS + ".list[0].isForwarded", equalTo(true));
}
- @Ignore("JAMES-2257 isDraft is rejected during message creation")
@Test
public void setMessagesShouldNotReturnAnErrorWhenTryingToChangeDraftFlagAmongOthers() {
String messageCreationId = "creationId1337";
@@ -5255,7 +5254,6 @@ public abstract class SetMessagesMethodTest {
}
- @Ignore("JAMES-2257 isDraft is rejected during message creation")
@Test
public void setMessagesShouldModifyTheMessageWhenTryingToChangeDraftFlagAmongOthers() {
String messageCreationId = "creationId1337";
http://git-wip-us.apache.org/repos/asf/james-project/blob/e9ef4739/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/SetMessagesMethodStepdefs.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/SetMessagesMethodStepdefs.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/SetMessagesMethodStepdefs.java
index ffa9981..be925cb 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/SetMessagesMethodStepdefs.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/SetMessagesMethodStepdefs.java
@@ -199,6 +199,27 @@ public class SetMessagesMethodStepdefs {
});
}
+ @When("^\"([^\"]*)\" marks the message \"([^\"]*)\" as draft")
+ public void draft(String username, String message) throws Throwable {
+ userStepdefs.execWithUser(username, () -> {
+ MessageId messageId = messageIdStepdefs.getMessageId(message);
+
+ httpClient.post("[" +
+ " [" +
+ " \"setMessages\"," +
+ " {" +
+ " \"update\": { \"" + messageId.serialize() + "\" : {" +
+ " \"isDraft\": true" +
+ " }}" +
+ " }," +
+ " \"#0\"" +
+ " ]" +
+ "]");
+ mainStepdefs.awaitMethod.run();
+ });
+ }
+
+
@When("^\"([^\"]*)\" destroys message \"([^\"]*)\"$")
public void destroyMessage(String username, String message) {
MessageId messageId = messageIdStepdefs.getMessageId(message);
http://git-wip-us.apache.org/repos/asf/james-project/blob/e9ef4739/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/SetMessages.feature
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/SetMessages.feature b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/SetMessages.feature
index ffe6eec..36a1cf9 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/SetMessages.feature
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/SetMessages.feature
@@ -98,6 +98,11 @@ Feature: SetMessages method
When "bob@domain.tld" moves "mBob" to user mailbox "Drafts"
Then message "mBob" is updated
+ Scenario: A user can update $Draft keyword using isDraft property
+ Given "bob@domain.tld" has a mailbox "Drafts"
+ When "bob@domain.tld" marks the message "mBob" as draft
+ Then message "mBob" is updated
+
Scenario: A user can copy draft out of draft mailbox
Given "bob@domain.tld" has a mailbox "Drafts"
When "bob@domain.tld" copies "mBob" from mailbox "mailbox" to mailbox "Drafts"
http://git-wip-us.apache.org/repos/asf/james-project/blob/e9ef4739/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
index 377fce9..625f42d 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
@@ -221,7 +221,8 @@ public class CreationMessage {
}
Optional<Keywords> maybeKeywords = creationKeywords();
- Optional<OldKeyword> oldKeywords = getOldKeywords();
+ Optional<OldKeyword> oldKeywords = OldKeyword.computeOldKeywords(
+ isUnread, isFlagged, isAnswered, isDraft, isForwarded);
Preconditions.checkArgument(!(maybeKeywords.isPresent() && oldKeywords.isPresent()), "Does not support keyword and is* at the same time");
return new CreationMessage(mailboxIds, Optional.ofNullable(inReplyToMessageId), headers.build(), from,
to.build(), cc.build(), bcc.build(), replyTo.build(), subject, date, Optional.ofNullable(textBody), Optional.ofNullable(htmlBody),
@@ -234,12 +235,6 @@ public class CreationMessage {
.fromMap(map));
}
- private Optional<OldKeyword> getOldKeywords() {
- if (isAnswered.isPresent() || isFlagged.isPresent() || isUnread.isPresent() || isDraft.isPresent() || isForwarded.isPresent()) {
- return Optional.of(new OldKeyword(isUnread, isFlagged, isAnswered, isDraft, isForwarded));
- }
- return Optional.empty();
- }
}
private final ImmutableList<String> mailboxIds;
http://git-wip-us.apache.org/repos/asf/james-project/blob/e9ef4739/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 7620873..b240b54 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
@@ -28,6 +28,14 @@ import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
public class OldKeyword {
+ public static Optional<OldKeyword> computeOldKeywords(Optional<Boolean> isUnread, Optional<Boolean> isFlagged, Optional<Boolean> isAnswered,
+ Optional<Boolean> isDraft, Optional<Boolean> isForwarded) {
+ if (isAnswered.isPresent() || isFlagged.isPresent() || isUnread.isPresent() || isForwarded.isPresent() || isDraft.isPresent()) {
+ return Optional.of(new OldKeyword(isUnread, isFlagged, isAnswered, isDraft, isForwarded));
+ }
+ return Optional.empty();
+ }
+
private final Optional<Boolean> isUnread;
private final Optional<Boolean> isFlagged;
private final Optional<Boolean> isAnswered;
@@ -43,7 +51,7 @@ public class OldKeyword {
this.isForwarded = Optional.of(isForwarded);
}
- public OldKeyword(Optional<Boolean> isUnread, Optional<Boolean> isFlagged, Optional<Boolean> isAnswered,
+ private OldKeyword(Optional<Boolean> isUnread, Optional<Boolean> isFlagged, Optional<Boolean> isAnswered,
Optional<Boolean> isDraft, Optional<Boolean> isForwarded) {
this.isUnread = isUnread;
this.isFlagged = isFlagged;
http://git-wip-us.apache.org/repos/asf/james-project/blob/e9ef4739/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java
index e735778..19671a9 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java
@@ -51,6 +51,7 @@ public class UpdateMessagePatch {
private Optional<Boolean> isUnread = Optional.empty();
private Optional<Boolean> isAnswered = Optional.empty();
private Optional<Boolean> isForwarded = Optional.empty();
+ private Optional<Boolean> isDraft = Optional.empty();
private Optional<Map<String, Boolean>> keywords = Optional.empty();
private Set<ValidationResult> validationResult = Sets.newHashSet();
@@ -79,6 +80,11 @@ public class UpdateMessagePatch {
return this;
}
+ public Builder isDraft(Boolean isAnswered) {
+ this.isDraft = Optional.of(isAnswered);
+ return this;
+ }
+
public Builder isForwarded(Boolean isForwarded) {
this.isForwarded = Optional.of(isForwarded);
return this;
@@ -98,7 +104,8 @@ public class UpdateMessagePatch {
}
Optional<Keywords> mayBeKeywords = creationKeywords();
- Optional<OldKeyword> oldKeywords = getOldKeywords();
+ Optional<OldKeyword> oldKeywords = OldKeyword.computeOldKeywords(
+ isUnread, isFlagged, isAnswered, isDraft, isForwarded);
Preconditions.checkArgument(!(mayBeKeywords.isPresent() && oldKeywords.isPresent()), "Does not support keyword and is* at the same time");
return new UpdateMessagePatch(mailboxIds, mayBeKeywords, oldKeywords, ImmutableList.copyOf(validationResult));
@@ -110,14 +117,6 @@ public class UpdateMessagePatch {
.fromMap(map));
}
- private Optional<OldKeyword> getOldKeywords() {
- if (isAnswered.isPresent() || isFlagged.isPresent() || isUnread.isPresent() || isForwarded.isPresent()) {
- Optional<Boolean> isDraft = Optional.empty();
- return Optional.of(new OldKeyword(isUnread, isFlagged, isAnswered, isDraft, isForwarded));
- }
- return Optional.empty();
- }
-
}
private final Optional<List<String>> mailboxIds;
http://git-wip-us.apache.org/repos/asf/james-project/blob/e9ef4739/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 46db6b8..3d28be6 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,15 +37,27 @@ public class OldKeywordTest {
}
@Test
+ public void computeOldKeywordsShouldReturnEmptyWhenAllEmpty() {
+ Optional<Boolean> isUnread = Optional.empty();
+ Optional<Boolean> isFlagged = Optional.empty();
+ Optional<Boolean> isAnswered = Optional.empty();
+ Optional<Boolean> isDraft = Optional.empty();
+ Optional<Boolean> isForwarded = Optional.empty();
+ Optional<OldKeyword> testee = OldKeyword.computeOldKeywords(isUnread, isFlagged, isAnswered, isDraft, isForwarded);
+
+ assertThat(testee).isEmpty();
+ }
+
+ @Test
public void applyStateShouldSetFlaggedOnlyWhenIsFlagged() {
Optional<Boolean> isUnread = Optional.empty();
Optional<Boolean> isFlagged = Optional.of(true);
Optional<Boolean> isAnswered = Optional.empty();
Optional<Boolean> isDraft = Optional.empty();
Optional<Boolean> isForwarded = Optional.empty();
- OldKeyword testee = new OldKeyword(isUnread, isFlagged, isAnswered, isDraft, isForwarded);
-
- assertThat(testee.applyToState(new Flags())).isEqualTo(new Flags(Flag.FLAGGED));
+ Optional<OldKeyword> testee = OldKeyword.computeOldKeywords(isUnread, isFlagged, isAnswered, isDraft, isForwarded);
+
+ assertThat(testee.get().applyToState(new Flags())).isEqualTo(new Flags(Flag.FLAGGED));
}
@Test
@@ -55,9 +67,9 @@ public class OldKeywordTest {
Optional<Boolean> isAnswered = Optional.empty();
Optional<Boolean> isDraft = Optional.empty();
Optional<Boolean> isForwarded = Optional.empty();
- OldKeyword testee = new OldKeyword(isUnread, isFlagged, isAnswered, isDraft, isForwarded);
+ Optional<OldKeyword> testee = OldKeyword.computeOldKeywords(isUnread, isFlagged, isAnswered, isDraft, isForwarded);
- assertThat(testee.applyToState(new Flags(Flag.FLAGGED))).isEqualTo(new Flags());
+ assertThat(testee.get().applyToState(new Flags(Flag.FLAGGED))).isEqualTo(new Flags());
}
@Test
@@ -67,9 +79,9 @@ public class OldKeywordTest {
Optional<Boolean> isAnswered = Optional.empty();
Optional<Boolean> isDraft = Optional.empty();
Optional<Boolean> isForwarded = Optional.empty();
- OldKeyword testee = new OldKeyword(isUnread, isFlagged, isAnswered, isDraft, isForwarded);
-
- assertThat(testee.applyToState(new Flags(Flag.SEEN))).isEqualTo(new Flags());
+ Optional<OldKeyword> testee = OldKeyword.computeOldKeywords(isUnread, isFlagged, isAnswered, isDraft, isForwarded);
+
+ assertThat(testee.get().applyToState(new Flags(Flag.SEEN))).isEqualTo(new Flags());
}
@Test
@@ -79,8 +91,8 @@ public class OldKeywordTest {
Optional<Boolean> isAnswered = Optional.empty();
Optional<Boolean> isDraft = Optional.empty();
Optional<Boolean> isForwarded = Optional.empty();
- OldKeyword testee = new OldKeyword(isUnread, isFlagged, isAnswered, isDraft, isForwarded);
-
- assertThat(testee.applyToState(new Flags(Flag.SEEN))).isEqualTo(new Flags(Flag.SEEN));
+ Optional<OldKeyword> testee = OldKeyword.computeOldKeywords(isUnread, isFlagged, isAnswered, isDraft, isForwarded);
+
+ assertThat(testee.get().applyToState(new Flags(Flag.SEEN))).isEqualTo(new Flags(Flag.SEEN));
}
}
\ 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
[08/11] james-project git commit: JAMES-2257 Message update using old
keywords reset DELETED and RECENT flag
Posted by bt...@apache.org.
JAMES-2257 Message update using old keywords reset DELETED and RECENT flag
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/43578898
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/43578898
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/43578898
Branch: refs/heads/master
Commit: 4357889865a96fed7ab449fda32587efdb123256
Parents: 2f5f9f8
Author: benwa <bt...@linagora.com>
Authored: Tue Dec 12 10:21:58 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Fri Dec 15 14:03:32 2017 +0700
----------------------------------------------------------------------
.../org/apache/james/jmap/model/OldKeyword.java | 9 ++++++
.../apache/james/jmap/model/OldKeywordTest.java | 29 ++++++++++++++++++++
2 files changed, 38 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/43578898/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 f205bb9..151a8f1 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
@@ -19,6 +19,7 @@
package org.apache.james.jmap.model;
+import java.util.Arrays;
import java.util.Optional;
import javax.mail.Flags;
@@ -160,6 +161,14 @@ public class OldKeyword {
if (shouldMessageBeMarkSeen) {
newStateFlags.add(Flags.Flag.SEEN);
}
+ Arrays.stream(currentFlags.getUserFlags())
+ .forEach(newStateFlags::add);
+ if (currentFlags.contains(Flags.Flag.RECENT)) {
+ newStateFlags.add(Flags.Flag.RECENT);
+ }
+ if (currentFlags.contains(Flags.Flag.DELETED)) {
+ newStateFlags.add(Flags.Flag.DELETED);
+ }
return newStateFlags;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/43578898/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 9b4d8b3..bcc079f 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
@@ -26,6 +26,7 @@ import java.util.Optional;
import javax.mail.Flags;
import javax.mail.Flags.Flag;
+import org.apache.james.mailbox.FlagsBuilder;
import org.junit.Test;
import nl.jqno.equalsverifier.EqualsVerifier;
@@ -242,4 +243,32 @@ public class OldKeywordTest {
assertThat(testee.get().applyToState(new Flags(Flag.SEEN))).isEqualTo(new Flags(Flag.SEEN));
}
+
+ @Test
+ public void applyStateShouldPreserveRecentFlag() {
+ 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().applyToState(new Flags(Flag.RECENT)))
+ .isEqualTo(new FlagsBuilder().add(Flag.RECENT, Flag.SEEN).build());
+ }
+
+ @Test
+ public void applyStateShouldDeletedFlag() {
+ 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().applyToState(new Flags(Flag.DELETED)))
+ .isEqualTo(new FlagsBuilder().add(Flag.DELETED, Flag.SEEN).build());
+ }
}
\ 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
[04/11] james-project git commit: JAMES-2257 Solve an IntelliJ warning
Posted by bt...@apache.org.
JAMES-2257 Solve an IntelliJ warning
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/fb047aae
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/fb047aae
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/fb047aae
Branch: refs/heads/master
Commit: fb047aaed51f0a5cd234e28d0bd0173820ff425d
Parents: 38acce2
Author: benwa <bt...@linagora.com>
Authored: Mon Dec 11 17:20:13 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Fri Dec 15 14:00:36 2017 +0700
----------------------------------------------------------------------
.../java/org/apache/james/jmap/model/CreationMessage.java | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/fb047aae/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
index 1fca744..377fce9 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
@@ -204,11 +204,9 @@ public class CreationMessage {
}
private static Predicate<BlobId> inAttachments(ImmutableList<Attachment> attachments) {
- return (key) -> {
- return attachments.stream()
- .map(Attachment::getBlobId)
- .anyMatch(blobId -> blobId.equals(key));
- };
+ return (key) -> attachments.stream()
+ .map(Attachment::getBlobId)
+ .anyMatch(blobId -> blobId.equals(key));
}
public CreationMessage build() {
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org