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