This is an automated email from the ASF dual-hosted git repository. rcordier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit bbdd764273f7f006aa2d76779a2b58249c6632e3 Author: Tung Tran <[email protected]> AuthorDate: Thu Apr 6 08:09:22 2023 +0700 MailboxAnnotationListener implement reactive group event listener --- .../store/event/MailboxAnnotationListener.java | 23 ++++++++--------- .../store/event/MailboxAnnotationListenerTest.java | 29 +++++++++++++--------- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java index 87a37baf8b..6385f9caf2 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java @@ -18,8 +18,6 @@ ****************************************************************/ package org.apache.james.mailbox.store.event; -import java.util.List; - import javax.inject.Inject; import org.apache.james.events.Event; @@ -28,12 +26,15 @@ import org.apache.james.events.Group; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.SessionProvider; import org.apache.james.mailbox.events.MailboxEvents.MailboxDeletion; -import org.apache.james.mailbox.model.MailboxAnnotation; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.store.MailboxSessionMapperFactory; import org.apache.james.mailbox.store.mail.AnnotationMapper; +import org.reactivestreams.Publisher; + +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; -public class MailboxAnnotationListener implements EventListener.GroupEventListener { +public class MailboxAnnotationListener implements EventListener.ReactiveGroupEventListener { public static final class MailboxAnnotationListenerGroup extends Group { } @@ -60,20 +61,16 @@ public class MailboxAnnotationListener implements EventListener.GroupEventListen } @Override - public void event(Event event) { + public Publisher<Void> reactiveEvent(Event event) { if (event instanceof MailboxDeletion) { MailboxSession mailboxSession = sessionProvider.createSystemSession(event.getUsername()); AnnotationMapper annotationMapper = mailboxSessionMapperFactory.getAnnotationMapper(mailboxSession); MailboxId mailboxId = ((MailboxDeletion) event).getMailboxId(); - deleteRelatedAnnotations(mailboxId, annotationMapper); - } - } - - private void deleteRelatedAnnotations(MailboxId mailboxId, AnnotationMapper annotationMapper) { - List<MailboxAnnotation> annotations = annotationMapper.getAllAnnotations(mailboxId); - for (MailboxAnnotation annotation : annotations) { - annotationMapper.deleteAnnotation(mailboxId, annotation.getKey()); + return Flux.from(annotationMapper.getAllAnnotationsReactive(mailboxId)) + .flatMap(annotation -> Mono.from(annotationMapper.deleteAnnotationReactive(mailboxId, annotation.getKey()))) + .then(); } + return Mono.empty(); } } diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxAnnotationListenerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxAnnotationListenerTest.java index ede6600038..1c310a5447 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxAnnotationListenerTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxAnnotationListenerTest.java @@ -56,6 +56,9 @@ import org.mockito.MockitoAnnotations; import com.google.common.collect.ImmutableList; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + class MailboxAnnotationListenerTest { static final Username USER = Username.of("user"); static final MailboxPath MAILBOX_PATH = new MailboxPath("namespace", USER, "name"); @@ -116,13 +119,13 @@ class MailboxAnnotationListenerTest { } @Test - void eventShoudlDoNothingIfMailboxDoesNotHaveAnyAnnotation() throws Exception { - when(annotationMapper.getAllAnnotations(any(MailboxId.class))).thenReturn(ImmutableList.<MailboxAnnotation>of()); + void eventShouldDoNothingIfMailboxDoesNotHaveAnyAnnotation() throws Exception { + when(annotationMapper.getAllAnnotationsReactive(any(MailboxId.class))).thenReturn(Flux.fromIterable(List.of())); listener.event(deleteEvent); verify(mailboxSessionMapperFactory).getAnnotationMapper(eq(mailboxSession)); - verify(annotationMapper).getAllAnnotations(eq(mailboxId)); + verify(annotationMapper).getAllAnnotationsReactive(eq(mailboxId)); verifyNoMoreInteractions(mailboxSessionMapperFactory); verifyNoMoreInteractions(annotationMapper); @@ -131,14 +134,15 @@ class MailboxAnnotationListenerTest { @Test void eventShoudlDeleteAllMailboxAnnotation() throws Exception { - when(annotationMapper.getAllAnnotations(eq(mailboxId))).thenReturn(ANNOTATIONS); + when(annotationMapper.getAllAnnotationsReactive(eq(mailboxId))).thenReturn(Flux.fromIterable(ANNOTATIONS)); + when(annotationMapper.deleteAnnotationReactive(eq(mailboxId), any())).thenReturn(Mono.empty()); listener.event(deleteEvent); verify(mailboxSessionMapperFactory).getAnnotationMapper(eq(mailboxSession)); - verify(annotationMapper).getAllAnnotations(eq(mailboxId)); - verify(annotationMapper).deleteAnnotation(eq(mailboxId), eq(PRIVATE_KEY)); - verify(annotationMapper).deleteAnnotation(eq(mailboxId), eq(SHARED_KEY)); + verify(annotationMapper).getAllAnnotationsReactive(eq(mailboxId)); + verify(annotationMapper).deleteAnnotationReactive(eq(mailboxId), eq(PRIVATE_KEY)); + verify(annotationMapper).deleteAnnotationReactive(eq(mailboxId), eq(SHARED_KEY)); verifyNoMoreInteractions(mailboxSessionMapperFactory); verifyNoMoreInteractions(annotationMapper); @@ -146,15 +150,16 @@ class MailboxAnnotationListenerTest { } @Test - void eventShouldPropagateFailure() throws Exception { - when(annotationMapper.getAllAnnotations((eq(mailboxId)))).thenReturn(ANNOTATIONS); - doThrow(new RuntimeException()).when(annotationMapper).deleteAnnotation(eq(mailboxId), eq(PRIVATE_KEY)); + void eventShouldPropagateFailure() { + when(annotationMapper.getAllAnnotationsReactive(eq(mailboxId))).thenReturn(Flux.fromIterable(ANNOTATIONS)); + when(annotationMapper.deleteAnnotationReactive(eq(mailboxId), eq(PRIVATE_KEY))) + .thenReturn(Mono.error(new RuntimeException())); assertThatThrownBy(() -> listener.event(deleteEvent)).isInstanceOf(RuntimeException.class); verify(mailboxSessionMapperFactory).getAnnotationMapper(eq(mailboxSession)); - verify(annotationMapper).getAllAnnotations(eq(mailboxId)); - verify(annotationMapper).deleteAnnotation(eq(mailboxId), eq(PRIVATE_KEY)); + verify(annotationMapper).getAllAnnotationsReactive(eq(mailboxId)); + verify(annotationMapper).deleteAnnotationReactive(eq(mailboxId), eq(PRIVATE_KEY)); verifyNoMoreInteractions(mailboxSessionMapperFactory); verifyNoMoreInteractions(annotationMapper); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
