You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2021/07/13 09:17:33 UTC

[james-project] 02/05: JAMES-3516 Refactoring ThreadIdGuessingAlgorithm interface

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 <hq...@linagora.com>
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: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org