JAMES-2213 OldKeyword will support isForwarded now and
- Converting from Keyword to OldKeyword
- Add needed unit testing


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

Branch: refs/heads/master
Commit: b1e43fca9e419630ce2b9125618c1c52632c5db4
Parents: 3aa1732
Author: quynhn <qngu...@linagora.com>
Authored: Mon Nov 13 10:53:14 2017 +0700
Committer: quynhn <qngu...@linagora.com>
Committed: Tue Nov 14 10:27:40 2017 +0700

----------------------------------------------------------------------
 .../james/jmap/model/CreationMessage.java       | 11 ++++-
 .../org/apache/james/jmap/model/Keyword.java    |  1 +
 .../org/apache/james/jmap/model/Keywords.java   |  3 ++
 .../org/apache/james/jmap/model/OldKeyword.java | 18 ++++++--
 .../james/jmap/model/UpdateMessagePatch.java    | 11 ++++-
 .../apache/james/jmap/model/KeywordsTest.java   | 48 +++++++++++++++-----
 6 files changed, 72 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/b1e43fca/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 f67185d..8bcbe4b 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
@@ -27,6 +27,7 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
+
 import javax.mail.internet.AddressException;
 import javax.mail.internet.InternetAddress;
 
@@ -62,6 +63,7 @@ public class CreationMessage {
         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 ImmutableMap.Builder<String, String> headers;
         private Optional<DraftEmailer> from = Optional.empty();
         private final ImmutableList.Builder<DraftEmailer> to;
@@ -121,6 +123,11 @@ public class CreationMessage {
             return this;
         }
 
+        public Builder isForwarded(Optional<Boolean> isForwarded) {
+            this.isForwarded = isForwarded;
+            return this;
+        }
+
         public Builder headers(ImmutableMap<String, String> headers) {
             this.headers.putAll(headers);
             return this;
@@ -225,8 +232,8 @@ public class CreationMessage {
         }
 
         private Optional<OldKeyword> getOldKeywords() {
-            if (isAnswered.isPresent() || isFlagged.isPresent() || 
isUnread.isPresent() || isDraft.isPresent()) {
-                return Optional.of(new OldKeyword(isUnread, isFlagged, 
isAnswered, isDraft));
+            if (isAnswered.isPresent() || isFlagged.isPresent() || 
isUnread.isPresent() || isDraft.isPresent() || isForwarded.isPresent()) {
+                return Optional.of(new OldKeyword(isUnread, isFlagged, 
isAnswered, isDraft, isForwarded));
             }
             return Optional.empty();
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/b1e43fca/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keyword.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keyword.java 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keyword.java
index 72918d0..ca18d2b 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keyword.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keyword.java
@@ -46,6 +46,7 @@ public class Keyword {
     public final static Keyword ANSWERED = new Keyword("$Answered");
     public final static Keyword DELETED = new Keyword("$Deleted");
     public final static Keyword RECENT = new Keyword("$Recent");
+    public final static Keyword FORWARDED = new Keyword("$Forwarded");
     public final static Boolean FLAG_VALUE = true;
 
     private final static ImmutableList<Keyword> NON_EXPOSED_IMAP_KEYWORDS = 
ImmutableList.of(Keyword.RECENT, Keyword.DELETED);

http://git-wip-us.apache.org/repos/asf/james-project/blob/b1e43fca/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 c410cf9..286468f 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
@@ -126,6 +126,9 @@ public class Keywords {
             if (oldKeyword.isUnread().isPresent() && 
oldKeyword.isUnread().get() == false) {
                 builder.add(Keyword.SEEN);
             }
+            if (oldKeyword.isForwarded().orElse(false)) {
+                builder.add(Keyword.FORWARDED);
+            }
             return fromSet(builder.build());
         }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/b1e43fca/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 e2cb2b3..207b275 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
@@ -30,20 +30,24 @@ public class OldKeyword {
     private final Optional<Boolean> isFlagged;
     private final Optional<Boolean> isAnswered;
     private final Optional<Boolean> isDraft;
+    private final Optional<Boolean> isForwarded;
 
     @VisibleForTesting
-    OldKeyword(boolean isUnread, boolean isFlagged, boolean isAnswered, 
boolean isDraft) {
+    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);
     }
 
-    public OldKeyword(Optional<Boolean> isUnread, Optional<Boolean> isFlagged, 
Optional<Boolean> isAnswered, Optional<Boolean> isDraft) {
+    public OldKeyword(Optional<Boolean> isUnread, Optional<Boolean> isFlagged, 
Optional<Boolean> isAnswered,
+                      Optional<Boolean> isDraft, Optional<Boolean> 
isForwarded) {
         this.isUnread = isUnread;
         this.isFlagged = isFlagged;
         this.isAnswered = isAnswered;
         this.isDraft = isDraft;
+        this.isForwarded = isForwarded;
     }
 
     public Optional<Boolean> isUnread() {
@@ -62,6 +66,10 @@ public class OldKeyword {
         return isDraft;
     }
 
+    public Optional<Boolean> isForwarded() {
+        return isForwarded;
+    }
+
     @Override
     public final boolean equals(Object other) {
         if (other instanceof OldKeyword) {
@@ -69,14 +77,15 @@ public class OldKeyword {
             return Objects.equal(isUnread, oldKeyword.isUnread)
                 && Objects.equal(isFlagged, oldKeyword.isFlagged)
                 && Objects.equal(isAnswered, oldKeyword.isAnswered)
-                && Objects.equal(isDraft, oldKeyword.isDraft);
+                && Objects.equal(isDraft, oldKeyword.isDraft)
+                && Objects.equal(isForwarded, oldKeyword.isForwarded);
         }
         return false;
     }
 
     @Override
     public final int hashCode() {
-        return Objects.hashCode(isUnread, isFlagged, isAnswered, isDraft);
+        return Objects.hashCode(isUnread, isFlagged, isAnswered, isDraft, 
isForwarded);
     }
 
     @Override
@@ -86,6 +95,7 @@ public class OldKeyword {
                 .add("isFlagged", isFlagged)
                 .add("isAnswered", isAnswered)
                 .add("isDraft", isDraft)
+                .add("isForwarded", isForwarded)
                 .toString();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/b1e43fca/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 6a46bf8..49a2ac8 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
@@ -23,6 +23,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
+
 import javax.mail.Flags;
 
 import org.apache.james.jmap.methods.ValidationResult;
@@ -48,6 +49,7 @@ public class UpdateMessagePatch {
         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<Map<String, Boolean>> keywords = Optional.empty();
         private Set<ValidationResult> validationResult = Sets.newHashSet();
 
@@ -76,6 +78,11 @@ public class UpdateMessagePatch {
             return this;
         }
 
+        public Builder isForwarded(Boolean isForwarded) {
+            this.isForwarded = Optional.of(isForwarded);
+            return this;
+        }
+
         public Builder validationResult(Set<ValidationResult> 
validationResult) {
             this.validationResult.addAll(validationResult);
             return this;
@@ -97,9 +104,9 @@ public class UpdateMessagePatch {
         }
 
         private Optional<OldKeyword> getOldKeywords() {
-            if (isAnswered.isPresent() || isFlagged.isPresent() || 
isUnread.isPresent()) {
+            if (isAnswered.isPresent() || isFlagged.isPresent() || 
isUnread.isPresent() || isForwarded.isPresent()) {
                 Optional<Boolean> isDraft = Optional.empty();
-                return Optional.of(new OldKeyword(isUnread, isFlagged, 
isAnswered, isDraft));
+                return Optional.of(new OldKeyword(isUnread, isFlagged, 
isAnswered, isDraft, isForwarded));
             }
             return Optional.empty();
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/b1e43fca/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 e992c59..5fa1d56 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
@@ -20,21 +20,23 @@
 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;
 
 import org.apache.james.mailbox.FlagsBuilder;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 
 import nl.jqno.equalsverifier.EqualsVerifier;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
 
 public class KeywordsTest {
     public static final String ANY_KEYWORD = "AnyKeyword";
@@ -87,21 +89,37 @@ public class KeywordsTest {
         Optional<Boolean> isUnread = Optional.empty();
         Optional<Boolean> isFlagged = Optional.empty();
         Optional<Boolean> isDraft = Optional.empty();
+        Optional<Boolean> isForwarded = Optional.empty();
         Keywords keywords = Keywords.factory()
-            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, 
isDraft));
+            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, 
isDraft, isForwarded));
 
         assertThat(keywords.getKeywords())
             .containsOnly(Keyword.ANSWERED);
     }
 
     @Test
+    public void fromOldKeywordsShouldReturnKeywordsFromIsForwarded() throws 
Exception {
+        Optional<Boolean> isAnswered = Optional.empty();
+        Optional<Boolean> isUnread = Optional.empty();
+        Optional<Boolean> isFlagged = Optional.empty();
+        Optional<Boolean> isDraft = Optional.empty();
+        Optional<Boolean> isForwarded = Optional.of(true);
+        Keywords keywords = Keywords.factory()
+            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, 
isDraft, isForwarded));
+
+        assertThat(keywords.getKeywords())
+            .containsOnly(Keyword.FORWARDED);
+    }
+
+    @Test
     public void fromOldKeywordsShouldReturnKeywordsFromIsDraft() throws 
Exception {
         Optional<Boolean> isAnswered = Optional.empty();
         Optional<Boolean> isUnread = Optional.empty();
         Optional<Boolean> isFlagged = Optional.empty();
         Optional<Boolean> isDraft = Optional.of(true);
+        Optional<Boolean> isForwarded = Optional.empty();
         Keywords keywords = Keywords.factory()
-            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, 
isDraft));
+            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, 
isDraft, isForwarded));
 
         assertThat(keywords.getKeywords())
             .containsOnly(Keyword.DRAFT);
@@ -113,8 +131,9 @@ public class KeywordsTest {
         Optional<Boolean> isUnread = Optional.empty();
         Optional<Boolean> isFlagged = Optional.of(true);
         Optional<Boolean> isDraft = Optional.empty();
+        Optional<Boolean> isForwarded = Optional.empty();
         Keywords keywords = Keywords.factory()
-            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, 
isDraft));
+            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, 
isDraft, isForwarded));
 
         assertThat(keywords.getKeywords())
             .containsOnly(Keyword.FLAGGED);
@@ -126,8 +145,9 @@ public class KeywordsTest {
         Optional<Boolean> isUnread = Optional.of(false);
         Optional<Boolean> isFlagged = Optional.empty();
         Optional<Boolean> isDraft = Optional.empty();
+        Optional<Boolean> isForwarded = Optional.empty();
         Keywords keywords = Keywords.factory()
-            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, 
isDraft));
+            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, 
isDraft, isForwarded));
 
         assertThat(keywords.getKeywords())
             .containsOnly(Keyword.SEEN);
@@ -139,8 +159,9 @@ public class KeywordsTest {
         Optional<Boolean> isUnread = Optional.of(true);
         Optional<Boolean> isFlagged = Optional.of(true);
         Optional<Boolean> isDraft = Optional.of(true);
+        Optional<Boolean> isForwarded = Optional.empty();
         Keywords keywords = Keywords.factory()
-            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, 
isDraft));
+            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, 
isDraft, isForwarded));
 
         assertThat(keywords.getKeywords())
             .containsOnly(Keyword.ANSWERED, Keyword.DRAFT, Keyword.FLAGGED);
@@ -166,8 +187,9 @@ public class KeywordsTest {
         Optional<Boolean> isUnread = Optional.of(true);
         Optional<Boolean> isFlagged = Optional.of(true);
         Optional<Boolean> isDraft = Optional.of(true);
+        Optional<Boolean> isForwarded = Optional.of(true);
 
-        OldKeyword oldKeyword = new OldKeyword(isUnread, isFlagged, 
isAnswered, isDraft);
+        OldKeyword oldKeyword = new OldKeyword(isUnread, isFlagged, 
isAnswered, isDraft, isForwarded);
 
         assertThat(Keywords.factory()
             .fromMapOrOldKeyword(Optional.empty(), Optional.of(oldKeyword)))
@@ -181,8 +203,9 @@ public class KeywordsTest {
         Optional<Boolean> isUnread = Optional.of(true);
         Optional<Boolean> isFlagged = Optional.of(true);
         Optional<Boolean> isDraft = Optional.of(true);
+        Optional<Boolean> isForwarded = Optional.of(true);
 
-        OldKeyword oldKeyword = new OldKeyword(isUnread, isFlagged, 
isAnswered, isDraft);
+        OldKeyword oldKeyword = new OldKeyword(isUnread, isFlagged, 
isAnswered, isDraft, isForwarded);
 
         Keywords.factory()
             .fromMapOrOldKeyword(Optional.of(ImmutableMap.of()), 
Optional.of(oldKeyword));
@@ -205,14 +228,15 @@ public class KeywordsTest {
         Optional<Boolean> isUnread = Optional.of(true);
         Optional<Boolean> isFlagged = Optional.of(true);
         Optional<Boolean> isDraft = Optional.of(true);
+        Optional<Boolean> isForwarded = Optional.of(true);
 
-        OldKeyword oldKeyword = new OldKeyword(isUnread, isFlagged, 
isAnswered, isDraft);
+        OldKeyword oldKeyword = new OldKeyword(isUnread, isFlagged, 
isAnswered, isDraft, isForwarded);
 
         Keywords keywords = Keywords.factory()
             .fromMapOrOldKeyword(Optional.empty(), Optional.of(oldKeyword))
             .get();
         assertThat(keywords.getKeywords())
-            .containsOnly(Keyword.ANSWERED, Keyword.DRAFT, Keyword.FLAGGED);
+            .containsOnly(Keyword.ANSWERED, Keyword.DRAFT, Keyword.FLAGGED, 
Keyword.FORWARDED);
     }
 
     @Test


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

Reply via email to