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 fa41121f0e539096a0a464a0b7130e2dcdcf9bd7 Author: Benoit Tellier <[email protected]> AuthorDate: Fri Dec 6 15:51:17 2019 +0700 PROTOCOLS-120 ImapParserFactory should rely on AbstractImapCommandParser for commandName <-> parser binding --- .../imap/decode/parser/ImapParserFactory.java | 152 +++++++++++---------- 1 file changed, 79 insertions(+), 73 deletions(-) diff --git a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/ImapParserFactory.java b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/ImapParserFactory.java index 0d02fc0..23e6a75 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/ImapParserFactory.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/ImapParserFactory.java @@ -19,14 +19,17 @@ package org.apache.james.imap.decode.parser; -import java.util.HashMap; import java.util.Locale; import java.util.Map; +import java.util.function.Function; +import java.util.stream.Stream; -import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.decode.ImapCommandParser; import org.apache.james.imap.decode.ImapCommandParserFactory; +import org.apache.james.imap.decode.base.AbstractImapCommandParser; + +import com.github.steveash.guavate.Guavate; /** * A factory for ImapCommand instances, provided based on the command name. @@ -36,77 +39,80 @@ public class ImapParserFactory implements ImapCommandParserFactory { private final Map<String, ImapCommandParser> imapCommands; public ImapParserFactory(StatusResponseFactory statusResponseFactory) { - imapCommands = new HashMap<>(); - - // Commands valid in any state - // CAPABILITY, NOOP, and LOGOUT - imapCommands.put(ImapConstants.CAPABILITY_COMMAND_NAME, new CapabilityCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.NOOP_COMMAND_NAME, new NoopCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.LOGOUT_COMMAND_NAME, new LogoutCommandParser(statusResponseFactory)); - - // Commands valid in NON_AUTHENTICATED state. - // AUTHENTICATE and LOGIN - imapCommands.put(ImapConstants.AUTHENTICATE_COMMAND_NAME, new AuthenticateCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.LOGIN_COMMAND_NAME, new LoginCommandParser(statusResponseFactory)); - - // Commands valid in AUTHENTICATED or SELECTED state. - // RFC2060: SELECT, EXAMINE, CREATE, DELETE, RENAME, SUBSCRIBE, - // UNSUBSCRIBE, LIST, LSUB, STATUS, and APPEND - imapCommands.put(ImapConstants.SELECT_COMMAND_NAME, new SelectCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.EXAMINE_COMMAND_NAME, new ExamineCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.CREATE_COMMAND_NAME, new CreateCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.DELETE_COMMAND_NAME, new DeleteCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.RENAME_COMMAND_NAME, new RenameCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.SUBSCRIBE_COMMAND_NAME, new SubscribeCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.UNSUBSCRIBE_COMMAND_NAME, new UnsubscribeCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.LIST_COMMAND_NAME, new ListCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.XLIST_COMMAND_NAME, new XListCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.LSUB_COMMAND_NAME, new LsubCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.STATUS_COMMAND_NAME, new StatusCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.APPEND_COMMAND_NAME, new AppendCommandParser(statusResponseFactory)); - - // RFC2342 NAMESPACE - imapCommands.put(ImapConstants.NAMESPACE_COMMAND_NAME, new NamespaceCommandParser(statusResponseFactory)); - - // RFC4314 GETACL, SETACL, DELETEACL, LISTRIGHTS, MYRIGHTS - imapCommands.put(ImapConstants.GETACL_COMMAND_NAME, new GetACLCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.SETACL_COMMAND_NAME, new SetACLCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.DELETEACL_COMMAND_NAME, new DeleteACLCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.LISTRIGHTS_COMMAND_NAME, new ListRightsCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.MYRIGHTS_COMMAND_NAME, new MyRightsCommandParser(statusResponseFactory)); - - // Commands only valid in SELECTED state. - // CHECK, CLOSE, EXPUNGE, SEARCH, FETCH, STORE, COPY, UID and IDLE - imapCommands.put(ImapConstants.CHECK_COMMAND_NAME, new CheckCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.CLOSE_COMMAND_NAME, new CloseCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.EXPUNGE_COMMAND_NAME, new ExpungeCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.COPY_COMMAND_NAME, new CopyCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.MOVE_COMMAND_NAME, new MoveCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.SEARCH_COMMAND_NAME, new SearchCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.FETCH_COMMAND_NAME, new FetchCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.STORE_COMMAND_NAME, new StoreCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.UID_COMMAND_NAME, new UidCommandParser(this, statusResponseFactory)); - imapCommands.put(ImapConstants.IDLE_COMMAND_NAME, new IdleCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.STARTTLS, new StartTLSCommandParser(statusResponseFactory)); - - // RFC3691 - imapCommands.put(ImapConstants.UNSELECT_COMMAND_NAME, new UnselectCommandParser(statusResponseFactory)); - - // RFC4978 - imapCommands.put(ImapConstants.COMPRESS_COMMAND_NAME, new CompressCommandParser(statusResponseFactory)); - - imapCommands.put(ImapConstants.ENABLE_COMMAND_NAME, new EnableCommandParser(statusResponseFactory)); - - // RFC2087 - // GETQUOTAROOT, GETQUOTA, SETQUOTA - imapCommands.put(ImapConstants.GETQUOTAROOT_COMMAND_NAME, new GetQuotaRootCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.GETQUOTA_COMMAND_NAME, new GetQuotaCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.SETQUOTA_COMMAND_NAME, new SetQuotaCommandParser(statusResponseFactory)); - - //RFC5464 - //SETMETADATA, GETMETADATA - imapCommands.put(ImapConstants.SETANNOTATION_COMMAND_NAME, new SetAnnotationCommandParser(statusResponseFactory)); - imapCommands.put(ImapConstants.GETANNOTATION_COMMAND_NAME, new GetAnnotationCommandParser(statusResponseFactory)); + Stream<AbstractImapCommandParser> parsers = Stream.of( + // Commands valid in any state + // CAPABILITY, NOOP, and LOGOUT + new CapabilityCommandParser(statusResponseFactory), + new NoopCommandParser(statusResponseFactory), + new LogoutCommandParser(statusResponseFactory), + + // Commands valid in NON_AUTHENTICATED state. + // AUTHENTICATE and LOGIN + new AuthenticateCommandParser(statusResponseFactory), + new LoginCommandParser(statusResponseFactory), + + // Commands valid in AUTHENTICATED or SELECTED state. + // RFC2060: SELECT, EXAMINE, CREATE, DELETE, RENAME, SUBSCRIBE, + // UNSUBSCRIBE, LIST, LSUB, STATUS, and APPEND + new SelectCommandParser(statusResponseFactory), + new ExamineCommandParser(statusResponseFactory), + new CreateCommandParser(statusResponseFactory), + new DeleteCommandParser(statusResponseFactory), + new RenameCommandParser(statusResponseFactory), + new SubscribeCommandParser(statusResponseFactory), + new UnsubscribeCommandParser(statusResponseFactory), + new ListCommandParser(statusResponseFactory), + new XListCommandParser(statusResponseFactory), + new LsubCommandParser(statusResponseFactory), + new StatusCommandParser(statusResponseFactory), + new AppendCommandParser(statusResponseFactory), + + // RFC2342 NAMESPACE + new NamespaceCommandParser(statusResponseFactory), + + // RFC4314 GETACL, SETACL, DELETEACL, LISTRIGHTS, MYRIGHTS + new GetACLCommandParser(statusResponseFactory), + new SetACLCommandParser(statusResponseFactory), + new DeleteACLCommandParser(statusResponseFactory), + new ListRightsCommandParser(statusResponseFactory), + new MyRightsCommandParser(statusResponseFactory), + + // Commands only valid in SELECTED state. + // CHECK, CLOSE, EXPUNGE, SEARCH, FETCH, STORE, COPY, UID and IDLE + new CheckCommandParser(statusResponseFactory), + new CloseCommandParser(statusResponseFactory), + new ExpungeCommandParser(statusResponseFactory), + new CopyCommandParser(statusResponseFactory), + new MoveCommandParser(statusResponseFactory), + new SearchCommandParser(statusResponseFactory), + new FetchCommandParser(statusResponseFactory), + new StoreCommandParser(statusResponseFactory), + new UidCommandParser(this, statusResponseFactory), + new IdleCommandParser(statusResponseFactory), + new StartTLSCommandParser(statusResponseFactory), + + // RFC3691 + new UnselectCommandParser(statusResponseFactory), + + // RFC4978 + new CompressCommandParser(statusResponseFactory), + + new EnableCommandParser(statusResponseFactory), + + // RFC2087 + // GETQUOTAROOT, GETQUOTA, SETQUOTA + new GetQuotaRootCommandParser(statusResponseFactory), + new GetQuotaCommandParser(statusResponseFactory), + new SetQuotaCommandParser(statusResponseFactory), + + //RFC5464 + //SETMETADATA, GETMETADATA + new SetAnnotationCommandParser(statusResponseFactory), + new GetAnnotationCommandParser(statusResponseFactory)); + + imapCommands = parsers.collect(Guavate.toImmutableMap( + parser -> parser.getCommand().getName(), + Function.identity())); } @Override --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
