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; }
public ImmutableMailboxMessage from(MailboxId mailboxId, MailboxMessage message) throws MailboxException { try { return new ImmutableMailboxMessage(message.getMessageId(), message.getInternalDate(), IOUtils.toByteArray(message.getBodyContent()), message.getMediaType(), message.getSubType(), message.getBodyOctets(), message.getFullContentOctets(), message.getFullContentOctets() - message.getBodyOctets(), message.getTextualLineCount(), IOUtils.toByteArray(message.getHeaderContent()), ImmutableList.copyOf(message.getProperties()), attachments(message), mailboxId, message.getUid(), message.getModSeq(), message.isAnswered(), message.isDeleted(), message.isDraft(), message.isFlagged(), message.isRecent(), message.isSeen(), message.createFlags().getUserFlags()); } catch (IOException e) { throw new MailboxException("Unable to parse message", e); } }
private boolean messageContains(String value, MailboxMessage message) throws IOException, MimeException { final InputStream input = message.getFullContent(); return isInMessage(value, input, true); }
@Override public void copyInMailbox(MailboxMessage mailboxMessage) throws MailboxException { boolean isAlreadyInMailbox = findMailboxes(mailboxMessage.getMessageId()).contains(mailboxMessage.getMailboxId()); if (!isAlreadyInMailbox) { save(mailboxMessage); } }
@Test public void textShouldContainsFromWhenFrom() throws Exception { MailboxMessage mailboxMessage = mock(MailboxMessage.class); TestId mailboxId = TestId.of(1); when(mailboxMessage.getMailboxId()) .thenReturn(mailboxId); when(mailboxMessage.getMessageId()) .thenReturn(InMemoryMessageId.of(42)); when(mailboxMessage.getFullContent()) .thenReturn(new ByteArrayInputStream("From: First user <user@james.org>\nFrom: Second user <user2@james.org>".getBytes())); when(mailboxMessage.createFlags()) .thenReturn(new Flags()); when(mailboxMessage.getUid()) .thenReturn(MESSAGE_UID); IndexableMessage indexableMessage = IndexableMessage.builder() .message(mailboxMessage) .users(ImmutableList.of(new MockMailboxSession("username").getUser())) .extractor(new DefaultTextExtractor()) .zoneId(ZoneId.of("Europe/Paris")) .indexAttachments(IndexAttachments.NO) .build(); assertThat(indexableMessage.getText()).isEqualTo("Second user user2@james.org First user user@james.org"); }
.collect(Collectors.joining(" ")); long uid = message.getUid().asLong(); String mailboxId = message.getMailboxId().serialize(); long modSeq = message.getModSeq(); long size = message.getFullContentOctets(); String date = DateResolutionFormater.DATE_TIME_FOMATTER.format(getSanitizedInternalDate(message, zoneId)); String mediaType = message.getMediaType(); String subType = message.getSubType(); boolean isAnswered = message.isAnswered(); boolean isDeleted = message.isDeleted(); boolean isDraft = message.isDraft(); boolean isFlagged = message.isFlagged(); boolean isRecent = message.isRecent(); boolean isUnRead = !message.isSeen(); String[] userFlags = message.createFlags().getUserFlags(); List<Property> properties = message.getProperties();
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(); }
private CompletableFuture<Void> addRecentOnSave(CassandraId mailboxId, MailboxMessage message) { if (message.createFlags().contains(Flags.Flag.RECENT)) { return mailboxRecentDAO.addToRecent(mailboxId, message.getUid()); } return CompletableFuture.completedFuture(null); }
this.modSeq = modSeq; this.userFlags = new ArrayList<>(); setFlags(original.createFlags()); this.contentOctets = original.getFullContentOctets(); this.bodyStartOctet = (int) (original.getFullContentOctets() - original.getBodyOctets()); this.internalDate = original.getInternalDate(); PropertyBuilder pBuilder = new PropertyBuilder(original.getProperties()); this.textualLineCount = original.getTextualLineCount(); this.mediaType = original.getMediaType(); this.subType = original.getSubType(); final List<Property> properties = pBuilder.toProperties(); this.properties = new ArrayList<>(properties.size());
public static Builder fromWithoutAttachments(MailboxMessage original) throws MailboxException { PropertyBuilder propertyBuilder = new PropertyBuilder(original.getProperties()); propertyBuilder.setTextualLineCount(original.getTextualLineCount()); return builder() .bodyStartOctet(Ints.checkedCast(original.getFullContentOctets() - original.getBodyOctets())) .content(copyFullContent(original)) .messageId(original.getMessageId()) .internalDate(original.getInternalDate()) .size(original.getFullContentOctets()) .flags(original.createFlags()) .propertyBuilder(propertyBuilder); }
public MessageChangedFlags updateFlags(Mailbox mailbox, FlagsUpdateCalculator flagsUpdateCalculator, Iterator<MailboxMessage> messages) throws MailboxException { ImmutableList.Builder<UpdatedFlags> updatedFlags = ImmutableList.builder(); ImmutableList.Builder<MailboxMessage> changedFlags = ImmutableList.builder(); long modSeq = nextModSeq(mailbox); while (messages.hasNext()) { MailboxMessage member = messages.next(); Flags originalFlags = member.createFlags(); member.setFlags(flagsUpdateCalculator.buildNewFlags(originalFlags)); Flags newFlags = member.createFlags(); if (UpdatedFlags.flagsChanged(originalFlags, newFlags)) { member.setModSeq(modSeq); changedFlags.add(member); } updatedFlags.add(UpdatedFlags.builder() .uid(member.getUid()) .modSeq(member.getModSeq()) .newFlags(newFlags) .oldFlags(originalFlags) .build()); } return new MessageChangedFlags(updatedFlags.build().iterator(), changedFlags.build()); }
@Override public MailboxId getMailboxId() { return message.getMailboxId(); }
private MailboxMessage copyMessage(MailboxMessage message) throws MailboxException { return SimpleMailboxMessage .from(message) .mailboxId(message.getMailboxId()) .uid(message.getUid()) .modseq(message.getModSeq()) .build(); }
@Override public Iterator<SimpleMessageSearchIndex.SearchResult> iterator() { ImmutableList.Builder<MailboxMessage> builder = ImmutableList.builder(); while (messages.hasNext()) { MailboxMessage m = messages.next(); try { if (isMatch(m)) { builder.add(m); } } catch (MailboxException e) { LOGGER.error("Unable to search message {}", m.getUid(), e); } } return builder.build() .stream() .sorted(CombinedComparator.create(query.getSorts())) .map(mailboxMessage -> new SimpleMessageSearchIndex.SearchResult( Optional.of(mailboxMessage.getMessageId()), mailboxMessage.getMailboxId(), mailboxMessage.getUid())) .iterator(); }
@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; }
/** * @see org.apache.james.mailbox.store.mail.AbstractMessageMapper#save(Mailbox, * MailboxMessage) */ protected MessageMetaData save(Mailbox mailbox, MailboxMessage message) throws MailboxException { try { // We need to reload a "JPA attached" mailbox, because the provide // mailbox is already "JPA detached" // If we don't this, we will get an // org.apache.openjpa.persistence.ArgumentException. JPAId mailboxId = (JPAId) mailbox.getMailboxId(); JPAMailbox currentMailbox = getEntityManager().find(JPAMailbox.class, mailboxId.getRawId()); if (message instanceof AbstractJPAMailboxMessage) { ((AbstractJPAMailboxMessage) message).setMailbox(currentMailbox); getEntityManager().persist(message); return new SimpleMessageMetaData(message); } else { JPAMailboxMessage persistData = new JPAMailboxMessage(currentMailbox, message.getUid(), message.getModSeq(), message); persistData.setFlags(message.createFlags()); getEntityManager().persist(persistData); return new SimpleMessageMetaData(persistData); } } catch (PersistenceException | ArgumentException e) { throw new MailboxException("Save of message " + message + " failed in mailbox " + mailbox, e); } }
private BoundStatement boundWriteStatement(MailboxMessage message, Pair<BlobId, BlobId> pair) { CassandraMessageId messageId = (CassandraMessageId) message.getMessageId(); return insert.bind() .setUUID(MESSAGE_ID, messageId.get()) .setTimestamp(INTERNAL_DATE, message.getInternalDate()) .setInt(BODY_START_OCTET, (int) (message.getHeaderOctets())) .setLong(FULL_CONTENT_OCTETS, message.getFullContentOctets()) .setLong(BODY_OCTECTS, message.getBodyOctets()) .setString(BODY_CONTENT, pair.getRight().asString()) .setString(HEADER_CONTENT, pair.getLeft().asString()) .setLong(TEXTUAL_LINE_COUNT, Optional.ofNullable(message.getTextualLineCount()).orElse(DEFAULT_LONG_VALUE)) .setList(PROPERTIES, buildPropertiesUdt(message)) .setList(ATTACHMENTS, buildAttachmentUdt(message)); }
private Map<MessageUid, MessageMetaData> createMetaData(List<MailboxMessage> uids) { final Map<MessageUid, MessageMetaData> data = new HashMap<>(); for (MailboxMessage m : uids) { data.put(m.getUid(), new SimpleMessageMetaData(m)); } return data; }
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); }
@Override public MessageMetaData save(Mailbox mailbox, MailboxMessage message) throws MailboxException { SimpleMailboxMessage copy = SimpleMailboxMessage.copy(mailbox.getMailboxId(), message); copy.setUid(message.getUid()); copy.setModSeq(message.getModSeq()); getMembershipByUidForMailbox(mailbox).put(message.getUid(), copy); return new SimpleMessageMetaData(message); }