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

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

commit 4bbc17082706262249025d81fe4b536a7f16114c
Author: Benoit Tellier <[email protected]>
AuthorDate: Wed Nov 13 11:55:17 2019 +0700

    [Refactoring] StatusCommandParser: uncorrelate word splitting from item 
parsing
---
 .../imap/decode/parser/StatusCommandParser.java    | 23 +++++++++++++++++-----
 1 file changed, 18 insertions(+), 5 deletions(-)

diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StatusCommandParser.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StatusCommandParser.java
index c319e98..88bebe0 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StatusCommandParser.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StatusCommandParser.java
@@ -33,6 +33,10 @@ import 
org.apache.james.imap.decode.ImapRequestLineReader.CharacterValidator;
 import org.apache.james.imap.decode.base.AbstractImapCommandParser;
 import org.apache.james.imap.message.request.StatusRequest;
 
+import com.github.fge.lambdas.Throwing;
+import com.github.steveash.guavate.Guavate;
+import com.google.common.collect.ImmutableList;
+
 /**
  * Parse STATUS commands
  */
@@ -42,7 +46,17 @@ public class StatusCommandParser extends 
AbstractImapCommandParser {
     }
 
     private StatusDataItems statusDataItems(ImapRequestLineReader request) 
throws DecodingException {
-        EnumSet<StatusDataItems.StatusItem> items = 
EnumSet.noneOf(StatusDataItems.StatusItem.class);
+        ImmutableList<String> words = splitWords(request);
+
+        EnumSet<StatusDataItems.StatusItem> items = 
EnumSet.copyOf(words.stream()
+            .map(Throwing.function(this::parseStatus).sneakyThrow())
+            .collect(Guavate.toImmutableList()));
+
+        return new StatusDataItems(items);
+    }
+
+    private ImmutableList<String> splitWords(ImapRequestLineReader request) 
throws DecodingException {
+        ImmutableList.Builder<String> words = ImmutableList.builder();
 
         request.nextWordChar();
         request.consumeChar('(');
@@ -50,15 +64,14 @@ public class StatusCommandParser extends 
AbstractImapCommandParser {
         String nextWord = request.consumeWord(validator);
 
         while (!nextWord.endsWith(")")) {
-            items.add(parseStatus(nextWord));
+            words.add(nextWord);
             nextWord = request.consumeWord(validator);
         }
         // Got the closing ")", may be attached to a word.
         if (nextWord.length() > 1) {
-            items.add(parseStatus(nextWord.substring(0, nextWord.length() - 
1)));
+            words.add(nextWord.substring(0, nextWord.length() - 1));
         }
-
-        return new StatusDataItems(items);
+        return words.build();
     }
 
     private StatusDataItems.StatusItem parseStatus(String nextWord) throws 
DecodingException {


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

Reply via email to