Skip to content

Commit

Permalink
JAMES-2385 SetMessages $Draft check needs to rely on KeywordsCombiner
Browse files Browse the repository at this point in the history
  • Loading branch information
chibenwa committed Apr 27, 2018
1 parent d4160c6 commit c0b89b0
Showing 1 changed file with 11 additions and 6 deletions.
Expand Up @@ -31,19 +31,21 @@
import java.util.stream.Stream; import java.util.stream.Stream;


import javax.inject.Inject; import javax.inject.Inject;
import javax.mail.Flags;
import javax.mail.MessagingException; import javax.mail.MessagingException;
import javax.mail.Session; import javax.mail.Session;
import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMessage;


import org.apache.james.core.MailAddress; import org.apache.james.core.MailAddress;
import org.apache.james.jmap.exceptions.DraftMessageMailboxUpdateException; import org.apache.james.jmap.exceptions.DraftMessageMailboxUpdateException;
import org.apache.james.jmap.exceptions.InvalidOutboxMoveException; 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.MessageProperties;
import org.apache.james.jmap.model.SetError; import org.apache.james.jmap.model.SetError;
import org.apache.james.jmap.model.SetMessagesRequest; import org.apache.james.jmap.model.SetMessagesRequest;
import org.apache.james.jmap.model.SetMessagesResponse; import org.apache.james.jmap.model.SetMessagesResponse;
import org.apache.james.jmap.model.UpdateMessagePatch; 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.jmap.utils.SystemMailboxesProvider;
import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageIdManager; import org.apache.james.mailbox.MessageIdManager;
Expand Down Expand Up @@ -201,15 +203,18 @@ private void assertValidUpdate(List<MessageResult> messagesToBeUpdated, UpdateMe
.collect(Guavate.toImmutableList()); .collect(Guavate.toImmutableList());
List<MailboxId> targetMailboxes = getTargetedMailboxes(previousMailboxes, updateMessagePatch); List<MailboxId> targetMailboxes = getTargetedMailboxes(previousMailboxes, updateMessagePatch);


boolean allMessagesWereDrafts = messagesToBeUpdated.stream() boolean isDraft = messagesToBeUpdated.stream()
.map(MessageResult::getFlags) .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 targetContainsOutbox = targetMailboxes.stream().anyMatch(outboxMailboxes::contains);
boolean targetIsOnlyOutbox = targetMailboxes.stream().allMatch(outboxMailboxes::contains); boolean targetIsOnlyOutbox = targetMailboxes.stream().allMatch(outboxMailboxes::contains);


assertOutboxMoveTargetsOnlyOutBox(targetContainsOutbox, targetIsOnlyOutbox); assertOutboxMoveTargetsOnlyOutBox(targetContainsOutbox, targetIsOnlyOutbox);
assertOutboxMoveOriginallyHasDraftKeywordSet(targetContainsOutbox, allMessagesWereDrafts); assertOutboxMoveOriginallyHasDraftKeywordSet(targetContainsOutbox, isDraft);
} }


private void assertOutboxMoveTargetsOnlyOutBox(boolean targetContainsOutbox, boolean targetIsOnlyOutbox) { private void assertOutboxMoveTargetsOnlyOutBox(boolean targetContainsOutbox, boolean targetIsOnlyOutbox) {
Expand All @@ -218,8 +223,8 @@ private void assertOutboxMoveTargetsOnlyOutBox(boolean targetContainsOutbox, boo
} }
} }


private void assertOutboxMoveOriginallyHasDraftKeywordSet(boolean targetIsOutbox, boolean allMessagesWereDrafts) { private void assertOutboxMoveOriginallyHasDraftKeywordSet(boolean targetIsOutbox, boolean isDraft) {
if (targetIsOutbox && !allMessagesWereDrafts) { if (targetIsOutbox && !isDraft) {
throw new InvalidOutboxMoveException("Only message with `$Draft` keyword can be moved to Outbox"); throw new InvalidOutboxMoveException("Only message with `$Draft` keyword can be moved to Outbox");
} }
} }
Expand Down

0 comments on commit c0b89b0

Please sign in to comment.