You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2018/04/18 00:36:56 UTC

[04/10] james-project git commit: JAMES-2370 JMAP layer should define `attachmentFileName` filter for GetMessageList

JAMES-2370 JMAP layer should define `attachmentFileName` filter for GetMessageList


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d33bf76d
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d33bf76d
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d33bf76d

Branch: refs/heads/master
Commit: d33bf76d10a9dfea460b705df1d7c47fe91740f5
Parents: 7f0b2f8
Author: benwa <bt...@linagora.com>
Authored: Mon Apr 9 13:10:46 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Wed Apr 18 07:35:07 2018 +0700

----------------------------------------------------------------------
 .../james/jmap/model/FilterCondition.java       | 23 ++++++++++++++++----
 .../james/jmap/utils/FilterToSearchQuery.java   |  4 ++++
 .../james/jmap/model/FilterConditionTest.java   |  4 +++-
 .../jmap/utils/FilterToSearchQueryTest.java     |  9 ++++++++
 4 files changed, 35 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/d33bf76d/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/FilterCondition.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/FilterCondition.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/FilterCondition.java
index f98cec0..f6b89aa 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/FilterCondition.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/FilterCondition.java
@@ -65,12 +65,14 @@ public class FilterCondition implements Filter {
         private Header header;
         private Optional<String> hasKeyword;
         private Optional<String> notKeyword;
+        private Optional<String> attachmentFileName;
 
         private Builder() {
             inMailboxes = Optional.empty();
             notInMailboxes = Optional.empty();
             hasKeyword = Optional.empty();
             notKeyword = Optional.empty();
+            attachmentFileName = Optional.empty();
         }
 
         public Builder inMailboxes(String... inMailboxes) {
@@ -204,6 +206,11 @@ public class FilterCondition implements Filter {
             return this;
         }
 
+        public Builder attachmentFileName(Optional<String> attachmentFileName) {
+            this.attachmentFileName = attachmentFileName;
+            return this;
+        }
+
         public FilterCondition build() {
             Preconditions.checkArgument(!hasKeyword.isPresent() || (new Keyword(hasKeyword.get()) != null), "hasKeyword is not valid");
             Preconditions.checkArgument(!notKeyword.isPresent() || (new Keyword(notKeyword.get()) != null), "notKeyword is not valid");
@@ -211,7 +218,7 @@ public class FilterCondition implements Filter {
                     Optional.ofNullable(isFlagged), Optional.ofNullable(isUnread), Optional.ofNullable(isAnswered), Optional.ofNullable(isDraft), Optional.ofNullable(isForwarded),
                     Optional.ofNullable(hasAttachment),
                     Optional.ofNullable(text), Optional.ofNullable(from), Optional.ofNullable(to), Optional.ofNullable(cc), Optional.ofNullable(bcc), Optional.ofNullable(subject),
-                    Optional.ofNullable(body), Optional.ofNullable(attachments), Optional.ofNullable(header), hasKeyword, notKeyword);
+                    Optional.ofNullable(body), Optional.ofNullable(attachments), Optional.ofNullable(header), hasKeyword, notKeyword, attachmentFileName);
         }
     }
 
@@ -238,12 +245,13 @@ public class FilterCondition implements Filter {
     private final Optional<Header> header;
     private final Optional<String> hasKeyword;
     private final Optional<String> notKeyword;
+    private final Optional<String> attachmentFileName;
 
     @VisibleForTesting FilterCondition(Optional<List<String>> inMailboxes, Optional<List<String>> notInMailboxes, Optional<ZonedDateTime> before, Optional<ZonedDateTime> after, Optional<Number> minSize, Optional<Number> maxSize,
                                        Optional<Boolean> isFlagged, Optional<Boolean> isUnread, Optional<Boolean> isAnswered, Optional<Boolean> isDraft, Optional<Boolean> isForwarded,
                                        Optional<Boolean> hasAttachment,
                                        Optional<String> text, Optional<String> from, Optional<String> to, Optional<String> cc, Optional<String> bcc, Optional<String> subject,
-                                       Optional<String> body, Optional<String> attachments, Optional<Header> header, Optional<String> hasKeyword, Optional<String> notKeyword) {
+                                       Optional<String> body, Optional<String> attachments, Optional<Header> header, Optional<String> hasKeyword, Optional<String> notKeyword, Optional<String> attachmentFileName) {
 
         this.inMailboxes = inMailboxes;
         this.notInMailboxes = notInMailboxes;
@@ -268,6 +276,7 @@ public class FilterCondition implements Filter {
         this.header = header;
         this.hasKeyword = hasKeyword;
         this.notKeyword = notKeyword;
+        this.attachmentFileName = attachmentFileName;
     }
 
     public Optional<List<String>> getInMailboxes() {
@@ -362,6 +371,10 @@ public class FilterCondition implements Filter {
         return notKeyword;
     }
 
+    public Optional<String> getAttachmentFileName() {
+        return attachmentFileName;
+    }
+
     @Override
     public final boolean equals(Object obj) {
         if (obj instanceof FilterCondition) {
@@ -388,7 +401,8 @@ public class FilterCondition implements Filter {
                 && Objects.equals(this.attachments, other.attachments)
                 && Objects.equals(this.header, other.header)
                 && Objects.equals(this.hasKeyword, other.hasKeyword)
-                && Objects.equals(this.notKeyword, other.notKeyword);
+                && Objects.equals(this.notKeyword, other.notKeyword)
+                && Objects.equals(this.attachmentFileName, other.attachmentFileName);
         }
         return false;
     }
@@ -396,7 +410,7 @@ public class FilterCondition implements Filter {
     @Override
     public final int hashCode() {
         return Objects.hash(inMailboxes, notInMailboxes, before, after, minSize, maxSize, isFlagged, isUnread, isAnswered, isDraft, isForwarded, hasAttachment,
-                text, from, to, cc, bcc, subject, body, attachments, header, hasKeyword, notKeyword);
+                text, from, to, cc, bcc, subject, body, attachments, header, hasKeyword, notKeyword, attachmentFileName);
     }
 
     @Override
@@ -425,6 +439,7 @@ public class FilterCondition implements Filter {
         header.ifPresent(x -> helper.add("header", x));
         hasKeyword.ifPresent(x -> helper.add("hasKeyword", x));
         notKeyword.ifPresent(x -> helper.add("notKeyword", x));
+        attachmentFileName.ifPresent(x -> helper.add("attachmentFileName", x));
         return helper.toString();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/d33bf76d/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
index af1abf0..9e47c86 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
@@ -24,6 +24,7 @@ import java.util.Optional;
 
 import javax.mail.Flags.Flag;
 
+import org.apache.commons.lang3.NotImplementedException;
 import org.apache.james.jmap.model.Filter;
 import org.apache.james.jmap.model.FilterCondition;
 import org.apache.james.jmap.model.FilterOperator;
@@ -88,6 +89,9 @@ public class FilterToSearchQuery {
             keywordQuery(notKeyword, false).ifPresent(notKeywordCriterion
                 -> searchQuery.andCriteria(notKeywordCriterion));
         });
+        filter.getAttachmentFileName().ifPresent(attachmentFileName -> {
+            throw new NotImplementedException("`attachmentFileName` criterion is not yet handled by `mailbox-api`");
+        });
 
         return searchQuery;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d33bf76d/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/FilterConditionTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/FilterConditionTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/FilterConditionTest.java
index 73bfcf7..246cf70 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/FilterConditionTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/FilterConditionTest.java
@@ -98,12 +98,13 @@ public class FilterConditionTest {
         Header header = Header.from(ImmutableList.of("name", "value"));
         Optional<String> hasKeyword = Optional.of("$Draft");
         Optional<String> notKeyword = Optional.of("$Flagged");
+        Optional<String> attachmentFileName = Optional.of("file.txt");
 
         FilterCondition expectedFilterCondition = new FilterCondition(Optional.of(ImmutableList.of("1")), Optional.of(ImmutableList.of("2")), Optional.of(before), Optional.of(after),
                 Optional.of(Number.fromLong(minSize)), Optional.of(Number.fromLong(maxSize)),
                 Optional.of(isFlagged), Optional.of(isUnread), Optional.of(isAnswered), Optional.of(isDraft), Optional.of(isForwarded), Optional.of(hasAttachment), Optional.of(text), Optional.of(from),
                 Optional.of(to), Optional.of(cc), Optional.of(bcc), Optional.of(subject), Optional.of(body), Optional.of(attachments), Optional.of(header),
-                hasKeyword, notKeyword);
+                hasKeyword, notKeyword, attachmentFileName);
 
         FilterCondition filterCondition = FilterCondition.builder()
                 .inMailboxes(Optional.of(ImmutableList.of("1")))
@@ -129,6 +130,7 @@ public class FilterConditionTest {
                 .header(header)
                 .hasKeyword(hasKeyword)
                 .notKeyword(notKeyword)
+                .attachmentFileName(attachmentFileName)
                 .build();
 
         assertThat(filterCondition).isEqualToComparingFieldByField(expectedFilterCondition);

http://git-wip-us.apache.org/repos/asf/james-project/blob/d33bf76d/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/FilterToSearchQueryTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/FilterToSearchQueryTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/FilterToSearchQueryTest.java
index bb36e15..693e856 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/FilterToSearchQueryTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/FilterToSearchQueryTest.java
@@ -28,6 +28,7 @@ import java.util.Optional;
 
 import javax.mail.Flags.Flag;
 
+import org.apache.commons.lang3.NotImplementedException;
 import org.apache.james.jmap.model.Filter;
 import org.apache.james.jmap.model.FilterCondition;
 import org.apache.james.jmap.model.FilterOperator;
@@ -540,4 +541,12 @@ public class FilterToSearchQueryTest {
 
         assertThat(searchQuery).isEqualTo(expectedSearchQuery);
     }
+
+    @Test
+    public void attachmentFileNameShouldNotBeImplemented() {
+        assertThatThrownBy(() -> new FilterToSearchQuery().convert(FilterCondition.builder()
+                .attachmentFileName(Optional.of("file.gz"))
+                .build()))
+            .isInstanceOf(NotImplementedException.class);
+    }
 }


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