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