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

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

commit fbca73d58310ed69fd093c47b352d45b1e7bc961
Author: Benoit Tellier <btell...@linagora.com>
AuthorDate: Tue Jan 14 09:48:47 2020 +0700

    [REFACTORING] Use switch instead of chained 'if' within FetchCommandParser
---
 .../imap/decode/parser/FetchCommandParser.java     | 81 ++++++++++++----------
 1 file changed, 45 insertions(+), 36 deletions(-)

diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/FetchCommandParser.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/FetchCommandParser.java
index 6844374..864ffa3 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/FetchCommandParser.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/FetchCommandParser.java
@@ -28,6 +28,7 @@ import static 
org.apache.james.imap.api.message.FetchData.Item.SIZE;
 import static org.apache.james.imap.api.message.FetchData.Item.UID;
 
 import java.util.List;
+import java.util.Locale;
 
 import org.apache.james.imap.api.ImapConstants;
 import org.apache.james.imap.api.ImapMessage;
@@ -119,37 +120,7 @@ public class FetchCommandParser extends 
AbstractUidCommandParser {
         char next = reader.nextChar();
         // Simple elements with no '[]' parameters.
         if (next != '[') {
-            if ("FAST".equalsIgnoreCase(name)) {
-                fetch.fetch(FLAGS, INTERNAL_DATE, SIZE);
-            } else if ("FULL".equalsIgnoreCase(name)) {
-                fetch.fetch(FLAGS, INTERNAL_DATE, SIZE, ENVELOPE, BODY);
-            } else if ("ALL".equalsIgnoreCase(name)) {
-                fetch.fetch(FLAGS, INTERNAL_DATE, SIZE, ENVELOPE);
-            } else if ("FLAGS".equalsIgnoreCase(name)) {
-                fetch.fetch(FLAGS);
-            } else if ("RFC822.SIZE".equalsIgnoreCase(name)) {
-                fetch.fetch(SIZE);
-            } else if ("ENVELOPE".equalsIgnoreCase(name)) {
-                fetch.fetch(ENVELOPE);
-            } else if ("INTERNALDATE".equalsIgnoreCase(name)) {
-                fetch.fetch(INTERNAL_DATE);
-            } else if ("BODY".equalsIgnoreCase(name)) {
-                fetch.fetch(BODY);
-            } else if ("BODYSTRUCTURE".equalsIgnoreCase(name)) {
-                fetch.fetch(BODY_STRUCTURE);
-            } else if ("UID".equalsIgnoreCase(name)) {
-                fetch.fetch(UID);
-            } else if ("RFC822".equalsIgnoreCase(name)) {
-                fetch.add(BodyFetchElement.createRFC822(), false);
-            } else if ("RFC822.HEADER".equalsIgnoreCase(name)) {
-                fetch.add(BodyFetchElement.createRFC822Header(), true);
-            } else if ("RFC822.TEXT".equalsIgnoreCase(name)) {
-                fetch.add(BodyFetchElement.createRFC822Text(), false);
-            } else if ("MODSEQ".equalsIgnoreCase(name)) {
-                fetch.fetch(MODSEQ);
-            } else {
-                throw new 
DecodingException(HumanReadableText.ILLEGAL_ARGUMENTS, "Invalid fetch 
attribute: " + name);
-            }
+            addNextName(fetch, name);
         } else {
             reader.consumeChar('[');
 
@@ -180,13 +151,51 @@ public class FetchCommandParser extends 
AbstractUidCommandParser {
         }
     }
 
+    private FetchData.Builder addNextName(FetchData.Builder fetch, String 
name) throws DecodingException {
+        String capitalizedName = name.toUpperCase(Locale.US);
+        switch (capitalizedName) {
+            case "FAST":
+                return fetch.fetch(FLAGS, INTERNAL_DATE, SIZE);
+            case "FULL":
+                return fetch.fetch(FLAGS, INTERNAL_DATE, SIZE, ENVELOPE, BODY);
+            case "ALL":
+                return fetch.fetch(FLAGS, INTERNAL_DATE, SIZE, ENVELOPE);
+            case "FLAGS":
+                return fetch.fetch(FLAGS);
+            case "RFC822.SIZE":
+                return fetch.fetch(SIZE);
+            case "ENVELOPE":
+                return fetch.fetch(ENVELOPE);
+            case "INTERNALDATE":
+                return fetch.fetch(INTERNAL_DATE);
+            case "BODY":
+                return fetch.fetch(BODY);
+            case "BODYSTRUCTURE":
+                return fetch.fetch(BODY_STRUCTURE);
+            case "UID":
+                return fetch.fetch(UID);
+            case "RFC822":
+                return fetch.add(BodyFetchElement.createRFC822(), false);
+            case "RFC822.HEADER":
+                return fetch.add(BodyFetchElement.createRFC822Header(), true);
+            case "RFC822.TEXT":
+                return fetch.add(BodyFetchElement.createRFC822Text(), false);
+            case "MODSEQ":
+                return fetch.fetch(MODSEQ);
+            default:
+                throw new 
DecodingException(HumanReadableText.ILLEGAL_ARGUMENTS, "Invalid fetch 
attribute: " + name);
+        }
+    }
+
     private boolean isPeek(String name) throws DecodingException {
-        if ("BODY".equalsIgnoreCase(name)) {
-            return false;
-        } else if ("BODY.PEEK".equalsIgnoreCase(name)) {
-            return true;
+        switch (name.toUpperCase(Locale.US)) {
+            case "BODY":
+                return false;
+            case "BODY.PEEK":
+                return true;
+            default:
+                throw new 
DecodingException(HumanReadableText.ILLEGAL_ARGUMENTS, "Invalid fetch attibute: 
" + name + "[]");
         }
-        throw new DecodingException(HumanReadableText.ILLEGAL_ARGUMENTS, 
"Invalid fetch attibute: " + name + "[]");
     }
 
     private BodyFetchElement createBodyElement(String parameter, Long 
firstOctet, Long numberOfOctets) throws DecodingException {


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

Reply via email to