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 fb48808e697c4e148d998df36e8efed2bbecb2ab Author: Benoit Tellier <[email protected]> AuthorDate: Fri Nov 13 12:37:26 2020 +0700 JAMES-3440 Configuration examples --- .../cassandra-ldap/destination/conf/listeners.xml | 8 ++++++ .../destination/conf/listeners.xml | 8 ++++++ .../destination/conf/listeners.xml | 8 ++++++ .../guice/cassandra/destination/conf/listeners.xml | 8 ++++++ .../jmap/event/PopulateEmailQueryViewListener.java | 30 +++++++++++++--------- 5 files changed, 50 insertions(+), 12 deletions(-) diff --git a/dockerfiles/run/guice/cassandra-ldap/destination/conf/listeners.xml b/dockerfiles/run/guice/cassandra-ldap/destination/conf/listeners.xml index 8b217db..948cb92 100644 --- a/dockerfiles/run/guice/cassandra-ldap/destination/conf/listeners.xml +++ b/dockerfiles/run/guice/cassandra-ldap/destination/conf/listeners.xml @@ -31,4 +31,12 @@ <preDeletionHook> <class>org.apache.james.vault.DeletedMessageVaultHook</class> </preDeletionHook> + + <!-- Enable to populate JMAP EmailQueryView --> + <!-- + <listener> + <class>org.apache.james.jmap.event.PopulateEmailQueryViewListener</class> + <async>true</async> + </listener> + --> </listeners> \ No newline at end of file diff --git a/dockerfiles/run/guice/cassandra-rabbitmq-ldap/destination/conf/listeners.xml b/dockerfiles/run/guice/cassandra-rabbitmq-ldap/destination/conf/listeners.xml index 8b217db..948cb92 100644 --- a/dockerfiles/run/guice/cassandra-rabbitmq-ldap/destination/conf/listeners.xml +++ b/dockerfiles/run/guice/cassandra-rabbitmq-ldap/destination/conf/listeners.xml @@ -31,4 +31,12 @@ <preDeletionHook> <class>org.apache.james.vault.DeletedMessageVaultHook</class> </preDeletionHook> + + <!-- Enable to populate JMAP EmailQueryView --> + <!-- + <listener> + <class>org.apache.james.jmap.event.PopulateEmailQueryViewListener</class> + <async>true</async> + </listener> + --> </listeners> \ No newline at end of file diff --git a/dockerfiles/run/guice/cassandra-rabbitmq/destination/conf/listeners.xml b/dockerfiles/run/guice/cassandra-rabbitmq/destination/conf/listeners.xml index 8b217db..948cb92 100644 --- a/dockerfiles/run/guice/cassandra-rabbitmq/destination/conf/listeners.xml +++ b/dockerfiles/run/guice/cassandra-rabbitmq/destination/conf/listeners.xml @@ -31,4 +31,12 @@ <preDeletionHook> <class>org.apache.james.vault.DeletedMessageVaultHook</class> </preDeletionHook> + + <!-- Enable to populate JMAP EmailQueryView --> + <!-- + <listener> + <class>org.apache.james.jmap.event.PopulateEmailQueryViewListener</class> + <async>true</async> + </listener> + --> </listeners> \ No newline at end of file diff --git a/dockerfiles/run/guice/cassandra/destination/conf/listeners.xml b/dockerfiles/run/guice/cassandra/destination/conf/listeners.xml index 8b217db..948cb92 100644 --- a/dockerfiles/run/guice/cassandra/destination/conf/listeners.xml +++ b/dockerfiles/run/guice/cassandra/destination/conf/listeners.xml @@ -31,4 +31,12 @@ <preDeletionHook> <class>org.apache.james.vault.DeletedMessageVaultHook</class> </preDeletionHook> + + <!-- Enable to populate JMAP EmailQueryView --> + <!-- + <listener> + <class>org.apache.james.jmap.event.PopulateEmailQueryViewListener</class> + <async>true</async> + </listener> + --> </listeners> \ No newline at end of file diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/event/PopulateEmailQueryViewListener.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/event/PopulateEmailQueryViewListener.java index 0251576..36a59ec 100644 --- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/event/PopulateEmailQueryViewListener.java +++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/event/PopulateEmailQueryViewListener.java @@ -19,6 +19,7 @@ package org.apache.james.jmap.event; +import java.io.IOException; import java.time.ZoneOffset; import java.time.ZonedDateTime; import java.util.Optional; @@ -32,9 +33,11 @@ import org.apache.james.mailbox.SessionProvider; import org.apache.james.mailbox.events.Event; import org.apache.james.mailbox.events.Group; import org.apache.james.mailbox.events.MailboxListener.ReactiveGroupMailboxListener; +import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.FetchGroup; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.model.MessageMetaData; +import org.apache.james.mailbox.model.MessageResult; import org.apache.james.mime4j.dom.Message; import org.apache.james.mime4j.stream.MimeConfig; import org.reactivestreams.Publisher; @@ -90,18 +93,18 @@ public class PopulateEmailQueryViewListener implements ReactiveGroupMailboxListe return Mono.empty(); } - public Publisher<Void> handleMailboxDeletion(MailboxDeletion mailboxDeletion) { + private Publisher<Void> handleMailboxDeletion(MailboxDeletion mailboxDeletion) { return view.delete(mailboxDeletion.getMailboxId()); } - public Publisher<Void> handleExpunged(Expunged expunged) { + private Publisher<Void> handleExpunged(Expunged expunged) { return Flux.fromStream(expunged.getUids().stream() .map(uid -> expunged.getMetaData(uid).getMessageId())) .concatMap(messageId -> view.delete(expunged.getMailboxId(), messageId)) .then(); } - public Mono<Void> handleAdded(Added added) { + private Mono<Void> handleAdded(Added added) { MailboxSession session = sessionProvider.createSystemSession(added.getUsername()); return Flux.fromStream(added.getUids().stream() .map(added::getMetaData)) @@ -109,20 +112,23 @@ public class PopulateEmailQueryViewListener implements ReactiveGroupMailboxListe .then(); } - public Mono<Void> handleAdded(Added added, MessageMetaData messageMetaData, MailboxSession session) { + private Mono<Void> handleAdded(Added added, MessageMetaData messageMetaData, MailboxSession session) { MessageId messageId = messageMetaData.getMessageId(); ZonedDateTime receivedAt = ZonedDateTime.ofInstant(messageMetaData.getInternalDate().toInstant(), ZoneOffset.UTC); - Mono<ZonedDateTime> sentAtMono = Flux.from(messageIdManager.getMessagesReactive(ImmutableList.of(messageId), FetchGroup.HEADERS, session)) + return Flux.from(messageIdManager.getMessagesReactive(ImmutableList.of(messageId), FetchGroup.HEADERS, session)) .next() - .map(Throwing.function(messageResult -> Message.Builder - .of() - .use(MimeConfig.PERMISSIVE) - .parse(messageResult.getFullContent().getInputStream()) - .build())) + .map(Throwing.function(this::parseMessage)) .map(message -> Optional.ofNullable(message.getDate()).orElse(messageMetaData.getInternalDate())) - .map(date -> ZonedDateTime.ofInstant(date.toInstant(), ZoneOffset.UTC)); + .map(date -> ZonedDateTime.ofInstant(date.toInstant(), ZoneOffset.UTC)) + .flatMap(sentAt -> view.save(added.getMailboxId(), sentAt, receivedAt, messageId)); + } - return sentAtMono.flatMap(sentAt -> view.save(added.getMailboxId(), sentAt, receivedAt, messageId)); + private Message parseMessage(MessageResult messageResult) throws IOException, MailboxException { + return Message.Builder + .of() + .use(MimeConfig.PERMISSIVE) + .parse(messageResult.getFullContent().getInputStream()) + .build(); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
