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 24c3d046177d51e2fd4a13cc267333a91d181532 Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Fri Dec 13 07:41:29 2019 +0100 [Refactoring] Improve Store command parser readability --- .../imap/decode/parser/StoreCommandParser.java | 70 +++++++++++----------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StoreCommandParser.java b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StoreCommandParser.java index 807385c..60c03d3 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StoreCommandParser.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StoreCommandParser.java @@ -29,7 +29,7 @@ import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.decode.DecodingException; import org.apache.james.imap.decode.ImapRequestLineReader; -import org.apache.james.imap.decode.ImapRequestLineReader.CharacterValidator; +import org.apache.james.imap.decode.ImapRequestLineReader.StringValidator; import org.apache.james.imap.message.request.StoreRequest; import org.apache.james.mailbox.MessageManager; @@ -38,7 +38,7 @@ import org.apache.james.mailbox.MessageManager; */ public class StoreCommandParser extends AbstractUidCommandParser { - private static final byte[] UNCHANGEDSINCE = "UNCHANGEDSINCE".getBytes(); + private static final String UNCHANGEDSINCE = "UNCHANGEDSINCE"; public StoreCommandParser(StatusResponseFactory statusResponseFactory) { super(ImapConstants.STORE_COMMAND, statusResponseFactory); @@ -47,50 +47,29 @@ public class StoreCommandParser extends AbstractUidCommandParser { @Override protected ImapMessage decode(ImapRequestLineReader request, Tag tag, boolean useUids, ImapSession session) throws DecodingException { final IdRange[] idSet = request.parseIdRange(session); - boolean silent = false; long unchangedSince = -1; char next = request.nextWordChar(); if (next == '(') { // Seems like we have a CONDSTORE parameter request.consume(); - - request.consumeWord(new CharacterValidator() { - private int pos = 0; - @Override - public boolean isValid(char chr) { - if (pos >= UNCHANGEDSINCE.length) { - return false; - } else { - return ImapRequestLineReader.cap(chr) == UNCHANGEDSINCE[pos++]; - } - } - }); + + request.consumeWord(new StringValidator(UNCHANGEDSINCE)); request.consumeChar(' '); unchangedSince = request.number(true); request.consumeChar(')'); next = request.nextWordChar(); } - final MessageManager.FlagsUpdateMode flagsUpdateMode; - if (next == '+') { - flagsUpdateMode = MessageManager.FlagsUpdateMode.ADD; - request.consume(); - } else if (next == '-') { - flagsUpdateMode = MessageManager.FlagsUpdateMode.REMOVE; - request.consume(); - } else { - flagsUpdateMode = MessageManager.FlagsUpdateMode.REPLACE; - } - + MessageManager.FlagsUpdateMode flagsUpdateMode = parseFlagsUpdateMode(request, next); String directive = request.consumeWord(new ImapRequestLineReader.NoopCharValidator()); - if ("FLAGS".equalsIgnoreCase(directive)) { - silent = false; - } else if ("FLAGS.SILENT".equalsIgnoreCase(directive)) { - silent = true; - } else { - throw new DecodingException(HumanReadableText.ILLEGAL_ARGUMENTS, "Invalid Store Directive: '" + directive + "'"); - } + boolean silent = parseSilent(directive); + final Flags flags = parseFlags(request); + request.eol(); + return new StoreRequest(idSet, silent, flags, useUids, tag, flagsUpdateMode, unchangedSince); + } + + private Flags parseFlags(ImapRequestLineReader request) throws DecodingException { // Handle all kind of "store-att-flags" // See IMAP-281 final Flags flags = new Flags(); @@ -108,8 +87,29 @@ public class StoreCommandParser extends AbstractUidCommandParser { } } } + return flags; + } - request.eol(); - return new StoreRequest(idSet, silent, flags, useUids, tag, flagsUpdateMode, unchangedSince); + private boolean parseSilent(String directive) throws DecodingException { + if ("FLAGS".equalsIgnoreCase(directive)) { + return false; + } else if ("FLAGS.SILENT".equalsIgnoreCase(directive)) { + return true; + } else { + throw new DecodingException(HumanReadableText.ILLEGAL_ARGUMENTS, "Invalid Store Directive: '" + directive + "'"); + } + } + + private MessageManager.FlagsUpdateMode parseFlagsUpdateMode(ImapRequestLineReader request, char next) throws DecodingException { + if (next == '+') { + MessageManager.FlagsUpdateMode flagsUpdateMode = MessageManager.FlagsUpdateMode.ADD; + request.consume(); + return flagsUpdateMode; + } else if (next == '-') { + MessageManager.FlagsUpdateMode flagsUpdateMode = MessageManager.FlagsUpdateMode.REMOVE; + request.consume(); + return flagsUpdateMode; + } + return MessageManager.FlagsUpdateMode.REPLACE; } } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org