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 2018/05/30 12:42:15 UTC

james-project git commit: JAMES-2399 findMailboxWithPathLike should merge both DAOs

Repository: james-project
Updated Branches:
  refs/heads/master f56c0bbef -> 006c81b4b


JAMES-2399 findMailboxWithPathLike should merge both DAOs


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

Branch: refs/heads/master
Commit: 006c81b4b17abb8bce0cade63026da576d9da19b
Parents: f56c0bb
Author: benwa <bt...@linagora.com>
Authored: Wed May 30 15:14:40 2018 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Wed May 30 14:41:16 2018 +0200

----------------------------------------------------------------------
 .../cassandra/mail/CassandraMailboxMapper.java  | 22 ++++++++++++++------
 .../mail/CassandraMailboxMapperTest.java        | 20 ++++++++++++++++++
 2 files changed, 36 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/006c81b4/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
index 00e570a..92f6f461 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
@@ -159,11 +159,19 @@ public class CassandraMailboxMapper implements MailboxMapper {
 
     @Override
     public List<Mailbox> findMailboxWithPathLike(MailboxPath path) {
-        List<Mailbox> mailboxes = toMailboxes(path, mailboxPathV2DAO.listUserMailboxes(path.getNamespace(), path.getUser()));
-        if (mailboxes.isEmpty()) {
-            return toMailboxes(path, mailboxPathDAO.listUserMailboxes(path.getNamespace(), path.getUser()));
-        }
-        return mailboxes;
+        List<Mailbox> mailboxesV2 = toMailboxes(path, mailboxPathV2DAO.listUserMailboxes(path.getNamespace(), path.getUser()));
+        List<Mailbox> mailboxesV1 = toMailboxes(path, mailboxPathDAO.listUserMailboxes(path.getNamespace(), path.getUser()));
+
+        List<Mailbox> mailboxesV1NotInV2 = mailboxesV1.stream()
+            .filter(mailboxV1 -> mailboxesV2.stream()
+                .map(Mailbox::generateAssociatedPath)
+                .noneMatch(mailboxV2path -> mailboxV2path.equals(mailboxV1.generateAssociatedPath())))
+            .collect(Guavate.toImmutableList());
+
+        return ImmutableList.<Mailbox>builder()
+            .addAll(mailboxesV2)
+            .addAll(mailboxesV1NotInV2)
+            .build();
     }
 
     private List<Mailbox> toMailboxes(MailboxPath path, CompletableFuture<Stream<CassandraIdAndPath>> listUserMailboxes) {
@@ -221,7 +229,9 @@ public class CassandraMailboxMapper implements MailboxMapper {
 
     @Override
     public boolean hasChildren(Mailbox mailbox, char delimiter) {
-        return ImmutableList.of(mailboxPathDAO.listUserMailboxes(mailbox.getNamespace(), mailbox.getUser()), mailboxPathV2DAO.listUserMailboxes(mailbox.getNamespace(), mailbox.getUser()))
+        return ImmutableList.of(
+                mailboxPathDAO.listUserMailboxes(mailbox.getNamespace(), mailbox.getUser()),
+                mailboxPathV2DAO.listUserMailboxes(mailbox.getNamespace(), mailbox.getUser()))
             .stream()
             .map(CompletableFuture::join)
             .flatMap(Function.identity())

http://git-wip-us.apache.org/repos/asf/james-project/blob/006c81b4/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
index 9a780fd..a9c392c 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
@@ -51,6 +51,13 @@ public class CassandraMailboxMapperTest {
     private static final CassandraId MAILBOX_ID = CassandraId.timeBased();
     private static final MailboxPath MAILBOX_PATH = MailboxPath.forUser(USER, "name");
     private static final Mailbox MAILBOX = new SimpleMailbox(MAILBOX_PATH, UID_VALIDITY, MAILBOX_ID);
+
+    private static final CassandraId MAILBOX_ID_2 = CassandraId.timeBased();
+    private static final MailboxPath MAILBOX_PATH_2 = MailboxPath.forUser(USER, "name2");
+    private static final Mailbox MAILBOX_2 = new SimpleMailbox(MAILBOX_PATH_2, UID_VALIDITY, MAILBOX_ID_2);
+
+
+    private static final Mailbox MAILBOX_BIS = new SimpleMailbox(MAILBOX_PATH, UID_VALIDITY, MAILBOX_ID_2);
     private static final String WILDCARD = "%";
 
     @ClassRule public static DockerCassandraRule cassandraServer = new DockerCassandraRule();
@@ -312,4 +319,17 @@ public class CassandraMailboxMapperTest {
     
         assertThat(hasChildren).isTrue();
     }
+
+    @Test
+    public void findMailboxWithPathLikeShouldRemoveDuplicatesAndKeepV2() {
+        mailboxDAO.save(MAILBOX).join();
+        mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID).join();
+
+        mailboxDAO.save(MAILBOX_BIS).join();
+        mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID_2).join();
+
+        assertThat(testee.findMailboxWithPathLike(
+            new MailboxPath(MailboxConstants.USER_NAMESPACE, USER, WILDCARD)))
+            .containsOnly(MAILBOX);
+    }
 }


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