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 ma...@apache.org on 2017/09/27 08:00:11 UTC

[2/6] james-project git commit: JAMES-2161 Don't throw when failing to parse a flag

JAMES-2161 Don't throw when failing to parse a flag


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

Branch: refs/heads/master
Commit: 036096bb92ffb4896faf8ad4fd8873d71591495d
Parents: 9c5b001
Author: Antoine Duprat <ad...@linagora.com>
Authored: Tue Sep 26 12:33:30 2017 +0200
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Wed Sep 27 08:52:04 2017 +0200

----------------------------------------------------------------------
 .../org/apache/james/jmap/model/Keywords.java   | 16 +++++++-
 .../apache/james/jmap/model/MessageTest.java    | 43 ++++++++++++++++++++
 2 files changed, 58 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/036096bb/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keywords.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keywords.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keywords.java
index 91aff31..ed07982 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keywords.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keywords.java
@@ -25,9 +25,12 @@ import java.util.Optional;
 import java.util.Set;
 import java.util.function.Predicate;
 import java.util.stream.Stream;
+
 import javax.mail.Flags;
 
 import org.apache.james.mailbox.FlagsBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.github.steveash.guavate.Guavate;
 import com.google.common.annotations.VisibleForTesting;
@@ -38,7 +41,9 @@ import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 
 public class Keywords {
+
     public static final Keywords DEFAULT_VALUE = factory().fromSet(ImmutableSet.of());
+    private static final Logger LOGGER = LoggerFactory.getLogger(Keywords.class);
 
     public interface KeywordsValidator {
         void validate(Set<Keyword> keywords);
@@ -121,12 +126,21 @@ public class Keywords {
         public Keywords fromFlags(Flags flags) {
             return fromSet(Stream.concat(
                     Stream.of(flags.getUserFlags())
-                        .map(Keyword::new),
+                        .flatMap(this::asKeyword),
                     Stream.of(flags.getSystemFlags())
                         .map(Keyword::fromFlag))
                 .collect(Guavate.toImmutableSet()));
         }
 
+        private Stream<Keyword> asKeyword(String flagName) {
+            try {
+                return Stream.of(new Keyword(flagName));
+            } catch (IllegalArgumentException e) {
+                LOGGER.warn("Fail to parse {} flag", flagName);
+                return Stream.of();
+            }
+        }
+
         public Optional<Keywords> fromMapOrOldKeyword(Optional<Map<String, Boolean>> mapKeyword, Optional<OldKeyword> oldKeyword) {
             Preconditions.checkArgument(!(mapKeyword.isPresent() && oldKeyword.isPresent()), "Does not support keyword and is* at the same time");
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/036096bb/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java
index d1c0914..2e690ba 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java
@@ -32,6 +32,7 @@ import org.junit.Test;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
 
 public class MessageTest {
 
@@ -262,6 +263,48 @@ public class MessageTest {
     }
 
     @Test
+    public void buildShouldNotThrowWhenNonValidFlags() throws Exception {
+        Message.builder()
+            .id(TestMessageId.of(1))
+            .blobId(BlobId.of("blobId"))
+            .threadId("threadId")
+            .mailboxId(InMemoryId.of(456))
+            .headers(ImmutableMap.of("key", "value"))
+            .subject("subject")
+            .size(1)
+            .date(Instant.now())
+            .preview("preview")
+            .attachments(ImmutableList.of())
+            .flags(FlagsBuilder.builder()
+                    .add("@ert", "t^a", "op§")
+                    .build())
+            .build();
+    }
+
+    @Test
+    public void buildShouldIgnoreNonValidFlag() throws Exception {
+        Message message = Message.builder()
+            .id(TestMessageId.of(1))
+            .blobId(BlobId.of("blobId"))
+            .threadId("threadId")
+            .mailboxId(InMemoryId.of(456))
+            .headers(ImmutableMap.of("key", "value"))
+            .subject("subject")
+            .size(1)
+            .date(Instant.now())
+            .preview("preview")
+            .attachments(ImmutableList.of())
+            .flags(FlagsBuilder.builder()
+                    .add("$Draft", "@ert", "t^a", "op§", "$user_flag")
+                    .build())
+            .build();
+
+        assertThat(message.getKeywords()).containsOnly(
+                Maps.immutableEntry("$Draft", true), 
+                Maps.immutableEntry("$user_flag", true));
+    }
+
+    @Test
     public void hasAttachmentShouldReturnFalseWhenNoAttachment() throws Exception {
         Message message = Message.builder()
             .id(TestMessageId.of(1))


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