Repository: james-project
Updated Branches:
  refs/heads/master d4160c62f -> 560fd9051


JAMES-2385 SetMessages $Draft check needs to rely on KeywordsCombiner


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

Branch: refs/heads/master
Commit: c0b89b0f0a47f1ad6df02e374bc1b15a12d76f64
Parents: d4160c6
Author: benwa <[email protected]>
Authored: Tue Apr 24 11:02:48 2018 +0700
Committer: benwa <[email protected]>
Committed: Fri Apr 27 14:23:51 2018 +0700

----------------------------------------------------------------------
 .../jmap/methods/SetMessagesUpdateProcessor.java   | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/c0b89b0f/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 822c387..69b114c 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
@@ -31,7 +31,6 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import javax.inject.Inject;
-import javax.mail.Flags;
 import javax.mail.MessagingException;
 import javax.mail.Session;
 import javax.mail.internet.MimeMessage;
@@ -39,11 +38,14 @@ import javax.mail.internet.MimeMessage;
 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.Keyword;
+import org.apache.james.jmap.model.Keywords;
 import org.apache.james.jmap.model.MessageProperties;
 import org.apache.james.jmap.model.SetError;
 import org.apache.james.jmap.model.SetMessagesRequest;
 import org.apache.james.jmap.model.SetMessagesResponse;
 import org.apache.james.jmap.model.UpdateMessagePatch;
+import org.apache.james.jmap.utils.KeywordsCombiner;
 import org.apache.james.jmap.utils.SystemMailboxesProvider;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageIdManager;
@@ -201,15 +203,18 @@ public class SetMessagesUpdateProcessor implements 
SetMessagesProcessor {
             .collect(Guavate.toImmutableList());
         List<MailboxId> targetMailboxes = 
getTargetedMailboxes(previousMailboxes, updateMessagePatch);
 
-        boolean allMessagesWereDrafts = messagesToBeUpdated.stream()
+        boolean isDraft = messagesToBeUpdated.stream()
             .map(MessageResult::getFlags)
-            .allMatch(flags -> flags.contains(Flags.Flag.DRAFT));
+            .map(Keywords.factory().filterImapNonExposedKeywords()::fromFlags)
+            .reduce(new KeywordsCombiner())
+            .orElse(Keywords.DEFAULT_VALUE)
+            .contains(Keyword.DRAFT);
 
         boolean targetContainsOutbox = 
targetMailboxes.stream().anyMatch(outboxMailboxes::contains);
         boolean targetIsOnlyOutbox = 
targetMailboxes.stream().allMatch(outboxMailboxes::contains);
 
         assertOutboxMoveTargetsOnlyOutBox(targetContainsOutbox, 
targetIsOnlyOutbox);
-        assertOutboxMoveOriginallyHasDraftKeywordSet(targetContainsOutbox, 
allMessagesWereDrafts);
+        assertOutboxMoveOriginallyHasDraftKeywordSet(targetContainsOutbox, 
isDraft);
     }
 
     private void assertOutboxMoveTargetsOnlyOutBox(boolean 
targetContainsOutbox, boolean targetIsOnlyOutbox) {
@@ -218,8 +223,8 @@ public class SetMessagesUpdateProcessor implements 
SetMessagesProcessor {
         }
     }
 
-    private void assertOutboxMoveOriginallyHasDraftKeywordSet(boolean 
targetIsOutbox, boolean allMessagesWereDrafts) {
-        if (targetIsOutbox && !allMessagesWereDrafts) {
+    private void assertOutboxMoveOriginallyHasDraftKeywordSet(boolean 
targetIsOutbox, boolean isDraft) {
+        if (targetIsOutbox && !isDraft) {
             throw new InvalidOutboxMoveException("Only message with `$Draft` 
keyword can be moved to Outbox");
         }
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to