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/05/23 02:47:39 UTC

[james-project] 10/10: JAMES-3769 Flatten trailing AND in SearchQuery

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 6fed452f7619e41c0d39a560b23fc10bab8f1477
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue May 17 17:36:13 2022 +0700

    JAMES-3769 Flatten trailing AND in SearchQuery
---
 .../org/apache/james/mailbox/model/SearchQuery.java    | 12 ++++++++++++
 .../apache/james/imap/processor/SearchProcessor.java   |  2 +-
 .../james/imap/processor/SearchProcessorTest.java      | 18 +++++++++++++-----
 3 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
index da0082c8dc..c568b7a6a3 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
@@ -752,6 +752,18 @@ public class SearchQuery {
             return this;
         }
 
+        public Builder andCriterion(Criterion criterion) {
+            if (criterion instanceof ConjunctionCriterion) {
+                ConjunctionCriterion conjunctionCriterion = (ConjunctionCriterion) criterion;
+                if (conjunctionCriterion.getType() == Conjunction.AND) {
+                    this.criterias.addAll(conjunctionCriterion.getCriteria());
+                    return this;
+                }
+            }
+            this.criterias.add(criterion);
+            return this;
+        }
+
         public Builder sorts(Sort... sorts) {
             return this.sorts(Arrays.asList(sorts));
         }
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
index 5e930b04bc..ab150f1150 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
@@ -270,7 +270,7 @@ public class SearchProcessor extends AbstractMailboxProcessor<SearchRequest> imp
         if (selected != null) {
             builder.addRecentMessageUids(selected.getRecent());
         }
-        return builder.andCriteria(criterion)
+        return builder.andCriterion(criterion)
             .build();
     }
 
diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/SearchProcessorTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/SearchProcessorTest.java
index a1416f4339..bd5524511b 100644
--- a/protocols/imap/src/test/java/org/apache/james/imap/processor/SearchProcessorTest.java
+++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/SearchProcessorTest.java
@@ -20,8 +20,12 @@
 package org.apache.james.imap.processor;
 
 import static org.apache.james.imap.ImapFixture.TAG;
-import static org.mockito.ArgumentMatchers.*;
-import static org.mockito.Mockito.*;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.same;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import java.util.ArrayList;
 import java.util.Calendar;
@@ -296,8 +300,10 @@ public class SearchProcessorTest {
     @Test
     void testNEW() throws Exception {
         expectsGetSelectedMailbox();
-        check(SearchKey.buildNew(), SearchQuery.and(SearchQuery
-                .flagIsSet(Flag.RECENT), SearchQuery.flagIsUnSet(Flag.SEEN)));
+        check(SearchKey.buildNew(), SearchQuery.builder()
+            .andCriteria(SearchQuery.flagIsSet(Flag.RECENT),
+                SearchQuery.flagIsUnSet(Flag.SEEN))
+            .build());
     }
 
     @Test
@@ -332,7 +338,9 @@ public class SearchProcessorTest {
         criteria.add(SearchQuery.internalDateOn(getDate(DAY, MONTH, YEAR), DateResolution.Day));
         criteria.add(SearchQuery.flagIsUnSet(Flag.RECENT));
         criteria.add(SearchQuery.sizeGreaterThan(SIZE));
-        check(SearchKey.buildAnd(keys), SearchQuery.and(criteria));
+        check(SearchKey.buildAnd(keys), SearchQuery.builder()
+            .andCriteria(criteria)
+            .build());
     }
 
     @Test


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