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]
