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]

Reply via email to