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/11/13 03:06:59 UTC
[james-project] 10/21: [Refactoring] ListProcessor is better
looking after some methods extractions
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 913bbb9411caafc5d53355c044e58d4a72f1c012
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Nov 12 14:25:00 2019 +0700
[Refactoring] ListProcessor is better looking after some methods extractions
---
.../apache/james/imap/processor/ListProcessor.java | 127 +++++++++++----------
1 file changed, 68 insertions(+), 59 deletions(-)
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/ListProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/ListProcessor.java
index e8dfdd6..851aa94 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/ListProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/ListProcessor.java
@@ -82,69 +82,13 @@ public class ListProcessor extends AbstractMailboxProcessor<ListRequest> {
*/
protected final void doProcess(String referenceName, String mailboxName, ImapSession session, String tag, ImapCommand command, Responder responder, MailboxTyper mailboxTyper) {
String user = ImapSessionUtils.getUserName(session);
- final MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session);
+ MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session);
try {
-
if (mailboxName.length() == 0) {
- // An empty mailboxName signifies a request for the hierarchy
- // delimiter and root name of the referenceName argument
-
- String referenceRoot;
- if (referenceName.length() > 0 && referenceName.charAt(0) == MailboxConstants.NAMESPACE_PREFIX_CHAR) {
- // A qualified reference name - get the root element
- int firstDelimiter = referenceName.indexOf(mailboxSession.getPathDelimiter());
- if (firstDelimiter == -1) {
- referenceRoot = referenceName;
- } else {
- referenceRoot = referenceName.substring(0, firstDelimiter);
- }
- referenceRoot = ModifiedUtf7.decodeModifiedUTF7(referenceRoot);
- } else {
- // A relative reference name, return "" to indicate it is
- // non-rooted
- referenceRoot = "";
- }
-
- responder.respond(createResponse(
- MailboxMetaData.Children.CHILDREN_ALLOWED_BUT_UNKNOWN,
- MailboxMetaData.Selectability.NOSELECT,
- referenceRoot,
- mailboxSession.getPathDelimiter(),
- MailboxType.OTHER));
+ respondNamespace(referenceName, responder, mailboxSession);
} else {
- // If the mailboxPattern is fully qualified, ignore the
- // reference name.
- String finalReferencename = referenceName;
- if (mailboxName.charAt(0) == MailboxConstants.NAMESPACE_PREFIX_CHAR) {
- finalReferencename = "";
- }
- // Is the interpreted (combined) pattern relative?
- // Should the namespace section be returned or not?
- boolean isRelative = ((finalReferencename + mailboxName).charAt(0) != MailboxConstants.NAMESPACE_PREFIX_CHAR);
-
- finalReferencename = ModifiedUtf7.decodeModifiedUTF7(finalReferencename);
-
- MailboxPath basePath = null;
- if (isRelative) {
- basePath = MailboxPath.forUser(user, finalReferencename);
- } else {
- basePath = PathConverter.forSession(session).buildFullPath(finalReferencename);
- }
-
- List<MailboxMetaData> results = getMailboxManager().search(
- MailboxQuery.builder()
- .userAndNamespaceFrom(basePath)
- .expression(new PrefixedRegex(
- basePath.getName(),
- ModifiedUtf7.decodeModifiedUTF7(mailboxName),
- mailboxSession.getPathDelimiter()))
- .build(), mailboxSession);
- for (MailboxMetaData metaData : results) {
- processResult(responder, isRelative, metaData, getMailboxType(session, mailboxTyper, metaData.getPath()));
- }
+ respondMailboxList(referenceName, mailboxName, session, responder, mailboxTyper, user, mailboxSession);
}
-
-
okComplete(command, tag, responder);
} catch (MailboxException e) {
LOGGER.error("List failed for mailboxName {} and user {}", mailboxName, user, e);
@@ -152,6 +96,71 @@ public class ListProcessor extends AbstractMailboxProcessor<ListRequest> {
}
}
+ private void respondNamespace(String referenceName, Responder responder, MailboxSession mailboxSession) {
+ // An empty mailboxName signifies a request for the hierarchy
+ // delimiter and root name of the referenceName argument
+ String referenceRoot = ModifiedUtf7.decodeModifiedUTF7(computeReferenceRoot(referenceName, mailboxSession));
+
+ responder.respond(createResponse(
+ MailboxMetaData.Children.CHILDREN_ALLOWED_BUT_UNKNOWN,
+ MailboxMetaData.Selectability.NOSELECT,
+ referenceRoot,
+ mailboxSession.getPathDelimiter(),
+ MailboxType.OTHER));
+ }
+
+ private String computeReferenceRoot(String referenceName, MailboxSession mailboxSession) {
+ if (referenceName.length() > 0 && referenceName.charAt(0) == MailboxConstants.NAMESPACE_PREFIX_CHAR) {
+ // A qualified reference name - get the root element
+ int firstDelimiter = referenceName.indexOf(mailboxSession.getPathDelimiter());
+ if (firstDelimiter == -1) {
+ return referenceName;
+ } else {
+ return referenceName.substring(0, firstDelimiter);
+ }
+ } else {
+ // A relative reference name, return "" to indicate it is
+ // non-rooted
+ return "";
+ }
+ }
+
+ private void respondMailboxList(String referenceName, String mailboxName, ImapSession session, Responder responder, MailboxTyper mailboxTyper, String user, MailboxSession mailboxSession) throws MailboxException {
+ // If the mailboxPattern is fully qualified, ignore the
+ // reference name.
+ String finalReferencename = referenceName;
+ if (mailboxName.charAt(0) == MailboxConstants.NAMESPACE_PREFIX_CHAR) {
+ finalReferencename = "";
+ }
+ // Is the interpreted (combined) pattern relative?
+ // Should the namespace section be returned or not?
+ boolean isRelative = ((finalReferencename + mailboxName).charAt(0) != MailboxConstants.NAMESPACE_PREFIX_CHAR);
+
+ MailboxPath basePath = computeBasePath(session, user, finalReferencename, isRelative);
+
+ List<MailboxMetaData> results = getMailboxManager().search(
+ MailboxQuery.builder()
+ .userAndNamespaceFrom(basePath)
+ .expression(new PrefixedRegex(
+ basePath.getName(),
+ ModifiedUtf7.decodeModifiedUTF7(mailboxName),
+ mailboxSession.getPathDelimiter()))
+ .build(), mailboxSession);
+
+ for (MailboxMetaData metaData : results) {
+ processResult(responder, isRelative, metaData, getMailboxType(session, mailboxTyper, metaData.getPath()));
+ }
+ }
+
+ private MailboxPath computeBasePath(ImapSession session, String user, String finalReferencename, boolean isRelative) {
+ String decodedName = ModifiedUtf7.decodeModifiedUTF7(finalReferencename);
+ if (isRelative) {
+ return MailboxPath.forUser(user, decodedName);
+ } else {
+ return PathConverter.forSession(session).buildFullPath(decodedName);
+ }
+ }
+
private void processResult(Responder responder, boolean relative, MailboxMetaData listResult, MailboxType mailboxType) {
final String mailboxName = mailboxName(relative, listResult.getPath(), listResult.getHierarchyDelimiter());
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org