JAMES-1849 Childhood tests should be handled by MailboxAnnotationKey
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/4e059b10 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/4e059b10 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/4e059b10 Branch: refs/heads/master Commit: 4e059b1051f2b9edf55ffbbab3682e5196d53bdb Parents: 4925f66 Author: Benoit Tellier <btell...@linagora.com> Authored: Thu Oct 27 08:38:31 2016 +0200 Committer: Benoit Tellier <btell...@linagora.com> Committed: Thu Nov 3 15:26:07 2016 +0100 ---------------------------------------------------------------------- .../mailbox/model/MailboxAnnotationKey.java | 14 ++- .../mailbox/model/MailboxAnnotationKeyTest.java | 95 ++++++++++++++++++++ .../mail/CassandraAnnotationMapper.java | 6 +- 3 files changed, 109 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/4e059b10/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxAnnotationKey.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxAnnotationKey.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxAnnotationKey.java index 54dd2d7..bcc644e 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxAnnotationKey.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxAnnotationKey.java @@ -19,10 +19,11 @@ package org.apache.james.mailbox.model; +import org.apache.commons.lang.StringUtils; + import com.google.common.base.CharMatcher; import com.google.common.base.Objects; import com.google.common.base.Preconditions; -import org.apache.commons.lang.StringUtils; public class MailboxAnnotationKey { public static final String SLASH_CHARACTER = "/"; @@ -91,6 +92,17 @@ public class MailboxAnnotationKey { return key.toLowerCase(); } + public boolean isParentOrIsEqual(MailboxAnnotationKey key) { + int thatComponentsSize = key.countComponents(); + int thisComponentsSize = this.countComponents(); + return (thatComponentsSize == thisComponentsSize || thatComponentsSize == thisComponentsSize + 1) + && isAncestorOrIsEqual(key); + } + + public boolean isAncestorOrIsEqual(MailboxAnnotationKey key) { + return asString().equals(key.asString()) || key.asString().startsWith(this.asString() + SLASH_CHARACTER); + } + @Override public boolean equals(Object obj) { if (obj instanceof MailboxAnnotationKey) { http://git-wip-us.apache.org/repos/asf/james-project/blob/4e059b10/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAnnotationKeyTest.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAnnotationKeyTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAnnotationKeyTest.java index 6e416dd..d4b6342 100644 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAnnotationKeyTest.java +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAnnotationKeyTest.java @@ -113,4 +113,99 @@ public class MailboxAnnotationKeyTest { public void keyVendorShouldOKWithFourComponents() throws Exception { new MailboxAnnotationKey("/shared/vendor/token/comment"); } + + @Test + public void isParentOrIsEqualShouldReturnTrueWhenSameKey() { + MailboxAnnotationKey key1 = new MailboxAnnotationKey("/private/comment"); + + assertThat(key1.isParentOrIsEqual(key1)).isTrue(); + } + + @Test + public void isParentOrIsEqualShouldReturnTrueWhenParent() { + MailboxAnnotationKey key1 = new MailboxAnnotationKey("/private/comment"); + MailboxAnnotationKey key2 = new MailboxAnnotationKey("/private/comment/toto"); + + assertThat(key1.isParentOrIsEqual(key2)).isTrue(); + } + + @Test + public void isParentOrIsEqualShouldReturnFalseWhenChild() { + MailboxAnnotationKey key1 = new MailboxAnnotationKey("/private/comment"); + MailboxAnnotationKey key2 = new MailboxAnnotationKey("/private/comment/toto"); + + assertThat(key2.isParentOrIsEqual(key1)).isFalse(); + } + + @Test + public void isParentOrIsEqualShouldReturnFalseWhenGrandParent() { + MailboxAnnotationKey key1 = new MailboxAnnotationKey("/private/comment"); + MailboxAnnotationKey key2 = new MailboxAnnotationKey("/private/comment/toto/tata"); + + assertThat(key1.isParentOrIsEqual(key2)).isFalse(); + } + + @Test + public void isParentOrIsEqualShouldReturnFalseWhenCousin() { + MailboxAnnotationKey key1 = new MailboxAnnotationKey("/private/comment/tutu"); + MailboxAnnotationKey key2 = new MailboxAnnotationKey("/private/comment/toto/tata"); + + assertThat(key1.isParentOrIsEqual(key2)).isFalse(); + } + + + @Test + public void isAncestorOrIsEqualShouldReturnTrueWhenSameKey() { + MailboxAnnotationKey key1 = new MailboxAnnotationKey("/private/comment"); + + assertThat(key1.isAncestorOrIsEqual(key1)).isTrue(); + } + + @Test + public void isAncestorOrIsEqualShouldReturnTrueWhenParent() { + MailboxAnnotationKey key1 = new MailboxAnnotationKey("/private/comment"); + MailboxAnnotationKey key2 = new MailboxAnnotationKey("/private/comment/toto"); + + assertThat(key1.isAncestorOrIsEqual(key2)).isTrue(); + } + + @Test + public void isAncestorOrIsEqualShouldReturnFalseWhenChild() { + MailboxAnnotationKey key1 = new MailboxAnnotationKey("/private/comment"); + MailboxAnnotationKey key2 = new MailboxAnnotationKey("/private/comment/toto"); + + assertThat(key2.isAncestorOrIsEqual(key1)).isFalse(); + } + + @Test + public void isAncestorOrIsEqualShouldReturnTrueWhenGrandParent() { + MailboxAnnotationKey key1 = new MailboxAnnotationKey("/private/comment"); + MailboxAnnotationKey key2 = new MailboxAnnotationKey("/private/comment/toto/tata"); + + assertThat(key1.isAncestorOrIsEqual(key2)).isTrue(); + } + + @Test + public void isAncestorOrIsEqualShouldReturnFalseWhenCousin() { + MailboxAnnotationKey key1 = new MailboxAnnotationKey("/private/comment/tutu"); + MailboxAnnotationKey key2 = new MailboxAnnotationKey("/private/comment/toto/tata"); + + assertThat(key1.isAncestorOrIsEqual(key2)).isFalse(); + } + + @Test + public void isAncestorOrIsEqualShouldWorkOnCousinKeyUsingKeyAsAPrefix() { + MailboxAnnotationKey key1 = new MailboxAnnotationKey("/private/comment/tutu"); + MailboxAnnotationKey key2 = new MailboxAnnotationKey("/private/comment/tututata"); + + assertThat(key1.isAncestorOrIsEqual(key2)).isFalse(); + } + + @Test + public void isParentOrIsEqualShouldWorkOnCousinKeyUsingKeyAsAPrefix() { + MailboxAnnotationKey key1 = new MailboxAnnotationKey("/private/comment/tutu"); + MailboxAnnotationKey key2 = new MailboxAnnotationKey("/private/comment/tututata"); + + assertThat(key1.isParentOrIsEqual(key2)).isFalse(); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/james-project/blob/4e059b10/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAnnotationMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAnnotationMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAnnotationMapper.java index 3984ac7..db0a7c6 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAnnotationMapper.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAnnotationMapper.java @@ -133,11 +133,7 @@ public class CassandraAnnotationMapper extends NonTransactionalMapper implements private Stream<MailboxAnnotation> getAnnotationsByKeyWithOneDepth(CassandraId mailboxId, MailboxAnnotationKey key) { return CassandraUtils.convertToStream(session.execute(getStoredAnnotationsQueryLikeKey(mailboxId, key.asString()))) .map(this::toAnnotation) - .filter(annotation -> isChild(key, annotation)); - } - - private boolean isChild(MailboxAnnotationKey key, MailboxAnnotation annotation) { - return annotation.getKey().countComponents() <= key.countComponents() + 1; + .filter(annotation -> key.isParentOf(annotation.getKey())); } @Override --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org