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