public boolean isMoveTo(MailboxId mailboxId) { return messageMoves.addedMailboxIds() .contains(mailboxId); }
public boolean isMoveTo(MailboxId mailboxId) { return messageMoves.addedMailboxIds() .contains(mailboxId); }
public Stream<MailboxId> impactedMailboxIds() { return Stream.concat( addedMailboxIds().stream(), removedMailboxIds().stream()); }
private Map<QuotaRoot, Integer> buildMapQuotaRoot(MessageMoves messageMoves, MailboxMapper mailboxMapper) throws MailboxException { Map<QuotaRoot, Integer> messageCountByQuotaRoot = new HashMap<>(); for (MailboxId mailboxId : messageMoves.addedMailboxIds()) { QuotaRoot quotaRoot = retrieveQuotaRoot(mailboxMapper, mailboxId); int currentCount = Optional.ofNullable(messageCountByQuotaRoot.get(quotaRoot)) .orElse(0); messageCountByQuotaRoot.put(quotaRoot, currentCount + 1); } for (MailboxId mailboxId : messageMoves.removedMailboxIds()) { QuotaRoot quotaRoot = retrieveQuotaRoot(mailboxMapper, mailboxId); int currentCount = Optional.ofNullable(messageCountByQuotaRoot.get(quotaRoot)) .orElse(0); messageCountByQuotaRoot.put(quotaRoot, currentCount - 1); } return messageCountByQuotaRoot; }
private void applyMessageMoveNoMailboxChecks(MailboxSession mailboxSession, List<MailboxMessage> currentMailboxMessages, MessageMoves messageMoves) throws MailboxException { MailboxMessage mailboxMessage = currentMailboxMessages.stream().findAny().orElseThrow(() -> new MailboxNotFoundException("can't load message")); validateQuota(messageMoves, mailboxSession, mailboxMessage); addMessageToMailboxes(mailboxMessage, messageMoves.addedMailboxIds(), mailboxSession); removeMessageFromMailboxes(mailboxMessage, messageMoves.removedMailboxIds(), mailboxSession); dispatcher.moved(mailboxSession, messageMoves, ImmutableMap.of(mailboxMessage.getUid(), mailboxMessage)); }
private void assertValidUpdate(List<MessageResult> messagesToBeUpdated, UpdateMessagePatch updateMessagePatch, MailboxSession session) throws MailboxException { List<MailboxId> outboxMailboxes = mailboxIdFor(Role.OUTBOX, session); ImmutableList<MailboxId> previousMailboxes = messagesToBeUpdated.stream() .map(MessageResult::getMailboxId) .collect(Guavate.toImmutableList()); List<MailboxId> targetMailboxes = getTargetedMailboxes(previousMailboxes, updateMessagePatch); boolean isDraft = messagesToBeUpdated.stream() .map(MessageResult::getFlags) .map(Keywords.factory().filterImapNonExposedKeywords()::fromFlags) .reduce(new KeywordsCombiner()) .orElse(Keywords.DEFAULT_VALUE) .contains(Keyword.DRAFT); MessageMoves messageMoves = MessageMoves.builder() .previousMailboxIds(previousMailboxes) .targetMailboxIds(targetMailboxes) .build(); boolean targetContainsOutbox = messageMoves.addedMailboxIds().stream().anyMatch(outboxMailboxes::contains); boolean targetIsOnlyOutbox = targetMailboxes.stream().allMatch(outboxMailboxes::contains); assertOutboxMoveTargetsOnlyOutBox(targetContainsOutbox, targetIsOnlyOutbox); assertOutboxMoveOriginallyHasDraftKeywordSet(targetContainsOutbox, isDraft); }
private void applyMessageMoves(MailboxSession mailboxSession, List<MailboxMessage> currentMailboxMessages, MessageMoves messageMoves) throws MailboxException { assertRightsOnMailboxes(messageMoves.addedMailboxIds(), mailboxSession, Right.Insert); assertRightsOnMailboxes(messageMoves.removedMailboxIds(), mailboxSession, Right.DeleteMessages); applyMessageMoveNoMailboxChecks(mailboxSession, currentMailboxMessages, messageMoves); }