This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit bd92024d9c48b818437ecad02a0b8c05b17631a4 Author: quanth <[email protected]> AuthorDate: Mon Jul 5 17:37:58 2021 +0700 JAMES-3516 Refactoring ThreadIdGuessingAlgorithm interface Remove Username, add MailboxSession to guessThreadId method params. Enable guessThreadIdReactive API. --- .../org/apache/james/mailbox/store/MessageStorer.java | 19 ++++++++++++------- .../store/mail/NaiveThreadIdGuessingAlgorithm.java | 6 +++--- .../mailbox/store/mail/ThreadIdGuessingAlgorithm.java | 7 +++++-- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageStorer.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageStorer.java index c543957..aa4b5f6 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageStorer.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageStorer.java @@ -54,6 +54,7 @@ import com.github.fge.lambdas.Throwing; import com.google.common.collect.ImmutableList; import reactor.core.publisher.Mono; +import reactor.util.function.Tuple2; public interface MessageStorer { /** @@ -98,12 +99,15 @@ public interface MessageStorer { Optional<MimeMessageId> inReplyTo = MimeMessageHeadersUtil.parseInReplyTo(headers); Optional<List<MimeMessageId>> references = MimeMessageHeadersUtil.parseReferences(headers); Optional<Subject> subject = MimeMessageHeadersUtil.parseSubject(headers); - ThreadId threadId = threadIdGuessingAlgorithm.guessThreadId(session.getUser(), messageId, mimeMessageId, inReplyTo, references, subject); return mapperFactory.getMessageMapper(session) .executeReactive( storeAttachments(messageId, content, maybeMessage, session) - .flatMap(Throwing.function((List<MessageAttachmentMetadata> attachments) -> { + .zipWith(threadIdGuessingAlgorithm.guessThreadIdReactive(messageId, mimeMessageId, inReplyTo, references, subject, session)) + .flatMap(Throwing.function((Tuple2<List<MessageAttachmentMetadata>, ThreadId> pair) -> { + List<MessageAttachmentMetadata> attachments = pair.getT1(); + ThreadId threadId = pair.getT2(); + MailboxMessage message = messageFactory.createMessage(messageId, threadId, mailbox, internalDate, size, bodyStartOctet, content, flags, propertyBuilder, attachments); return Mono.from(messageMapper.addReactive(mailbox, message)) .map(metadata -> Pair.of(metadata, Optional.of(attachments))); @@ -161,13 +165,14 @@ public interface MessageStorer { Optional<MimeMessageId> inReplyTo = MimeMessageHeadersUtil.parseInReplyTo(headers); Optional<List<MimeMessageId>> references = MimeMessageHeadersUtil.parseReferences(headers); Optional<Subject> subject = MimeMessageHeadersUtil.parseSubject(headers); - ThreadId threadId = threadIdGuessingAlgorithm.guessThreadId(session.getUser(), messageId, mimeMessageId, inReplyTo, references, subject); - - MailboxMessage message = messageFactory.createMessage(messageId, threadId, mailbox, internalDate, size, bodyStartOctet, content, flags, propertyBuilder, ImmutableList.of()); return mapperFactory.getMessageMapper(session) - .executeReactive(Mono.from(messageMapper.addReactive(mailbox, message))) - .map(metadata -> Pair.of(metadata, Optional.empty())); + .executeReactive(threadIdGuessingAlgorithm.guessThreadIdReactive(messageId, mimeMessageId, inReplyTo, references, subject, session) + .flatMap(Throwing.function((ThreadId threadId) -> { + MailboxMessage message = messageFactory.createMessage(messageId, threadId, mailbox, internalDate, size, bodyStartOctet, content, flags, propertyBuilder, ImmutableList.of()); + return Mono.from(messageMapper.addReactive(mailbox, message)) + .map(metadata -> Pair.of(metadata, Optional.empty())); + }))); } } } diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/NaiveThreadIdGuessingAlgorithm.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/NaiveThreadIdGuessingAlgorithm.java index c725c58..b6334ca 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/NaiveThreadIdGuessingAlgorithm.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/NaiveThreadIdGuessingAlgorithm.java @@ -22,7 +22,7 @@ package org.apache.james.mailbox.store.mail; import java.util.List; import java.util.Optional; -import org.apache.james.core.Username; +import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.model.ThreadId; import org.apache.james.mailbox.store.mail.model.MimeMessageId; @@ -32,7 +32,7 @@ import reactor.core.publisher.Mono; public class NaiveThreadIdGuessingAlgorithm implements ThreadIdGuessingAlgorithm { @Override - public ThreadId guessThreadId(Username username, MessageId messageId, Optional<MimeMessageId> thisMimeMessageId, Optional<MimeMessageId> inReplyTo, Optional<List<MimeMessageId>> references, Optional<Subject> subject) { - return ThreadId.fromBaseMessageId(messageId); + public Mono<ThreadId> guessThreadIdReactive(MessageId messageId, Optional<MimeMessageId> thisMimeMessageId, Optional<MimeMessageId> inReplyTo, Optional<List<MimeMessageId>> references, Optional<Subject> subject, MailboxSession session) { + return Mono.just(ThreadId.fromBaseMessageId(messageId)); } } diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/ThreadIdGuessingAlgorithm.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/ThreadIdGuessingAlgorithm.java index 8405fb7..4461fc9 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/ThreadIdGuessingAlgorithm.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/ThreadIdGuessingAlgorithm.java @@ -22,12 +22,15 @@ package org.apache.james.mailbox.store.mail; import java.util.List; import java.util.Optional; -import org.apache.james.core.Username; +import org.apache.james.mailbox.MailboxSession; +import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.model.ThreadId; import org.apache.james.mailbox.store.mail.model.MimeMessageId; import org.apache.james.mailbox.store.mail.model.Subject; +import reactor.core.publisher.Mono; + public interface ThreadIdGuessingAlgorithm { - ThreadId guessThreadId(Username username, MessageId messageId, Optional<MimeMessageId> thisMimeMessageId, Optional<MimeMessageId> inReplyTo, Optional<List<MimeMessageId>> references, Optional<Subject> subject); + Mono<ThreadId> guessThreadIdReactive(MessageId messageId, Optional<MimeMessageId> thisMimeMessageId, Optional<MimeMessageId> inReplyTo, Optional<List<MimeMessageId>> references, Optional<Subject> subject, MailboxSession session) throws MailboxException; } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
