You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/12/13 02:39:27 UTC
[james-project] 11/27: PROTOCOLS-120 ImapParserFactory should not
create new instances
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 <bt...@linagora.com>
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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org