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 ro...@apache.org on 2017/01/09 09:13:29 UTC
[1/6] james-project git commit: MAILBOX-279: Enable MESSAGE for
JPAMappersTest
Repository: james-project
Updated Branches:
refs/heads/master 84c66946d -> 97de26382
MAILBOX-279: Enable MESSAGE for JPAMappersTest
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/fc42d066
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/fc42d066
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/fc42d066
Branch: refs/heads/master
Commit: fc42d06656ca68a060334bc31c89c1ce986b7258
Parents: a377d43
Author: Quynh Nguyen <qn...@linagora.com>
Authored: Wed Dec 7 14:15:47 2016 +0700
Committer: Quynh Nguyen <qn...@linagora.com>
Committed: Mon Jan 9 15:11:51 2017 +0700
----------------------------------------------------------------------
.../mailbox/jpa/mail/JPAMapperProvider.java | 14 +-
.../jpa/mail/TransactionalMessageMapper.java | 157 +++++++++++++++++++
2 files changed, 169 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/fc42d066/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JPAMapperProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JPAMapperProvider.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JPAMapperProvider.java
index 54fb56b..37887a9 100644
--- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JPAMapperProvider.java
+++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JPAMapperProvider.java
@@ -37,8 +37,10 @@ import org.apache.james.mailbox.jpa.mail.model.JPAUserFlag;
import org.apache.james.mailbox.jpa.mail.model.openjpa.AbstractJPAMailboxMessage;
import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMailboxMessage;
import org.apache.james.mailbox.jpa.user.model.JPASubscription;
+import org.apache.james.mailbox.mock.MockMailboxSession;
import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.mail.AnnotationMapper;
import org.apache.james.mailbox.store.mail.AttachmentMapper;
import org.apache.james.mailbox.store.mail.MailboxMapper;
@@ -60,7 +62,15 @@ public class JPAMapperProvider implements MapperProvider {
@Override
public MessageMapper createMessageMapper() throws MailboxException {
- throw new NotImplementedException();
+ EntityManagerFactory entityManagerFactory = createEntityManagerFactory();
+ JVMMailboxPathLocker locker = new JVMMailboxPathLocker();
+
+ JPAMessageMapper messageMapper = new JPAMessageMapper(new MockMailboxSession("benwa"),
+ new JPAUidProvider(locker, entityManagerFactory),
+ new JPAModSeqProvider(locker, entityManagerFactory),
+ entityManagerFactory);
+
+ return new TransactionalMessageMapper((JPAMessageMapper)messageMapper);
}
@Override
@@ -127,7 +137,7 @@ public class JPAMapperProvider implements MapperProvider {
@Override
public List<Capabilities> getNotImplemented() {
- return ImmutableList.of(Capabilities.MESSAGE, Capabilities.ATTACHMENT, Capabilities.MOVE, Capabilities.UNIQUE_MESSAGE_ID);
+ return ImmutableList.of(Capabilities.ATTACHMENT, Capabilities.MOVE, Capabilities.UNIQUE_MESSAGE_ID);
}
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/fc42d066/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
new file mode 100644
index 0000000..4f105d9
--- /dev/null
+++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
@@ -0,0 +1,157 @@
+/****************************************************************
+ * 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.jpa.mail;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang.NotImplementedException;
+import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.MessageMetaData;
+import org.apache.james.mailbox.model.MessageRange;
+import org.apache.james.mailbox.model.UpdatedFlags;
+import org.apache.james.mailbox.store.FlagsUpdateCalculator;
+import org.apache.james.mailbox.store.mail.MessageMapper;
+import org.apache.james.mailbox.store.mail.model.Mailbox;
+import org.apache.james.mailbox.store.mail.model.MailboxMessage;
+
+import com.google.common.base.Optional;
+import com.google.common.base.Throwables;
+
+public class TransactionalMessageMapper implements MessageMapper {
+ private final JPAMessageMapper wrapped;
+
+ public TransactionalMessageMapper(JPAMessageMapper wrapped) {
+ this.wrapped = wrapped;
+ }
+ @Override
+ public void endRequest() {
+ throw new NotImplementedException();
+ }
+
+ @Override
+ public <T> T execute(Transaction<T> transaction) throws MailboxException {
+ throw new NotImplementedException();
+ }
+
+ @Override
+ public Iterator<MailboxMessage> findInMailbox(Mailbox mailbox, MessageRange set, FetchType type, int limit)
+ throws MailboxException {
+ return wrapped.findInMailbox(mailbox, set, type, limit);
+ }
+
+ @Override
+ public Map<MessageUid, MessageMetaData> expungeMarkedForDeletionInMailbox(final Mailbox mailbox, final MessageRange set)
+ throws MailboxException {
+ Map<MessageUid, MessageMetaData> data = wrapped.execute(new Transaction<Map<MessageUid, MessageMetaData>>() {
+ @Override
+ public Map<MessageUid, MessageMetaData> run() throws MailboxException {
+ return wrapped.expungeMarkedForDeletionInMailbox(mailbox, set);
+ }
+ });
+ return data;
+ }
+
+ @Override
+ public long countMessagesInMailbox(Mailbox mailbox) throws MailboxException {
+ return wrapped.countMessagesInMailbox(mailbox);
+ }
+
+ @Override
+ public long countUnseenMessagesInMailbox(Mailbox mailbox) throws MailboxException {
+ return wrapped.countUnseenMessagesInMailbox(mailbox);
+ }
+
+ @Override
+ public void delete(final Mailbox mailbox, final MailboxMessage message) throws MailboxException {
+ try {
+ wrapped.execute(new VoidTransaction() {
+ @Override
+ public void runVoid() throws MailboxException {
+ wrapped.delete(mailbox, message);
+ }
+ });
+ } catch (MailboxException e) {
+ Throwables.propagate(e);
+ }
+ }
+
+ @Override
+ public MessageUid findFirstUnseenMessageUid(Mailbox mailbox) throws MailboxException {
+ return wrapped.findFirstUnseenMessageUid(mailbox);
+ }
+
+ @Override
+ public List<MessageUid> findRecentMessageUidsInMailbox(Mailbox mailbox) throws MailboxException {
+ return wrapped.findRecentMessageUidsInMailbox(mailbox);
+ }
+
+ @Override
+ public MessageMetaData add(final Mailbox mailbox, final MailboxMessage message) throws MailboxException {
+ MessageMetaData data = wrapped.execute(new Transaction<MessageMetaData>() {
+ @Override
+ public MessageMetaData run() throws MailboxException {
+ return wrapped.add(mailbox, message);
+ }
+ });
+ return data;
+ }
+
+ @Override
+ public Iterator<UpdatedFlags> updateFlags(final Mailbox mailbox, final FlagsUpdateCalculator flagsUpdateCalculator,
+ final MessageRange set) throws MailboxException {
+ Iterator<UpdatedFlags> data = wrapped.execute(new Transaction<Iterator<UpdatedFlags>>() {
+ @Override
+ public Iterator<UpdatedFlags> run() throws MailboxException {
+ return wrapped.updateFlags(mailbox, flagsUpdateCalculator, set);
+ }
+ });
+ return data;
+ }
+
+ @Override
+ public MessageMetaData copy(final Mailbox mailbox, final MailboxMessage original) throws MailboxException {
+ MessageMetaData data = wrapped.execute(new Transaction<MessageMetaData>() {
+ @Override
+ public MessageMetaData run() throws MailboxException {
+ return wrapped.copy(mailbox, original);
+ }
+ });
+ return data;
+ }
+
+ @Override
+ public MessageMetaData move(Mailbox mailbox, MailboxMessage original) throws MailboxException {
+ return wrapped.move(mailbox, original);
+ }
+
+ @Override
+ public Optional<MessageUid> getLastUid(Mailbox mailbox) throws MailboxException {
+ return wrapped.getLastUid(mailbox);
+ }
+
+ @Override
+ public long getHighestModSeq(Mailbox mailbox) throws MailboxException {
+ return wrapped.getHighestModSeq(mailbox);
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[5/6] james-project git commit: MAILBOX-279: change the method name
getNotImplemented to getSupportCapabilities and its behavior
Posted by ro...@apache.org.
MAILBOX-279: change the method name getNotImplemented to getSupportCapabilities and its behavior
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/60f9dcdf
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/60f9dcdf
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/60f9dcdf
Branch: refs/heads/master
Commit: 60f9dcdfee876d1e5940d8346c6f972205ae7133
Parents: 1ccb1ec
Author: Quynh Nguyen <qn...@linagora.com>
Authored: Thu Dec 8 18:11:42 2016 +0700
Committer: Quynh Nguyen <qn...@linagora.com>
Committed: Mon Jan 9 15:18:03 2017 +0700
----------------------------------------------------------------------
.../james/mailbox/cassandra/mail/CassandraMapperProvider.java | 4 ++--
.../org/apache/james/mailbox/jpa/mail/JPAMapperProvider.java | 4 ++--
.../james/mailbox/inmemory/mail/InMemoryMapperProvider.java | 4 ++--
.../james/mailbox/store/mail/model/AnnotationMapperTest.java | 2 +-
.../james/mailbox/store/mail/model/AttachmentMapperTest.java | 2 +-
.../james/mailbox/store/mail/model/ListMessageAssertTest.java | 2 +-
.../apache/james/mailbox/store/mail/model/MailboxMapperTest.java | 2 +-
.../apache/james/mailbox/store/mail/model/MapperProvider.java | 2 +-
.../james/mailbox/store/mail/model/MessageIdMapperTest.java | 2 +-
.../apache/james/mailbox/store/mail/model/MessageMapperTest.java | 2 +-
.../apache/james/mailbox/store/mail/model/MessageMoveTest.java | 2 +-
.../store/mail/model/MessageWithAttachmentMapperTest.java | 4 ++--
12 files changed, 16 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/60f9dcdf/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
index 21adfe6..2516944 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
@@ -134,8 +134,8 @@ public class CassandraMapperProvider implements MapperProvider {
}
@Override
- public List<Capabilities> getNotImplemented() {
- return ImmutableList.of();
+ public List<Capabilities> getSupportedCapabilities() {
+ return ImmutableList.copyOf(Capabilities.values());
}
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/60f9dcdf/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JPAMapperProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JPAMapperProvider.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JPAMapperProvider.java
index 37887a9..df37f39 100644
--- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JPAMapperProvider.java
+++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JPAMapperProvider.java
@@ -136,8 +136,8 @@ public class JPAMapperProvider implements MapperProvider {
}
@Override
- public List<Capabilities> getNotImplemented() {
- return ImmutableList.of(Capabilities.ATTACHMENT, Capabilities.MOVE, Capabilities.UNIQUE_MESSAGE_ID);
+ public List<Capabilities> getSupportedCapabilities() {
+ return ImmutableList.of(Capabilities.ANNOTATION, Capabilities.MAILBOX, Capabilities.MESSAGE);
}
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/60f9dcdf/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java
index 2bcf079..bc33491 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java
@@ -93,8 +93,8 @@ public class InMemoryMapperProvider implements MapperProvider {
}
@Override
- public List<Capabilities> getNotImplemented() {
- return ImmutableList.of(Capabilities.UNIQUE_MESSAGE_ID);
+ public List<Capabilities> getSupportedCapabilities() {
+ return ImmutableList.copyOf(Capabilities.values());
}
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/60f9dcdf/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 fdefd97..f634ac6 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
@@ -65,7 +65,7 @@ public class AnnotationMapperTest<T extends MapperProvider> {
@Contract.Inject
public final void setProducer(IProducer<T> producer) throws MailboxException {
T newInstance = producer.newInstance();
- Assume.assumeFalse(newInstance.getNotImplemented().contains(MapperProvider.Capabilities.ANNOTATION));
+ Assume.assumeTrue(newInstance.getSupportedCapabilities().contains(MapperProvider.Capabilities.ANNOTATION));
this.producer = producer;
this.annotationMapper = newInstance.createAnnotationMapper();
http://git-wip-us.apache.org/repos/asf/james-project/blob/60f9dcdf/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AttachmentMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AttachmentMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AttachmentMapperTest.java
index 3640b8a..10706f8 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AttachmentMapperTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AttachmentMapperTest.java
@@ -52,7 +52,7 @@ public class AttachmentMapperTest<T extends MapperProvider> {
public final void setProducer(IProducer<T> producer) throws MailboxException {
this.producer = producer;
T newInstance = producer.newInstance();
- Assume.assumeFalse(newInstance.getNotImplemented().contains(MapperProvider.Capabilities.ATTACHMENT));
+ Assume.assumeTrue(newInstance.getSupportedCapabilities().contains(MapperProvider.Capabilities.ATTACHMENT));
this.attachmentMapper = newInstance.createAttachmentMapper();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/60f9dcdf/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessageAssertTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessageAssertTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessageAssertTest.java
index b123739..a465c65 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessageAssertTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessageAssertTest.java
@@ -34,7 +34,7 @@ import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.MessageAttachment;
import org.apache.james.mailbox.model.MessageId;
-import org.apache.james.mailbox.store.TestId;
+import org.apache.james.mailbox.model.TestId;
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;
http://git-wip-us.apache.org/repos/asf/james-project/blob/60f9dcdf/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java
index c5bf105..36bbf79 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java
@@ -89,7 +89,7 @@ public class MailboxMapperTest<T extends MapperProvider> {
@Contract.Inject
public final void setProducer(IProducer<T> producer) throws MailboxException {
this.mapperProvider = producer.newInstance();
- Assume.assumeFalse(mapperProvider.getNotImplemented().contains(MapperProvider.Capabilities.MAILBOX));
+ Assume.assumeTrue(mapperProvider.getSupportedCapabilities().contains(MapperProvider.Capabilities.MAILBOX));
this.producer = producer;
this.mailboxMapper = mapperProvider.createMailboxMapper();
http://git-wip-us.apache.org/repos/asf/james-project/blob/60f9dcdf/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
index bbeb072..b6b8f74 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
@@ -41,7 +41,7 @@ public interface MapperProvider {
UNIQUE_MESSAGE_ID
}
- List<Capabilities> getNotImplemented();
+ List<Capabilities> getSupportedCapabilities();
MailboxMapper createMailboxMapper() throws MailboxException;
http://git-wip-us.apache.org/repos/asf/james-project/blob/60f9dcdf/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
index a8b3da0..ebb4b92 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
@@ -87,7 +87,7 @@ public class MessageIdMapperTest<T extends MapperProvider> {
public final void setProducer(IProducer<T> producer) throws MailboxException {
this.producer = producer;
this.mapperProvider = producer.newInstance();
- Assume.assumeFalse(mapperProvider.getNotImplemented().contains(MapperProvider.Capabilities.UNIQUE_MESSAGE_ID));
+ Assume.assumeTrue(mapperProvider.getSupportedCapabilities().contains(MapperProvider.Capabilities.UNIQUE_MESSAGE_ID));
this.mapperProvider.ensureMapperPrepared();
this.sut = mapperProvider.createMessageIdMapper();
http://git-wip-us.apache.org/repos/asf/james-project/blob/60f9dcdf/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 c45b5b7..ec87df8 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
@@ -92,7 +92,7 @@ public class MessageMapperTest<T extends MapperProvider> {
this.mapperProvider = producer.newInstance();
this.mapperProvider.ensureMapperPrepared();
- Assume.assumeFalse(mapperProvider.getNotImplemented().contains(MapperProvider.Capabilities.MESSAGE));
+ Assume.assumeTrue(mapperProvider.getSupportedCapabilities().contains(MapperProvider.Capabilities.MESSAGE));
this.messageMapper = mapperProvider.createMessageMapper();
this.mailboxMapper = mapperProvider.createMailboxMapper();
http://git-wip-us.apache.org/repos/asf/james-project/blob/60f9dcdf/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMoveTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMoveTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMoveTest.java
index 5a7e8ae..f3eae89 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMoveTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMoveTest.java
@@ -70,7 +70,7 @@ public class MessageMoveTest<T extends MapperProvider> {
this.producer = producer;
this.mapperProvider = producer.newInstance();
this.mapperProvider.ensureMapperPrepared();
- Assume.assumeFalse(mapperProvider.getNotImplemented().contains(MapperProvider.Capabilities.MOVE));
+ Assume.assumeTrue(mapperProvider.getSupportedCapabilities().contains(MapperProvider.Capabilities.MOVE));
this.messageMapper = mapperProvider.createMessageMapper();
Assume.assumeNotNull(messageMapper);
http://git-wip-us.apache.org/repos/asf/james-project/blob/60f9dcdf/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageWithAttachmentMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageWithAttachmentMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageWithAttachmentMapperTest.java
index ff9242d..6844d36 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageWithAttachmentMapperTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageWithAttachmentMapperTest.java
@@ -82,8 +82,8 @@ public class MessageWithAttachmentMapperTest<T extends MapperProvider> {
this.mapperProvider = producer.newInstance();
this.mapperProvider.ensureMapperPrepared();
- Assume.assumeFalse(mapperProvider.getNotImplemented().contains(MapperProvider.Capabilities.MESSAGE));
- Assume.assumeFalse(mapperProvider.getNotImplemented().contains(MapperProvider.Capabilities.ATTACHMENT));
+ Assume.assumeTrue(mapperProvider.getSupportedCapabilities().contains(MapperProvider.Capabilities.MESSAGE));
+ Assume.assumeTrue(mapperProvider.getSupportedCapabilities().contains(MapperProvider.Capabilities.ATTACHMENT));
this.messageMapper = mapperProvider.createMessageMapper();
this.attachmentMapper = mapperProvider.createAttachmentMapper();
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[4/6] james-project git commit: MAILBOX-279: JPAMappersTest should
work with MESSAGE
Posted by ro...@apache.org.
MAILBOX-279: JPAMappersTest should work with MESSAGE
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/1ccb1eca
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1ccb1eca
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1ccb1eca
Branch: refs/heads/master
Commit: 1ccb1eca78ae2c20d4c2b3ed9d984ec54de40b14
Parents: fc42d06
Author: Quynh Nguyen <qn...@linagora.com>
Authored: Wed Dec 7 14:16:43 2016 +0700
Committer: Quynh Nguyen <qn...@linagora.com>
Committed: Mon Jan 9 15:16:52 2017 +0700
----------------------------------------------------------------------
.../mailbox/jpa/mail/JPAMailboxMapper.java | 10 +-
.../mailbox/jpa/mail/JPAMessageMapper.java | 43 ++--
.../mailbox/jpa/mail/model/JPAMailbox.java | 9 +-
.../openjpa/AbstractJPAMailboxMessage.java | 29 +--
.../jpa/mail/TransactionalMessageMapper.java | 42 ++--
.../mailbox/store/mail/MessageMetadata.java | 69 ------
.../james/mailbox/store/mail/MessageUtils.java | 118 ++++++++++
.../mailbox/store/mail/MessageUtilsTest.java | 117 ++++++++++
.../store/mail/model/ListMessageAssert.java | 145 ++++++++++++
.../store/mail/model/ListMessageAssertTest.java | 230 +++++++++++++++++++
.../mail/model/ListMessagePropertiesAssert.java | 99 ++++++++
.../model/ListMessagePropertiesAssertTest.java | 97 ++++++++
.../store/mail/model/MessageMapperTest.java | 136 ++++++-----
.../model/MessageWithAttachmentMapperTest.java | 3 +-
14 files changed, 944 insertions(+), 203 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/1ccb1eca/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
index d2d883b..7fe207a 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
@@ -77,12 +77,10 @@ public class JPAMailboxMapper extends JPATransactionalMapper implements MailboxM
public void save(Mailbox mailbox) throws MailboxException {
try {
this.lastMailboxName = mailbox.getName();
- if (mailbox instanceof JPAMailbox) {
- getEntityManager().persist(mailbox);
- } else {
- JPAMailbox persistedData = new JPAMailbox(mailbox);
- getEntityManager().persist(persistedData);
- mailbox.setMailboxId(persistedData.getMailboxId());
+ JPAMailbox persistedMailbox = JPAMailbox.from(mailbox);
+ getEntityManager().persist(mailbox);
+ if (!(mailbox instanceof JPAMailbox)) {
+ mailbox.setMailboxId(persistedMailbox.getMailboxId());
}
} catch (PersistenceException e) {
throw new MailboxException("Save of mailbox " + mailbox.getName() +" failed", e);
http://git-wip-us.apache.org/repos/asf/james-project/blob/1ccb1eca/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
index b7542c6..ac581a0 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
@@ -45,7 +45,8 @@ import org.apache.james.mailbox.model.UpdatedFlags;
import org.apache.james.mailbox.store.FlagsUpdateCalculator;
import org.apache.james.mailbox.store.SimpleMessageMetaData;
import org.apache.james.mailbox.store.mail.MessageMapper;
-import org.apache.james.mailbox.store.mail.MessageMetadata;
+import org.apache.james.mailbox.store.mail.MessageUtils;
+import org.apache.james.mailbox.store.mail.MessageUtils.MessageChangedFlags;
import org.apache.james.mailbox.store.mail.ModSeqProvider;
import org.apache.james.mailbox.store.mail.UidProvider;
import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -59,11 +60,12 @@ import com.google.common.collect.ImmutableList;
* JPA implementation of a {@link MessageMapper}. This class is not thread-safe!
*/
public class JPAMessageMapper extends JPATransactionalMapper implements MessageMapper {
- private final MessageMetadata messageMetadataMapper;
+ private static final int UNLIMIT_MAX_SIZE = -1;
+ private final MessageUtils messageMetadataMapper;
public JPAMessageMapper(MailboxSession mailboxSession, UidProvider uidProvider, ModSeqProvider modSeqProvider, EntityManagerFactory entityManagerFactory) {
super(entityManagerFactory);
- this.messageMetadataMapper = new MessageMetadata(mailboxSession, uidProvider, modSeqProvider);
+ this.messageMetadataMapper = new MessageUtils(mailboxSession, uidProvider, modSeqProvider);
}
/**
@@ -249,30 +251,15 @@ public class JPAMessageMapper extends JPATransactionalMapper implements MessageM
@Override
public Iterator<UpdatedFlags> updateFlags(Mailbox mailbox, FlagsUpdateCalculator flagsUpdateCalculator,
MessageRange set) throws MailboxException {
- ImmutableList.Builder<UpdatedFlags> updatedFlags = ImmutableList.builder();
- Iterator<MailboxMessage> messages = findInMailbox(mailbox, set, FetchType.Metadata, -1);
-
- long modSeq = -1;
- if (messages.hasNext()) {
- modSeq = messageMetadataMapper.nextModSeq(mailbox);
- }
- while(messages.hasNext()) {
- MailboxMessage member = messages.next();
- Flags originalFlags = member.createFlags();
- member.setFlags(flagsUpdateCalculator.buildNewFlags(originalFlags));
- Flags newFlags = member.createFlags();
- if (UpdatedFlags.flagsChanged(originalFlags, newFlags)) {
- member.setModSeq(modSeq);
- save(mailbox, member);
- }
+ Iterator<MailboxMessage> messages = findInMailbox(mailbox, set, FetchType.Metadata, UNLIMIT_MAX_SIZE);
+
+ MessageChangedFlags messageChangedFlags = messageMetadataMapper.updateFlags(mailbox, flagsUpdateCalculator, messages);
- UpdatedFlags uFlags = new UpdatedFlags(member.getUid(), member.getModSeq(), originalFlags, newFlags);
-
- updatedFlags.add(uFlags);
-
+ for (MailboxMessage mailboxMessage : messageChangedFlags.getChangedFlags()) {
+ save(mailbox, mailboxMessage);
}
- return updatedFlags.build().iterator();
+ return messageChangedFlags.getUpdatedFlags();
}
@Override
@@ -293,12 +280,8 @@ public class JPAMessageMapper extends JPATransactionalMapper implements MessageM
private MessageMetaData copy(Mailbox mailbox, MessageUid uid, long modSeq, MailboxMessage original)
throws MailboxException {
MailboxMessage copy;
- JPAMailbox currentMailbox;
- if (mailbox instanceof JPAMailbox) {
- currentMailbox = (JPAMailbox) mailbox;
- } else {
- currentMailbox = new JPAMailbox(mailbox);
- }
+ JPAMailbox currentMailbox = JPAMailbox.from(mailbox);
+
if (original instanceof JPAStreamingMailboxMessage) {
copy = new JPAStreamingMailboxMessage(currentMailbox, uid, modSeq, original);
} else if (original instanceof JPAEncryptedMailboxMessage) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/1ccb1eca/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailbox.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailbox.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailbox.java
index 95adcd7..f47f222 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailbox.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailbox.java
@@ -96,6 +96,13 @@ public class JPAMailbox implements Mailbox {
@Column(name = "MAILBOX_HIGHEST_MODSEQ", nullable = true)
private long highestModSeq;
+ public static JPAMailbox from(Mailbox mailbox) {
+ if (mailbox instanceof JPAMailbox) {
+ return (JPAMailbox) mailbox;
+ }
+ return new JPAMailbox(mailbox);
+ }
+
/**
* JPA only
*/
@@ -230,5 +237,5 @@ public class JPAMailbox implements Mailbox {
@Override
public void setACL(MailboxACL acl) {
}
-
+
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/1ccb1eca/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
index 48896d7..8df5a47 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
@@ -61,6 +61,8 @@ import org.apache.openjpa.persistence.jdbc.ElementJoinColumn;
import org.apache.openjpa.persistence.jdbc.ElementJoinColumns;
import org.apache.openjpa.persistence.jdbc.Index;
+import com.google.common.base.Objects;
+
/**
* Abstract base class for JPA based implementations of
* {@link DelegatingMailboxMessage}
@@ -297,32 +299,17 @@ public abstract class AbstractJPAMailboxMessage implements MailboxMessage {
@Override
public int hashCode() {
- final int PRIME = 31;
- int result = 1;
- result = PRIME * result + (int) (getMailboxId().getRawId() ^ (getMailboxId().getRawId() >>> 32));
- result = PRIME * result + (int) (uid ^ (uid >>> 32));
- return result;
+ return Objects.hashCode(getMailboxId().getRawId(), uid);
}
@Override
public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- final AbstractJPAMailboxMessage other = (AbstractJPAMailboxMessage) obj;
- if (getMailboxId() != null) {
- if (!getMailboxId().equals(other.getMailboxId()))
- return false;
- } else {
- if (other.getMailboxId() != null)
- return false;
+ if (obj instanceof AbstractJPAMailboxMessage) {
+ AbstractJPAMailboxMessage other = (AbstractJPAMailboxMessage) obj;
+ return Objects.equal(getMailboxId(), other.getMailboxId())
+ && Objects.equal(uid, other.getUid());
}
- if (uid != other.uid)
- return false;
- return true;
+ return false;
}
/**
http://git-wip-us.apache.org/repos/asf/james-project/blob/1ccb1eca/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
index 4f105d9..1e0715a 100644
--- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
+++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
@@ -38,10 +38,10 @@ import com.google.common.base.Optional;
import com.google.common.base.Throwables;
public class TransactionalMessageMapper implements MessageMapper {
- private final JPAMessageMapper wrapped;
+ private final JPAMessageMapper messageMapper;
- public TransactionalMessageMapper(JPAMessageMapper wrapped) {
- this.wrapped = wrapped;
+ public TransactionalMessageMapper(JPAMessageMapper messageMapper) {
+ this.messageMapper = messageMapper;
}
@Override
public void endRequest() {
@@ -56,16 +56,16 @@ public class TransactionalMessageMapper implements MessageMapper {
@Override
public Iterator<MailboxMessage> findInMailbox(Mailbox mailbox, MessageRange set, FetchType type, int limit)
throws MailboxException {
- return wrapped.findInMailbox(mailbox, set, type, limit);
+ return messageMapper.findInMailbox(mailbox, set, type, limit);
}
@Override
public Map<MessageUid, MessageMetaData> expungeMarkedForDeletionInMailbox(final Mailbox mailbox, final MessageRange set)
throws MailboxException {
- Map<MessageUid, MessageMetaData> data = wrapped.execute(new Transaction<Map<MessageUid, MessageMetaData>>() {
+ Map<MessageUid, MessageMetaData> data = messageMapper.execute(new Transaction<Map<MessageUid, MessageMetaData>>() {
@Override
public Map<MessageUid, MessageMetaData> run() throws MailboxException {
- return wrapped.expungeMarkedForDeletionInMailbox(mailbox, set);
+ return messageMapper.expungeMarkedForDeletionInMailbox(mailbox, set);
}
});
return data;
@@ -73,21 +73,21 @@ public class TransactionalMessageMapper implements MessageMapper {
@Override
public long countMessagesInMailbox(Mailbox mailbox) throws MailboxException {
- return wrapped.countMessagesInMailbox(mailbox);
+ return messageMapper.countMessagesInMailbox(mailbox);
}
@Override
public long countUnseenMessagesInMailbox(Mailbox mailbox) throws MailboxException {
- return wrapped.countUnseenMessagesInMailbox(mailbox);
+ return messageMapper.countUnseenMessagesInMailbox(mailbox);
}
@Override
public void delete(final Mailbox mailbox, final MailboxMessage message) throws MailboxException {
try {
- wrapped.execute(new VoidTransaction() {
+ messageMapper.execute(new VoidTransaction() {
@Override
public void runVoid() throws MailboxException {
- wrapped.delete(mailbox, message);
+ messageMapper.delete(mailbox, message);
}
});
} catch (MailboxException e) {
@@ -97,20 +97,20 @@ public class TransactionalMessageMapper implements MessageMapper {
@Override
public MessageUid findFirstUnseenMessageUid(Mailbox mailbox) throws MailboxException {
- return wrapped.findFirstUnseenMessageUid(mailbox);
+ return messageMapper.findFirstUnseenMessageUid(mailbox);
}
@Override
public List<MessageUid> findRecentMessageUidsInMailbox(Mailbox mailbox) throws MailboxException {
- return wrapped.findRecentMessageUidsInMailbox(mailbox);
+ return messageMapper.findRecentMessageUidsInMailbox(mailbox);
}
@Override
public MessageMetaData add(final Mailbox mailbox, final MailboxMessage message) throws MailboxException {
- MessageMetaData data = wrapped.execute(new Transaction<MessageMetaData>() {
+ MessageMetaData data = messageMapper.execute(new Transaction<MessageMetaData>() {
@Override
public MessageMetaData run() throws MailboxException {
- return wrapped.add(mailbox, message);
+ return messageMapper.add(mailbox, message);
}
});
return data;
@@ -119,10 +119,10 @@ public class TransactionalMessageMapper implements MessageMapper {
@Override
public Iterator<UpdatedFlags> updateFlags(final Mailbox mailbox, final FlagsUpdateCalculator flagsUpdateCalculator,
final MessageRange set) throws MailboxException {
- Iterator<UpdatedFlags> data = wrapped.execute(new Transaction<Iterator<UpdatedFlags>>() {
+ Iterator<UpdatedFlags> data = messageMapper.execute(new Transaction<Iterator<UpdatedFlags>>() {
@Override
public Iterator<UpdatedFlags> run() throws MailboxException {
- return wrapped.updateFlags(mailbox, flagsUpdateCalculator, set);
+ return messageMapper.updateFlags(mailbox, flagsUpdateCalculator, set);
}
});
return data;
@@ -130,10 +130,10 @@ public class TransactionalMessageMapper implements MessageMapper {
@Override
public MessageMetaData copy(final Mailbox mailbox, final MailboxMessage original) throws MailboxException {
- MessageMetaData data = wrapped.execute(new Transaction<MessageMetaData>() {
+ MessageMetaData data = messageMapper.execute(new Transaction<MessageMetaData>() {
@Override
public MessageMetaData run() throws MailboxException {
- return wrapped.copy(mailbox, original);
+ return messageMapper.copy(mailbox, original);
}
});
return data;
@@ -141,17 +141,17 @@ public class TransactionalMessageMapper implements MessageMapper {
@Override
public MessageMetaData move(Mailbox mailbox, MailboxMessage original) throws MailboxException {
- return wrapped.move(mailbox, original);
+ return messageMapper.move(mailbox, original);
}
@Override
public Optional<MessageUid> getLastUid(Mailbox mailbox) throws MailboxException {
- return wrapped.getLastUid(mailbox);
+ return messageMapper.getLastUid(mailbox);
}
@Override
public long getHighestModSeq(Mailbox mailbox) throws MailboxException {
- return wrapped.getHighestModSeq(mailbox);
+ return messageMapper.getHighestModSeq(mailbox);
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/1ccb1eca/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMetadata.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMetadata.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMetadata.java
deleted file mode 100644
index 1907cf0..0000000
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMetadata.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/****************************************************************
- * 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.store.mail;
-
-import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.MessageUid;
-import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.store.mail.model.Mailbox;
-import org.apache.james.mailbox.store.mail.model.MailboxMessage;
-
-import com.google.common.base.Optional;
-
-public class MessageMetadata {
- private final MailboxSession mailboxSession;
- private final UidProvider uidProvider;
- private final ModSeqProvider modSeqProvider;
-
- public MessageMetadata(MailboxSession mailboxSession, UidProvider uidProvider, ModSeqProvider modSeqProvider) {
- this.mailboxSession = mailboxSession;
- this.uidProvider = uidProvider;
- this.modSeqProvider = modSeqProvider;
- }
-
- public long getHighestModSeq(Mailbox mailbox) throws MailboxException {
- return modSeqProvider.highestModSeq(mailboxSession, mailbox);
- }
-
- public Optional<MessageUid> getLastUid(Mailbox mailbox) throws MailboxException {
- return uidProvider.lastUid(mailboxSession, mailbox);
- }
-
-
- public MessageUid nextUid(Mailbox mailbox) throws MailboxException {
- return uidProvider.nextUid(mailboxSession, mailbox);
- }
-
- public long nextModSeq(Mailbox mailbox) throws MailboxException {
- if (modSeqProvider != null) {
- return modSeqProvider.nextModSeq(mailboxSession, mailbox);
- }
- return -1;
- }
-
- public void enrichMessage(Mailbox mailbox, MailboxMessage message) throws MailboxException {
- message.setUid(nextUid(mailbox));
-
- if (modSeqProvider != null) {
- message.setModSeq(nextModSeq(mailbox));
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/1ccb1eca/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageUtils.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageUtils.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageUtils.java
new file mode 100644
index 0000000..7cdcab0
--- /dev/null
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageUtils.java
@@ -0,0 +1,118 @@
+/****************************************************************
+ * 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.store.mail;
+
+import java.util.Iterator;
+import java.util.List;
+
+import javax.mail.Flags;
+
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.UpdatedFlags;
+import org.apache.james.mailbox.store.FlagsUpdateCalculator;
+import org.apache.james.mailbox.store.mail.model.Mailbox;
+import org.apache.james.mailbox.store.mail.model.MailboxMessage;
+
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+
+public class MessageUtils {
+ private final MailboxSession mailboxSession;
+ private final UidProvider uidProvider;
+ private final ModSeqProvider modSeqProvider;
+
+ public MessageUtils(MailboxSession mailboxSession, UidProvider uidProvider, ModSeqProvider modSeqProvider) {
+ Preconditions.checkNotNull(uidProvider);
+ Preconditions.checkNotNull(modSeqProvider);
+ this.mailboxSession = mailboxSession;
+ this.uidProvider = uidProvider;
+ this.modSeqProvider = modSeqProvider;
+ }
+
+ public long getHighestModSeq(Mailbox mailbox) throws MailboxException {
+ return modSeqProvider.highestModSeq(mailboxSession, mailbox);
+ }
+
+ public Optional<MessageUid> getLastUid(Mailbox mailbox) throws MailboxException {
+ return uidProvider.lastUid(mailboxSession, mailbox);
+ }
+
+
+ public MessageUid nextUid(Mailbox mailbox) throws MailboxException {
+ return uidProvider.nextUid(mailboxSession, mailbox);
+ }
+
+ public long nextModSeq(Mailbox mailbox) throws MailboxException {
+ return modSeqProvider.nextModSeq(mailboxSession, mailbox);
+ }
+
+ public void enrichMessage(Mailbox mailbox, MailboxMessage message) throws MailboxException {
+ message.setUid(nextUid(mailbox));
+ message.setModSeq(nextModSeq(mailbox));
+ }
+
+ public MessageChangedFlags updateFlags(Mailbox mailbox, FlagsUpdateCalculator flagsUpdateCalculator,
+ Iterator<MailboxMessage> messages) throws MailboxException {
+ ImmutableList.Builder<UpdatedFlags> updatedFlags = ImmutableList.builder();
+ ImmutableList.Builder<MailboxMessage> changedFlags = ImmutableList.builder();
+
+ long modSeq = nextModSeq(mailbox);
+
+ while(messages.hasNext()) {
+ MailboxMessage member = messages.next();
+ Flags originalFlags = member.createFlags();
+ member.setFlags(flagsUpdateCalculator.buildNewFlags(originalFlags));
+ Flags newFlags = member.createFlags();
+ if (UpdatedFlags.flagsChanged(originalFlags, newFlags)) {
+ member.setModSeq(modSeq);
+ changedFlags.add(member);
+ }
+
+ UpdatedFlags uFlags = new UpdatedFlags(member.getUid(), member.getModSeq(), originalFlags, newFlags);
+
+ updatedFlags.add(uFlags);
+
+ }
+
+ return new MessageChangedFlags(updatedFlags.build().iterator(), changedFlags.build());
+ }
+
+
+ public class MessageChangedFlags {
+ private final Iterator<UpdatedFlags> updatedFlags;
+ private final List<MailboxMessage> changedFlags;
+
+ public MessageChangedFlags(Iterator<UpdatedFlags> updatedFlags, List<MailboxMessage> changedFlags) {
+ this.updatedFlags = updatedFlags;
+ this.changedFlags = changedFlags;
+ }
+
+ public Iterator<UpdatedFlags> getUpdatedFlags() {
+ return updatedFlags;
+ }
+
+ public List<MailboxMessage> getChangedFlags() {
+ return changedFlags;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/1ccb1eca/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/MessageUtilsTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/MessageUtilsTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/MessageUtilsTest.java
new file mode 100644
index 0000000..a58d645
--- /dev/null
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/MessageUtilsTest.java
@@ -0,0 +1,117 @@
+/****************************************************************
+ * 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.store.mail;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.util.Date;
+
+import javax.mail.Flags;
+import javax.mail.util.SharedByteArrayInputStream;
+
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.mock.MockMailboxSession;
+import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
+import org.apache.james.mailbox.store.mail.model.Mailbox;
+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.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+public class MessageUtilsTest {
+ private static final MailboxSession mailboxSession = new MockMailboxSession("user");
+ private static final MessageUid MESSAGE_UID = MessageUid.of(1);
+ private static final MessageId MESSAGE_ID = new DefaultMessageId();
+ private static final int BODY_START = 16;
+ private static final String CONTENT = "anycontent";
+
+ @Mock private ModSeqProvider modSeqProvider;
+ @Mock private UidProvider uidProvider;
+ @Mock private Mailbox mailbox;
+
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
+ private MessageUtils messageUtils;
+ private MailboxMessage message;
+
+ @Before
+ public void setUp() throws Exception {
+ MockitoAnnotations.initMocks(this);
+ messageUtils = new MessageUtils(mailboxSession, uidProvider, modSeqProvider);
+ message = new SimpleMailboxMessage(MESSAGE_ID, new Date(), CONTENT.length(), BODY_START, new SharedByteArrayInputStream(CONTENT.getBytes()), new Flags(), new PropertyBuilder(), mailbox.getMailboxId());
+ }
+ @Test
+ public void newInstanceShouldFailWhenNullUidProvider() {
+ expectedException.expect(NullPointerException.class);
+ new MessageUtils(mailboxSession, null, modSeqProvider);
+ }
+
+ @Test
+ public void newInstanceShouldFailWhenNullModSeqProvider() {
+ expectedException.expect(NullPointerException.class);
+ new MessageUtils(mailboxSession, uidProvider, null);
+ }
+
+ @Test
+ public void getHighestModSeqShouldCallModSeqProvider() throws Exception {
+ messageUtils.getHighestModSeq(mailbox);
+ verify(modSeqProvider).highestModSeq(eq(mailboxSession), eq(mailbox));
+ }
+
+ @Test
+ public void nextModSeqShouldCallModSeqProvider() throws Exception {
+ messageUtils.nextModSeq(mailbox);
+ verify(modSeqProvider).nextModSeq(eq(mailboxSession), eq(mailbox));
+ }
+
+ @Test
+ public void getLastUidShouldCallUidProvider() throws Exception {
+ messageUtils.getLastUid(mailbox);
+ verify(uidProvider).lastUid(eq(mailboxSession), eq(mailbox));
+ }
+
+ @Test
+ public void nextUidShouldCallUidProvider() throws Exception {
+ messageUtils.nextUid(mailbox);
+ verify(uidProvider).nextUid(eq(mailboxSession), eq(mailbox));
+ }
+
+ @Test
+ public void enrichMesageShouldEnrichUidAndModSeq() throws Exception {
+ when(uidProvider.nextUid(eq(mailboxSession), eq(mailbox))).thenReturn(MESSAGE_UID);
+ when(modSeqProvider.nextModSeq(eq(mailboxSession), eq(mailbox))).thenReturn(11L);
+
+ messageUtils.enrichMessage(mailbox, message);
+
+ assertThat(message.getUid()).isEqualTo(MESSAGE_UID);
+ assertThat(message.getModSeq()).isEqualTo(11L);
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/1ccb1eca/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessageAssert.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessageAssert.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessageAssert.java
new file mode 100644
index 0000000..7772ea1
--- /dev/null
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessageAssert.java
@@ -0,0 +1,145 @@
+/****************************************************************
+ * 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.store.mail.model;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.model.MailboxId;
+import org.apache.james.mailbox.model.MessageId;
+
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.base.Throwables;
+import com.google.common.collect.FluentIterable;
+import com.google.common.collect.Lists;
+
+public class ListMessageAssert {
+ private final List<MailboxMessage> actual;
+
+ private final List<InnerMessage> messageToInnerMessage(List<MailboxMessage> messages) {
+ return FluentIterable.from(messages).transform(new Function<MailboxMessage, InnerMessage>() {
+ @Override
+ public InnerMessage apply(MailboxMessage input) {
+ try {
+ return new InnerMessage(input.getMessageId(), input.getUid(), input.getMailboxId(), input.getInternalDate(), input.getBodyOctets(),
+ input.getFullContentOctets(), input.getMediaType(), input.getSubType(), IOUtils.toString(input.getFullContent()));
+ } catch (IOException e) {
+ Throwables.propagate(e);
+ return null;
+ }
+ }
+
+ }).toList();
+ }
+
+ private ListMessageAssert(List<MailboxMessage> actual) {
+ this.actual = actual;
+ }
+
+ public static ListMessageAssert assertMessages(List<MailboxMessage> actual) {
+ return new ListMessageAssert(actual);
+ }
+
+ public void containOnly(MailboxMessage... expecteds) throws IOException {
+ assertThat(messageToInnerMessage(actual)).containsOnlyElementsOf(messageToInnerMessage(Lists.newArrayList(expecteds)));
+ }
+
+ private final class InnerMessage {
+ private final MessageUid uid;
+ private final MailboxId mailboxId;
+ private final Date internalDate;
+ private final long bodyOctets;
+ private final long fullContentOctets;
+ private final String mediaType;
+ private final String subType;
+ private final String content;
+
+ public InnerMessage(MessageId id, MessageUid uid, MailboxId mailboxId, Date internalDate, long bodyOctets,
+ long fullContentOctets, String mediaType, String subType, String content) {
+ this.uid = uid;
+ this.mailboxId = mailboxId;
+ this.internalDate = internalDate;
+ this.bodyOctets = bodyOctets;
+ this.fullContentOctets = fullContentOctets;
+ this.mediaType = mediaType;
+ this.subType = subType;
+ this.content = content;
+ }
+
+ public MessageUid getUid() {
+ return uid;
+ }
+
+ public MailboxId getMailboxId() {
+ return mailboxId;
+ }
+
+ public Date getInternalDate() {
+ return internalDate;
+ }
+
+ public long getBodyOctets() {
+ return bodyOctets;
+ }
+
+ public long getFullContentOctets() {
+ return fullContentOctets;
+ }
+
+ public String getMediaType() {
+ return mediaType;
+ }
+
+ public String getSubType() {
+ return subType;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(uid, mailboxId, internalDate, bodyOctets, fullContentOctets, mediaType, subType, content);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof InnerMessage) {
+ InnerMessage o = (InnerMessage)obj;
+ return Objects.equal(uid, o.getUid())
+ && Objects.equal(mailboxId, o.getMailboxId())
+ && Objects.equal(internalDate, o.getInternalDate())
+ && Objects.equal(bodyOctets, o.getBodyOctets())
+ && Objects.equal(fullContentOctets, o.getFullContentOctets())
+ && Objects.equal(mediaType, o.getMediaType())
+ && Objects.equal(subType, o.getSubType())
+ && Objects.equal(content, o.getContent());
+ }
+ return false;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/1ccb1eca/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessageAssertTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessageAssertTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessageAssertTest.java
new file mode 100644
index 0000000..b123739
--- /dev/null
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessageAssertTest.java
@@ -0,0 +1,230 @@
+/****************************************************************
+ * 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.store.mail.model;
+
+import static org.apache.james.mailbox.store.mail.model.ListMessageAssert.assertMessages;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Date;
+import java.util.List;
+
+import javax.mail.Flags;
+import javax.mail.util.SharedByteArrayInputStream;
+
+import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.model.MailboxId;
+import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.MessageAttachment;
+import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.mailbox.store.TestId;
+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.junit.Before;
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableList;
+
+public class ListMessageAssertTest {
+ private static final String BODY_CONTENT2 = "Subject: Test2 \n\nBody2\n.\n";
+ private static final String BODY_CONTENT1 = "Subject: Test1 \n\nBody1\n.\n";
+ private static final int BODY_START = 16;
+ private static final int UID_VALIDITY = 42;
+ private static final MailboxId MAILBOX_ID = TestId.of(1);
+ private static final MessageUid MESSAGE_UID = MessageUid.of(2);
+ private static final MessageId MESSAGE_ID = new DefaultMessageId();
+ private static final Date INTERNAL_DATE = new Date();
+
+ private Mailbox benwaInboxMailbox;
+
+ private MailboxMessage message1;
+ private MailboxMessage message2;
+
+ @Before
+ public void setUp() {
+ benwaInboxMailbox = createMailbox(new MailboxPath("#private", "user", "INBOX"));
+
+ message1 = createMessage(benwaInboxMailbox, MESSAGE_ID, BODY_CONTENT1, BODY_START, new PropertyBuilder());
+ message2 = createMessage(benwaInboxMailbox, MESSAGE_ID, BODY_CONTENT2, BODY_START, new PropertyBuilder());
+ }
+
+ @Test
+ public void containsOnlyShouldWork() throws IOException {
+ List<MailboxMessage> actual = ImmutableList.of(message1, message2);
+ assertMessages(actual).containOnly(createMailboxMessage(MAILBOX_ID, MESSAGE_ID, MESSAGE_UID, INTERNAL_DATE, BODY_CONTENT1, BODY_START, new PropertyBuilder()),
+ createMailboxMessage(MAILBOX_ID, MESSAGE_ID, MESSAGE_UID, INTERNAL_DATE, BODY_CONTENT2, BODY_START, new PropertyBuilder()));
+ }
+
+ @Test(expected = AssertionError.class)
+ public void containsOnlyShouldThrowExceptionWhenHavingElementDoesNotBelongToList() throws IOException {
+ List<MailboxMessage> actual = ImmutableList.of(message1);
+ assertMessages(actual).containOnly(createMailboxMessage(MAILBOX_ID, MESSAGE_ID, MESSAGE_UID, INTERNAL_DATE, BODY_CONTENT2, BODY_START, new PropertyBuilder()));
+ }
+
+ private MailboxMessage createMailboxMessage(final MailboxId mailboxId, final MessageId messageId, final MessageUid uid,
+ final Date internalDate, final String content, final int bodyStart, final PropertyBuilder propertyBuilder) {
+ return new MailboxMessage() {
+ @Override
+ public MailboxId getMailboxId() {
+ return mailboxId;
+ }
+
+ @Override
+ public MessageUid getUid() {
+ return uid;
+ }
+
+ @Override
+ public void setUid(MessageUid uid) {
+
+ }
+
+ @Override
+ public void setModSeq(long modSeq) {
+
+ }
+
+ @Override
+ public long getModSeq() {
+ return 0;
+ }
+
+ @Override
+ public boolean isAnswered() {
+ return false;
+ }
+
+ @Override
+ public boolean isDeleted() {
+ return false;
+ }
+
+ @Override
+ public boolean isDraft() {
+ return false;
+ }
+
+ @Override
+ public boolean isFlagged() {
+ return false;
+ }
+
+ @Override
+ public boolean isRecent() {
+ return false;
+ }
+
+ @Override
+ public boolean isSeen() {
+ return false;
+ }
+
+ @Override
+ public void setFlags(Flags flags) {
+
+ }
+
+ @Override
+ public Flags createFlags() {
+ return null;
+ }
+
+ @Override
+ public int compareTo(MailboxMessage o) {
+ return 0;
+ }
+
+ @Override
+ public MessageId getMessageId() {
+ return messageId;
+ }
+
+ @Override
+ public Date getInternalDate() {
+ return internalDate;
+ }
+
+ @Override
+ public InputStream getBodyContent() throws IOException {
+ return null;
+ }
+
+ @Override
+ public String getMediaType() {
+ return null;
+ }
+
+ @Override
+ public String getSubType() {
+ return null;
+ }
+
+ @Override
+ public long getBodyOctets() {
+ return content.length() - bodyStart;
+ }
+
+ @Override
+ public long getFullContentOctets() {
+ return content.length();
+ }
+
+ @Override
+ public Long getTextualLineCount() {
+ return null;
+ }
+
+ @Override
+ public InputStream getHeaderContent() throws IOException {
+ return null;
+ }
+
+ @Override
+ public InputStream getFullContent() throws IOException {
+ return new SharedByteArrayInputStream(content.getBytes());
+ }
+
+ @Override
+ public List<Property> getProperties() {
+ return null;
+ }
+
+ @Override
+ public List<MessageAttachment> getAttachments() {
+ return null;
+ }
+ };
+ }
+
+ private SimpleMailbox createMailbox(MailboxPath mailboxPath) {
+ SimpleMailbox mailbox = new SimpleMailbox(mailboxPath, UID_VALIDITY);
+ mailbox.setMailboxId(MAILBOX_ID);
+
+ return mailbox;
+ }
+
+ private MailboxMessage createMessage(Mailbox mailbox, MessageId messageId, String content, int bodyStart, PropertyBuilder propertyBuilder) {
+ SimpleMailboxMessage simpleMailboxMessage = new SimpleMailboxMessage(messageId, INTERNAL_DATE, content.length(), bodyStart, new SharedByteArrayInputStream(content.getBytes()), new Flags(), propertyBuilder, mailbox.getMailboxId());
+ simpleMailboxMessage.setUid(MESSAGE_UID);
+ return simpleMailboxMessage;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/1ccb1eca/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessagePropertiesAssert.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessagePropertiesAssert.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessagePropertiesAssert.java
new file mode 100644
index 0000000..4c22bdd
--- /dev/null
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessagePropertiesAssert.java
@@ -0,0 +1,99 @@
+/****************************************************************
+ * 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.store.mail.model;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.List;
+
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.collect.FluentIterable;
+
+public class ListMessagePropertiesAssert {
+ private final List<InnerProperty> propertiesToInnerProperties(List<Property> properties) {
+ return FluentIterable.from(properties)
+ .transform(propertyToInnerProperty())
+ .toList();
+ }
+
+ private final Function<Property, InnerProperty> propertyToInnerProperty() {
+ return new Function<Property, InnerProperty>() {
+ @Override
+ public InnerProperty apply(Property input) {
+ return new InnerProperty(input.getNamespace(), input.getLocalName(), input.getValue());
+ }
+ };
+ }
+
+ public static ListMessagePropertiesAssert assertProperties(List<Property> actual) {
+ return new ListMessagePropertiesAssert(actual);
+ }
+
+ private final List<Property> actual;
+
+ private ListMessagePropertiesAssert(List<Property> actual) {
+ this.actual = actual;
+ }
+
+ public void containsOnly(List<Property> expected) {
+ assertThat(propertiesToInnerProperties(actual)).containsOnlyElementsOf(propertiesToInnerProperties(expected));
+ }
+
+ private final class InnerProperty {
+ private final String namespace;
+ private final String name;
+ private final String value;
+
+ public InnerProperty(String namespace, String name, String value) {
+ this.namespace = namespace;
+ this.name = name;
+ this.value = value;
+ }
+
+ public String getNamespace() {
+ return namespace;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(namespace, name, value);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof InnerProperty) {
+ InnerProperty o = (InnerProperty)obj;
+ return Objects.equal(namespace, o.getNamespace())
+ && Objects.equal(name, o.getName())
+ && Objects.equal(value, o.getValue());
+ }
+ return false;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/1ccb1eca/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessagePropertiesAssertTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessagePropertiesAssertTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessagePropertiesAssertTest.java
new file mode 100644
index 0000000..ba33af8
--- /dev/null
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessagePropertiesAssertTest.java
@@ -0,0 +1,97 @@
+/****************************************************************
+ * 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.store.mail.model;
+
+import static org.apache.james.mailbox.store.mail.model.ListMessagePropertiesAssert.assertProperties;
+
+import java.util.List;
+
+import org.apache.james.mailbox.store.SimpleProperty;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableList;
+
+public class ListMessagePropertiesAssertTest {
+ private static final String OTHER_VALUE = "US-ASCII";
+ private static final String OTHER_LOCAL_NAME = StandardNames.MIME_CONTENT_TYPE_PARAMETER_CHARSET_NAME;
+ private static final String OTHER_NAMESPACE = StandardNames.MIME_CONTENT_TYPE_PARAMETER_SPACE;
+ private static final String VALUE = "7bit";
+ private static final String LOCAL_NAME = StandardNames.MIME_CONTENT_TRANSFER_ENCODING_NAME;
+ private static final String NAMESPACE = StandardNames.NAMESPACE_RFC_2045;
+
+ private static final Property PROPERTY1 = new SimpleProperty(NAMESPACE, LOCAL_NAME, VALUE);
+ private static final Property PROPERTY2 = new SimpleProperty(OTHER_NAMESPACE, OTHER_LOCAL_NAME, OTHER_VALUE);
+
+ private List<Property> actual;
+
+ @Before
+ public void setUp() {
+ actual = ImmutableList.of(PROPERTY1, PROPERTY2);
+ }
+
+ @Test
+ public void containsOnlyShouldWork() {
+ assertProperties(actual).containsOnly(ImmutableList.of(createProperty(NAMESPACE, LOCAL_NAME, VALUE),
+ createProperty(OTHER_NAMESPACE, OTHER_LOCAL_NAME, OTHER_VALUE)));
+ }
+
+ @Test(expected = AssertionError.class)
+ public void containsOnlyShouldFailWhenNotEnoughElement() {
+ assertProperties(actual).containsOnly(ImmutableList.of(createProperty(NAMESPACE, LOCAL_NAME, VALUE)));
+ }
+
+ @Test(expected = AssertionError.class)
+ public void containsOnlyShouldFailWhenNamespaceMismatch() {
+ assertProperties(actual).containsOnly(ImmutableList.of(createProperty(NAMESPACE, LOCAL_NAME, VALUE),
+ createProperty(OTHER_NAMESPACE, LOCAL_NAME, VALUE)));
+ }
+
+ @Test(expected = AssertionError.class)
+ public void containsOnlyShouldFailWhenNameMismatch() {
+ assertProperties(actual).containsOnly(ImmutableList.of(createProperty(NAMESPACE, LOCAL_NAME, VALUE),
+ createProperty(NAMESPACE, OTHER_LOCAL_NAME, VALUE)));
+ }
+
+ @Test(expected = AssertionError.class)
+ public void containsOnlyShouldFailWhenValueMismatch() {
+ assertProperties(actual).containsOnly(ImmutableList.of(createProperty(NAMESPACE, LOCAL_NAME, VALUE),
+ createProperty(NAMESPACE, LOCAL_NAME, OTHER_VALUE)));
+ }
+
+ private Property createProperty(final String namespace, final String name, final String value) {
+ return new Property() {
+ @Override
+ public String getValue() {
+ return value;
+ }
+
+ @Override
+ public String getNamespace() {
+ return namespace;
+ }
+
+ @Override
+ public String getLocalName() {
+ return name;
+ }
+ };
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/1ccb1eca/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 d42a1cf..c45b5b7 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
@@ -19,6 +19,9 @@
package org.apache.james.mailbox.store.mail.model;
+import static org.apache.james.mailbox.store.mail.model.ListMessageAssert.assertMessages;
+import static org.apache.james.mailbox.store.mail.model.ListMessagePropertiesAssert.assertProperties;
+import static org.apache.james.mailbox.store.mail.model.MessageAssert.assertThat;
import static org.assertj.core.api.Assertions.assertThat;
import java.io.IOException;
@@ -33,13 +36,13 @@ import org.apache.james.mailbox.FlagsBuilder;
import org.apache.james.mailbox.MessageManager.FlagsUpdateMode;
import org.apache.james.mailbox.MessageUid;
import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.model.MessageMetaData;
import org.apache.james.mailbox.model.MessageRange;
import org.apache.james.mailbox.model.UpdatedFlags;
import org.apache.james.mailbox.store.FlagsUpdateCalculator;
+import org.apache.james.mailbox.store.mail.MailboxMapper;
import org.apache.james.mailbox.store.mail.MessageMapper;
import org.apache.james.mailbox.store.mail.MessageMapper.FetchType;
import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
@@ -54,6 +57,7 @@ import org.xenei.junit.contract.ContractTest;
import org.xenei.junit.contract.IProducer;
import com.google.common.base.Optional;
+import com.google.common.collect.Lists;
@Contract(MapperProvider.class)
public class MessageMapperTest<T extends MapperProvider> {
@@ -67,16 +71,17 @@ public class MessageMapperTest<T extends MapperProvider> {
private IProducer<T> producer;
private MapperProvider mapperProvider;
private MessageMapper messageMapper;
+ private MailboxMapper mailboxMapper;
private SimpleMailbox benwaInboxMailbox;
private SimpleMailbox benwaWorkMailbox;
- private SimpleMailboxMessage message1;
- private SimpleMailboxMessage message2;
- private SimpleMailboxMessage message3;
- private SimpleMailboxMessage message4;
- private SimpleMailboxMessage message5;
- private SimpleMailboxMessage message6;
+ private MailboxMessage message1;
+ private MailboxMessage message2;
+ private MailboxMessage message3;
+ private MailboxMessage message4;
+ private MailboxMessage message5;
+ private MailboxMessage message6;
@Rule
public ExpectedException expected = ExpectedException.none();
@@ -90,7 +95,12 @@ public class MessageMapperTest<T extends MapperProvider> {
Assume.assumeFalse(mapperProvider.getNotImplemented().contains(MapperProvider.Capabilities.MESSAGE));
this.messageMapper = mapperProvider.createMessageMapper();
+ this.mailboxMapper = mapperProvider.createMailboxMapper();
+ initData();
+ }
+
+ private void initData() throws MailboxException {
benwaInboxMailbox = createMailbox(new MailboxPath("#private", "benwa", "INBOX"));
benwaWorkMailbox = createMailbox( new MailboxPath("#private", "benwa", "INBOX"+DELIMITER+"work"));
@@ -139,7 +149,10 @@ public class MessageMapperTest<T extends MapperProvider> {
@ContractTest
public void mailboxUnSeenCountShouldBeDecrementedAfterAMessageIsMarkedSeen() throws MailboxException {
saveMessages();
- messageMapper.updateFlags(benwaInboxMailbox, new FlagsUpdateCalculator(new Flags(Flags.Flag.SEEN), FlagsUpdateMode.REPLACE), message1.getUid().toRange()).hasNext();
+ FlagsUpdateCalculator newFlags = new FlagsUpdateCalculator(new Flags(Flags.Flag.SEEN), FlagsUpdateMode.REPLACE);
+
+ messageMapper.updateFlags(benwaInboxMailbox, newFlags, message1.getUid().toRange());
+
assertThat(messageMapper.countUnseenMessagesInMailbox(benwaInboxMailbox)).isEqualTo(4);
}
@@ -170,8 +183,9 @@ public class MessageMapperTest<T extends MapperProvider> {
saveMessages();
message6.setUid(messageMapper.getLastUid(benwaInboxMailbox).get().next());
messageMapper.delete(benwaInboxMailbox, message6);
- assertThat(messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.all(), MessageMapper.FetchType.Full, LIMIT))
- .containsOnly(message1, message2, message3, message4, message5);
+
+ Iterator<MailboxMessage> retrievedMessageIterator = messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.all(), MessageMapper.FetchType.Full, LIMIT);
+ assertMessages(Lists.newArrayList(retrievedMessageIterator)).containOnly(message1, message2, message3, message4, message5);
}
@ContractTest
@@ -184,8 +198,8 @@ public class MessageMapperTest<T extends MapperProvider> {
saveMessages();
MessageMapper.FetchType fetchType = MessageMapper.FetchType.Full;
int limit =10;
- MessageAssert.assertThat(messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.one(message1.getUid()), fetchType, limit).next())
- .isEqualTo(message1, fetchType);
+ assertThat(messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.one(message1.getUid()), fetchType, limit).next())
+ .isEqualToWithoutAttachment(message1, fetchType);
}
@ContractTest
@@ -193,16 +207,17 @@ public class MessageMapperTest<T extends MapperProvider> {
saveMessages();
Iterator<MailboxMessage> retrievedMessageIterator = messageMapper
.findInMailbox(benwaInboxMailbox, MessageRange.range(message1.getUid(), message4.getUid()), MessageMapper.FetchType.Full, LIMIT);
- assertThat(retrievedMessageIterator).containsOnly(message1, message2, message3, message4);
- }
+ assertMessages(Lists.newArrayList(retrievedMessageIterator)).containOnly(message1, message2, message3, message4);
+ }
+
@ContractTest
public void messagesCanBeRetrievedInMailboxWithRangeTypeRangeContainingAHole() throws MailboxException, IOException {
saveMessages();
messageMapper.delete(benwaInboxMailbox, message3);
Iterator<MailboxMessage> retrievedMessageIterator = messageMapper
.findInMailbox(benwaInboxMailbox, MessageRange.range(message1.getUid(), message4.getUid()), MessageMapper.FetchType.Full, LIMIT);
- assertThat(retrievedMessageIterator).containsOnly(message1, message2, message4);
+ assertMessages(Lists.newArrayList(retrievedMessageIterator)).containOnly(message1, message2, message4);
}
@ContractTest
@@ -210,7 +225,7 @@ public class MessageMapperTest<T extends MapperProvider> {
saveMessages();
Iterator<MailboxMessage> retrievedMessageIterator = messageMapper
.findInMailbox(benwaInboxMailbox, MessageRange.from(message3.getUid()), MessageMapper.FetchType.Full, LIMIT);
- assertThat(retrievedMessageIterator).containsOnly(message3, message4, message5);
+ assertMessages(Lists.newArrayList(retrievedMessageIterator)).containOnly(message3, message4, message5);
}
@ContractTest
@@ -219,14 +234,14 @@ public class MessageMapperTest<T extends MapperProvider> {
messageMapper.delete(benwaInboxMailbox, message4);
Iterator<MailboxMessage> retrievedMessageIterator = messageMapper
.findInMailbox(benwaInboxMailbox, MessageRange.from(message3.getUid()), MessageMapper.FetchType.Full, LIMIT);
- assertThat(retrievedMessageIterator).containsOnly(message3, message5);
+ assertMessages(Lists.newArrayList(retrievedMessageIterator)).containOnly(message3, message5);
}
@ContractTest
public void messagesCanBeRetrievedInMailboxWithRangeTypeAll() throws MailboxException, IOException {
saveMessages();
- assertThat(messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.all(), MessageMapper.FetchType.Full, LIMIT))
- .containsOnly(message1, message2, message3, message4, message5);
+ Iterator<MailboxMessage> retrievedMessageIterator = messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.all(), MessageMapper.FetchType.Full, LIMIT);
+ assertMessages(Lists.newArrayList(retrievedMessageIterator)).containOnly(message1, message2, message3, message4, message5);
}
@ContractTest
@@ -235,7 +250,7 @@ public class MessageMapperTest<T extends MapperProvider> {
messageMapper.delete(benwaInboxMailbox, message1);
Iterator<MailboxMessage> retrievedMessageIterator = messageMapper
.findInMailbox(benwaInboxMailbox, MessageRange.all(), MessageMapper.FetchType.Full, LIMIT);
- assertThat(retrievedMessageIterator).containsOnly(message2, message3, message4, message5);
+ assertMessages(Lists.newArrayList(retrievedMessageIterator)).containOnly(message2, message3, message4, message5);
}
@ContractTest
@@ -243,7 +258,7 @@ public class MessageMapperTest<T extends MapperProvider> {
saveMessages();
MessageMapper.FetchType fetchType = MessageMapper.FetchType.Metadata;
Iterator<MailboxMessage> retrievedMessageIterator = messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.one(message1.getUid()), fetchType, LIMIT);
- MessageAssert.assertThat(retrievedMessageIterator.next()).isEqualTo(message1, fetchType);
+ assertThat(retrievedMessageIterator.next()).isEqualTo(message1, fetchType);
assertThat(retrievedMessageIterator).isEmpty();
}
@@ -252,7 +267,7 @@ public class MessageMapperTest<T extends MapperProvider> {
saveMessages();
MessageMapper.FetchType fetchType = MessageMapper.FetchType.Headers;
Iterator<MailboxMessage> retrievedMessageIterator = messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.one(message1.getUid()), fetchType, LIMIT);
- MessageAssert.assertThat(retrievedMessageIterator.next()).isEqualTo(message1, fetchType);
+ assertThat(retrievedMessageIterator.next()).isEqualTo(message1, fetchType);
assertThat(retrievedMessageIterator).isEmpty();
}
@@ -261,7 +276,7 @@ public class MessageMapperTest<T extends MapperProvider> {
saveMessages();
MessageMapper.FetchType fetchType = MessageMapper.FetchType.Body;
Iterator<MailboxMessage> retrievedMessageIterator = messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.one(message1.getUid()), fetchType, LIMIT);
- MessageAssert.assertThat(retrievedMessageIterator.next()).isEqualTo(message1, fetchType);
+ assertThat(retrievedMessageIterator.next()).isEqualToWithoutAttachment(message1, fetchType);
assertThat(retrievedMessageIterator).isEmpty();
}
@@ -315,8 +330,9 @@ public class MessageMapperTest<T extends MapperProvider> {
public void expungeMarkedForDeletionInMailboxShouldReturnEmptyResultWhenNoMessageInMailboxIsDeleted() throws MailboxException, IOException {
saveMessages();
assertThat(messageMapper.expungeMarkedForDeletionInMailbox(benwaInboxMailbox, MessageRange.all())).isEmpty();
- assertThat(messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.all(), MessageMapper.FetchType.Full, LIMIT))
- .containsOnly(message1, message2, message3, message4, message5);
+ Iterator<MailboxMessage> retrievedMessageIterator = messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.all(), MessageMapper.FetchType.Full, LIMIT);
+
+ assertMessages(Lists.newArrayList(retrievedMessageIterator)).containOnly(message1, message2, message3, message4, message5);
}
@ContractTest
@@ -331,8 +347,10 @@ public class MessageMapperTest<T extends MapperProvider> {
public void expungeShouldModifyUnderlyingStorageWithRangeAll() throws MailboxException, IOException {
saveMessages();
markThenPerformExpunge(MessageRange.all());
- assertThat(messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.all(), MessageMapper.FetchType.Full, LIMIT))
- .containsOnly(message2, message3, message5);
+
+ Iterator<MailboxMessage> retrievedMessageIterator = messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.all(), MessageMapper.FetchType.Full, LIMIT);
+
+ assertMessages(Lists.newArrayList(retrievedMessageIterator)).containOnly(message2, message3, message5);
}
@ContractTest
@@ -347,8 +365,10 @@ public class MessageMapperTest<T extends MapperProvider> {
public void expungeShouldModifyUnderlyingStorageWithRangeOne() throws MailboxException, IOException {
saveMessages();
markThenPerformExpunge(MessageRange.one(message1.getUid()));
- assertThat(messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.all(), MessageMapper.FetchType.Full, LIMIT))
- .containsOnly(message4, message2, message3, message5);
+
+ Iterator<MailboxMessage> retrievedMessageIterator = messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.all(), MessageMapper.FetchType.Full, LIMIT);
+
+ assertMessages(Lists.newArrayList(retrievedMessageIterator)).containOnly(message4, message2, message3, message5);
}
@ContractTest
@@ -363,8 +383,10 @@ public class MessageMapperTest<T extends MapperProvider> {
public void expungeShouldModifyUnderlyingStorageWithRangeFrom() throws MailboxException, IOException {
saveMessages();
markThenPerformExpunge(MessageRange.from(message3.getUid()));
- assertThat(messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.all(), MessageMapper.FetchType.Full, LIMIT))
- .containsOnly(message1, message2, message3, message5);
+
+ Iterator<MailboxMessage> retrievedMessageIterator = messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.all(), MessageMapper.FetchType.Full, LIMIT);
+
+ assertMessages(Lists.newArrayList(retrievedMessageIterator)).containOnly(message1, message2, message3, message5);
}
@ContractTest
@@ -379,8 +401,10 @@ public class MessageMapperTest<T extends MapperProvider> {
public void expungeShouldModifyUnderlyingStorageWithRange() throws MailboxException, IOException {
saveMessages();
markThenPerformExpunge(MessageRange.range(message3.getUid(), message5.getUid()));
- assertThat(messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.all(), MessageMapper.FetchType.Full, LIMIT))
- .containsOnly(message1, message2, message3, message5);
+
+ Iterator<MailboxMessage> retrievedMessageIterator = messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.all(), MessageMapper.FetchType.Full, LIMIT);
+
+ assertMessages(Lists.newArrayList(retrievedMessageIterator)).containOnly(message1, message2, message3, message5);
}
@ContractTest
@@ -455,7 +479,7 @@ public class MessageMapperTest<T extends MapperProvider> {
LIMIT)
.next();
- MessageAssert.assertThat(result).isEqualToWithoutUid(message7, MessageMapper.FetchType.Full);
+ assertThat(result).isEqualToWithoutUidAndAttachment(message7, MessageMapper.FetchType.Full);
assertThat(result.getUid()).isEqualTo(messageMapper.getLastUid(benwaInboxMailbox).get());
}
@@ -516,14 +540,16 @@ public class MessageMapperTest<T extends MapperProvider> {
public void flagsReplacementShouldReplaceStoredMessageFlags() throws MailboxException {
saveMessages();
messageMapper.updateFlags(benwaInboxMailbox, new FlagsUpdateCalculator(new Flags(Flags.Flag.FLAGGED), FlagsUpdateMode.REPLACE), MessageRange.one(message1.getUid()));
- MessageAssert.assertThat(retrieveMessageFromStorage(message1)).hasFlags(new Flags(Flags.Flag.FLAGGED));
+ assertThat(retrieveMessageFromStorage(message1)).hasFlags(new Flags(Flags.Flag.FLAGGED));
}
@ContractTest
public void flagsReplacementShouldReturnAnUpdatedFlagHighlightingTheReplacement() throws MailboxException {
saveMessages();
long modSeq = messageMapper.getHighestModSeq(benwaInboxMailbox);
- assertThat(messageMapper.updateFlags(benwaInboxMailbox, new FlagsUpdateCalculator(new Flags(Flags.Flag.FLAGGED), FlagsUpdateMode.REPLACE), MessageRange.one(message1.getUid())))
+ Iterator<UpdatedFlags> updatedFlags = messageMapper.updateFlags(benwaInboxMailbox,
+ new FlagsUpdateCalculator(new Flags(Flags.Flag.FLAGGED), FlagsUpdateMode.REPLACE), MessageRange.one(message1.getUid()));
+ assertThat(Lists.newArrayList(updatedFlags))
.containsOnly(new UpdatedFlags(message1.getUid(), modSeq + 1, new Flags(), new Flags(Flags.Flag.FLAGGED)));
}
@@ -541,7 +567,7 @@ public class MessageMapperTest<T extends MapperProvider> {
saveMessages();
messageMapper.updateFlags(benwaInboxMailbox, new FlagsUpdateCalculator(new Flags(Flags.Flag.FLAGGED), FlagsUpdateMode.REPLACE), MessageRange.one(message1.getUid()));
messageMapper.updateFlags(benwaInboxMailbox, new FlagsUpdateCalculator(new Flags(Flags.Flag.SEEN), FlagsUpdateMode.ADD), MessageRange.one(message1.getUid()));
- MessageAssert.assertThat(retrieveMessageFromStorage(message1)).hasFlags(new FlagsBuilder().add(Flags.Flag.SEEN, Flags.Flag.FLAGGED).build());
+ assertThat(retrieveMessageFromStorage(message1)).hasFlags(new FlagsBuilder().add(Flags.Flag.SEEN, Flags.Flag.FLAGGED).build());
}
@ContractTest
@@ -558,7 +584,7 @@ public class MessageMapperTest<T extends MapperProvider> {
saveMessages();
messageMapper.updateFlags(benwaInboxMailbox, new FlagsUpdateCalculator(new FlagsBuilder().add(Flags.Flag.FLAGGED, Flags.Flag.SEEN).build(), FlagsUpdateMode.REPLACE), MessageRange.one(message1.getUid()));
messageMapper.updateFlags(benwaInboxMailbox, new FlagsUpdateCalculator(new Flags(Flags.Flag.SEEN), FlagsUpdateMode.REMOVE), MessageRange.one(message1.getUid()));
- MessageAssert.assertThat(retrieveMessageFromStorage(message1)).hasFlags(new Flags(Flags.Flag.FLAGGED));
+ assertThat(retrieveMessageFromStorage(message1)).hasFlags(new Flags(Flags.Flag.FLAGGED));
}
@ContractTest
@@ -589,27 +615,29 @@ public class MessageMapperTest<T extends MapperProvider> {
propBuilder.setProperty(StandardNames.NAMESPACE_RFC_2045, StandardNames.MIME_CONTENT_TRANSFER_ENCODING_NAME, "7bit");
propBuilder.setProperty(StandardNames.MIME_CONTENT_TYPE_PARAMETER_SPACE, StandardNames.MIME_CONTENT_TYPE_PARAMETER_CHARSET_NAME, "US-ASCII");
- SimpleMailboxMessage messageWithProperties = createMessage(benwaWorkMailbox, mapperProvider.generateMessageId(), "Subject: messagePropertiesShouldBeStored \n\nBody\n.\n", BODY_START, propBuilder);
+ MailboxMessage messageWithProperties = createMessage(benwaWorkMailbox, mapperProvider.generateMessageId(), "Subject: messagePropertiesShouldBeStored \n\nBody\n.\n", BODY_START, propBuilder);
MessageMetaData messageMetaData = messageMapper.add(benwaInboxMailbox, messageWithProperties);
MailboxMessage message = messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.one(messageMetaData.getUid()), FetchType.Body, 1).next();
- assertThat(message.getProperties()).containsOnlyElementsOf(propBuilder.toProperties());
- }
+ assertProperties(message.getProperties()).containsOnly(propBuilder.toProperties());
+ }
+
@ContractTest
public void messagePropertiesShouldBeStoredWhenDuplicateEntries() throws Exception {
PropertyBuilder propBuilder = new PropertyBuilder();
propBuilder.setProperty(StandardNames.MIME_CONTENT_LANGUAGE_SPACE, StandardNames.MIME_CONTENT_LANGUAGE_NAME, "us");
propBuilder.setProperty(StandardNames.MIME_CONTENT_LANGUAGE_SPACE, StandardNames.MIME_CONTENT_LANGUAGE_NAME, "fr");
- SimpleMailboxMessage messageWithProperties = createMessage(benwaWorkMailbox, mapperProvider.generateMessageId(), "Subject: messagePropertiesShouldBeStoredWhenDuplicateEntries \n\nBody\n.\n", BODY_START, propBuilder);
+ MailboxMessage messageWithProperties = createMessage(benwaWorkMailbox, mapperProvider.generateMessageId(), "Subject: messagePropertiesShouldBeStoredWhenDuplicateEntries \n\nBody\n.\n", BODY_START, propBuilder);
MessageMetaData messageMetaData = messageMapper.add(benwaInboxMailbox, messageWithProperties);
MailboxMessage message = messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.one(messageMetaData.getUid()), FetchType.Body, 1).next();
- assertThat(message.getProperties()).containsOnlyElementsOf(propBuilder.toProperties());
+
+ assertProperties(message.getProperties()).containsOnly(propBuilder.toProperties());
}
@ContractTest
public void messagePropertiesShouldBeStoredWhenNoProperty() throws Exception {
- SimpleMailboxMessage messageWithProperties = createMessage(benwaWorkMailbox, mapperProvider.generateMessageId(), "Subject: messagePropertiesShouldBeStoredWhenNoProperty \n\nBody\n.\n", BODY_START, new PropertyBuilder());
+ MailboxMessage messageWithProperties = createMessage(benwaWorkMailbox, mapperProvider.generateMessageId(), "Subject: messagePropertiesShouldBeStoredWhenNoProperty \n\nBody\n.\n", BODY_START, new PropertyBuilder());
MessageMetaData messageMetaData = messageMapper.add(benwaInboxMailbox, messageWithProperties);
MailboxMessage message = messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.one(messageMetaData.getUid()), FetchType.Body, 1).next();
assertThat(message.getProperties()).isEmpty();
@@ -621,7 +649,7 @@ public class MessageMapperTest<T extends MapperProvider> {
PropertyBuilder propBuilder = new PropertyBuilder();
propBuilder.setTextualLineCount(textualLineCount);
- SimpleMailboxMessage messageWithProperties = createMessage(benwaWorkMailbox, mapperProvider.generateMessageId(), "Subject: messagePropertiesShouldBeStoredWhenDuplicateEntries \n\nBody\n.\n", BODY_START, propBuilder);
+ MailboxMessage messageWithProperties = createMessage(benwaWorkMailbox, mapperProvider.generateMessageId(), "Subject: messagePropertiesShouldBeStoredWhenDuplicateEntries \n\nBody\n.\n", BODY_START, propBuilder);
MessageMetaData messageMetaData = messageMapper.add(benwaInboxMailbox, messageWithProperties);
MailboxMessage message = messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.one(messageMetaData.getUid()), FetchType.Body, 1).next();
assertThat(message.getTextualLineCount()).isEqualTo(textualLineCount);
@@ -633,7 +661,7 @@ public class MessageMapperTest<T extends MapperProvider> {
PropertyBuilder propBuilder = new PropertyBuilder();
propBuilder.setMediaType(mediaType);
- SimpleMailboxMessage messageWithProperties = createMessage(benwaWorkMailbox, mapperProvider.generateMessageId(), "Subject: messagePropertiesShouldBeStoredWhenDuplicateEntries \n\nBody\n.\n", BODY_START, propBuilder);
+ MailboxMessage messageWithProperties = createMessage(benwaWorkMailbox, mapperProvider.generateMessageId(), "Subject: messagePropertiesShouldBeStoredWhenDuplicateEntries \n\nBody\n.\n", BODY_START, propBuilder);
MessageMetaData messageMetaData = messageMapper.add(benwaInboxMailbox, messageWithProperties);
MailboxMessage message = messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.one(messageMetaData.getUid()), FetchType.Body, 1).next();
assertThat(message.getMediaType()).isEqualTo(mediaType);
@@ -645,7 +673,7 @@ public class MessageMapperTest<T extends MapperProvider> {
PropertyBuilder propBuilder = new PropertyBuilder();
propBuilder.setSubType(subType);
- SimpleMailboxMessage messageWithProperties = createMessage(benwaWorkMailbox, mapperProvider.generateMessageId(), "Subject: messagePropertiesShouldBeStoredWhenDuplicateEntries \n\nBody\n.\n", BODY_START, propBuilder);
+ MailboxMessage messageWithProperties = createMessage(benwaWorkMailbox, mapperProvider.generateMessageId(), "Subject: messagePropertiesShouldBeStoredWhenDuplicateEntries \n\nBody\n.\n", BODY_START, propBuilder);
MessageMetaData messageMetaData = messageMapper.add(benwaInboxMailbox, messageWithProperties);
MailboxMessage message = messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.one(messageMetaData.getUid()), FetchType.Body, 1).next();
assertThat(message.getSubType()).isEqualTo(subType);
@@ -655,7 +683,7 @@ public class MessageMapperTest<T extends MapperProvider> {
public void userFlagsShouldBeSupported() throws Exception {
saveMessages();
messageMapper.updateFlags(benwaInboxMailbox, new FlagsUpdateCalculator(new Flags(USER_FLAG), FlagsUpdateMode.ADD), MessageRange.one(message1.getUid()));
- MessageAssert.assertThat(retrieveMessageFromStorage(message1)).hasFlags(new Flags(USER_FLAG));
+ assertThat(retrieveMessageFromStorage(message1)).hasFlags(new Flags(USER_FLAG));
}
@ContractTest
@@ -670,7 +698,7 @@ public class MessageMapperTest<T extends MapperProvider> {
public void messagesShouldBeSavedWithTheirUserFlags() throws Exception {
MailboxMessage message = SimpleMailboxMessage.copy(benwaInboxMailbox.getMailboxId(), message1);
messageMapper.add(benwaInboxMailbox, message);
- MessageAssert.assertThat(retrieveMessageFromStorage(message)).hasFlags(new Flags(USER_FLAG));
+ assertThat(retrieveMessageFromStorage(message)).hasFlags(new Flags(USER_FLAG));
}
private Map<MessageUid, MessageMetaData> markThenPerformExpunge(MessageRange range) throws MailboxException {
@@ -679,10 +707,12 @@ public class MessageMapperTest<T extends MapperProvider> {
return messageMapper.expungeMarkedForDeletionInMailbox(benwaInboxMailbox, range);
}
- private SimpleMailbox createMailbox(MailboxPath mailboxPath) {
+ private SimpleMailbox createMailbox(MailboxPath mailboxPath) throws MailboxException {
SimpleMailbox mailbox = new SimpleMailbox(mailboxPath, UID_VALIDITY);
- MailboxId id = mapperProvider.generateId();
- mailbox.setMailboxId(id);
+ mailbox.setMailboxId(mapperProvider.generateId());
+
+ mailboxMapper.save(mailbox);
+
return mailbox;
}
@@ -705,7 +735,7 @@ public class MessageMapperTest<T extends MapperProvider> {
return messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.one(message.getUid()), MessageMapper.FetchType.Metadata, LIMIT).next();
}
- private SimpleMailboxMessage createMessage(Mailbox mailbox, MessageId messageId, String content, int bodyStart, PropertyBuilder propertyBuilder) {
+ private MailboxMessage createMessage(Mailbox mailbox, MessageId messageId, String content, int bodyStart, PropertyBuilder propertyBuilder) {
return new SimpleMailboxMessage(messageId, new Date(), content.length(), bodyStart, new SharedByteArrayInputStream(content.getBytes()), new Flags(), propertyBuilder, mailbox.getMailboxId());
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/1ccb1eca/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageWithAttachmentMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageWithAttachmentMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageWithAttachmentMapperTest.java
index 5497d14..ff9242d 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageWithAttachmentMapperTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageWithAttachmentMapperTest.java
@@ -183,8 +183,7 @@ public class MessageWithAttachmentMapperTest<T extends MapperProvider> {
public void messagesCanBeRetrievedInMailboxWithRangeTypeOne() throws MailboxException, IOException{
saveMessages();
MessageMapper.FetchType fetchType = MessageMapper.FetchType.Full;
- int limit =10;
- assertThat(messageMapper.findInMailbox(attachmentsMailbox, MessageRange.one(messageWith1Attachment.getUid()), fetchType, limit).next())
+ assertThat(messageMapper.findInMailbox(attachmentsMailbox, MessageRange.one(messageWith1Attachment.getUid()), fetchType, LIMIT).next())
.isEqualTo(messageWith1Attachment, fetchType);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[6/6] james-project git commit: Merge remote-tracking branch
'quynhn/MAILBOX-279'
Posted by ro...@apache.org.
Merge remote-tracking branch 'quynhn/MAILBOX-279'
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/97de2638
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/97de2638
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/97de2638
Branch: refs/heads/master
Commit: 97de263826738ddcd1906428dcff88846d7fb874
Parents: 84c6694 60f9dcd
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Mon Jan 9 10:12:49 2017 +0100
Committer: Raphael Ouazana <ra...@linagora.com>
Committed: Mon Jan 9 10:12:49 2017 +0100
----------------------------------------------------------------------
.../cassandra/mail/CassandraMapperProvider.java | 4 +-
.../mailbox/jpa/mail/JPAMailboxMapper.java | 10 +-
.../mailbox/jpa/mail/JPAMessageMapper.java | 158 ++++++-------
.../mailbox/jpa/mail/model/JPAMailbox.java | 9 +-
.../openjpa/AbstractJPAMailboxMessage.java | 29 +--
.../mailbox/jpa/mail/JPAMapperProvider.java | 16 +-
.../jpa/mail/TransactionalMessageMapper.java | 157 +++++++++++++
.../inmemory/mail/InMemoryMapperProvider.java | 4 +-
.../james/mailbox/store/mail/MessageUtils.java | 118 ++++++++++
.../mailbox/store/mail/MessageUtilsTest.java | 117 ++++++++++
.../store/mail/model/AnnotationMapperTest.java | 2 +-
.../store/mail/model/AttachmentMapperTest.java | 2 +-
.../store/mail/model/ListMessageAssert.java | 145 ++++++++++++
.../store/mail/model/ListMessageAssertTest.java | 230 +++++++++++++++++++
.../mail/model/ListMessagePropertiesAssert.java | 99 ++++++++
.../model/ListMessagePropertiesAssertTest.java | 97 ++++++++
.../store/mail/model/MailboxMapperTest.java | 2 +-
.../store/mail/model/MapperProvider.java | 2 +-
.../mailbox/store/mail/model/MessageAssert.java | 40 ++--
.../store/mail/model/MessageIdMapperTest.java | 2 +-
.../store/mail/model/MessageMapperTest.java | 138 ++++++-----
.../store/mail/model/MessageMoveTest.java | 2 +-
.../model/MessageWithAttachmentMapperTest.java | 54 +++--
23 files changed, 1232 insertions(+), 205 deletions(-)
----------------------------------------------------------------------
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[3/6] james-project git commit: MAILBOX-279: JPAMessageMapper will
extends JPATransactionalMapper as the standard for all JPA
Posted by ro...@apache.org.
MAILBOX-279: JPAMessageMapper will extends JPATransactionalMapper as the standard for all JPA
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/a377d438
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/a377d438
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/a377d438
Branch: refs/heads/master
Commit: a377d4386db26b57ae34f9a08d7599a0e85e5584
Parents: d4debb5
Author: Quynh Nguyen <qn...@linagora.com>
Authored: Wed Dec 7 14:11:50 2016 +0700
Committer: Quynh Nguyen <qn...@linagora.com>
Committed: Mon Jan 9 15:11:51 2017 +0700
----------------------------------------------------------------------
.../mailbox/jpa/mail/JPAMessageMapper.java | 175 ++++++++++---------
.../mailbox/store/mail/MessageMetadata.java | 69 ++++++++
2 files changed, 165 insertions(+), 79 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/a377d438/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
index 84c4c22..b7542c6 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
@@ -23,9 +23,8 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import javax.persistence.EntityManager;
+import javax.mail.Flags;
import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityTransaction;
import javax.persistence.PersistenceException;
import javax.persistence.Query;
@@ -33,6 +32,7 @@ import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageUid;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.jpa.JPAId;
+import org.apache.james.mailbox.jpa.JPATransactionalMapper;
import org.apache.james.mailbox.jpa.mail.model.JPAMailbox;
import org.apache.james.mailbox.jpa.mail.model.openjpa.AbstractJPAMailboxMessage;
import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAEncryptedMailboxMessage;
@@ -41,85 +41,29 @@ import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAStreamingMailboxMessag
import org.apache.james.mailbox.model.MessageMetaData;
import org.apache.james.mailbox.model.MessageRange;
import org.apache.james.mailbox.model.MessageRange.Type;
+import org.apache.james.mailbox.model.UpdatedFlags;
+import org.apache.james.mailbox.store.FlagsUpdateCalculator;
import org.apache.james.mailbox.store.SimpleMessageMetaData;
-import org.apache.james.mailbox.store.mail.AbstractMessageMapper;
import org.apache.james.mailbox.store.mail.MessageMapper;
+import org.apache.james.mailbox.store.mail.MessageMetadata;
import org.apache.james.mailbox.store.mail.ModSeqProvider;
import org.apache.james.mailbox.store.mail.UidProvider;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.apache.openjpa.persistence.ArgumentException;
+import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
/**
* JPA implementation of a {@link MessageMapper}. This class is not thread-safe!
*/
-public class JPAMessageMapper extends AbstractMessageMapper implements MessageMapper {
- protected EntityManagerFactory entityManagerFactory;
- protected EntityManager entityManager;
-
- public JPAMessageMapper(MailboxSession session, UidProvider uidProvider,
- ModSeqProvider modSeqProvider, EntityManagerFactory entityManagerFactory) {
- super(session, uidProvider, modSeqProvider);
- this.entityManagerFactory = entityManagerFactory;
- }
-
- /**
- * Return the currently used {@link EntityManager} or a new one if none
- * exists.
- *
- * @return entitymanger
- */
- public EntityManager getEntityManager() {
- if (entityManager != null)
- return entityManager;
- entityManager = entityManagerFactory.createEntityManager();
- return entityManager;
- }
+public class JPAMessageMapper extends JPATransactionalMapper implements MessageMapper {
+ private final MessageMetadata messageMetadataMapper;
- /**
- * @see org.apache.james.mailbox.store.transaction.TransactionalMapper#begin()
- */
- protected void begin() throws MailboxException {
- try {
- getEntityManager().getTransaction().begin();
- } catch (PersistenceException e) {
- throw new MailboxException("Begin of transaction failed", e);
- }
- }
-
- /**
- * Commit the Transaction and close the EntityManager
- */
- protected void commit() throws MailboxException {
- try {
- getEntityManager().getTransaction().commit();
- } catch (PersistenceException e) {
- throw new MailboxException("Commit of transaction failed", e);
- }
- }
-
- /**
- * @see org.apache.james.mailbox.store.transaction.TransactionalMapper#rollback()
- */
- protected void rollback() throws MailboxException {
- EntityTransaction transaction = entityManager.getTransaction();
- // check if we have a transaction to rollback
- if (transaction.isActive()) {
- getEntityManager().getTransaction().rollback();
- }
- }
-
- /**
- * Close open {@link EntityManager}
- */
- public void endRequest() {
- if (entityManager != null) {
- if (entityManager.isOpen())
- entityManager.close();
- entityManager = null;
- }
+ public JPAMessageMapper(MailboxSession mailboxSession, UidProvider uidProvider, ModSeqProvider modSeqProvider, EntityManagerFactory entityManagerFactory) {
+ super(entityManagerFactory);
+ this.messageMetadataMapper = new MessageMetadata(mailboxSession, uidProvider, modSeqProvider);
}
/**
@@ -127,6 +71,7 @@ public class JPAMessageMapper extends AbstractMessageMapper implements MessageMa
* org.apache.james.mailbox.model.MessageRange,
* org.apache.james.mailbox.store.mail.MessageMapper.FetchType, int)
*/
+ @Override
public Iterator<MailboxMessage> findInMailbox(Mailbox mailbox, MessageRange set, FetchType fType, int max)
throws MailboxException {
try {
@@ -191,12 +136,22 @@ public class JPAMessageMapper extends AbstractMessageMapper implements MessageMa
*/
public void delete(Mailbox mailbox, MailboxMessage message) throws MailboxException {
try {
- getEntityManager().remove(message);
+ AbstractJPAMailboxMessage jpaMessage = getEntityManager().find(AbstractJPAMailboxMessage.class, buildKey(mailbox, message));
+ getEntityManager().remove(jpaMessage);
+
} catch (PersistenceException e) {
throw new MailboxException("Delete of message " + message + " failed in mailbox " + mailbox, e);
}
}
+ private AbstractJPAMailboxMessage.MailboxIdUidKey buildKey(Mailbox mailbox, MailboxMessage message) {
+ JPAId mailboxId = (JPAId) mailbox.getMailboxId();
+ AbstractJPAMailboxMessage.MailboxIdUidKey key = new AbstractJPAMailboxMessage.MailboxIdUidKey();
+ key.mailbox = mailboxId.getRawId();
+ key.uid = message.getUid().asLong();
+ return key;
+ }
+
@Override
@SuppressWarnings("unchecked")
public MessageUid findFirstUnseenMessageUid(Mailbox mailbox) throws MailboxException {
@@ -262,8 +217,8 @@ public class JPAMessageMapper extends AbstractMessageMapper implements MessageMa
default:
case ALL:
results = findDeletedMessagesInMailbox(mailboxId);
- data = createMetaData(results);
deleteDeletedMessagesInMailbox(mailboxId);
+ data = createMetaData(results);
break;
}
@@ -285,15 +240,71 @@ public class JPAMessageMapper extends AbstractMessageMapper implements MessageMa
}
@Override
- protected MessageMetaData copy(Mailbox mailbox, MessageUid uid, long modSeq, MailboxMessage original)
+ public MessageMetaData add(Mailbox mailbox, MailboxMessage message) throws MailboxException {
+ messageMetadataMapper.enrichMessage(mailbox, message);
+
+ return save(mailbox, message);
+ }
+
+ @Override
+ public Iterator<UpdatedFlags> updateFlags(Mailbox mailbox, FlagsUpdateCalculator flagsUpdateCalculator,
+ MessageRange set) throws MailboxException {
+ ImmutableList.Builder<UpdatedFlags> updatedFlags = ImmutableList.builder();
+ Iterator<MailboxMessage> messages = findInMailbox(mailbox, set, FetchType.Metadata, -1);
+
+ long modSeq = -1;
+ if (messages.hasNext()) {
+ modSeq = messageMetadataMapper.nextModSeq(mailbox);
+ }
+ while(messages.hasNext()) {
+ MailboxMessage member = messages.next();
+ Flags originalFlags = member.createFlags();
+ member.setFlags(flagsUpdateCalculator.buildNewFlags(originalFlags));
+ Flags newFlags = member.createFlags();
+ if (UpdatedFlags.flagsChanged(originalFlags, newFlags)) {
+ member.setModSeq(modSeq);
+ save(mailbox, member);
+ }
+
+ UpdatedFlags uFlags = new UpdatedFlags(member.getUid(), member.getModSeq(), originalFlags, newFlags);
+
+ updatedFlags.add(uFlags);
+
+ }
+
+ return updatedFlags.build().iterator();
+ }
+
+ @Override
+ public MessageMetaData copy(Mailbox mailbox, MailboxMessage original) throws MailboxException {
+ return copy(mailbox, messageMetadataMapper.nextUid(mailbox), messageMetadataMapper.nextModSeq(mailbox), original);
+ }
+
+ @Override
+ public Optional<MessageUid> getLastUid(Mailbox mailbox) throws MailboxException {
+ return messageMetadataMapper.getLastUid(mailbox);
+ }
+
+ @Override
+ public long getHighestModSeq(Mailbox mailbox) throws MailboxException {
+ return messageMetadataMapper.getHighestModSeq(mailbox);
+ }
+
+ private MessageMetaData copy(Mailbox mailbox, MessageUid uid, long modSeq, MailboxMessage original)
throws MailboxException {
MailboxMessage copy;
+ JPAMailbox currentMailbox;
+ if (mailbox instanceof JPAMailbox) {
+ currentMailbox = (JPAMailbox) mailbox;
+ } else {
+ currentMailbox = new JPAMailbox(mailbox);
+ }
if (original instanceof JPAStreamingMailboxMessage) {
- copy = new JPAStreamingMailboxMessage((JPAMailbox) mailbox, uid, modSeq, original);
+ copy = new JPAStreamingMailboxMessage(currentMailbox, uid, modSeq, original);
} else if (original instanceof JPAEncryptedMailboxMessage) {
- copy = new JPAEncryptedMailboxMessage((JPAMailbox) mailbox, uid, modSeq, original);
+ copy = new JPAEncryptedMailboxMessage(currentMailbox, uid, modSeq, original);
} else {
- copy = new JPAMailboxMessage((JPAMailbox) mailbox, uid, modSeq, original);
+ copy = new JPAMailboxMessage(currentMailbox, uid, modSeq, original);
}
return save(mailbox, copy);
}
@@ -303,19 +314,25 @@ public class JPAMessageMapper extends AbstractMessageMapper implements MessageMa
* MailboxMessage)
*/
protected MessageMetaData save(Mailbox mailbox, MailboxMessage message) throws MailboxException {
-
try {
-
// We need to reload a "JPA attached" mailbox, because the provide
// mailbox is already "JPA detached"
// If we don't this, we will get an
// org.apache.openjpa.persistence.ArgumentException.
JPAId mailboxId = (JPAId) mailbox.getMailboxId();
- ((AbstractJPAMailboxMessage) message)
- .setMailbox(getEntityManager().find(JPAMailbox.class, mailboxId.getRawId()));
+ JPAMailbox currentMailbox = getEntityManager().find(JPAMailbox.class, mailboxId.getRawId());
+ if (message instanceof AbstractJPAMailboxMessage) {
+ ((AbstractJPAMailboxMessage) message).setMailbox(currentMailbox);
+
+ getEntityManager().persist(message);
+ return new SimpleMessageMetaData(message);
+ } else {
+ JPAMailboxMessage persistData = new JPAMailboxMessage(currentMailbox, message.getUid(), message.getModSeq(), message);
+ persistData.setFlags(new Flags());
+ getEntityManager().persist(persistData);
+ return new SimpleMessageMetaData(persistData);
+ }
- getEntityManager().persist(message);
- return new SimpleMessageMetaData(message);
} catch (PersistenceException e) {
throw new MailboxException("Save of message " + message + " failed in mailbox " + mailbox, e);
} catch (ArgumentException e) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/a377d438/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMetadata.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMetadata.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMetadata.java
new file mode 100644
index 0000000..1907cf0
--- /dev/null
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMetadata.java
@@ -0,0 +1,69 @@
+/****************************************************************
+ * 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.store.mail;
+
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.store.mail.model.Mailbox;
+import org.apache.james.mailbox.store.mail.model.MailboxMessage;
+
+import com.google.common.base.Optional;
+
+public class MessageMetadata {
+ private final MailboxSession mailboxSession;
+ private final UidProvider uidProvider;
+ private final ModSeqProvider modSeqProvider;
+
+ public MessageMetadata(MailboxSession mailboxSession, UidProvider uidProvider, ModSeqProvider modSeqProvider) {
+ this.mailboxSession = mailboxSession;
+ this.uidProvider = uidProvider;
+ this.modSeqProvider = modSeqProvider;
+ }
+
+ public long getHighestModSeq(Mailbox mailbox) throws MailboxException {
+ return modSeqProvider.highestModSeq(mailboxSession, mailbox);
+ }
+
+ public Optional<MessageUid> getLastUid(Mailbox mailbox) throws MailboxException {
+ return uidProvider.lastUid(mailboxSession, mailbox);
+ }
+
+
+ public MessageUid nextUid(Mailbox mailbox) throws MailboxException {
+ return uidProvider.nextUid(mailboxSession, mailbox);
+ }
+
+ public long nextModSeq(Mailbox mailbox) throws MailboxException {
+ if (modSeqProvider != null) {
+ return modSeqProvider.nextModSeq(mailboxSession, mailbox);
+ }
+ return -1;
+ }
+
+ public void enrichMessage(Mailbox mailbox, MailboxMessage message) throws MailboxException {
+ message.setUid(nextUid(mailbox));
+
+ if (modSeqProvider != null) {
+ message.setModSeq(nextModSeq(mailbox));
+ }
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[2/6] james-project git commit: MAILBOX-279: Add more testing with
message's attachment
Posted by ro...@apache.org.
MAILBOX-279: Add more testing with message's attachment
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d4debb50
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d4debb50
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d4debb50
Branch: refs/heads/master
Commit: d4debb50691bd94d189283ac269b52e968ba7adf
Parents: 20e6f63
Author: Quynh Nguyen <qn...@linagora.com>
Authored: Wed Dec 7 13:54:53 2016 +0700
Committer: Quynh Nguyen <qn...@linagora.com>
Committed: Mon Jan 9 15:11:51 2017 +0700
----------------------------------------------------------------------
.../mailbox/store/mail/model/MessageAssert.java | 40 ++++++++++-----
.../model/MessageWithAttachmentMapperTest.java | 51 ++++++++++++++------
2 files changed, 62 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/d4debb50/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageAssert.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageAssert.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageAssert.java
index b002da4..7267924 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageAssert.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageAssert.java
@@ -25,6 +25,7 @@ import javax.mail.Flags;
import org.apache.commons.io.IOUtils;
import org.apache.james.mailbox.store.mail.MessageMapper;
+import org.apache.james.mailbox.store.mail.MessageMapper.FetchType;
import org.assertj.core.api.AbstractAssert;
import com.google.common.base.Objects;
@@ -39,7 +40,33 @@ public class MessageAssert extends AbstractAssert<MessageAssert, MailboxMessage>
return new MessageAssert(actual);
}
+ public MessageAssert isEqualTo(MailboxMessage expected, MessageMapper.FetchType usedFetchType) throws IOException {
+ isNotNull();
+ if (!Objects.equal(actual.getUid(), expected.getUid())) {
+ failWithMessage("Expected UID to be <%s> but was <%s>", expected.getUid(), actual.getUid());
+ }
+ return isEqualToWithoutUid(expected, usedFetchType);
+ }
+
+ public MessageAssert isEqualToWithoutAttachment(MailboxMessage expected, MessageMapper.FetchType usedFetchType) throws IOException {
+ isNotNull();
+ if (!Objects.equal(actual.getUid(), expected.getUid())) {
+ failWithMessage("Expected UID to be <%s> but was <%s>", expected.getUid(), actual.getUid());
+ }
+ return isEqualToWithoutUidAndAttachment(expected, usedFetchType);
+ }
+
public MessageAssert isEqualToWithoutUid(MailboxMessage expected, MessageMapper.FetchType usedFetchType) throws IOException {
+ isEqualToWithoutUidAndAttachment(expected, usedFetchType);
+ if (usedFetchType == MessageMapper.FetchType.Full || usedFetchType == MessageMapper.FetchType.Body) {
+ if (!Objects.equal(actual.getAttachments(), expected.getAttachments())) {
+ failWithMessage("Expected attachments to be <%s> but was <%s>", expected.getAttachments(), actual.getAttachments());
+ }
+ }
+ return this;
+ }
+
+ public MessageAssert isEqualToWithoutUidAndAttachment(MailboxMessage expected, FetchType usedFetchType) throws IOException {
isNotNull();
if (!Objects.equal(actual.getMailboxId(), expected.getMailboxId())) {
failWithMessage("Expected Mailbox ID to be <%s> but was <%s>", expected.getMailboxId().toString(), actual.getMailboxId().toString());
@@ -74,22 +101,9 @@ public class MessageAssert extends AbstractAssert<MessageAssert, MailboxMessage>
failWithMessage("Expected Body content to be <%s> but was <%s>", IOUtils.toString(expected.getBodyContent()), IOUtils.toString(actual.getBodyContent()));
}
}
- if (usedFetchType == MessageMapper.FetchType.Full || usedFetchType == MessageMapper.FetchType.Body) {
- if (!Objects.equal(actual.getAttachments(), expected.getAttachments())) {
- failWithMessage("Expected attachments to be <%s> but was <%s>", expected.getAttachments(), actual.getAttachments());
- }
- }
return this;
}
- public MessageAssert isEqualTo(MailboxMessage expected, MessageMapper.FetchType usedFetchType) throws IOException {
- isNotNull();
- if (!Objects.equal(actual.getUid(), expected.getUid())) {
- failWithMessage("Expected UID to be <%s> but was <%s>", expected.getUid(), actual.getUid());
- }
- return isEqualToWithoutUid(expected, usedFetchType);
- }
-
public MessageAssert hasFlags(Flags flags) {
if (flags.contains(Flags.Flag.ANSWERED) != actual.isAnswered()) {
failWithMessage("Expected ANSWERED flag to be <%s> but was <%>", flags.contains(Flags.Flag.ANSWERED), actual.isAnswered());
http://git-wip-us.apache.org/repos/asf/james-project/blob/d4debb50/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageWithAttachmentMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageWithAttachmentMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageWithAttachmentMapperTest.java
index 2bcecff..5497d14 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageWithAttachmentMapperTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageWithAttachmentMapperTest.java
@@ -19,6 +19,7 @@
package org.apache.james.mailbox.store.mail.model;
+import static org.apache.james.mailbox.store.mail.model.MessageAssert.assertThat;
import static org.assertj.core.api.Assertions.assertThat;
import java.io.IOException;
@@ -69,8 +70,8 @@ public class MessageWithAttachmentMapperTest<T extends MapperProvider> {
private SimpleMailbox attachmentsMailbox;
private SimpleMailboxMessage messageWithoutAttachment;
- private SimpleMailboxMessage message7With1Attachment;
- private SimpleMailboxMessage message8With2Attachments;
+ private SimpleMailboxMessage messageWith1Attachment;
+ private SimpleMailboxMessage messageWith2Attachments;
@Rule
public ExpectedException expected = ExpectedException.none();
@@ -101,13 +102,13 @@ public class MessageWithAttachmentMapperTest<T extends MapperProvider> {
.type("content")
.build();
attachmentMapper.storeAttachment(attachment2);
- message7With1Attachment = createMessage(attachmentsMailbox, mapperProvider.generateMessageId(), "Subject: Test7 \n\nBody7\n.\n", BODY_START, new PropertyBuilder(),
+ messageWith1Attachment = createMessage(attachmentsMailbox, mapperProvider.generateMessageId(), "Subject: Test7 \n\nBody7\n.\n", BODY_START, new PropertyBuilder(),
ImmutableList.of(MessageAttachment.builder()
.attachment(attachment)
.cid(Cid.from("cid"))
.isInline(true)
.build()));
- message8With2Attachments = createMessage(attachmentsMailbox, mapperProvider.generateMessageId(), "Subject: Test8 \n\nBody8\n.\n", BODY_START, new PropertyBuilder(),
+ messageWith2Attachments = createMessage(attachmentsMailbox, mapperProvider.generateMessageId(), "Subject: Test8 \n\nBody8\n.\n", BODY_START, new PropertyBuilder(),
ImmutableList.of(
MessageAttachment.builder()
.attachment(attachment)
@@ -132,24 +133,24 @@ public class MessageWithAttachmentMapperTest<T extends MapperProvider> {
public void messagesRetrievedUsingFetchTypeFullShouldHaveAttachmentsLoadedWhenOneAttachment() throws MailboxException, IOException{
saveMessages();
MessageMapper.FetchType fetchType = MessageMapper.FetchType.Full;
- Iterator<MailboxMessage> retrievedMessageIterator = messageMapper.findInMailbox(attachmentsMailbox, MessageRange.one(message7With1Attachment.getUid()), fetchType, LIMIT);
- assertThat(retrievedMessageIterator.next().getAttachments()).isEqualTo(message7With1Attachment.getAttachments());
+ Iterator<MailboxMessage> retrievedMessageIterator = messageMapper.findInMailbox(attachmentsMailbox, MessageRange.one(messageWith1Attachment.getUid()), fetchType, LIMIT);
+ assertThat(retrievedMessageIterator.next().getAttachments()).isEqualTo(messageWith1Attachment.getAttachments());
}
@ContractTest
public void messagesRetrievedUsingFetchTypeFullShouldHaveAttachmentsLoadedWhenTwoAttachments() throws MailboxException, IOException{
saveMessages();
MessageMapper.FetchType fetchType = MessageMapper.FetchType.Full;
- Iterator<MailboxMessage> retrievedMessageIterator = messageMapper.findInMailbox(attachmentsMailbox, MessageRange.one(message8With2Attachments.getUid()), fetchType, LIMIT);
- assertThat(retrievedMessageIterator.next().getAttachments()).isEqualTo(message8With2Attachments.getAttachments());
+ Iterator<MailboxMessage> retrievedMessageIterator = messageMapper.findInMailbox(attachmentsMailbox, MessageRange.one(messageWith2Attachments.getUid()), fetchType, LIMIT);
+ assertThat(retrievedMessageIterator.next().getAttachments()).isEqualTo(messageWith2Attachments.getAttachments());
}
@ContractTest
public void messagesRetrievedUsingFetchTypeBodyShouldHaveAttachmentsLoadedWhenOneAttachment() throws MailboxException, IOException{
saveMessages();
MessageMapper.FetchType fetchType = MessageMapper.FetchType.Body;
- Iterator<MailboxMessage> retrievedMessageIterator = messageMapper.findInMailbox(attachmentsMailbox, MessageRange.one(message7With1Attachment.getUid()), fetchType, LIMIT);
- assertThat(retrievedMessageIterator.next().getAttachments()).isEqualTo(message7With1Attachment.getAttachments());
+ Iterator<MailboxMessage> retrievedMessageIterator = messageMapper.findInMailbox(attachmentsMailbox, MessageRange.one(messageWith1Attachment.getUid()), fetchType, LIMIT);
+ assertThat(retrievedMessageIterator.next().getAttachments()).isEqualTo(messageWith1Attachment.getAttachments());
}
@ContractTest
@@ -157,7 +158,7 @@ public class MessageWithAttachmentMapperTest<T extends MapperProvider> {
Assume.assumeTrue(mapperProvider.supportPartialAttachmentFetch());
saveMessages();
MessageMapper.FetchType fetchType = MessageMapper.FetchType.Headers;
- Iterator<MailboxMessage> retrievedMessageIterator = messageMapper.findInMailbox(attachmentsMailbox, MessageRange.one(message7With1Attachment.getUid()), fetchType, LIMIT);
+ Iterator<MailboxMessage> retrievedMessageIterator = messageMapper.findInMailbox(attachmentsMailbox, MessageRange.one(messageWith1Attachment.getUid()), fetchType, LIMIT);
assertThat(retrievedMessageIterator.next().getAttachments()).isEmpty();
}
@@ -166,7 +167,7 @@ public class MessageWithAttachmentMapperTest<T extends MapperProvider> {
Assume.assumeTrue(mapperProvider.supportPartialAttachmentFetch());
saveMessages();
MessageMapper.FetchType fetchType = MessageMapper.FetchType.Metadata;
- Iterator<MailboxMessage> retrievedMessageIterator = messageMapper.findInMailbox(attachmentsMailbox, MessageRange.one(message7With1Attachment.getUid()), fetchType, LIMIT);
+ Iterator<MailboxMessage> retrievedMessageIterator = messageMapper.findInMailbox(attachmentsMailbox, MessageRange.one(messageWith1Attachment.getUid()), fetchType, LIMIT);
assertThat(retrievedMessageIterator.next().getAttachments()).isEmpty();
}
@@ -178,6 +179,24 @@ public class MessageWithAttachmentMapperTest<T extends MapperProvider> {
assertThat(retrievedMessageIterator.next().getAttachments()).isEmpty();
}
+ @ContractTest
+ public void messagesCanBeRetrievedInMailboxWithRangeTypeOne() throws MailboxException, IOException{
+ saveMessages();
+ MessageMapper.FetchType fetchType = MessageMapper.FetchType.Full;
+ int limit =10;
+ assertThat(messageMapper.findInMailbox(attachmentsMailbox, MessageRange.one(messageWith1Attachment.getUid()), fetchType, limit).next())
+ .isEqualTo(messageWith1Attachment, fetchType);
+ }
+
+ @ContractTest
+ public void messagesRetrievedUsingFetchTypeBodyShouldHaveBodyDataLoaded() throws MailboxException, IOException{
+ saveMessages();
+ MessageMapper.FetchType fetchType = MessageMapper.FetchType.Body;
+ Iterator<MailboxMessage> retrievedMessageIterator = messageMapper.findInMailbox(attachmentsMailbox, MessageRange.one(messageWith1Attachment.getUid()), fetchType, LIMIT);
+ assertThat(retrievedMessageIterator.next()).isEqualTo(messageWith1Attachment, fetchType);
+ assertThat(retrievedMessageIterator).isEmpty();
+ }
+
private SimpleMailbox createMailbox(MailboxPath mailboxPath) {
SimpleMailbox mailbox = new SimpleMailbox(mailboxPath, UID_VALIDITY);
MailboxId id = mapperProvider.generateId();
@@ -188,10 +207,10 @@ public class MessageWithAttachmentMapperTest<T extends MapperProvider> {
private void saveMessages() throws MailboxException {
messageMapper.add(attachmentsMailbox, messageWithoutAttachment);
messageWithoutAttachment.setModSeq(messageMapper.getHighestModSeq(attachmentsMailbox));
- messageMapper.add(attachmentsMailbox, message7With1Attachment);
- message7With1Attachment.setModSeq(messageMapper.getHighestModSeq(attachmentsMailbox));
- messageMapper.add(attachmentsMailbox, message8With2Attachments);
- message8With2Attachments.setModSeq(messageMapper.getHighestModSeq(attachmentsMailbox));
+ messageMapper.add(attachmentsMailbox, messageWith1Attachment);
+ messageWith1Attachment.setModSeq(messageMapper.getHighestModSeq(attachmentsMailbox));
+ messageMapper.add(attachmentsMailbox, messageWith2Attachments);
+ messageWith2Attachments.setModSeq(messageMapper.getHighestModSeq(attachmentsMailbox));
}
private SimpleMailboxMessage createMessage(Mailbox mailbox, MessageId messageId, String content, int bodyStart, PropertyBuilder propertyBuilder, List<MessageAttachment> attachments) {
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org