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 2017/06/09 21:29:11 UTC
[3/7] james-project git commit: JAMES-1951 use
MessageManager.getApplicableFlag
JAMES-1951 use MessageManager.getApplicableFlag
As ApplicableFlags are always merged with System flags, we decided that Applicable flags should always contains system flags. We corrected MessageMapper tests accordingly.
Also s/getApplicableFlag/getApplicableFlags/
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/e56bb6a1
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/e56bb6a1
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/e56bb6a1
Branch: refs/heads/master
Commit: e56bb6a12419ed2ef77e88c78c6d6adf9c5847d0
Parents: 587c0eb
Author: Luc DUZAN <ld...@linagora.com>
Authored: Tue Feb 28 18:55:14 2017 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Fri Jun 9 21:56:01 2017 +0200
----------------------------------------------------------------------
.../apache/james/mailbox/MessageManager.java | 2 +-
.../cassandra/mail/CassandraMessageMapper.java | 9 +-
.../mailbox/store/StoreMessageManager.java | 2 +-
.../mail/utils/ApplicableFlagCalculator.java | 27 ++---
.../store/AbstractCombinationManagerTest.java | 54 +++++----
.../store/mail/model/MessageMapperTest.java | 117 +++++++++++++------
.../utils/ApplicableFlagCalculatorTest.java | 55 ++++++---
.../processor/base/SelectedMailboxImpl.java | 48 +++-----
.../base/MailboxEventAnalyserTest.java | 4 +-
9 files changed, 191 insertions(+), 127 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/e56bb6a1/mailbox/api/src/main/java/org/apache/james/mailbox/MessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MessageManager.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MessageManager.java
index e0a2d40..edad736 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MessageManager.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MessageManager.java
@@ -170,7 +170,7 @@ public interface MessageManager {
*/
MailboxPath getMailboxPath() throws MailboxException;
- Flags getApplicableFlag(MailboxSession session) throws MailboxException;
+ Flags getApplicableFlags(MailboxSession session) throws MailboxException;
/**
* Gets current meta data for the mailbox.<br>
http://git-wip-us.apache.org/repos/asf/james-project/blob/e56bb6a1/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
index b4ac929..80fc5c1 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
@@ -32,6 +32,7 @@ import javax.mail.Flags;
import javax.mail.Flags.Flag;
import org.apache.commons.lang3.tuple.Pair;
+import org.apache.james.mailbox.ApplicableFlagBuilder;
import org.apache.james.mailbox.FlagsBuilder;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageUid;
@@ -359,9 +360,11 @@ public class CassandraMessageMapper implements MessageMapper {
@Override
public Flags getApplicableFlag(Mailbox mailbox) throws MailboxException {
- return applicableFlagDAO.retrieveApplicableFlag((CassandraId) mailbox.getMailboxId())
- .join()
- .orElse(new Flags());
+ return ApplicableFlagBuilder.builder()
+ .add(applicableFlagDAO.retrieveApplicableFlag((CassandraId) mailbox.getMailboxId())
+ .join()
+ .orElse(new Flags()))
+ .build();
}
private CompletableFuture<Void> save(Mailbox mailbox, MailboxMessage message) throws MailboxException {
http://git-wip-us.apache.org/repos/asf/james-project/blob/e56bb6a1/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
index 5f7e279..5554acc 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
@@ -868,7 +868,7 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
}
@Override
- public Flags getApplicableFlag(MailboxSession session) throws MailboxException {
+ public Flags getApplicableFlags(MailboxSession session) throws MailboxException {
return mapperFactory.getMessageMapper(session)
.getApplicableFlag(mailbox);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/e56bb6a1/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/utils/ApplicableFlagCalculator.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/utils/ApplicableFlagCalculator.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/utils/ApplicableFlagCalculator.java
index 2d01fcd..110430f 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/utils/ApplicableFlagCalculator.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/utils/ApplicableFlagCalculator.java
@@ -19,11 +19,9 @@
package org.apache.james.mailbox.store.mail.utils;
-import java.util.List;
-
import javax.mail.Flags;
-import javax.mail.Flags.Flag;
+import org.apache.james.mailbox.ApplicableFlagBuilder;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import com.google.common.base.Function;
@@ -31,6 +29,7 @@ import com.google.common.base.Preconditions;
import com.google.common.collect.FluentIterable;
public class ApplicableFlagCalculator {
+
private static Function<MailboxMessage, Flags> toFlags() {
return new Function<MailboxMessage, Flags>() {
@Override
@@ -48,22 +47,10 @@ public class ApplicableFlagCalculator {
}
public Flags computeApplicableFlags() {
- List<Flags> messageFlags = FluentIterable.from(mailboxMessages)
- .transform(toFlags())
- .toList();
- return getFlags(messageFlags);
- }
-
- private Flags getFlags(List<Flags> messageFlags) {
- Flags flags = new Flags();
-
- for (Flags flag : messageFlags) {
- flags.add(flag);
- }
-
- flags.remove(Flag.RECENT);
- flags.remove(Flag.USER);
-
- return flags;
+ return ApplicableFlagBuilder.builder()
+ .add(FluentIterable.from(mailboxMessages)
+ .transform(toFlags())
+ .toArray(Flags.class))
+ .build();
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/e56bb6a1/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java
index bba5bc0..c2d1e41 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java
@@ -28,6 +28,7 @@ import java.util.List;
import javax.mail.Flags;
import javax.mail.Flags.Flag;
+import org.apache.james.mailbox.ApplicableFlagBuilder;
import org.apache.james.mailbox.FlagsBuilder;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession;
@@ -375,10 +376,16 @@ public abstract class AbstractCombinationManagerTest {
messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
- assertThat(messageManager1.getApplicableFlag(session))
- .isEqualTo(messageFlag);
- assertThat(messageManager2.getApplicableFlag(session))
- .isEqualTo(messageFlag);
+ Flags expected = ApplicableFlagBuilder
+ .builder()
+ .add(messageFlag)
+ .build();
+
+ assertThat(messageManager1.getApplicableFlags(session))
+ .isEqualTo(expected);
+
+ assertThat(messageManager2.getApplicableFlags(session))
+ .isEqualTo(expected);
}
@Test
@@ -397,39 +404,46 @@ public abstract class AbstractCombinationManagerTest {
messageIdManager.setFlags(deleted, FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox1.getMailboxId()), session);
- assertThat(messageManager1.getApplicableFlag(session))
- .isEqualTo(new FlagsBuilder()
- .add(Flag.ANSWERED, Flag.DELETED)
+ assertThat(messageManager1.getApplicableFlags(session))
+ .isEqualTo(ApplicableFlagBuilder.builder()
.add(USER_FLAGS_VALUE, ANOTHER_USER_FLAGS_VALUE)
.build());
}
@Test
public void setFlagsFromMessageManagerAndSetFlagsFromMessageIdManagerShouldUpdateSameApplicableFlag() throws Exception {
- Flags messageFlag = new Flags(Flag.ANSWERED);
- Flags deleted = new Flags(Flag.DELETED);
- MessageId messageId = messageManager1.appendMessage(new ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, messageFlag).getMessageId();
+ Flags customFlag1 = new Flags(Flag.ANSWERED);
+ Flags customFlag2 = new Flags("customFlag2");
+ MessageId messageId = messageManager1.appendMessage(new ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, customFlag1).getMessageId();
- messageIdManager.setFlags(deleted, FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox1.getMailboxId()), session);
- messageManager1.setFlags(deleted, FlagsUpdateMode.ADD, MessageRange.all(), session);
+ messageIdManager.setFlags(customFlag2, FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox1.getMailboxId()), session);
+ messageManager1.setFlags(customFlag2, FlagsUpdateMode.ADD, MessageRange.all(), session);
- Flags applicableFlags = messageManager1.getApplicableFlag(session);
+ Flags applicableFlags = messageManager1.getApplicableFlags(session);
assertThat(applicableFlags)
- .isEqualTo(new FlagsBuilder().add(Flag.ANSWERED, Flag.DELETED).build());
+ .isEqualTo(ApplicableFlagBuilder.builder()
+ .add(customFlag1)
+ .add(customFlag2)
+ .build());
}
@Test
public void setInMailboxFromMessageIdManagerAndSetFlagsFromMessageManagerShouldUnionApplicableFlag() throws Exception {
- Flags messageFlag = new Flags(Flag.ANSWERED);
- Flags deleted = new Flags(Flag.DELETED);
- MessageId messageId = messageManager1.appendMessage(new ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, messageFlag).getMessageId();
+ Flags custom1 = new Flags("custom1");
+ Flags custom2 = new Flags("custom2");
+ MessageId messageId = messageManager1.appendMessage(new ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, custom1).getMessageId();
messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
- messageManager2.setFlags(deleted, FlagsUpdateMode.ADD, MessageRange.all(), session);
+ messageManager2.setFlags(custom2, FlagsUpdateMode.ADD, MessageRange.all(), session);
+
+ Flags expected = ApplicableFlagBuilder.builder()
+ .add(custom1)
+ .add(custom2)
+ .build();
- assertThat(messageManager2.getApplicableFlag(session))
- .isEqualTo(new FlagsBuilder().add(Flag.ANSWERED, Flag.DELETED).build());
+ assertThat(messageManager2.getApplicableFlags(session))
+ .isEqualTo(expected);
}
private Predicate<MessageResult> messageInMailbox2() {
http://git-wip-us.apache.org/repos/asf/james-project/blob/e56bb6a1/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
index 90cbada..aafbbed 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
@@ -51,6 +51,7 @@ import org.apache.james.mailbox.store.mail.model.MapperProvider.Capabilities;
import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
+import org.apache.james.mailbox.store.mail.model.impl.SimpleMessage;
import org.apache.james.util.concurrency.ConcurrentTestRunner;
import org.junit.After;
import org.junit.Assume;
@@ -592,7 +593,7 @@ public abstract class MessageMapperTest {
public void flagsReplacementShouldReturnAnUpdatedFlagHighlightingTheReplacement() throws MailboxException {
saveMessages();
long modSeq = messageMapper.getHighestModSeq(benwaInboxMailbox);
- Iterator<UpdatedFlags> updatedFlags = messageMapper.updateFlags(benwaInboxMailbox,
+ Iterator<UpdatedFlags> updatedFlags = messageMapper.updateFlags(benwaInboxMailbox,
new FlagsUpdateCalculator(new Flags(Flags.Flag.FLAGGED), FlagsUpdateMode.REPLACE), MessageRange.one(message1.getUid()));
assertThat(Lists.newArrayList(updatedFlags))
.containsOnly(UpdatedFlags.builder()
@@ -853,14 +854,17 @@ public abstract class MessageMapperTest {
@Test
public void getApplicableFlagShouldUnionAllMessageFlags() throws Exception {
- message1.setFlags(new Flags(Flag.ANSWERED));
- message2.setFlags(new Flags(Flag.DELETED));
+ String customFlags1 = "custom1";
+ String customFlags2 = "custom2";
+ message1.setFlags(new Flags(customFlags1));
+ message2.setFlags(new Flags(customFlags2));
saveMessages();
assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
- .isEqualTo(new FlagsBuilder()
- .add(Flag.ANSWERED, Flag.DELETED)
+ .isEqualTo(FlagsBuilder.builder()
+ .add(Flag.DELETED, Flag.ANSWERED, Flag.DRAFT, Flag.FLAGGED, Flag.SEEN)
+ .add(customFlags1, customFlags2)
.build());
}
@@ -877,31 +881,44 @@ public abstract class MessageMapperTest {
saveMessages();
assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
- .isEqualTo(new FlagsBuilder()
- .add(Flag.ANSWERED, Flag.DELETED)
+ .isEqualTo(FlagsBuilder.builder()
+ .add(Flag.DELETED, Flag.ANSWERED, Flag.DRAFT, Flag.FLAGGED, Flag.SEEN)
.add(CUSTOMS_USER_FLAGS_VALUE)
.build());
}
@Test
+ public void getApplicableFlagShouldContainSystemFlagsByDefault() throws Exception {
+ assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
+ .isEqualTo(FlagsBuilder.builder()
+ .add(Flag.DELETED, Flag.ANSWERED, Flag.DRAFT, Flag.FLAGGED, Flag.SEEN)
+ .build());
+ }
+
+
+ @Test
public void getApplicableFlagShouldHaveEffectWhenUpdateFlagsByAddingThenComputingApplicableFlagsFromCurrentMailboxState() throws Exception {
message1.setFlags(new Flags(Flag.ANSWERED));
message2.setFlags(new Flags(Flag.DELETED));
- FlagsUpdateCalculator newFlags = new FlagsUpdateCalculator(new Flags(Flags.Flag.SEEN), FlagsUpdateMode.ADD);
+
+ String customFlag = "custom1";
+ FlagsUpdateCalculator newFlags = new FlagsUpdateCalculator(new Flags(customFlag), FlagsUpdateMode.ADD);
saveMessages();
messageMapper.updateFlags(benwaInboxMailbox, newFlags, message1.getUid().toRange());
assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
- .isEqualTo(new FlagsBuilder()
- .add(Flag.ANSWERED, Flag.DELETED, Flag.SEEN)
+ .isEqualTo(FlagsBuilder.builder()
+ .add(Flag.DELETED, Flag.ANSWERED, Flag.DRAFT, Flag.FLAGGED, Flag.SEEN)
+ .add(customFlag)
.build());
}
@Test
public void getApplicableFlagShouldHaveNotEffectWhenUpdateFlagsByReplaceThenIncrementalApplicableFlags() throws Exception {
Assume.assumeTrue(mapperProvider.getSupportedCapabilities().contains(Capabilities.INCREMENTAL_APPLICABLE_FLAGS));
- message1.setFlags(new Flags(Flag.ANSWERED));
+ String customFlags = "custom";
+ message1.setFlags(new Flags(customFlags));
message2.setFlags(new Flags(Flag.DELETED));
FlagsUpdateCalculator newFlags = new FlagsUpdateCalculator(new Flags(Flags.Flag.SEEN), FlagsUpdateMode.REPLACE);
@@ -910,14 +927,16 @@ public abstract class MessageMapperTest {
assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
.isEqualTo(new FlagsBuilder()
- .add(Flag.ANSWERED, Flag.DELETED, Flag.SEEN)
+ .add(Flag.DELETED, Flag.ANSWERED, Flag.DRAFT, Flag.FLAGGED, Flag.SEEN)
+ .add(customFlags)
.build());
}
@Test
public void getApplicableFlagShouldHaveEffectWhenUpdateFlagsByReplaceThenComputingApplicableFlagsFromCurrentMailboxState() throws Exception {
Assume.assumeFalse(mapperProvider.getSupportedCapabilities().contains(Capabilities.INCREMENTAL_APPLICABLE_FLAGS));
- message1.setFlags(new Flags(Flag.ANSWERED));
+ String customFlags = "custom";
+ message1.setFlags(new Flags(customFlags));
message2.setFlags(new Flags(Flag.DELETED));
FlagsUpdateCalculator newFlags = new FlagsUpdateCalculator(new Flags(Flags.Flag.SEEN), FlagsUpdateMode.REPLACE);
@@ -925,64 +944,73 @@ public abstract class MessageMapperTest {
messageMapper.updateFlags(benwaInboxMailbox, newFlags, message1.getUid().toRange());
assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
- .isEqualTo(new FlagsBuilder()
- .add(Flag.DELETED, Flag.SEEN)
+ .isEqualTo(FlagsBuilder.builder()
+ .add(Flag.DELETED, Flag.ANSWERED, Flag.DRAFT, Flag.FLAGGED, Flag.SEEN)
.build());
}
@Test
public void getApplicableFlagShouldHaveNotEffectWhenUpdateFlagsByRemoveThenIncrementalApplicableFlags() throws Exception {
Assume.assumeTrue(mapperProvider.getSupportedCapabilities().contains(Capabilities.INCREMENTAL_APPLICABLE_FLAGS));
- message1.setFlags(new FlagsBuilder().add(Flag.ANSWERED, Flag.SEEN).build());
+ String customFlags = "custom";
+ message1.setFlags(new FlagsBuilder().add(Flag.ANSWERED).add(customFlags).build());
message2.setFlags(new Flags(Flag.DELETED));
- FlagsUpdateCalculator newFlags = new FlagsUpdateCalculator(new Flags(Flags.Flag.SEEN), FlagsUpdateMode.REMOVE);
+ FlagsUpdateCalculator newFlags = new FlagsUpdateCalculator(new Flags(customFlags), FlagsUpdateMode.REMOVE);
saveMessages();
messageMapper.updateFlags(benwaInboxMailbox, newFlags, message1.getUid().toRange());
assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
.isEqualTo(new FlagsBuilder()
- .add(Flag.ANSWERED, Flag.DELETED, Flag.SEEN)
+ .add(Flag.DELETED, Flag.ANSWERED, Flag.DRAFT, Flag.FLAGGED, Flag.SEEN)
+ .add(customFlags)
.build());
}
@Test
public void getApplicableFlagShouldHaveEffectWhenUpdateFlagsByRemoveThenComputingApplicableFlagsFromCurrentMailboxState() throws Exception {
Assume.assumeFalse(mapperProvider.getSupportedCapabilities().contains(Capabilities.INCREMENTAL_APPLICABLE_FLAGS));
- message1.setFlags(new FlagsBuilder().add(Flag.ANSWERED, Flag.SEEN).build());
+ String customFlags = "custom";
+ message1.setFlags(new FlagsBuilder().add(Flag.ANSWERED).add(customFlags).build());
message2.setFlags(new Flags(Flag.DELETED));
- FlagsUpdateCalculator newFlags = new FlagsUpdateCalculator(new Flags(Flags.Flag.SEEN), FlagsUpdateMode.REMOVE);
+ FlagsUpdateCalculator newFlags = new FlagsUpdateCalculator(new Flags(customFlags), FlagsUpdateMode.REMOVE);
saveMessages();
messageMapper.updateFlags(benwaInboxMailbox, newFlags, message1.getUid().toRange());
assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
- .isEqualTo(new FlagsBuilder()
- .add(Flag.ANSWERED, Flag.DELETED)
+ .isEqualTo(FlagsBuilder.builder()
+ .add(Flag.DELETED, Flag.ANSWERED, Flag.DRAFT, Flag.FLAGGED, Flag.SEEN)
.build());
}
@Test
public void getApplicableFlagShouldHaveEffectWhenUnsetMessageFlagThenComputingApplicableFlagsFromCurrentMailboxState() throws Exception {
Assume.assumeFalse(mapperProvider.getSupportedCapabilities().contains(Capabilities.INCREMENTAL_APPLICABLE_FLAGS));
- message1.setFlags(new FlagsBuilder().add(Flag.ANSWERED, Flag.SEEN).build());
- message2.setFlags(new Flags(Flag.DELETED));
+ String customFlag1 = "custom1";
+ String customFlag2 = "custom2";
+ String customFlag3 = "custom3";
+ message1.setFlags(new FlagsBuilder().add(customFlag1, customFlag2).build());
+ message2.setFlags(new Flags(customFlag3));
FlagsUpdateCalculator newFlags = new FlagsUpdateCalculator(new Flags(), FlagsUpdateMode.REPLACE);
saveMessages();
messageMapper.updateFlags(benwaInboxMailbox, newFlags, message1.getUid().toRange());
assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
- .isEqualTo(new FlagsBuilder()
- .add(Flag.DELETED)
+ .isEqualTo(FlagsBuilder.builder()
+ .add(Flag.DELETED, Flag.ANSWERED, Flag.DRAFT, Flag.FLAGGED, Flag.SEEN)
+ .add(customFlag3)
.build());
}
@Test
public void getApplicableFlagShouldHaveNotEffectWhenUnsetMessageFlagThenIncrementalApplicableFlags() throws Exception {
Assume.assumeTrue(mapperProvider.getSupportedCapabilities().contains(MapperProvider.Capabilities.THREAD_SAFE_FLAGS_UPDATE));
- message1.setFlags(new Flags(Flag.ANSWERED));
- message2.setFlags(new Flags(Flag.DELETED));
+ String customFlag1 = "custom1";
+ String customFlag2 = "custom2";
+ message1.setFlags(new Flags(customFlag1));
+ message2.setFlags(new Flags(customFlag2));
FlagsUpdateCalculator newFlags = new FlagsUpdateCalculator(new Flags(), FlagsUpdateMode.REPLACE);
saveMessages();
@@ -990,7 +1018,8 @@ public abstract class MessageMapperTest {
assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
.isEqualTo(new FlagsBuilder()
- .add(Flag.ANSWERED, Flag.DELETED)
+ .add(Flag.DELETED, Flag.ANSWERED, Flag.DRAFT, Flag.FLAGGED, Flag.SEEN)
+ .add(customFlag1, customFlag2)
.build());
}
@@ -998,29 +1027,47 @@ public abstract class MessageMapperTest {
@Test
public void getApplicableFlagShouldHaveNotEffectWhenDeleteMessageThenIncrementalApplicableFlags() throws Exception {
Assume.assumeTrue(mapperProvider.getSupportedCapabilities().contains(Capabilities.INCREMENTAL_APPLICABLE_FLAGS));
- message1.setFlags(new Flags(Flag.ANSWERED));
- message2.setFlags(new Flags(Flag.DELETED));
+ String customFlag1 = "custom1";
+ String customFlag2 = "custom2";
+ message1.setFlags(new Flags(customFlag1));
+ message2.setFlags(new Flags(customFlag2));
saveMessages();
messageMapper.delete(benwaInboxMailbox, message1);
assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
.isEqualTo(new FlagsBuilder()
- .add(Flag.ANSWERED, Flag.DELETED)
+ .add(Flag.DELETED, Flag.ANSWERED, Flag.DRAFT, Flag.FLAGGED, Flag.SEEN)
+ .add(customFlag1, customFlag2)
+ .build());
+ }
+
+ @Test
+ public void getApplicableFlagShouldShouldReturnDefaultApplicableFlagsWhenMailboxEmpty() throws Exception {
+ SimpleMailbox emptyMailbox = createMailbox(new MailboxPath("#private", "benwa", "EMPTY"));
+
+ assertThat(messageMapper.getApplicableFlag(emptyMailbox))
+ .isEqualTo(new FlagsBuilder()
+ .add(Flag.DELETED, Flag.ANSWERED, Flag.DRAFT, Flag.FLAGGED, Flag.SEEN)
.build());
}
@Test
public void getApplicableFlagShouldHaveEffectWhenDeleteMessageThenComputingApplicableFlagsFromCurrentMailboxState() throws Exception {
Assume.assumeFalse(mapperProvider.getSupportedCapabilities().contains(Capabilities.INCREMENTAL_APPLICABLE_FLAGS));
- message1.setFlags(new Flags(Flag.ANSWERED));
- message2.setFlags(new Flags(Flag.DELETED));
+ String customFlag1 = "custom1";
+ String customFlag2 = "custom2";
+ message1.setFlags(new Flags(customFlag1));
+ message2.setFlags(new Flags(customFlag2));
saveMessages();
messageMapper.delete(benwaInboxMailbox, message1);
assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
- .isEqualTo(new Flags(Flag.DELETED));
+ .isEqualTo(FlagsBuilder.builder()
+ .add(Flag.DELETED, Flag.ANSWERED, Flag.DRAFT, Flag.FLAGGED, Flag.SEEN)
+ .add(customFlag2)
+ .build());
}
private Map<MessageUid, MessageMetaData> markThenPerformExpunge(MessageRange range) throws MailboxException {
http://git-wip-us.apache.org/repos/asf/james-project/blob/e56bb6a1/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/utils/ApplicableFlagCalculatorTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/utils/ApplicableFlagCalculatorTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/utils/ApplicableFlagCalculatorTest.java
index 2912692..3ac6800 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/utils/ApplicableFlagCalculatorTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/utils/ApplicableFlagCalculatorTest.java
@@ -28,12 +28,13 @@ import javax.mail.Flags;
import javax.mail.Flags.Flag;
import javax.mail.util.SharedByteArrayInputStream;
-import org.apache.james.mailbox.FlagsBuilder;
+import org.apache.james.mailbox.ApplicableFlagBuilder;
import org.apache.james.mailbox.model.TestId;
import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
+import org.assertj.core.api.JUnitSoftAssertions;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
@@ -42,11 +43,12 @@ import com.google.common.collect.ImmutableList;
public class ApplicableFlagCalculatorTest {
- private static final String USER_FLAGS_VALUE = "UserFlags";
-
@Rule
public ExpectedException expectedException = ExpectedException.none();
+ @Rule
+ public final JUnitSoftAssertions softly = new JUnitSoftAssertions();
+
@Test
public void constructorShouldThrowWhenNull() throws Exception {
expectedException.expect(NullPointerException.class);
@@ -54,29 +56,53 @@ public class ApplicableFlagCalculatorTest {
}
@Test
- public void unionFlagsShouldWelWhenEmpty() throws Exception {
+ public void computeApplicableFlagsShouldReturnOnlyDefaultApplicableFlagsWhenNoMessage() throws Exception {
ApplicableFlagCalculator calculator = new ApplicableFlagCalculator(ImmutableList.<MailboxMessage>of());
- assertThat(calculator.computeApplicableFlags()).isEqualTo(new Flags());
+ assertThat(calculator.computeApplicableFlags()).isEqualTo(getDefaultApplicableFlag());
}
@Test
- public void unionFlagsShouldUnionAllMessageFlagsExceptRecentAndUser() throws Exception {
+ public void computeApplicableFlagsShouldReturnOnlyDefaultApplicableFlagWhenNoMessageWithUserCustomFlag() throws Exception {
List<MailboxMessage> mailboxMessages = ImmutableList.of(
createMessage(new Flags(Flag.ANSWERED)),
createMessage(new Flags(Flag.DELETED)),
createMessage(new Flags(Flag.USER)),
+ createMessage(new Flags(Flag.RECENT)));
+
+ ApplicableFlagCalculator calculator = new ApplicableFlagCalculator(mailboxMessages);
+
+ assertThat(calculator.computeApplicableFlags()).isEqualTo(getDefaultApplicableFlag());
+ }
+
+ @Test
+ public void computeApplicableFlagsShouldReturnOnlyDefaultApplicableFlagAndAllUserCustomFlagUsedOneMessage() throws Exception {
+ List<MailboxMessage> mailboxMessages = ImmutableList.of(
+ createMessage(new Flags("capture me")),
+ createMessage(new Flags("french")));
+
+ ApplicableFlagCalculator calculator = new ApplicableFlagCalculator(mailboxMessages);
+
+ Flags expected = ApplicableFlagBuilder
+ .builder()
+ .add("capture me", "french")
+ .build();
+
+ assertThat(calculator.computeApplicableFlags()).isEqualTo(expected);
+ }
+
+ @Test
+ public void unionFlagsShouldAlwaysIgnoreRecentAndUser() throws Exception {
+ List<MailboxMessage> mailboxMessages = ImmutableList.of(
createMessage(new Flags(Flag.RECENT)),
- createMessage(new FlagsBuilder().add(Flag.ANSWERED)
- .add(USER_FLAGS_VALUE)
- .build()));
+ createMessage(new Flags(Flag.USER)));
ApplicableFlagCalculator calculator = new ApplicableFlagCalculator(mailboxMessages);
- assertThat(calculator.computeApplicableFlags()).isEqualTo(new FlagsBuilder()
- .add(Flag.ANSWERED, Flag.DELETED)
- .add(USER_FLAGS_VALUE)
- .build());
+ Flags result = calculator.computeApplicableFlags();
+
+ softly.assertThat(result.contains(Flag.RECENT)).isFalse();
+ softly.assertThat(result.contains(Flag.USER)).isFalse();
}
private MailboxMessage createMessage(Flags messageFlags) {
@@ -86,4 +112,7 @@ public class ApplicableFlagCalculatorTest {
new SharedByteArrayInputStream(content.getBytes()), messageFlags, new PropertyBuilder(), TestId.of(1));
}
+ private Flags getDefaultApplicableFlag() {
+ return ApplicableFlagBuilder.builder().build();
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/james-project/blob/e56bb6a1/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
index 74a861e..70ef72c 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
@@ -38,6 +38,7 @@ import org.apache.james.imap.api.process.SelectedMailbox;
import org.apache.james.mailbox.MailboxListener;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageManager;
import org.apache.james.mailbox.MessageUid;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.FetchGroupImpl;
@@ -63,17 +64,7 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener{
private MailboxPath path;
private final ImapSession session;
-
- private final static Flags FLAGS = new Flags();
- static {
- FLAGS.add(Flags.Flag.ANSWERED);
- FLAGS.add(Flags.Flag.DELETED);
- FLAGS.add(Flags.Flag.DRAFT);
- FLAGS.add(Flags.Flag.FLAGGED);
- FLAGS.add(Flags.Flag.SEEN);
- }
-
private final long sessionId;
private final Set<MessageUid> flagUpdateUids = new TreeSet<MessageUid>();
private final Flags.Flag uninterestingFlag = Flags.Flag.RECENT;
@@ -82,7 +73,7 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener{
private boolean isDeletedByOtherSession = false;
private boolean sizeChanged = false;
private boolean silentFlagChanges = false;
- private final Flags applicableFlags = new Flags(FLAGS);
+ private final Flags applicableFlags;
private boolean applicableFlagsChanged;
@@ -102,37 +93,30 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener{
// Ignore events from our session
setSilentFlagChanges(true);
this.path = path;
- init();
- }
-
- @Override
- public ListenerType getType() {
- return ListenerType.MAILBOX;
- }
-
- @Override
- public ExecutionMode getExecutionMode() {
- return ExecutionMode.SYNCHRONOUS;
- }
- private void init() throws MailboxException {
MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session);
-
+
mailboxManager.addListener(path, this, mailboxSession);
- MessageResultIterator messages = mailboxManager.getMailbox(path, mailboxSession).getMessages(MessageRange.all(), FetchGroupImpl.MINIMAL, mailboxSession);
+ MessageManager messageManager = mailboxManager.getMailbox(path, mailboxSession);
+ applicableFlags = messageManager.getApplicableFlags(mailboxSession);
+ MessageResultIterator messages = messageManager.getMessages(MessageRange.all(), FetchGroupImpl.MINIMAL, mailboxSession);
synchronized (this) {
while(messages.hasNext()) {
MessageResult mr = messages.next();
- applicableFlags.add(mr.getFlags());
add(mr.getUid());
}
-
-
- // \RECENT is not a applicable flag in imap so remove it from the list
- applicableFlags.remove(Flags.Flag.RECENT);
}
-
+ }
+
+ @Override
+ public ListenerType getType() {
+ return ListenerType.MAILBOX;
+ }
+
+ @Override
+ public ExecutionMode getExecutionMode() {
+ return ExecutionMode.SYNCHRONOUS;
}
private void add(int msn, MessageUid uid) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/e56bb6a1/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
index a02d070..5ce5ea5 100644
--- a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
+++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
@@ -324,8 +324,8 @@ public class MailboxEventAnalyserTest {
}
@Override
- public Flags getApplicableFlag(MailboxSession session) throws MailboxException {
- throw new NotImplementedException();
+ public Flags getApplicableFlags(MailboxSession session) throws MailboxException {
+ return new Flags();
}
};
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org