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