JAMES-2161 Keyword should rely on factory method

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

Branch: refs/heads/master
Commit: 20a15278c4d9ccf2c0e0b1ada30a009fe07f414d
Parents: 92a4182
Author: Benoit Tellier <[email protected]>
Authored: Fri Nov 23 10:04:03 2018 +0700
Committer: Benoit Tellier <[email protected]>
Committed: Tue Nov 27 09:01:33 2018 +0700

----------------------------------------------------------------------
 .../james/jmap/model/FilterCondition.java       |  4 +-
 .../org/apache/james/jmap/model/Keyword.java    | 47 ++++++++++++--------
 .../org/apache/james/jmap/model/Keywords.java   |  6 +--
 .../james/jmap/utils/FilterToSearchQuery.java   |  2 +-
 .../apache/james/jmap/model/KeywordTest.java    | 40 ++++++++---------
 .../apache/james/jmap/model/KeywordsTest.java   |  2 +-
 .../james/jmap/model/MessageFactoryTest.java    |  2 +-
 .../james/jmap/utils/KeywordsCombinerTest.java  | 10 ++---
 8 files changed, 62 insertions(+), 51 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/20a15278/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 f6b89aa..3d35828 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
@@ -212,8 +212,8 @@ public class FilterCondition implements Filter {
         }
 
         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");
+            Preconditions.checkArgument(!hasKeyword.isPresent() || 
(Keyword.of(hasKeyword.get()) != null), "hasKeyword is not valid");
+            Preconditions.checkArgument(!notKeyword.isPresent() || 
(Keyword.of(notKeyword.get()) != null), "notKeyword is not valid");
             return new FilterCondition(inMailboxes, notInMailboxes, 
Optional.ofNullable(before), Optional.ofNullable(after), 
Optional.ofNullable(minSize), Optional.ofNullable(maxSize),
                     Optional.ofNullable(isFlagged), 
Optional.ofNullable(isUnread), Optional.ofNullable(isAnswered), 
Optional.ofNullable(isDraft), Optional.ofNullable(isForwarded),
                     Optional.ofNullable(hasAttachment),

http://git-wip-us.apache.org/repos/asf/james-project/blob/20a15278/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keyword.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keyword.java 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keyword.java
index 8d0f76c..40b46d2 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keyword.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keyword.java
@@ -28,7 +28,6 @@ import org.apache.james.util.UnicodeSetUtils;
 
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
-import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableBiMap;
 import com.google.common.collect.ImmutableList;
 import com.ibm.icu.text.UnicodeSet;
@@ -43,14 +42,14 @@ public class Keyword {
                 .add('-')
                 .freeze();
 
-    public static final Keyword DRAFT = new Keyword("$Draft");
-    public static final Keyword SEEN = new Keyword("$Seen");
-    public static final Keyword FLAGGED = new Keyword("$Flagged");
-    public static final Keyword ANSWERED = new Keyword("$Answered");
-    public static final Keyword DELETED = new Keyword("$Deleted");
-    public static final Keyword RECENT = new Keyword("$Recent");
-    public static final Keyword FORWARDED = new Keyword("$Forwarded");
-    public static final Boolean FLAG_VALUE = true;
+    public static final Keyword DRAFT = Keyword.of("$Draft");
+    public static final Keyword SEEN = Keyword.of("$Seen");
+    public static final Keyword FLAGGED = Keyword.of("$Flagged");
+    public static final Keyword ANSWERED = Keyword.of("$Answered");
+    public static final Keyword DELETED = Keyword.of("$Deleted");
+    public static final Keyword RECENT = Keyword.of("$Recent");
+    public static final Keyword FORWARDED = Keyword.of("$Forwarded");
+    static final Boolean FLAG_VALUE = true;
 
     private static final ImmutableList<Keyword> NON_EXPOSED_IMAP_KEYWORDS = 
ImmutableList.of(Keyword.RECENT, Keyword.DELETED);
     private static final ImmutableBiMap<Flags.Flag, Keyword> IMAP_SYSTEM_FLAGS 
= ImmutableBiMap.<Flags.Flag, Keyword>builder()
@@ -61,21 +60,27 @@ public class Keyword {
         .put(Flags.Flag.RECENT, RECENT)
         .put(Flags.Flag.DELETED, DELETED)
         .build();
+    public static final String VALIDATION_MESSAGE = "Flagname must not be null 
or empty, must have length form 1-255, " +
+        "must not contain charater with hex from '\\u0000' to '\\u00019' or 
{'(' ')' '{' ']' '%' '*' '\"' '\\'} ";
 
-    private final String flagName;
+    public static Optional<Keyword> parse(String flagName) {
+        if (isValid(flagName)) {
+            return Optional.of(new Keyword(flagName));
+        }
+        return Optional.empty();
+    }
 
-    public static Keyword fromFlag(Flags.Flag flag) {
-        return IMAP_SYSTEM_FLAGS.get(flag);
+
+    public static Keyword of(String flagName) {
+        return parse(flagName)
+            .orElseThrow(() -> new 
IllegalArgumentException(VALIDATION_MESSAGE));
     }
 
-    public Keyword(String flagName) {
-        Preconditions.checkArgument(isValid(flagName),
-                "Flagname must not be null or empty, must have length form 
1-255, " +
-                    "must not contain charater with hex from '\\u0000' to 
'\\u00019' or {'(' ')' '{' ']' '%' '*' '\"' '\\'} ");
-        this.flagName = flagName;
+    public static Keyword fromFlag(Flags.Flag flag) {
+        return IMAP_SYSTEM_FLAGS.get(flag);
     }
 
-    private boolean isValid(String flagName) {
+    private static boolean isValid(String flagName) {
         if (StringUtils.isBlank(flagName)) {
             return false;
         }
@@ -88,6 +93,12 @@ public class Keyword {
         return true;
     }
 
+    private final String flagName;
+
+    public Keyword(String flagName) {
+        this.flagName = flagName;
+    }
+
     public String getFlagName() {
         return flagName;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/20a15278/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 1f100c1..5ef8091 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
@@ -94,7 +94,7 @@ public class Keywords {
 
         public Keywords fromList(List<String> keywords) {
             return fromSet(keywords.stream()
-                    .map(Keyword::new)
+                    .map(Keyword::of)
                     .collect(Guavate.toImmutableSet()));
         }
 
@@ -105,7 +105,7 @@ public class Keywords {
                 .allMatch(keywordValue -> keywordValue), "Keyword must be 
true");
             Set<Keyword> setKeywords = mapKeywords.keySet()
                 .stream()
-                .map(Keyword::new)
+                .map(Keyword::of)
                 .collect(Guavate.toImmutableSet());
 
             return fromSet(setKeywords);
@@ -122,7 +122,7 @@ public class Keywords {
 
         private Stream<Keyword> asKeyword(String flagName) {
             try {
-                return Stream.of(new Keyword(flagName));
+                return Stream.of(Keyword.of(flagName));
             } catch (IllegalArgumentException e) {
                 LOGGER.warn("Fail to parse {} flag", flagName, e);
                 return Stream.of();

http://git-wip-us.apache.org/repos/asf/james-project/blob/20a15278/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 ac5b97e..d3bb696 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
@@ -89,7 +89,7 @@ public class FilterToSearchQuery {
     }
 
     private Optional<Criterion> keywordQuery(String stringKeyword, boolean 
isSet) {
-        Keyword keyword = new Keyword(stringKeyword);
+        Keyword keyword = Keyword.of(stringKeyword);
         if (keyword.isExposedImapKeyword()) {
             return Optional.of(getFlagCriterion(keyword, isSet));
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/20a15278/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/KeywordTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/KeywordTest.java
 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/KeywordTest.java
index a729205..2d1e857 100644
--- 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/KeywordTest.java
+++ 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/KeywordTest.java
@@ -48,19 +48,19 @@ public class KeywordTest {
     @Test
     public void keywordShouldThrowWhenFlagNameLengthLessThanMinLength() throws 
Exception {
         expectedException.expect(IllegalArgumentException.class);
-        new Keyword("");
+        Keyword.of("");
     }
 
     @Test
     public void keywordShouldThrowWhenFlagNameLengthMoreThanMaxLength() throws 
Exception {
         expectedException.expect(IllegalArgumentException.class);
-        new Keyword(StringUtils.repeat("a", FLAG_NAME_MAX_LENTH + 1));
+        Keyword.of(StringUtils.repeat("a", FLAG_NAME_MAX_LENTH + 1));
     }
 
     @Test
     public void keywordShouldCreateNewOneWhenFlagNameLengthEqualsMaxLength() 
throws Exception {
         String maxLengthFlagName = StringUtils.repeat("a", 
FLAG_NAME_MAX_LENTH);
-        Keyword keyword = new Keyword(maxLengthFlagName);
+        Keyword keyword = Keyword.of(maxLengthFlagName);
 
         assertThat(keyword.getFlagName()).isEqualTo(maxLengthFlagName);
     }
@@ -68,7 +68,7 @@ public class KeywordTest {
     @Test
     public void keywordShouldCreateNewOneWhenFlagNameLengthEqualsMinLength() 
throws Exception {
         String minLengthFlagName = "a";
-        Keyword keyword = new Keyword(minLengthFlagName);
+        Keyword keyword = Keyword.of(minLengthFlagName);
 
         assertThat(keyword.getFlagName()).isEqualTo(minLengthFlagName);
     }
@@ -76,61 +76,61 @@ public class KeywordTest {
     @Test
     public void keywordShouldThrowWhenFlagNameContainsPercentageCharacter() 
throws Exception {
         expectedException.expect(IllegalArgumentException.class);
-        new Keyword("a%");
+        Keyword.of("a%");
     }
 
     @Test
     public void keywordShouldThrowWhenFlagNameContainsLeftBracket() throws 
Exception {
         expectedException.expect(IllegalArgumentException.class);
-        new Keyword("a[");
+        Keyword.of("a[");
     }
 
     @Test
     public void keywordShouldThrowWhenFlagNameContainsRightBracket() throws 
Exception {
         expectedException.expect(IllegalArgumentException.class);
-        new Keyword("a]");
+        Keyword.of("a]");
     }
 
     @Test
     public void keywordShouldThrowWhenFlagNameContainsLeftBrace() throws 
Exception {
         expectedException.expect(IllegalArgumentException.class);
-        new Keyword("a{");
+        Keyword.of("a{");
     }
 
     @Test
     public void keywordShouldThrowWhenFlagNameContainsSlash() throws Exception 
{
         expectedException.expect(IllegalArgumentException.class);
-        new Keyword("a\\");
+        Keyword.of("a\\");
     }
 
     @Test
     public void keywordShouldThrowWhenFlagNameContainsStar() throws Exception {
         expectedException.expect(IllegalArgumentException.class);
-        new Keyword("a*");
+        Keyword.of("a*");
     }
 
     @Test
     public void keywordShouldThrowWhenFlagNameContainsQuote() throws Exception 
{
         expectedException.expect(IllegalArgumentException.class);
-        new Keyword("a\"");
+        Keyword.of("a\"");
     }
 
     @Test
     public void keywordShouldThrowWhenFlagNameContainsOpeningParenthesis() 
throws Exception {
         expectedException.expect(IllegalArgumentException.class);
-        new Keyword("a(");
+        Keyword.of("a(");
     }
 
     @Test
     public void keywordShouldThrowWhenFlagNameContainsClosingParenthesis() 
throws Exception {
         expectedException.expect(IllegalArgumentException.class);
-        new Keyword("a)");
+        Keyword.of("a)");
     }
 
     @Test
     public void keywordShouldThrowWhenFlagNameContainsSpaceCharacter() throws 
Exception {
         expectedException.expect(IllegalArgumentException.class);
-        new Keyword("a b");
+        Keyword.of("a b");
     }
 
     @Test
@@ -150,7 +150,7 @@ public class KeywordTest {
 
     @Test
     public void isNotNonExposedImapKeywordShouldReturnTrueWhenAnyUserFlag() 
throws Exception {
-        Keyword keyword = new Keyword(ANY_KEYWORD);
+        Keyword keyword = Keyword.of(ANY_KEYWORD);
         assertThat(keyword.isExposedImapKeyword()).isTrue();
     }
 
@@ -166,13 +166,13 @@ public class KeywordTest {
 
     @Test
     public void asSystemFlagShouldReturnSystemFlag() throws Exception {
-        assertThat(new Keyword("$Draft").asSystemFlag())
+        assertThat(Keyword.of("$Draft").asSystemFlag())
             .isEqualTo(Optional.of(Flags.Flag.DRAFT));
     }
 
     @Test
     public void asSystemFlagShouldReturnEmptyWhenNonSystemFlag() throws 
Exception {
-        assertThat(new Keyword(ANY_KEYWORD).asSystemFlag().isPresent())
+        assertThat(Keyword.of(ANY_KEYWORD).asSystemFlag().isPresent())
             .isFalse();
     }
 
@@ -184,7 +184,7 @@ public class KeywordTest {
 
     @Test
     public void asFlagsShouldReturnFlagsWhenUserFlag() throws Exception {
-        Keyword keyword = new Keyword(ANY_KEYWORD);
+        Keyword keyword = Keyword.of(ANY_KEYWORD);
         assertThat(keyword.asFlags())
             .isEqualTo(new Flags(ANY_KEYWORD));
     }
@@ -192,7 +192,7 @@ public class KeywordTest {
     @Test
     public void asFlagsShouldReturnFlagsWhenUserFlagContainsUnderscore() 
throws Exception {
         String userFlag = "$has_cal";
-        Keyword keyword = new Keyword(userFlag);
+        Keyword keyword = Keyword.of(userFlag);
         assertThat(keyword.asFlags())
             .isEqualTo(new Flags(userFlag));
     }
@@ -201,7 +201,7 @@ public class KeywordTest {
     public void hyphenMinusShouldBeAllowedInKeyword() {
         String userFlag = "aa-bb";
 
-        assertThatCode(() -> new Keyword(userFlag))
+        assertThatCode(() -> Keyword.of(userFlag))
             .doesNotThrowAnyException();
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/20a15278/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/KeywordsTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/KeywordsTest.java
 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/KeywordsTest.java
index 29f33ba..ab026a3 100644
--- 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/KeywordsTest.java
+++ 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/KeywordsTest.java
@@ -61,7 +61,7 @@ public class KeywordsTest {
             .fromMap(ImmutableMap.of(ANY_KEYWORD, Keyword.FLAG_VALUE));
 
         assertThat(keywords.getKeywords())
-            .containsOnly(new Keyword(ANY_KEYWORD));
+            .containsOnly(Keyword.of(ANY_KEYWORD));
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/20a15278/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
index a8ae758..dfe2c00 100644
--- 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
+++ 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
@@ -749,7 +749,7 @@ public class MessageFactoryTest {
 
     @Test
     public void keywordWithUserFlagShouldBeSetIntoMessage() throws Exception {
-        Keywords keywords = Keywords.factory().from(Keyword.ANSWERED, new 
Keyword(FORWARDED));
+        Keywords keywords = Keywords.factory().from(Keyword.ANSWERED, 
Keyword.of(FORWARDED));
 
         MetaDataWithContent testMail = MetaDataWithContent.builder()
             .uid(MessageUid.of(2))

http://git-wip-us.apache.org/repos/asf/james-project/blob/20a15278/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/KeywordsCombinerTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/KeywordsCombinerTest.java
 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/KeywordsCombinerTest.java
index df36ab4..a7bb19c 100644
--- 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/KeywordsCombinerTest.java
+++ 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/KeywordsCombinerTest.java
@@ -76,7 +76,7 @@ public class KeywordsCombinerTest {
     public void applyShouldUnionCustomKeyword() {
         KeywordsCombiner keywordsCombiner = new KeywordsCombiner();
 
-        Keyword customKeyword = new Keyword("$Any");
+        Keyword customKeyword = Keyword.of("$Any");
         assertThat(keywordsCombiner.apply(
             Keywords.DEFAULT_VALUE,
             Keywords.factory().from(customKeyword)))
@@ -110,8 +110,8 @@ public class KeywordsCombinerTest {
             Keyword.DRAFT,
             Keyword.FLAGGED,
             Keyword.SEEN,
-            new Keyword("$Forwarded"),
-            new Keyword("$Any"));
+            Keyword.of("$Forwarded"),
+            Keyword.of("$Any"));
 
         ImmutableSet<Keywords> values = ImmutableSet.of(
             FACTORY.from(Keyword.ANSWERED),
@@ -120,8 +120,8 @@ public class KeywordsCombinerTest {
             FACTORY.from(Keyword.FLAGGED),
             FACTORY.from(Keyword.SEEN),
             FACTORY.from(),
-            FACTORY.from(new Keyword("$Forwarded")),
-            FACTORY.from(new Keyword("$Any")),
+            FACTORY.from(Keyword.of("$Forwarded")),
+            FACTORY.from(Keyword.of("$Any")),
             allKeyword);
 
         assertThat(


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

Reply via email to