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 59371b299635244cd033ce9c89bd93247f1c64ec Author: Benoit Tellier <[email protected]> AuthorDate: Fri Dec 6 15:25:33 2019 +0700 PROTOCOLS-120 ImapParserFactory should not create new instances --- .../imap/decode/parser/ImapParserFactory.java | 108 +++++++++------------ 1 file changed, 48 insertions(+), 60 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 de8d619..f4ca8fd 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 @@ -35,7 +35,7 @@ import org.apache.james.imap.decode.MessagingImapCommandParser; * Command instances are created on demand, when first accessed. */ public class ImapParserFactory implements ImapCommandParserFactory { - private final Map<String, Class<?>> imapCommands; + private final Map<String, ImapCommandParser> imapCommands; private final StatusResponseFactory statusResponseFactory; @@ -45,100 +45,88 @@ public class ImapParserFactory implements ImapCommandParserFactory { // Commands valid in any state // CAPABILITY, NOOP, and LOGOUT - imapCommands.put(ImapConstants.CAPABILITY_COMMAND_NAME, CapabilityCommandParser.class); - imapCommands.put(ImapConstants.NOOP_COMMAND_NAME, NoopCommandParser.class); - imapCommands.put(ImapConstants.LOGOUT_COMMAND_NAME, LogoutCommandParser.class); + imapCommands.put(ImapConstants.CAPABILITY_COMMAND_NAME, new CapabilityCommandParser()); + imapCommands.put(ImapConstants.NOOP_COMMAND_NAME, new NoopCommandParser()); + imapCommands.put(ImapConstants.LOGOUT_COMMAND_NAME, new LogoutCommandParser()); // Commands valid in NON_AUTHENTICATED state. // AUTHENTICATE and LOGIN - imapCommands.put(ImapConstants.AUTHENTICATE_COMMAND_NAME, AuthenticateCommandParser.class); - imapCommands.put(ImapConstants.LOGIN_COMMAND_NAME, LoginCommandParser.class); + imapCommands.put(ImapConstants.AUTHENTICATE_COMMAND_NAME, new AuthenticateCommandParser()); + imapCommands.put(ImapConstants.LOGIN_COMMAND_NAME, new LoginCommandParser()); // 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, SelectCommandParser.class); - imapCommands.put(ImapConstants.EXAMINE_COMMAND_NAME, ExamineCommandParser.class); - imapCommands.put(ImapConstants.CREATE_COMMAND_NAME, CreateCommandParser.class); - imapCommands.put(ImapConstants.DELETE_COMMAND_NAME, DeleteCommandParser.class); - imapCommands.put(ImapConstants.RENAME_COMMAND_NAME, RenameCommandParser.class); - imapCommands.put(ImapConstants.SUBSCRIBE_COMMAND_NAME, SubscribeCommandParser.class); - imapCommands.put(ImapConstants.UNSUBSCRIBE_COMMAND_NAME, UnsubscribeCommandParser.class); - imapCommands.put(ImapConstants.LIST_COMMAND_NAME, ListCommandParser.class); - imapCommands.put(ImapConstants.XLIST_COMMAND_NAME, XListCommandParser.class); - imapCommands.put(ImapConstants.LSUB_COMMAND_NAME, LsubCommandParser.class); - imapCommands.put(ImapConstants.STATUS_COMMAND_NAME, StatusCommandParser.class); - imapCommands.put(ImapConstants.APPEND_COMMAND_NAME, AppendCommandParser.class); + imapCommands.put(ImapConstants.SELECT_COMMAND_NAME, new SelectCommandParser()); + imapCommands.put(ImapConstants.EXAMINE_COMMAND_NAME, new ExamineCommandParser()); + imapCommands.put(ImapConstants.CREATE_COMMAND_NAME, new CreateCommandParser()); + imapCommands.put(ImapConstants.DELETE_COMMAND_NAME, new DeleteCommandParser()); + imapCommands.put(ImapConstants.RENAME_COMMAND_NAME, new RenameCommandParser()); + imapCommands.put(ImapConstants.SUBSCRIBE_COMMAND_NAME, new SubscribeCommandParser()); + imapCommands.put(ImapConstants.UNSUBSCRIBE_COMMAND_NAME, new UnsubscribeCommandParser()); + imapCommands.put(ImapConstants.LIST_COMMAND_NAME, new ListCommandParser()); + imapCommands.put(ImapConstants.XLIST_COMMAND_NAME, new XListCommandParser()); + imapCommands.put(ImapConstants.LSUB_COMMAND_NAME, new LsubCommandParser()); + imapCommands.put(ImapConstants.STATUS_COMMAND_NAME, new StatusCommandParser()); + imapCommands.put(ImapConstants.APPEND_COMMAND_NAME,new AppendCommandParser()); // RFC2342 NAMESPACE - imapCommands.put(ImapConstants.NAMESPACE_COMMAND_NAME, NamespaceCommandParser.class); + imapCommands.put(ImapConstants.NAMESPACE_COMMAND_NAME, new NamespaceCommandParser()); // RFC4314 GETACL, SETACL, DELETEACL, LISTRIGHTS, MYRIGHTS - imapCommands.put(ImapConstants.GETACL_COMMAND_NAME, GetACLCommandParser.class); - imapCommands.put(ImapConstants.SETACL_COMMAND_NAME, SetACLCommandParser.class); - imapCommands.put(ImapConstants.DELETEACL_COMMAND_NAME, DeleteACLCommandParser.class); - imapCommands.put(ImapConstants.LISTRIGHTS_COMMAND_NAME, ListRightsCommandParser.class); - imapCommands.put(ImapConstants.MYRIGHTS_COMMAND_NAME, MyRightsCommandParser.class); + imapCommands.put(ImapConstants.GETACL_COMMAND_NAME, new GetACLCommandParser()); + imapCommands.put(ImapConstants.SETACL_COMMAND_NAME, new SetACLCommandParser()); + imapCommands.put(ImapConstants.DELETEACL_COMMAND_NAME, new DeleteACLCommandParser()); + imapCommands.put(ImapConstants.LISTRIGHTS_COMMAND_NAME, new ListRightsCommandParser()); + imapCommands.put(ImapConstants.MYRIGHTS_COMMAND_NAME, new MyRightsCommandParser()); // Commands only valid in SELECTED state. // CHECK, CLOSE, EXPUNGE, SEARCH, FETCH, STORE, COPY, UID and IDLE - imapCommands.put(ImapConstants.CHECK_COMMAND_NAME, CheckCommandParser.class); - imapCommands.put(ImapConstants.CLOSE_COMMAND_NAME, CloseCommandParser.class); - imapCommands.put(ImapConstants.EXPUNGE_COMMAND_NAME, ExpungeCommandParser.class); - imapCommands.put(ImapConstants.COPY_COMMAND_NAME, CopyCommandParser.class); - imapCommands.put(ImapConstants.MOVE_COMMAND_NAME, MoveCommandParser.class); - imapCommands.put(ImapConstants.SEARCH_COMMAND_NAME, SearchCommandParser.class); - imapCommands.put(ImapConstants.FETCH_COMMAND_NAME, FetchCommandParser.class); - imapCommands.put(ImapConstants.STORE_COMMAND_NAME, StoreCommandParser.class); - imapCommands.put(ImapConstants.UID_COMMAND_NAME, UidCommandParser.class); - imapCommands.put(ImapConstants.IDLE_COMMAND_NAME, IdleCommandParser.class); - imapCommands.put(ImapConstants.STARTTLS, StartTLSCommandParser.class); + imapCommands.put(ImapConstants.CHECK_COMMAND_NAME, new CheckCommandParser()); + imapCommands.put(ImapConstants.CLOSE_COMMAND_NAME, new CloseCommandParser()); + imapCommands.put(ImapConstants.EXPUNGE_COMMAND_NAME, new ExpungeCommandParser()); + imapCommands.put(ImapConstants.COPY_COMMAND_NAME, new CopyCommandParser()); + imapCommands.put(ImapConstants.MOVE_COMMAND_NAME, new MoveCommandParser()); + imapCommands.put(ImapConstants.SEARCH_COMMAND_NAME, new SearchCommandParser()); + imapCommands.put(ImapConstants.FETCH_COMMAND_NAME, new FetchCommandParser()); + imapCommands.put(ImapConstants.STORE_COMMAND_NAME, new StoreCommandParser()); + imapCommands.put(ImapConstants.UID_COMMAND_NAME, new UidCommandParser()); + imapCommands.put(ImapConstants.IDLE_COMMAND_NAME, new IdleCommandParser()); + imapCommands.put(ImapConstants.STARTTLS, new StartTLSCommandParser()); // RFC3691 - imapCommands.put(ImapConstants.UNSELECT_COMMAND_NAME, UnselectCommandParser.class); + imapCommands.put(ImapConstants.UNSELECT_COMMAND_NAME, new UnselectCommandParser()); // RFC4978 - imapCommands.put(ImapConstants.COMPRESS_COMMAND_NAME, CompressCommandParser.class); + imapCommands.put(ImapConstants.COMPRESS_COMMAND_NAME, new CompressCommandParser()); - imapCommands.put(ImapConstants.ENABLE_COMMAND_NAME, EnableCommandParser.class); + imapCommands.put(ImapConstants.ENABLE_COMMAND_NAME, new EnableCommandParser()); // RFC2087 // GETQUOTAROOT, GETQUOTA, SETQUOTA - imapCommands.put(ImapConstants.GETQUOTAROOT_COMMAND_NAME, GetQuotaRootCommandParser.class); - imapCommands.put(ImapConstants.GETQUOTA_COMMAND_NAME, GetQuotaCommandParser.class); - imapCommands.put(ImapConstants.SETQUOTA_COMMAND_NAME, SetQuotaCommandParser.class); + imapCommands.put(ImapConstants.GETQUOTAROOT_COMMAND_NAME, new GetQuotaRootCommandParser()); + imapCommands.put(ImapConstants.GETQUOTA_COMMAND_NAME, new GetQuotaCommandParser()); + imapCommands.put(ImapConstants.SETQUOTA_COMMAND_NAME, new SetQuotaCommandParser()); //RFC5464 //SETMETADATA, GETMETADATA - imapCommands.put(ImapConstants.SETANNOTATION_COMMAND_NAME, SetAnnotationCommandParser.class); - imapCommands.put(ImapConstants.GETANNOTATION_COMMAND_NAME, GetAnnotationCommandParser.class); + imapCommands.put(ImapConstants.SETANNOTATION_COMMAND_NAME, new SetAnnotationCommandParser()); + imapCommands.put(ImapConstants.GETANNOTATION_COMMAND_NAME, new GetAnnotationCommandParser()); } @Override public ImapCommandParser getParser(String commandName) { - Class<?> cmdClass = imapCommands.get(commandName.toUpperCase(Locale.US)); + ImapCommandParser parser = imapCommands.get(commandName.toUpperCase(Locale.US)); - if (cmdClass == null) { + if (parser == null) { return null; } else { - return createCommand(cmdClass); + initialiseParser(parser); + return parser; } } - private ImapCommandParser createCommand(Class<?> commandClass) { - try { - ImapCommandParser cmd = (ImapCommandParser) commandClass.newInstance(); - initialiseParser(cmd); - return cmd; - } catch (Exception e) { - // TODO: would probably be better to manage this in protocol - // TODO: this runtime will produce a nasty disconnect for the client - throw new RuntimeException("Could not create command instance: " + commandClass.getName(), e); - } - } - - protected void initialiseParser(ImapCommandParser cmd) { - + private void initialiseParser(ImapCommandParser cmd) { if (cmd instanceof DelegatingImapCommandParser) { ((DelegatingImapCommandParser) cmd).setParserFactory(this); } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
