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