This is an automated email from the ASF dual-hosted git repository.

rouazana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 8f867323609eb97b45aac1d74b3dda43e86b832f
Author: Benoit Tellier <[email protected]>
AuthorDate: Fri Jun 5 15:50:03 2020 +0700

    JAMES-3182 Detail filter visit algorithm in method name
---
 .../jmap/draft/methods/GetMessageListMethod.java   |  2 +-
 .../org/apache/james/jmap/draft/model/Filter.java  |  8 ++--
 .../apache/james/jmap/draft/model/FilterTest.java  | 44 ++++++++++++++++------
 3 files changed, 37 insertions(+), 17 deletions(-)

diff --git 
a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetMessageListMethod.java
 
b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetMessageListMethod.java
index 1ff48b2..39dc573 100644
--- 
a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetMessageListMethod.java
+++ 
b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetMessageListMethod.java
@@ -194,7 +194,7 @@ public class GetMessageListMethod implements Method {
     }
 
     private boolean containsMailboxFilters(Filter filter) {
-        return filter.flatten()
+        return filter.breadthFirstVisit()
             .stream()
             .anyMatch(this::hasMailboxClause);
     }
diff --git 
a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Filter.java
 
b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Filter.java
index 4294805..0f26d7c 100644
--- 
a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Filter.java
+++ 
b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Filter.java
@@ -39,12 +39,12 @@ public interface Filter {
 
     String prettyPrint(String indentation);
 
-    default List<FilterCondition> flatten() {
-        return this.flatten(0)
+    default List<FilterCondition> breadthFirstVisit() {
+        return this.breadthFirstVisit(0)
             .collect(Guavate.toImmutableList());
     }
 
-    default Stream<FilterCondition> flatten(int depth) {
+    default Stream<FilterCondition> breadthFirstVisit(int depth) {
         if (depth > MAX_FILTER_DEPTH) {
             throw new TooDeepFilterHierarchyException();
         }
@@ -52,7 +52,7 @@ public interface Filter {
             FilterOperator operator = (FilterOperator) this;
 
             return operator.getConditions().stream()
-                .flatMap(filter -> filter.flatten(depth + 1));
+                .flatMap(filter -> filter.breadthFirstVisit(depth + 1));
         }
         if (this instanceof FilterCondition) {
             return Stream.of((FilterCondition) this);
diff --git 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/FilterTest.java
 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/FilterTest.java
index b988822..79ce078 100644
--- 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/FilterTest.java
+++ 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/FilterTest.java
@@ -101,12 +101,12 @@ public class FilterTest {
             .to("[email protected]")
             .build();
 
-        assertThat(condition.flatten(10))
+        assertThat(condition.breadthFirstVisit(10))
             .containsExactly(condition);
     }
 
     @Test
-    public void flattenShouldUnboxOneLevelOperator() {
+    public void breadthFirstVisitShouldUnboxOneLevelOperator() {
         FilterCondition condition1 = FilterCondition.builder()
             .to("[email protected]")
             .build();
@@ -115,12 +115,12 @@ public class FilterTest {
             .build();
 
         assertThat(FilterOperator.and(condition1, condition2)
-                .flatten())
+                .breadthFirstVisit())
             .containsExactly(condition1, condition2);
     }
 
     @Test
-    public void flattenShouldUnboxTwoLevelOperator() {
+    public void breadthFirstVisitShouldUnboxTwoLevelOperator() {
         FilterCondition condition1 = FilterCondition.builder()
             .to("[email protected]")
             .build();
@@ -132,12 +132,32 @@ public class FilterTest {
             .build();
 
         assertThat(FilterOperator.and(condition1, 
FilterOperator.and(condition2, condition3))
-                .flatten())
-            .containsExactly(condition1, condition2, condition3);
+                .breadthFirstVisit())
+            .containsOnly(condition1, condition2, condition3);
     }
 
     @Test
-    public void flattenShouldAllowUpToLimitNesting() {
+    public void breadthFirstVisitShouldBeBreadthFirst() {
+        FilterCondition condition1 = FilterCondition.builder()
+            .to("[email protected]")
+            .build();
+        FilterCondition condition2 = FilterCondition.builder()
+            .to("[email protected]")
+            .build();
+        FilterCondition condition3 = FilterCondition.builder()
+            .to("[email protected]")
+            .build();
+        FilterCondition condition4 = FilterCondition.builder()
+            .to("[email protected]")
+            .build();
+
+        assertThat(FilterOperator.and(condition1, 
FilterOperator.and(condition2, condition3), condition4)
+                .breadthFirstVisit())
+            .containsOnly(condition1, condition2, condition3, condition4);
+    }
+
+    @Test
+    public void breadthFirstVisitShouldAllowUpToLimitNesting() {
         FilterCondition condition = FilterCondition.builder()
             .to("[email protected]")
             .build();
@@ -146,15 +166,15 @@ public class FilterTest {
             (Filter) condition,
             (filter, i) -> FilterOperator.and(filter),
             (f1, f2) -> {
-                throw new RuntimeException("unsuported combinaison");
+                throw new RuntimeException("unsupported combination");
             });
 
-        assertThat(nestedFilter.flatten())
+        assertThat(nestedFilter.breadthFirstVisit())
             .containsExactly(condition);
     }
 
     @Test
-    public void flattenShouldRejectDeepNesting() {
+    public void breadthFirstVisitShouldRejectDeepNesting() {
         FilterCondition condition = FilterCondition.builder()
             .to("[email protected]")
             .build();
@@ -163,10 +183,10 @@ public class FilterTest {
             (Filter) condition,
             (filter, i) -> FilterOperator.and(filter),
             (f1, f2) -> {
-                throw new RuntimeException("unsuported combinaison");
+                throw new RuntimeException("unsupported combination");
             });
 
-        assertThatThrownBy(nestedFilter::flatten)
+        assertThatThrownBy(nestedFilter::breadthFirstVisit)
             .isInstanceOf(Filter.TooDeepFilterHierarchyException.class);
     }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to