Author: matthieu
Date: Tue Jan 12 13:13:06 2016
New Revision: 1724223
URL: http://svn.apache.org/viewvc?rev=1724223&view=rev
Log:
MAILBOX-262 refactor SimpleMessage copy constructor to a factory method
Modified:
james/project/trunk/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
james/project/trunk/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
james/project/trunk/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessage.java
james/project/trunk/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AbstractMessageMapperTest.java
james/project/trunk/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessageTest.java
Modified:
james/project/trunk/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java?rev=1724223&r1=1724222&r2=1724223&view=diff
==============================================================================
---
james/project/trunk/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
(original)
+++
james/project/trunk/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
Tue Jan 12 13:13:06 2016
@@ -283,7 +283,7 @@ public class MaildirMessageMapper extend
@Override
protected MessageMetaData copy(Mailbox<MaildirId> mailbox, long uid, long
modSeq, Message<MaildirId> original)
throws MailboxException {
- SimpleMessage<MaildirId> theCopy = new
SimpleMessage<MaildirId>(mailbox, original);
+ SimpleMessage<MaildirId> theCopy =
SimpleMessage.copy(mailbox.getMailboxId(), original);
Flags flags = theCopy.createFlags();
flags.add(Flag.RECENT);
theCopy.setFlags(flags);
Modified:
james/project/trunk/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java?rev=1724223&r1=1724222&r2=1724223&view=diff
==============================================================================
---
james/project/trunk/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
(original)
+++
james/project/trunk/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
Tue Jan 12 13:13:06 2016
@@ -215,7 +215,7 @@ public class InMemoryMessageMapper exten
*/
protected MessageMetaData copy(Mailbox<InMemoryId> mailbox, long uid, long
modSeq, Message<InMemoryId> original)
throws MailboxException {
- SimpleMessage<InMemoryId> message = new
SimpleMessage<InMemoryId>(mailbox, original);
+ SimpleMessage<InMemoryId> message =
SimpleMessage.copy(mailbox.getMailboxId(), original);
message.setUid(uid);
message.setModSeq(modSeq);
Flags flags = original.createFlags();
@@ -231,7 +231,7 @@ public class InMemoryMessageMapper exten
* org.apache.james.mailbox.store.mail.model.Message)
*/
protected MessageMetaData save(Mailbox<InMemoryId> mailbox,
Message<InMemoryId> message) throws MailboxException {
- SimpleMessage<InMemoryId> copy = new
SimpleMessage<InMemoryId>(mailbox, message);
+ SimpleMessage<InMemoryId> copy =
SimpleMessage.copy(mailbox.getMailboxId(), message);
copy.setUid(message.getUid());
copy.setModSeq(message.getModSeq());
getMembershipByUidForMailbox(mailbox).put(message.getUid(), copy);
Modified:
james/project/trunk/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessage.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessage.java?rev=1724223&r1=1724222&r2=1724223&view=diff
==============================================================================
---
james/project/trunk/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessage.java
(original)
+++
james/project/trunk/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessage.java
Tue Jan 12 13:13:06 2016
@@ -21,7 +21,6 @@ package org.apache.james.mailbox.store.m
import java.io.IOException;
import java.io.InputStream;
-import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -33,12 +32,31 @@ import org.apache.commons.io.IOUtils;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.store.mail.model.AbstractMessage;
import org.apache.james.mailbox.store.mail.model.MailboxId;
-import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.Message;
import org.apache.james.mailbox.store.mail.model.Property;
+import com.google.common.primitives.Ints;
+
public class SimpleMessage<Id extends MailboxId> extends AbstractMessage<Id> {
+ public static <Id extends MailboxId> SimpleMessage<Id> copy(Id mailboxId,
Message<Id> original) throws MailboxException {
+ Date internalDate = original.getInternalDate();
+ long size = original.getFullContentOctets();
+ Flags flags = original.createFlags();
+ SharedByteArrayInputStream content = copyFullContent(original);
+ int bodyStartOctet = Ints.checkedCast(original.getFullContentOctets()
- original.getBodyOctets());
+ PropertyBuilder pBuilder = new
PropertyBuilder(original.getProperties());
+ return new SimpleMessage<Id>(internalDate, size, bodyStartOctet,
content, flags, pBuilder, mailboxId);
+ }
+
+ private static <Id extends MailboxId> SharedByteArrayInputStream
copyFullContent(Message<Id> original) throws MailboxException {
+ try {
+ return new
SharedByteArrayInputStream(IOUtils.toByteArray(original.getFullContent()));
+ } catch (IOException e) {
+ throw new MailboxException("Unable to parse message", e);
+ }
+ }
+
private long uid;
private final Id mailboxId;
private long size;
@@ -58,7 +76,7 @@ public class SimpleMessage<Id extends Ma
private long modSeq;
private SharedInputStream content;
- public SimpleMessage(Date internalDate, int size, int bodyStartOctet,
+ public SimpleMessage(Date internalDate, long size, int bodyStartOctet,
SharedInputStream content, Flags flags,
PropertyBuilder propertyBuilder, final Id mailboxId) {
this.content = content;
@@ -75,33 +93,6 @@ public class SimpleMessage<Id extends Ma
this.userFlags = flags.getUserFlags();
}
- public SimpleMessage(Mailbox<Id> mailbox, Message<Id> original)
- throws MailboxException {
- this.internalDate = original.getInternalDate();
- this.size = original.getFullContentOctets();
- this.mailboxId = mailbox.getMailboxId();
- setFlags(original.createFlags());
- try {
- this.content = new SharedByteArrayInputStream(
- IOUtils.toByteArray(original.getFullContent()));
- } catch (IOException e) {
- throw new MailboxException("Unable to parse message", e);
- }
-
- this.bodyStartOctet = (int) (original.getFullContentOctets() - original
- .getBodyOctets());
-
- PropertyBuilder pBuilder = new
PropertyBuilder(original.getProperties());
- this.lineCount = original.getTextualLineCount();
- this.mediaType = original.getMediaType();
- this.subType = original.getSubType();
- final List<Property> properties = pBuilder.toProperties();
- this.properties = new ArrayList<Property>(properties.size());
- for (final Property property : properties) {
- this.properties.add(new SimpleProperty(property));
- }
- }
-
@Override
protected String[] createUserFlags() {
return userFlags.clone();
Modified:
james/project/trunk/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AbstractMessageMapperTest.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AbstractMessageMapperTest.java?rev=1724223&r1=1724222&r2=1724223&view=diff
==============================================================================
---
james/project/trunk/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AbstractMessageMapperTest.java
(original)
+++
james/project/trunk/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AbstractMessageMapperTest.java
Tue Jan 12 13:13:06 2016
@@ -413,21 +413,21 @@ public abstract class AbstractMessageMap
public void copyShouldIncrementUid() throws MailboxException, IOException {
saveMessages();
long uid = messageMapper.getLastUid(benwaInboxMailbox);
- messageMapper.copy(benwaInboxMailbox, new
SimpleMessage<Id>(benwaInboxMailbox, message6));
+ messageMapper.copy(benwaInboxMailbox,
SimpleMessage.copy(benwaInboxMailbox.getMailboxId(), message6));
assertThat(messageMapper.getLastUid(benwaInboxMailbox)).isGreaterThan(uid);
}
@Test
public void copyShouldIncrementMessageCount() throws MailboxException,
IOException {
saveMessages();
- messageMapper.copy(benwaInboxMailbox, new
SimpleMessage<Id>(benwaInboxMailbox, message6));
+ messageMapper.copy(benwaInboxMailbox,
SimpleMessage.copy(benwaInboxMailbox.getMailboxId(), message6));
assertThat(messageMapper.countMessagesInMailbox(benwaInboxMailbox)).isEqualTo(6);
}
@Test
public void copyOfUnSeenMessageShouldIncrementUnSeenMessageCount() throws
MailboxException, IOException {
saveMessages();
- messageMapper.copy(benwaInboxMailbox, new
SimpleMessage<Id>(benwaInboxMailbox, message6));
+ messageMapper.copy(benwaInboxMailbox,
SimpleMessage.copy(benwaInboxMailbox.getMailboxId(), message6));
assertThat(messageMapper.countUnseenMessagesInMailbox(benwaInboxMailbox)).isEqualTo(6);
}
@@ -435,14 +435,14 @@ public abstract class AbstractMessageMap
public void copyShouldIncrementModSeq() throws MailboxException,
IOException {
saveMessages();
long modSeq = messageMapper.getHighestModSeq(benwaInboxMailbox);
- messageMapper.copy(benwaInboxMailbox, new
SimpleMessage<Id>(benwaInboxMailbox, message6));
+ messageMapper.copy(benwaInboxMailbox,
SimpleMessage.copy(benwaInboxMailbox.getMailboxId(), message6));
assertThat(messageMapper.getHighestModSeq(benwaInboxMailbox)).isGreaterThan(modSeq);
}
@Test
public void copyShouldCreateAMessageInDestination() throws
MailboxException, IOException {
saveMessages();
- Message<Id> message7 = new SimpleMessage<Id>(benwaInboxMailbox,
message6);
+ Message<Id> message7 =
SimpleMessage.copy(benwaInboxMailbox.getMailboxId(), message6);
messageMapper.copy(benwaInboxMailbox, message7);
message7.setModSeq(messageMapper.getHighestModSeq(benwaInboxMailbox));
MessageAssert.assertThat(messageMapper.findInMailbox(benwaInboxMailbox,
MessageRange.one(message7.getUid()), MessageMapper.FetchType.Full,
LIMIT).next())
@@ -452,13 +452,13 @@ public abstract class AbstractMessageMap
@Test
public void copyOfSeenMessageShouldNotIncrementUnSeenMessageCount() throws
MailboxException {
message6.setFlags(new Flags(Flags.Flag.SEEN));
- messageMapper.copy(benwaInboxMailbox, new
SimpleMessage<Id>(benwaInboxMailbox, message6));
+ messageMapper.copy(benwaInboxMailbox,
SimpleMessage.copy(benwaInboxMailbox.getMailboxId(), message6));
assertThat(messageMapper.countUnseenMessagesInMailbox(benwaInboxMailbox)).isEqualTo(0);
}
@Test
public void copiedMessageShouldBeMarkedAsRecent() throws MailboxException {
- MessageMetaData metaData = messageMapper.copy(benwaInboxMailbox, new
SimpleMessage<Id>(benwaInboxMailbox, message6));
+ MessageMetaData metaData = messageMapper.copy(benwaInboxMailbox,
SimpleMessage.copy(benwaInboxMailbox.getMailboxId(), message6));
assertThat(
messageMapper.findInMailbox(benwaInboxMailbox,
MessageRange.one(metaData.getUid()),
@@ -472,7 +472,7 @@ public abstract class AbstractMessageMap
@Test
public void copiedRecentMessageShouldBeMarkedAsRecent() throws
MailboxException {
message6.setFlags(new Flags(Flags.Flag.RECENT));
- MessageMetaData metaData = messageMapper.copy(benwaInboxMailbox, new
SimpleMessage<Id>(benwaInboxMailbox, message6));
+ MessageMetaData metaData = messageMapper.copy(benwaInboxMailbox,
SimpleMessage.copy(benwaInboxMailbox.getMailboxId(), message6));
assertThat(
messageMapper.findInMailbox(benwaInboxMailbox,
MessageRange.one(metaData.getUid()),
@@ -639,7 +639,7 @@ public abstract class AbstractMessageMap
@Test
public void messagesShouldBeSavedWithTheirUserFlags() throws Exception {
- Message<Id> message = new SimpleMessage<Id>(benwaInboxMailbox,
message1);
+ Message<Id> message =
SimpleMessage.copy(benwaInboxMailbox.getMailboxId(), message1);
messageMapper.add(benwaInboxMailbox, message);
MessageAssert.assertThat(retrieveMessageFromStorage(message)).hasFlags(new
Flags(USER_FLAG));
}
Modified:
james/project/trunk/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessageTest.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessageTest.java?rev=1724223&r1=1724222&r2=1724223&view=diff
==============================================================================
---
james/project/trunk/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessageTest.java
(original)
+++
james/project/trunk/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessageTest.java
Tue Jan 12 13:13:06 2016
@@ -18,9 +18,9 @@
****************************************************************/
package org.apache.james.mailbox.store.mail.model.impl;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
-import static org.assertj.core.api.Assertions.assertThat;
import java.io.IOException;
import java.io.InputStream;
@@ -31,8 +31,9 @@ import javax.mail.Flags;
import javax.mail.util.SharedByteArrayInputStream;
import org.apache.commons.io.IOUtils;
-import org.apache.james.mailbox.store.TestId;
import org.apache.james.mailbox.FlagsBuilder;
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.store.TestId;
import org.junit.Before;
import org.junit.Test;
@@ -88,7 +89,15 @@ public class SimpleMessageTest {
assertThat(MESSAGE.createUserFlags()).containsOnly("mozzarela",
"parmesan", "coppa", "limonchello");
}
- private static SimpleMessage<TestId> buildMessage(String content) {
+ @Test
+ public void copyShouldReturnFieldByFieldEqualsObject() throws
MailboxException {
+ SimpleMessage<TestId> original = buildMessage("my content");
+ SimpleMessage<TestId> copy = SimpleMessage.copy(TestId.of(1337),
original);
+ assertThat((Object)copy).isEqualToIgnoringGivenFields(original,
"mailboxId").isNotSameAs(original);
+ assertThat(copy.getMailboxId()).isEqualTo(TestId.of(1337));
+ }
+
+ private static SimpleMessage<TestId> buildMessage(String content) {
return new SimpleMessage<TestId>(Calendar.getInstance().getTime(),
content.length(), 0, new SharedByteArrayInputStream(
content.getBytes(MESSAGE_CHARSET)), new Flags(),
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]