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

Reply via email to