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]
