@Override public MailboxId getMailboxId() { return message.getMailboxId(); }
private Predicate<MailboxMessage> inMailboxes(Collection<MailboxId> mailboxIds) { return mailboxMessage -> mailboxIds.contains(mailboxMessage.getMailboxId()); }
public IndexableMessage build() { Preconditions.checkNotNull(message.getMailboxId()); Preconditions.checkNotNull(users); Preconditions.checkNotNull(textExtractor); Preconditions.checkNotNull(indexAttachments); Preconditions.checkNotNull(zoneId); Preconditions.checkState(!users.isEmpty()); try { return instanciateIndexedMessage(); } catch (IOException | MimeException e) { throw new RuntimeException(e); } }
private Predicate<MailboxMessage> hasRightsOn(MailboxSession session, Right... rights) { return message -> hasRightsOnMailbox(session, rights).test(message.getMailboxId()); }
public Result reIndex(MailboxMessage mailboxMessage, MailboxSession session) { try { MailboxMapper mailboxMapper = mailboxSessionMapperFactory.getMailboxMapper(session); Mailbox mailbox = mailboxMapper.findMailboxById(mailboxMessage.getMailboxId()); index.add(session, mailbox, mailboxMessage); return Result.COMPLETED; } catch (Exception e) { LOGGER.warn("Failed to re-index {} in {}", messageId, mailboxMessage.getMailboxId(), e); return Result.PARTIAL; } }
@Override public void delete(MessageId messageId, Collection<MailboxId> mailboxIds) { find(ImmutableList.of(messageId), MessageMapper.FetchType.Metadata) .stream() .filter(message -> mailboxIds.contains(message.getMailboxId())) .forEach(Throwing.consumer( message -> messageMapper.delete( mailboxMapper.findMailboxById(message.getMailboxId()), message))); }
@Override public Map<MailboxId, UpdatedFlags> setFlags(MessageId messageId, List<MailboxId> mailboxIds, Flags newState, FlagsUpdateMode updateMode) throws MailboxException { return find(ImmutableList.of(messageId), MessageMapper.FetchType.Metadata) .stream() .filter(message -> mailboxIds.contains(message.getMailboxId())) .map(updateMessage(newState, updateMode)) .collect(Guavate.entriesToMap()); }
@Override public Set<MessageId> accessibleMessages(Collection<MessageId> messageIds, MailboxSession mailboxSession) throws MailboxException { MessageIdMapper messageIdMapper = mailboxSessionMapperFactory.getMessageIdMapper(mailboxSession); List<MailboxMessage> messageList = messageIdMapper.find(messageIds, MessageMapper.FetchType.Metadata); ImmutableSet<MailboxId> allowedMailboxIds = getAllowedMailboxIds(mailboxSession, messageList, Right.Read); return messageList.stream() .filter(message -> allowedMailboxIds.contains(message.getMailboxId())) .map(MailboxMessage::getMessageId) .collect(Guavate.toImmutableSet()); }
@Override public void save(MailboxMessage mailboxMessage) throws MailboxException { Mailbox mailbox = mailboxMapper.findMailboxById(mailboxMessage.getMailboxId()); messageMapper.save(mailbox, mailboxMessage); }
@Override public void copyInMailbox(MailboxMessage mailboxMessage) throws MailboxException { boolean isAlreadyInMailbox = findMailboxes(mailboxMessage.getMessageId()).contains(mailboxMessage.getMailboxId()); if (!isAlreadyInMailbox) { save(mailboxMessage); } }
@Override public void copyInMailbox(MailboxMessage mailboxMessage) throws MailboxException { CassandraId mailboxId = (CassandraId) mailboxMessage.getMailboxId(); mailboxMapper.findMailboxById(mailboxId); ComposedMessageIdWithMetaData composedMessageIdWithMetaData = createMetadataFor(mailboxMessage); CompletableFuture.allOf( imapUidDAO.insert(composedMessageIdWithMetaData), messageIdDAO.insert(composedMessageIdWithMetaData)) .thenCompose(voidValue -> indexTableHandler.updateIndexOnAdd(mailboxMessage, mailboxId)) .join(); }
@Override public void delete(MessageId messageId) { find(ImmutableList.of(messageId), MessageMapper.FetchType.Metadata) .forEach(Throwing.consumer( message -> messageMapper.delete( mailboxMapper.findMailboxById(message.getMailboxId()), message))); }
@Override public MessageMetaData move(Mailbox mailbox, MailboxMessage original) throws MailboxException { InMemoryId originalMailboxId = (InMemoryId) original.getMailboxId(); MessageUid uid = original.getUid(); MessageMetaData messageMetaData = copy(mailbox, original); getMembershipByUidForId(originalMailboxId).remove(uid); return messageMetaData; }
@Override public void save(MailboxMessage mailboxMessage) throws MailboxException { CassandraId mailboxId = (CassandraId) mailboxMessage.getMailboxId(); mailboxMapper.findMailboxById(mailboxId); ComposedMessageIdWithMetaData composedMessageIdWithMetaData = createMetadataFor(mailboxMessage); messageDAO.save(mailboxMessage) .thenCompose(voidValue -> CompletableFuture.allOf( imapUidDAO.insert(composedMessageIdWithMetaData), messageIdDAO.insert(composedMessageIdWithMetaData))) .thenCompose(voidValue -> indexTableHandler.updateIndexOnAdd(mailboxMessage, mailboxId)) .join(); }
@Override public MessageMetaData move(Mailbox mailbox, MailboxMessage original) throws MailboxException { JPAId originalMailboxId = (JPAId) original.getMailboxId(); JPAMailbox originalMailbox = getEntityManager().find(JPAMailbox.class, originalMailboxId.getRawId()); MessageMetaData messageMetaData = copy(mailbox, original); delete(originalMailbox, original); return messageMetaData; }
private static MetadataWithMailboxId toMetadataWithMailboxId(MailboxMessage message) { return new MetadataWithMailboxId(new SimpleMessageMetaData(message), message.getMailboxId()); }
private void save(MailboxSession mailboxSession, MessageIdMapper messageIdMapper, MailboxMessage mailboxMessage) throws MailboxException { long modSeq = mailboxSessionMapperFactory.getModSeqProvider().nextModSeq(mailboxSession, mailboxMessage.getMailboxId()); MessageUid uid = mailboxSessionMapperFactory.getUidProvider().nextUid(mailboxSession, mailboxMessage.getMailboxId()); mailboxMessage.setModSeq(modSeq); mailboxMessage.setUid(uid); messageIdMapper.copyInMailbox(mailboxMessage); }
public UnloadedMessageResult(MailboxMessage message, MailboxException exception) { super(); internalDate = message.getInternalDate(); size = message.getFullContentOctets(); uid = message.getUid(); flags = message.createFlags(); modSeq = message.getModSeq(); mailboxId = message.getMailboxId(); messageId = message.getMessageId(); this.exception = exception; }
private MailboxMessage copyMessage(MailboxMessage message) throws MailboxException { return SimpleMailboxMessage .from(message) .mailboxId(message.getMailboxId()) .uid(message.getUid()) .modseq(message.getModSeq()) .build(); }
private ComposedMessageIdWithMetaData createMetadataFor(MailboxMessage mailboxMessage) { ComposedMessageId composedMessageId = new ComposedMessageId( mailboxMessage.getMailboxId(), mailboxMessage.getMessageId(), mailboxMessage.getUid()); return ComposedMessageIdWithMetaData.builder() .composedMessageId(composedMessageId) .flags(mailboxMessage.createFlags()) .modSeq(mailboxMessage.getModSeq()) .build(); }