JAMES-2219 Refactor Parent handling while creating mailbox

 - Avoid needless exception declaration (avoid function wrapping)
 - Makes finding functions returns MailboxPath (for future ownership enforcing)
 - Review function extraction logic, and rely more on variables


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f656a9ec
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f656a9ec
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f656a9ec

Branch: refs/heads/master
Commit: f656a9ec17fed9967169974aa0aa5adb2e95de79
Parents: 23055a3
Author: benwa <[email protected]>
Authored: Thu Nov 16 09:54:19 2017 +0700
Committer: Antoine Duprat <[email protected]>
Committed: Thu Nov 16 14:19:16 2017 +0100

----------------------------------------------------------------------
 .../methods/SetMailboxesCreationProcessor.java  | 28 ++++++++++----------
 1 file changed, 14 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/f656a9ec/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessor.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessor.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessor.java
index 74f4f02..0f71d2e 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessor.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessor.java
@@ -113,7 +113,7 @@ public class SetMailboxesCreationProcessor implements 
SetMailboxesProcessor {
             Map<MailboxCreationId, MailboxId> creationIdsToCreatedMailboxId, 
SetMailboxesResponse.Builder builder) {
         try {
             ensureValidMailboxName(mailboxRequest, mailboxSession);
-            MailboxPath mailboxPath = getMailboxPath(mailboxRequest, 
creationIdsToCreatedMailboxId, mailboxSession);
+            MailboxPath mailboxPath = computeMailboxPath(mailboxRequest, 
creationIdsToCreatedMailboxId, mailboxSession);
             Optional<MailboxId> mailboxId = 
mailboxManager.createMailbox(mailboxPath, mailboxSession);
             Optional<Mailbox> mailbox = mailboxId.flatMap(id -> 
mailboxFactory.builder()
                     .id(id)
@@ -163,24 +163,24 @@ public class SetMailboxesCreationProcessor implements 
SetMailboxesProcessor {
         }
     }
 
-    private MailboxPath getMailboxPath(MailboxCreateRequest mailboxRequest, 
Map<MailboxCreationId, MailboxId> creationIdsToCreatedMailboxId, MailboxSession 
mailboxSession) throws MailboxException {
+    private MailboxPath computeMailboxPath(MailboxCreateRequest 
mailboxRequest, Map<MailboxCreationId, MailboxId> 
creationIdsToCreatedMailboxId, MailboxSession mailboxSession) throws 
MailboxException {
         if (mailboxRequest.getParentId().isPresent()) {
             MailboxCreationId parentId = mailboxRequest.getParentId().get();
-            String parentName = getMailboxNameFromId(parentId, mailboxSession)
-                    .orElseGet(Throwing.supplier(() ->
-                        
getMailboxNameFromId(Optional.ofNullable(creationIdsToCreatedMailboxId.get(parentId)),
-                            mailboxSession)
-                            .orElseThrow(() -> new 
MailboxParentNotFoundException(parentId))
-                    ));
+            MailboxPath parentPath = 
getMailboxPath(creationIdsToCreatedMailboxId, mailboxSession, parentId);
 
             return MailboxPath.forUser(mailboxSession.getUser().getUserName(),
-                    parentName + mailboxSession.getPathDelimiter() + 
mailboxRequest.getName());
+                parentPath.getName() + mailboxSession.getPathDelimiter() + 
mailboxRequest.getName());
         }
         return MailboxPath.forUser(mailboxSession.getUser().getUserName(), 
mailboxRequest.getName());
     }
 
-    private Optional<String> getMailboxNameFromId(MailboxCreationId 
creationId, MailboxSession mailboxSession) throws MailboxException {
-        return getMailboxNameFromId(getMailboxIdFromCreationId(creationId), 
mailboxSession);
+    private MailboxPath getMailboxPath(Map<MailboxCreationId, MailboxId> 
creationIdsToCreatedMailboxId, MailboxSession mailboxSession, MailboxCreationId 
parentId) throws MailboxException {
+        Optional<MailboxId> mailboxId = getMailboxIdFromCreationId(parentId);
+        Optional<MailboxId> mailboxIdFromCreationId = 
Optional.ofNullable(creationIdsToCreatedMailboxId.get(parentId));
+
+        return getMailboxPathFromId(mailboxId, mailboxSession)
+            .orElseGet(() -> getMailboxPathFromId(mailboxIdFromCreationId, 
mailboxSession)
+                .orElseThrow(() -> new 
MailboxParentNotFoundException(parentId)));
     }
 
     private Optional<MailboxId> getMailboxIdFromCreationId(MailboxCreationId 
creationId) {
@@ -192,10 +192,10 @@ public class SetMailboxesCreationProcessor implements 
SetMailboxesProcessor {
     }
 
     @VisibleForTesting
-    Optional<String> getMailboxNameFromId(Optional<MailboxId> mailboxId, 
MailboxSession mailboxSession) throws MailboxException {
-        FunctionChainer<MailboxId, Optional<String>> 
fromMailboxIdToMailboxPath = Throwing.function(id -> {
+    Optional<MailboxPath> getMailboxPathFromId(Optional<MailboxId> mailboxId, 
MailboxSession mailboxSession) {
+        FunctionChainer<MailboxId, Optional<MailboxPath>> 
fromMailboxIdToMailboxPath = Throwing.function(id -> {
             try {
-                return Optional.of(mailboxManager.getMailbox(id, 
mailboxSession).getMailboxPath().getName());
+                return Optional.of(mailboxManager.getMailbox(id, 
mailboxSession).getMailboxPath());
             } catch (MailboxNotFoundException e) {
                 return Optional.empty();
             }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to