in mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/IndexableMessage.java [107:181]
private Mono<IndexableMessage> instantiateIndexedMessage() throws IOException, MimeException {
String messageId = SearchUtil.getSerializedMessageIdIfSupportedByUnderlyingStorageOrNull(message);
String threadId = SearchUtil.getSerializedThreadIdIfSupportedByUnderlyingStorageOrNull(message);
return new MimePartParser(message, textExtractor).parse()
.asMimePart(textExtractor)
.map(parsingResult -> {
Optional<String> bodyText = parsingResult.locateFirstTextBody();
Optional<String> bodyHtml = parsingResult.locateFirstHtmlBody();
boolean hasAttachment = MessageAttachmentMetadata.hasNonInlinedAttachment(message.getAttachments());
List<MimePart> attachments = setFlattenedAttachments(parsingResult, indexAttachments);
HeaderCollection headerCollection = parsingResult.getHeaderCollection();
ZonedDateTime internalDate = getSanitizedInternalDate(message, zoneId);
List<HeaderCollection.Header> headers = headerCollection.getHeaders();
Subjects subjects = Subjects.from(headerCollection.getSubjectSet());
EMailers from = EMailers.from(headerCollection.getFromAddressSet());
EMailers to = EMailers.from(headerCollection.getToAddressSet());
EMailers cc = EMailers.from(headerCollection.getCcAddressSet());
EMailers bcc = EMailers.from(headerCollection.getBccAddressSet());
String sentDate = DATE_TIME_FORMATTER.format(headerCollection.getSentDate().orElse(internalDate));
Optional<String> saveDate = message.getSaveDate()
.map(date -> DATE_TIME_FORMATTER.format(ZonedDateTime.ofInstant(date.toInstant(), zoneId)));
Optional<String> mimeMessageID = headerCollection.getMessageID();
long uid = message.getUid().asLong();
String mailboxId = message.getMailboxId().serialize();
ModSeq modSeq = message.getModSeq();
long size = message.getFullContentOctets();
String date = DATE_TIME_FORMATTER.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();
return new IndexableMessage(
attachments,
bcc,
bodyHtml,
bodyText,
cc,
date,
from,
hasAttachment,
filterHeadersIfNeeded(headers),
isAnswered,
isDeleted,
isDraft,
isFlagged,
isRecent,
isUnRead,
mailboxId,
mediaType,
messageId,
threadId,
modSeq,
sentDate,
saveDate,
size,
subjects,
subType,
to,
uid,
userFlags,
mimeMessageID);
});
}