MAILBOX-270: Refactor cause adding new class 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/c25c6740 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c25c6740 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c25c6740 Branch: refs/heads/master Commit: c25c6740e7748fd5b1de5253b5588373f08c083a Parents: a416424 Author: Quynh Nguyen <[email protected]> Authored: Tue Jul 5 14:14:39 2016 +0700 Committer: Quynh Nguyen <[email protected]> Committed: Wed Aug 31 09:23:17 2016 +0700 ---------------------------------------------------------------------- .../james/mailbox/model/MailboxAnnotation.java | 2 - .../mailbox/model/MailboxAnnotationKey.java | 21 ++--- .../mailbox/model/MailboxAnnotationKeyTest.java | 96 ++++++++++++++++++++ .../mailbox/model/MailboxAnnotationTest.java | 56 +----------- .../mail/CassandraAnnotationMapper.java | 13 ++- .../inmemory/mail/InMemoryAnnotationMapper.java | 6 +- .../store/mail/model/AnnotationMapperTest.java | 10 ++ .../parser/SetAnnotationCommandParser.java | 9 +- .../parser/SetAnnotationCommandParserTest.java | 12 ++- .../encode/AnnotationResponseEncoderTest.java | 2 +- .../processor/SetAnnotationProcessorTest.java | 3 +- 11 files changed, 145 insertions(+), 85 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/c25c6740/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxAnnotation.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxAnnotation.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxAnnotation.java index 22ecf13..ff9897d 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxAnnotation.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxAnnotation.java @@ -39,8 +39,6 @@ public class MailboxAnnotation { private MailboxAnnotation(MailboxAnnotationKey key, Optional<String> value) { Preconditions.checkNotNull(key); Preconditions.checkNotNull(value); - Preconditions.checkArgument(key.isValid(), - "Key must start with '/' and not end with '/' and does not contain charater with hex from '\u0000' to '\u00019' or {'*', '%', two consecutive '/'} "); this.key = key; this.value = value; } http://git-wip-us.apache.org/repos/asf/james-project/blob/c25c6740/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 0817ded..09906b4 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 @@ -21,27 +21,26 @@ package org.apache.james.mailbox.model; import com.google.common.base.CharMatcher; import com.google.common.base.Objects; +import com.google.common.base.Preconditions; import org.apache.commons.lang.StringUtils; -/** - * Created by quynh on 04/07/2016. - */ public class MailboxAnnotationKey { public static final String SLASH_CHARACTER = "/"; public static final String TWO_SLASH_CHARACTER = "//"; - private static final CharMatcher NAME_ANNOTATION_PATTERN = CharMatcher.ASCII - .and(CharMatcher.inRange('\u0000', '\u0019').negate()).and(CharMatcher.isNot('*')) - .and(CharMatcher.isNot('%')); + private static final CharMatcher NAME_ANNOTATION_PATTERN = CharMatcher.JAVA_LETTER_OR_DIGIT + .or(CharMatcher.is('/')); private final String key; public MailboxAnnotationKey(String key) { + Preconditions.checkArgument(isValid(key), + "Key must start with '/' and not end with '/' and does not contain charater with hex from '\u0000' to '\u00019' or {'*', '%', two consecutive '/'} "); this.key = key; } - public boolean isValid() { + private boolean isValid(String key) { if (StringUtils.isBlank(key)) { return false; } @@ -63,19 +62,19 @@ public class MailboxAnnotationKey { return true; } - public int countSlash() { + public int countComponents() { return StringUtils.countMatches(key, SLASH_CHARACTER); } - public String getKey() { - return key; + public String asString() { + return key.toLowerCase(); } @Override public boolean equals(Object obj) { if (obj instanceof MailboxAnnotationKey) { MailboxAnnotationKey anotherKey = (MailboxAnnotationKey)obj; - return Objects.equal(anotherKey.getKey(), key); + return Objects.equal(anotherKey.asString(), key); } else { return false; } http://git-wip-us.apache.org/repos/asf/james-project/blob/c25c6740/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 new file mode 100644 index 0000000..e6f3503 --- /dev/null +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAnnotationKeyTest.java @@ -0,0 +1,96 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.mailbox.model; + +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class MailboxAnnotationKeyTest { + @Test(expected = IllegalArgumentException.class) + public void newInstanceShouldThrowsExceptionWhenKeyDoesNotStartWithSlash() throws Exception { + new MailboxAnnotationKey("shared"); + } + + @Test(expected = IllegalArgumentException.class) + public void newInstanceShouldThrowsExceptionWhenKeyContainsAsterisk() throws Exception { + new MailboxAnnotationKey("/private/key*comment"); + } + + @Test(expected = IllegalArgumentException.class) + public void newInstanceShouldThrowsExceptionWhenKeyContainsPercent() throws Exception { + new MailboxAnnotationKey("/private/key%comment"); + } + + @Test(expected = IllegalArgumentException.class) + public void validKeyShouldThrowsExceptionWhenKeyContainsTwoConsecutiveSlash() throws Exception { + new MailboxAnnotationKey("/private//keycomment"); + } + + @Test(expected = IllegalArgumentException.class) + public void validKeyShouldThrowsExceptionWhenKeyEndsWithSlash() throws Exception { + new MailboxAnnotationKey("/private/keycomment/"); + } + + @Test(expected = IllegalArgumentException.class) + public void validKeyShouldThrowsExceptionWhenKeyContainsNonASCII() throws Exception { + new MailboxAnnotationKey("/private/keyâ¬Ã¡comment"); + } + + @Test(expected = IllegalArgumentException.class) + public void validKeyShouldThrowsExceptionWhenKeyContainsTabCharacter() throws Exception { + new MailboxAnnotationKey("/private/key\tcomment"); + } + + @Test(expected = IllegalArgumentException.class) + public void newInstanceShouldThrowsExceptionWithEmptyKey() throws Exception { + new MailboxAnnotationKey(""); + } + + @Test(expected = IllegalArgumentException.class) + public void newInstanceShouldThrowsExceptionWithBlankKey() throws Exception { + new MailboxAnnotationKey(" "); + } + + @Test + public void newInstanceShouldReturnRightKeyValue() throws Exception { + MailboxAnnotationKey annotationKey = new MailboxAnnotationKey("/private/comment"); + assertThat(annotationKey.asString()).isEqualTo("/private/comment"); + } + + @Test + public void keyValueShouldBeCaseInsensitive() throws Exception { + MailboxAnnotationKey annotationKey = new MailboxAnnotationKey("/private/comment"); + MailboxAnnotationKey anotherAnnotationKey = new MailboxAnnotationKey("/PRIVATE/COMMENT"); + + assertThat(annotationKey.equals(anotherAnnotationKey)).isTrue(); + } + + @Test(expected = IllegalArgumentException.class) + public void newInstanceShouldThrowsExceptionWhenKeyContainsPunctuationCharacters() throws Exception { + new MailboxAnnotationKey("/private/+comment"); + } + + @Test + public void countSlashShouldReturnRightNumberOfSlash() throws Exception { + MailboxAnnotationKey annotationKey = new MailboxAnnotationKey("/private/comment/user/name"); + assertThat(annotationKey.countComponents()).isEqualTo(4); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/james-project/blob/c25c6740/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAnnotationTest.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAnnotationTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAnnotationTest.java index 97fe2eb..fc114bc 100644 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAnnotationTest.java +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAnnotationTest.java @@ -29,7 +29,6 @@ public class MailboxAnnotationTest { private static final String PERCENT_CHARACTER = "%"; - private static final MailboxAnnotationKey ANY_KEY = new MailboxAnnotationKey("shared"); private static final MailboxAnnotationKey ANNOTATION_KEY = new MailboxAnnotationKey("/private/comment"); private static final String ANNOTATION_VALUE = "anyValue"; @@ -53,52 +52,7 @@ public class MailboxAnnotationTest { @Test(expected = NullPointerException.class) public void newInstanceShouldThrowsExceptionWithNullValue() throws Exception { - MailboxAnnotation.newInstance(ANY_KEY, null); - } - - @Test(expected = IllegalArgumentException.class) - public void newInstanceShouldThrowsExceptionWithEmptyKey() throws Exception { - MailboxAnnotation.newInstance(new MailboxAnnotationKey(""), ANNOTATION_VALUE); - } - - @Test(expected = IllegalArgumentException.class) - public void newInstanceShouldThrowsExceptionWithBlankKey() throws Exception { - MailboxAnnotation.newInstance(new MailboxAnnotationKey(" "), ANNOTATION_VALUE); - } - - @Test(expected = IllegalArgumentException.class) - public void newInstanceShouldThrowsExceptionWhenKeyDoesNotStartWithSlash() throws Exception { - MailboxAnnotation.newInstance(ANY_KEY, ANNOTATION_VALUE); - } - - @Test(expected = IllegalArgumentException.class) - public void newInstanceShouldThrowsExceptionWhenKeyContainsAsterisk() throws Exception { - MailboxAnnotation.newInstance(new MailboxAnnotationKey("/private/key*comment"), ANNOTATION_VALUE); - } - - @Test(expected = IllegalArgumentException.class) - public void newInstanceShouldThrowsExceptionWhenKeyContainsPercent() throws Exception { - MailboxAnnotation.newInstance(new MailboxAnnotationKey("/private/key%comment"), ANNOTATION_VALUE); - } - - @Test(expected = IllegalArgumentException.class) - public void validKeyShouldThrowsExceptionWhenKeyContainsTwoConsecutiveSlash() throws Exception { - MailboxAnnotation.newInstance(new MailboxAnnotationKey("/private//keycomment"), ANNOTATION_VALUE); - } - - @Test(expected = IllegalArgumentException.class) - public void validKeyShouldThrowsExceptionWhenKeyEndsWithSlash() throws Exception { - MailboxAnnotation.newInstance(new MailboxAnnotationKey("/private/keycomment/"), ANNOTATION_VALUE); - } - - @Test(expected = IllegalArgumentException.class) - public void validKeyShouldThrowsExceptionWhenKeyContainsNonASCII() throws Exception { - MailboxAnnotation.newInstance(new MailboxAnnotationKey("/private/keyâ¬Ã¡comment"), ANNOTATION_VALUE); - } - - @Test(expected = IllegalArgumentException.class) - public void validKeyShouldThrowsExceptionWhenKeyContainsTabCharacter() throws Exception { - MailboxAnnotation.newInstance(new MailboxAnnotationKey("/private/key\tcomment"), ANNOTATION_VALUE); + MailboxAnnotation.newInstance(ANNOTATION_KEY, null); } @Test @@ -122,7 +76,7 @@ public class MailboxAnnotationTest { @Test(expected = NullPointerException.class) public void newInstanceMailboxAnnotationShouldThrowExceptionWithNullValue() throws Exception { - MailboxAnnotation.newInstance(ANY_KEY, null); + MailboxAnnotation.newInstance(ANNOTATION_KEY, null); } @Test @@ -133,10 +87,4 @@ public class MailboxAnnotationTest { assertThat(annotation.getValue()).contains(ANNOTATION_VALUE); } - @Test - public void countSlashShouldReturnRightNumberOfSlash() throws Exception { - MailboxAnnotation annotation = MailboxAnnotation.newInstance(new MailboxAnnotationKey("/private/comment/user/name"), ANNOTATION_VALUE); - assertThat(annotation.getKey().countSlash()).isEqualTo(4); - } - } http://git-wip-us.apache.org/repos/asf/james-project/blob/c25c6740/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 7f5171e..995795a 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 @@ -49,7 +49,6 @@ import com.google.common.base.Preconditions; public class CassandraAnnotationMapper extends NonTransactionalMapper implements AnnotationMapper { - public static final char MAXIMUM_ASCII_CHARACTER = 127; private final CassandraId mailboxId; private final Session session; @@ -85,14 +84,14 @@ public class CassandraAnnotationMapper extends NonTransactionalMapper implements public void deleteAnnotation(MailboxAnnotationKey key) { session.execute(delete().from(CassandraAnnotationTable.TABLE_NAME) .where(eq(CassandraAnnotationTable.MAILBOX_ID, mailboxId.asUuid())) - .and(eq(CassandraAnnotationTable.KEY, key.getKey()))); + .and(eq(CassandraAnnotationTable.KEY, key.asString()))); } public void insertAnnotation(MailboxAnnotation mailboxAnnotation) { Preconditions.checkArgument(!mailboxAnnotation.isNil()); session.execute(insertInto(CassandraAnnotationTable.TABLE_NAME) .value(CassandraAnnotationTable.MAILBOX_ID, mailboxId.asUuid()) - .value(CassandraAnnotationTable.KEY, mailboxAnnotation.getKey().getKey()) + .value(CassandraAnnotationTable.KEY, mailboxAnnotation.getKey().asString()) .value(CassandraAnnotationTable.VALUE, mailboxAnnotation.getValue().get())); } @@ -120,22 +119,22 @@ public class CassandraAnnotationMapper extends NonTransactionalMapper implements } private String buildNextKey(String key) { - return key + MailboxAnnotationKey.SLASH_CHARACTER + MAXIMUM_ASCII_CHARACTER; + return key + MailboxAnnotationKey.SLASH_CHARACTER + Ascii.MAX; } private Stream<MailboxAnnotation> getAnnotationsByKeyWithAllDepth(MailboxAnnotationKey key) { - return CassandraUtils.convertToStream(session.execute(getStoredAnnotationsQueryLikeKey(key.getKey()))) + return CassandraUtils.convertToStream(session.execute(getStoredAnnotationsQueryLikeKey(key.asString()))) .map(this::toAnnotation); } private Stream<MailboxAnnotation> getAnnotationsByKeyWithOneDepth(MailboxAnnotationKey key) { - return CassandraUtils.convertToStream(session.execute(getStoredAnnotationsQueryLikeKey(key.getKey()))) + return CassandraUtils.convertToStream(session.execute(getStoredAnnotationsQueryLikeKey(key.asString()))) .map(this::toAnnotation) .filter(annotation -> isChild(key, annotation)); } private boolean isChild(MailboxAnnotationKey key, MailboxAnnotation annotation) { - return annotation.getKey().countSlash() <= key.countSlash(); + return annotation.getKey().countComponents() <= key.countComponents() + 1; } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/c25c6740/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryAnnotationMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryAnnotationMapper.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryAnnotationMapper.java index ff9f962..e433603 100644 --- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryAnnotationMapper.java +++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryAnnotationMapper.java @@ -43,7 +43,7 @@ import com.google.common.collect.Table; public class InMemoryAnnotationMapper implements AnnotationMapper { private final InMemoryId mailboxId; - private final Table<InMemoryId, MailboxAnnotationKey, String> mailboxesAnnotations; + private final Table<InMemoryId, String, String> mailboxesAnnotations; private final ReadWriteLock lock = new ReentrantReadWriteLock(); public InMemoryAnnotationMapper(InMemoryId mailboxId) { @@ -145,7 +145,7 @@ public class InMemoryAnnotationMapper implements AnnotationMapper { Preconditions.checkArgument(!mailboxAnnotation.isNil()); lock.writeLock().lock(); try { - mailboxesAnnotations.put(mailboxId, mailboxAnnotation.getKey(), mailboxAnnotation.getValue().get()); + mailboxesAnnotations.put(mailboxId, mailboxAnnotation.getKey().asString(), mailboxAnnotation.getValue().get()); } finally { lock.writeLock().unlock(); } @@ -155,7 +155,7 @@ public class InMemoryAnnotationMapper implements AnnotationMapper { public void deleteAnnotation(MailboxAnnotationKey key) { lock.writeLock().lock(); try { - mailboxesAnnotations.remove(mailboxId, key); + mailboxesAnnotations.remove(mailboxId, key.asString()); } finally { lock.writeLock().unlock(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/c25c6740/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AnnotationMapperTest.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AnnotationMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AnnotationMapperTest.java index 56a3ee3..c1fdf6c 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AnnotationMapperTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AnnotationMapperTest.java @@ -40,6 +40,7 @@ import com.google.common.collect.Lists; @Contract(MapperProvider.class) public class AnnotationMapperTest<T extends MapperProvider> { private static final MailboxAnnotationKey PRIVATE_USER_KEY = new MailboxAnnotationKey("/private/commentuser"); + private static final MailboxAnnotationKey PRIVATE_UPPER_CASE_KEY = new MailboxAnnotationKey("/PRIVATE/COMMENT"); private static final MailboxAnnotationKey PRIVATE_KEY = new MailboxAnnotationKey("/private/comment"); private static final MailboxAnnotationKey PRIVATE_CHILD_KEY = new MailboxAnnotationKey("/private/comment/user"); private static final MailboxAnnotationKey PRIVATE_GRANDCHILD_KEY = new MailboxAnnotationKey("/private/comment/user/name"); @@ -47,6 +48,7 @@ public class AnnotationMapperTest<T extends MapperProvider> { private static final MailboxAnnotation PRIVATE_USER_ANNOTATION = MailboxAnnotation.newInstance(PRIVATE_USER_KEY, "My private comment"); private static final MailboxAnnotation PRIVATE_ANNOTATION = MailboxAnnotation.newInstance(PRIVATE_KEY, "My private comment"); + private static final MailboxAnnotation PRIVATE_ANNOTATION_WITH_KEY_UPPER = MailboxAnnotation.newInstance(PRIVATE_UPPER_CASE_KEY, "The annotation with upper key"); private static final MailboxAnnotation PRIVATE_CHILD_ANNOTATION = MailboxAnnotation.newInstance(PRIVATE_CHILD_KEY, "My private comment"); private static final MailboxAnnotation PRIVATE_ANNOTATION_UPDATE = MailboxAnnotation.newInstance(PRIVATE_KEY, "My updated private comment"); private static final MailboxAnnotation SHARED_ANNOTATION = MailboxAnnotation.newInstance(SHARED_KEY, "My shared comment"); @@ -193,4 +195,12 @@ public class AnnotationMapperTest<T extends MapperProvider> { assertThat(annotationMapper.getAnnotationsByKeysWithAllDepth(ImmutableSet.of(PRIVATE_KEY))).isEmpty(); } + + @ContractTest + public void annotationShouldBeCaseInsentive() throws Exception { + annotationMapper.insertAnnotation(PRIVATE_ANNOTATION); + annotationMapper.insertAnnotation(PRIVATE_ANNOTATION_WITH_KEY_UPPER); + + assertThat(annotationMapper.getAllAnnotations()).containsOnly(PRIVATE_ANNOTATION_WITH_KEY_UPPER); + } } http://git-wip-us.apache.org/repos/asf/james-project/blob/c25c6740/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/SetAnnotationCommandParser.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/SetAnnotationCommandParser.java b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/SetAnnotationCommandParser.java index fb66888..26c372a 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/SetAnnotationCommandParser.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/SetAnnotationCommandParser.java @@ -28,6 +28,7 @@ import org.apache.james.imap.decode.ImapRequestLineReader; import org.apache.james.imap.decode.base.AbstractImapCommandParser; import org.apache.james.imap.message.request.SetAnnotationRequest; import org.apache.james.mailbox.model.MailboxAnnotation; +import org.apache.james.mailbox.model.MailboxAnnotationKey; import org.apache.james.protocols.imap.DecodingException; import com.google.common.base.Function; @@ -66,7 +67,7 @@ public class SetAnnotationCommandParser extends AbstractImapCommandParser { return Optional.fromNullable(value) .transform(transforMailboxAnnotation(key)) - .or(MailboxAnnotation.nil(key)); + .or(MailboxAnnotation.nil(createAnnotationKey(key))); } catch (IllegalArgumentException e) { throw new DecodingException(HumanReadableText.ILLEGAL_ARGUMENTS, "The key is not valid: " + e.getMessage()); } @@ -75,9 +76,13 @@ public class SetAnnotationCommandParser extends AbstractImapCommandParser { private Function<String, MailboxAnnotation> transforMailboxAnnotation(final String key) { return new Function<String, MailboxAnnotation>() { public MailboxAnnotation apply(String value) { - return MailboxAnnotation.newInstance(key, value); + return MailboxAnnotation.newInstance(createAnnotationKey(key), value); } }; } + private MailboxAnnotationKey createAnnotationKey(String key) { + return new MailboxAnnotationKey(key); + } + } http://git-wip-us.apache.org/repos/asf/james-project/blob/c25c6740/protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SetAnnotationCommandParserTest.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SetAnnotationCommandParserTest.java b/protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SetAnnotationCommandParserTest.java index 9a793c6..3b46532 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SetAnnotationCommandParserTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SetAnnotationCommandParserTest.java @@ -30,6 +30,7 @@ import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.decode.ImapRequestStreamLineReader; import org.apache.james.imap.message.request.SetAnnotationRequest; import org.apache.james.mailbox.model.MailboxAnnotation; +import org.apache.james.mailbox.model.MailboxAnnotationKey; import org.apache.james.protocols.imap.DecodingException; import org.junit.Test; @@ -37,9 +38,12 @@ public class SetAnnotationCommandParserTest { private static final String INBOX = "anyMailboxName"; private static final String TAG = "A1"; - private static final MailboxAnnotation PRIVATE_ANNOTATION = MailboxAnnotation.newInstance("/private/comment", "This is my comment"); - private static final MailboxAnnotation SHARED_ANNOTATION = MailboxAnnotation.newInstance("/shared/comment", "This one is for you!"); - private static final MailboxAnnotation NIL_ANNOTATION = MailboxAnnotation.nil("/private/comment"); + private static final MailboxAnnotationKey PRIVATE_KEY = new MailboxAnnotationKey("/private/comment"); + private static final MailboxAnnotationKey SHARED_KEY = new MailboxAnnotationKey("/shared/comment"); + + private static final MailboxAnnotation PRIVATE_ANNOTATION = MailboxAnnotation.newInstance(PRIVATE_KEY, "This is my comment"); + private static final MailboxAnnotation SHARED_ANNOTATION = MailboxAnnotation.newInstance(SHARED_KEY, "This one is for you!"); + private static final MailboxAnnotation NIL_ANNOTATION = MailboxAnnotation.nil(PRIVATE_KEY); private SetAnnotationCommandParser parser = new SetAnnotationCommandParser(); private ImapCommand command = ImapCommand.anyStateCommand("Command"); @@ -78,7 +82,7 @@ public class SetAnnotationCommandParserTest { SetAnnotationRequest request = (SetAnnotationRequest) parser.decode(command, lineReader, TAG, null); assertThat(request.getMailboxName()).isEqualTo(INBOX); - assertThat(request.getMailboxAnnotations()).containsOnly(MailboxAnnotation.newInstance("/private/comment", "My new comment across two lines.")); + assertThat(request.getMailboxAnnotations()).containsOnly(MailboxAnnotation.newInstance(PRIVATE_KEY, "My new comment across two lines.")); } @Test http://git-wip-us.apache.org/repos/asf/james-project/blob/c25c6740/protocols/imap/src/test/java/org/apache/james/imap/encode/AnnotationResponseEncoderTest.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/test/java/org/apache/james/imap/encode/AnnotationResponseEncoderTest.java b/protocols/imap/src/test/java/org/apache/james/imap/encode/AnnotationResponseEncoderTest.java index 86c4ad9..16e3730 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/encode/AnnotationResponseEncoderTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/encode/AnnotationResponseEncoderTest.java @@ -103,7 +103,7 @@ public class AnnotationResponseEncoderTest { encoder.encode(response, composer, imapSession); - verify(log).warn("There is nil data of key {} on store: ", PRIVATE_KEY.getKey()); + verify(log).warn("There is nil data of key {} on store: ", PRIVATE_KEY.asString()); assertThat(byteImapResponseWriter.getString()).isEqualTo("* METADATA \"INBOX\" ()\r\n"); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/c25c6740/protocols/imap/src/test/java/org/apache/james/imap/processor/SetAnnotationProcessorTest.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/SetAnnotationProcessorTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/SetAnnotationProcessorTest.java index 65d62ea..1a76a1e 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/SetAnnotationProcessorTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/SetAnnotationProcessorTest.java @@ -47,6 +47,7 @@ import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxNotFoundException; import org.apache.james.mailbox.mock.MockMailboxSession; import org.apache.james.mailbox.model.MailboxAnnotation; +import org.apache.james.mailbox.model.MailboxAnnotationKey; import org.apache.james.mailbox.model.MailboxPath; import org.junit.After; import org.junit.Before; @@ -92,7 +93,7 @@ public class SetAnnotationProcessorTest { mockMailboxSession = new MockMailboxSession("username"); inbox = MailboxPath.inbox(mockMailboxSession); - MAILBOX_ANNOTATIONS = ImmutableList.of(MailboxAnnotation.newInstance("/private/key", "anyValue")); + MAILBOX_ANNOTATIONS = ImmutableList.of(MailboxAnnotation.newInstance(new MailboxAnnotationKey("/private/key"), "anyValue")); request = new SetAnnotationRequest(TAG, ImapCommand.anyStateCommand("Name"), ImapConstants.INBOX_NAME, MAILBOX_ANNOTATIONS); humanTextCaptor = ArgumentCaptor.forClass(HumanReadableText.class); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
