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]

Reply via email to