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 2022/03/22 02:03:44 UTC

[james-project] 15/25: JAMES-3722 Refactor range filtering

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 7a72dca58839552f0f78a23fd7e13d3a01dc0ab1
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Mar 8 15:00:49 2022 +0700

    JAMES-3722 Refactor range filtering
    
    Method extraction and functional style...
---
 .../imap/processor/AbstractSelectionProcessor.java | 29 ++++++++++++++--------
 1 file changed, 19 insertions(+), 10 deletions(-)

diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
index 0fcb04c..dae539c 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
@@ -20,8 +20,10 @@
 package org.apache.james.imap.processor;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.stream.IntStream;
+import java.util.stream.Stream;
 
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.james.events.EventBus;
@@ -278,21 +280,28 @@ abstract class AbstractSelectionProcessor<R extends AbstractMailboxSelectionRequ
             .reduce((t3_1, t3_2) -> t3_2)
             .orElse(MessageUid.MIN_VALUE);
 
-        // Ok now its time to filter out the IdRanges which we are not interested in
-        List<UidRange> filteredUidSet = new ArrayList<>();
-        for (UidRange r : uidSet) {
-            if (r.getLowVal().compareTo(firstKnownUid) < 0) {
-                if (r.getHighVal().compareTo(firstKnownUid) > 0) {
-                    filteredUidSet.add(new UidRange(firstKnownUid, r.getHighVal()));
-                }
+        return filter(uidSet, firstKnownUid);
+    }
+
+    private UidRange[] filter(UidRange[] uidSet, MessageUid lowerBound) {
+        return Arrays.stream(uidSet)
+            .flatMap(range -> filter(range, lowerBound))
+            .collect(ImmutableList.toImmutableList())
+            .toArray(UidRange[]::new);
+    }
+
+    private Stream<UidRange> filter(UidRange range, MessageUid lowerBound) {
+        if (range.getLowVal().compareTo(lowerBound) < 0) {
+            if (range.getHighVal().compareTo(lowerBound) > 0) {
+                return Stream.of(new UidRange(lowerBound, range.getHighVal()));
             } else {
-                filteredUidSet.add(r);
+                return Stream.empty();
             }
+        } else {
+            return Stream.of(range);
         }
-        return filteredUidSet.toArray(UidRange[]::new);
     }
 
-
     private void highestModSeq(Responder responder, MailboxMetaData metaData) {
         final StatusResponse untaggedOk;
         if (metaData.isModSeqPermanent()) {

---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org