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 ad...@apache.org on 2017/11/13 15:27:39 UTC

[2/8] james-project git commit: PROTOCOLS-117 MailboxPath should be immutable

PROTOCOLS-117 MailboxPath should be immutable


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

Branch: refs/heads/master
Commit: 6a6e74cf0f869c3f69bbb82991fd703bb0f1c42b
Parents: 5218473
Author: benwa <bt...@linagora.com>
Authored: Wed Nov 8 10:04:41 2017 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Mon Nov 13 16:23:06 2017 +0100

----------------------------------------------------------------------
 .../apache/james/mailbox/model/MailboxPath.java | 28 ++---------------
 .../hbase/mail/HBaseMailboxMapperTest.java      | 20 ++++++++----
 .../mailbox/store/StoreMailboxManager.java      | 32 +++++++++++++-------
 3 files changed, 38 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/6a6e74cf/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxPath.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxPath.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxPath.java
index ea5e760..42de9a4 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxPath.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxPath.java
@@ -49,9 +49,9 @@ public class MailboxPath {
         return new MailboxPath(MailboxConstants.USER_NAMESPACE, username, mailboxName);
     }
 
-    private String namespace;
-    private String user;
-    private String name;
+    private final String namespace;
+    private final String user;
+    private final String name;
     
     public MailboxPath(String namespace, String user, String name) {
         this.namespace = Optional.ofNullable(namespace)
@@ -79,13 +79,6 @@ public class MailboxPath {
     }
 
     /**
-     * Set the namespace this mailbox is in
-     */
-    public void setNamespace(String namespace) {
-        this.namespace = namespace;
-    }
-
-    /**
      * Get the name of the user who owns the mailbox. This can be null e.g. for
      * shared mailboxes.
      * 
@@ -96,13 +89,6 @@ public class MailboxPath {
     }
 
     /**
-     * Set the name of the user who owns the mailbox.
-     */
-    public void setUser(String user) {
-        this.user = user;
-    }
-
-    /**
      * Get the name of the mailbox. This is the pure name without user or
      * namespace, so this is what a user would see in his client.
      * 
@@ -113,14 +99,6 @@ public class MailboxPath {
     }
 
     /**
-     * Set the name of the mailbox. This is the pure name without user or
-     * namespace, so this is what a user would see in his client.
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
      * Return a list of MailboxPath representing the hierarchy levels of this
      * MailboxPath. E.g. INBOX.main.sub would yield
      * 

http://git-wip-us.apache.org/repos/asf/james-project/blob/6a6e74cf/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapperTest.java b/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapperTest.java
index 078824c..dca113b 100644
--- a/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapperTest.java
+++ b/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapperTest.java
@@ -160,18 +160,26 @@ public class HBaseMailboxMapperTest {
         MailboxPath newPath;
 
         for (int i = start; i < end; i++) {
-            newPath = new MailboxPath(path);
-            newPath.setName(i + newPath.getName() + " " + i);
-            // test for paths with null user
-            if (i % 2 == 0) {
-                newPath.setUser(null);
-            }
+            newPath = new MailboxPath(path.getNamespace(),
+                computeUserName(path.getUser(), i),
+                computeMailboxName(path.getName(), i));
             addMailbox(new HBaseMailbox(newPath, 1234));
         }
         result = mapper.findMailboxWithPathLike(path);
         assertEquals(end - start + 1, result.size());
     }
 
+    private String computeUserName(String user, int i) {
+        if (i % 2 == 0) {
+            return null;
+        }
+        return user;
+    }
+
+    private String computeMailboxName(String name, int i) {
+        return i + name + " " + i;
+    }
+
     /**
      * Test of list method, of class HBaseMailboxMapper.
      */

http://git-wip-us.apache.org/repos/asf/james-project/blob/6a6e74cf/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index b4f6433..7664f84 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -484,27 +484,25 @@ public class StoreMailboxManager implements MailboxManager {
     }
 
     @Override
-    public Optional<MailboxId> createMailbox(MailboxPath mailboxPath, final MailboxSession mailboxSession)
+    public Optional<MailboxId> createMailbox(MailboxPath mailboxPath, MailboxSession mailboxSession)
             throws MailboxException {
         LOGGER.debug("createMailbox " + mailboxPath);
-        final int length = mailboxPath.getName().length();
-        if (length == 0) {
+        if (mailboxPath.getName().isEmpty()) {
             LOGGER.warn("Ignoring mailbox with empty name");
         } else {
-            if (mailboxPath.getName().charAt(length - 1) == getDelimiter())
-                mailboxPath.setName(mailboxPath.getName().substring(0, length - 1));
-            if (mailboxExists(mailboxPath, mailboxSession))
-                throw new MailboxExistsException(mailboxPath.toString());
+            MailboxPath sanitizedMailboxPath = sanitizeMailboxPath(mailboxPath);
+            if (mailboxExists(sanitizedMailboxPath, mailboxSession))
+                throw new MailboxExistsException(sanitizedMailboxPath.asString());
             // Create parents first
             // If any creation fails then the mailbox will not be created
             // TODO: transaction
-            final List<MailboxId> mailboxIds = new ArrayList<>();
-            for (final MailboxPath mailbox : mailboxPath.getHierarchyLevels(getDelimiter()))
+            List<MailboxId> mailboxIds = new ArrayList<>();
+            for (MailboxPath mailbox : sanitizedMailboxPath.getHierarchyLevels(getDelimiter()))
 
                 locker.executeWithLock(mailboxSession, mailbox, (LockAwareExecution<Void>) () -> {
                     if (!mailboxExists(mailbox, mailboxSession)) {
-                        final Mailbox m = doCreateMailbox(mailbox, mailboxSession);
-                        final MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession);
+                        Mailbox m = doCreateMailbox(mailbox, mailboxSession);
+                        MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession);
                         mapper.execute(Mapper.toTransaction(() -> mailboxIds.add(mapper.save(m))));
 
                         // notify listeners
@@ -521,6 +519,18 @@ public class StoreMailboxManager implements MailboxManager {
         return Optional.empty();
     }
 
+    private MailboxPath sanitizeMailboxPath(MailboxPath mailboxPath) {
+        if (mailboxPath.getName().endsWith(String.valueOf(getDelimiter()))) {
+            int length = mailboxPath.getName().length();
+            String sanitizedName = mailboxPath.getName().substring(0, length - 1);
+            return new MailboxPath(
+                mailboxPath.getNamespace(),
+                mailboxPath.getUser(),
+                sanitizedName);
+        }
+        return mailboxPath;
+    }
+
     @Override
     public void deleteMailbox(final MailboxPath mailboxPath, final MailboxSession session) throws MailboxException {
         LOGGER.info("deleteMailbox " + mailboxPath);


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org