JAMES-2220 replace ambiguous MailImpl constructor with factory method
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/05e5da35 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/05e5da35 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/05e5da35 Branch: refs/heads/master Commit: 05e5da3540dae357a40c86c54ed1ae246b03313f Parents: 549f7ae Author: Matthieu Baechler <matth...@apache.org> Authored: Tue Nov 14 15:42:37 2017 +0100 Committer: Antoine Duprat <adup...@linagora.com> Committed: Thu Nov 16 12:30:30 2017 +0100 ---------------------------------------------------------------------- .../org/apache/james/server/core/MailImpl.java | 20 ++++++++++---------- .../apache/james/server/core/MailImplTest.java | 19 +++++++++++++++++-- .../core/MimeMessageCopyOnWriteProxyTest.java | 8 ++++---- .../modules/server/MemoryMailQueueFactory.java | 2 +- .../impl/camel/MatcherSplitter.java | 2 +- .../mailets/AbstractRecipientRewriteTable.java | 2 +- .../james/transport/mailets/DSNBounce.java | 2 +- .../mailets/redirect/ProcessRedirectNotify.java | 2 +- 8 files changed, 36 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/05e5da35/server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java ---------------------------------------------------------------------- diff --git a/server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java b/server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java index ad66e7f..07aed83 100644 --- a/server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java +++ b/server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java @@ -72,6 +72,16 @@ import com.google.common.base.Preconditions; */ public class MailImpl implements Disposable, Mail { + /** + * Create a copy of the input mail and assign it a new name + * + * @param mail original mail + * @throws MessagingException when the message is not clonable + */ + public static MailImpl duplicate(Mail mail) throws MessagingException { + return new MailImpl(mail, newName(mail)); + } + private static final Logger LOGGER = LoggerFactory.getLogger(MailImpl.class); /** @@ -156,16 +166,6 @@ public class MailImpl implements Disposable, Mail { } /** - * Create a copy of the input mail and assign it a new name - * - * @param mail original mail - * @throws MessagingException when the message is not clonable - */ - public MailImpl(Mail mail) throws MessagingException { - this(mail, newName(mail)); - } - - /** * @param mail * @param newName * @throws MessagingException http://git-wip-us.apache.org/repos/asf/james-project/blob/05e5da35/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java ---------------------------------------------------------------------- diff --git a/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java b/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java index 5f299a4..f1beea2 100644 --- a/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java +++ b/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java @@ -126,6 +126,21 @@ public class MailImplTest { } @Test + public void duplicateFactoryMethodShouldGenerateNewObjectWithSameValuesButName() throws MessagingException, IOException { + ImmutableList<MailAddress> recipients = ImmutableList.of(); + String name = MailUtil.newId(); + String sender = "sender@localhost"; + MailAddress senderMailAddress = new MailAddress(sender); + + MailImpl mail = new MailImpl(name, senderMailAddress, recipients, emptyMessage); + MailImpl duplicate = MailImpl.duplicate(mail); + + assertThat(duplicate).isNotSameAs(mail).isEqualToIgnoringGivenFields(mail, "message", "name"); + assertThat(duplicate.getName()).isNotEqualTo(name); + assertThat(duplicate.getMessage().getInputStream()).hasSameContentAs(mail.getMessage().getInputStream()); + } + + @Test public void duplicateShouldGenerateNewObjectWithSameValuesButName() throws MessagingException, IOException { ImmutableList<MailAddress> recipients = ImmutableList.of(); String name = MailUtil.newId(); @@ -133,10 +148,10 @@ public class MailImplTest { MailAddress senderMailAddress = new MailAddress(sender); MailImpl mail = new MailImpl(name, senderMailAddress, recipients, emptyMessage); - MailImpl duplicate = (MailImpl) mail.duplicate("new name"); + MailImpl duplicate = MailImpl.duplicate(mail); assertThat(duplicate).isNotSameAs(mail).isEqualToIgnoringGivenFields(mail, "message", "name"); - assertThat(duplicate.getName()).isEqualTo("new name"); + assertThat(duplicate.getName()).isNotEqualTo(name); assertThat(duplicate.getMessage().getInputStream()).hasSameContentAs(mail.getMessage().getInputStream()); } http://git-wip-us.apache.org/repos/asf/james-project/blob/05e5da35/server/container/core/src/test/java/org/apache/james/server/core/MimeMessageCopyOnWriteProxyTest.java ---------------------------------------------------------------------- diff --git a/server/container/core/src/test/java/org/apache/james/server/core/MimeMessageCopyOnWriteProxyTest.java b/server/container/core/src/test/java/org/apache/james/server/core/MimeMessageCopyOnWriteProxyTest.java index 1829d11..1253da1 100644 --- a/server/container/core/src/test/java/org/apache/james/server/core/MimeMessageCopyOnWriteProxyTest.java +++ b/server/container/core/src/test/java/org/apache/james/server/core/MimeMessageCopyOnWriteProxyTest.java @@ -60,7 +60,7 @@ public class MimeMessageCopyOnWriteProxyTest extends MimeMessageFromStreamTest { MimeMessageCopyOnWriteProxy messageFromSources = (MimeMessageCopyOnWriteProxy) getMessageFromSources( content + sep + body); MailImpl mail = new MailImpl("test", new MailAddress("t...@test.com"), r, messageFromSources); - MailImpl m2 = (MailImpl) mail.duplicate("clone"); + MailImpl m2 = MailImpl.duplicate(mail); System.out.println("mail: " + getReferences(mail.getMessage()) + " m2: " + getReferences(m2.getMessage())); assertNotSame(m2, mail); assertNotSame(m2.getMessage(), mail.getMessage()); @@ -86,7 +86,7 @@ public class MimeMessageCopyOnWriteProxyTest extends MimeMessageFromStreamTest { MimeMessageCopyOnWriteProxy messageFromSources = (MimeMessageCopyOnWriteProxy) getMessageFromSources( content + sep + body); MailImpl mail = new MailImpl("test", new MailAddress("t...@test.com"), r, messageFromSources); - MailImpl m2 = (MailImpl) mail.duplicate("clone"); + MailImpl m2 = MailImpl.duplicate(mail); System.out.println("mail: " + getReferences(mail.getMessage()) + " m2: " + getReferences(m2.getMessage())); assertNotSame(m2, mail); assertNotSame(m2.getMessage(), mail.getMessage()); @@ -137,7 +137,7 @@ public class MimeMessageCopyOnWriteProxyTest extends MimeMessageFromStreamTest { content + sep + body); MailImpl mail = new MailImpl("test", new MailAddress("t...@test.com"), r, messageFromSources); // cloning the message - Mail mailClone = mail.duplicate("clone"); + Mail mailClone = MailImpl.duplicate(mail); assertTrue(isSameMimeMessage(mailClone.getMessage(), mail.getMessage())); MimeMessage mm = getWrappedMessage(mail.getMessage()); assertNotSame(mail.getMessage(), mailClone.getMessage()); @@ -194,7 +194,7 @@ public class MimeMessageCopyOnWriteProxyTest extends MimeMessageFromStreamTest { content + sep + body); MailImpl mail = new MailImpl("test", new MailAddress("t...@test.com"), r, messageFromSources); // cloning the message - MailImpl mailClone = (MailImpl) mail.duplicate("clone"); + MailImpl mailClone = MailImpl.duplicate(mail); LifecycleUtil.dispose(mail); assertNotNull(getWrappedMessage(mailClone.getMessage())); http://git-wip-us.apache.org/repos/asf/james-project/blob/05e5da35/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/server/MemoryMailQueueFactory.java ---------------------------------------------------------------------- diff --git a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/server/MemoryMailQueueFactory.java b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/server/MemoryMailQueueFactory.java index d3f5941..8fcc941 100644 --- a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/server/MemoryMailQueueFactory.java +++ b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/server/MemoryMailQueueFactory.java @@ -87,7 +87,7 @@ public class MemoryMailQueueFactory implements MailQueueFactory { } private Mail cloneMail(Mail mail) throws MessagingException { - MailImpl mailImpl = new MailImpl(mail); + MailImpl mailImpl = MailImpl.duplicate(mail); Optional.ofNullable(mail.getMessage()) .ifPresent(Throwing.consumer(message -> mailImpl.setMessage(new MimeMessage(message)))); return mailImpl; http://git-wip-us.apache.org/repos/asf/james-project/blob/05e5da35/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/MatcherSplitter.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/MatcherSplitter.java b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/MatcherSplitter.java index df09138..36c77c2 100644 --- a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/MatcherSplitter.java +++ b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/MatcherSplitter.java @@ -157,7 +157,7 @@ public class MatcherSplitter { } else { mail.setRecipients(rcpts); - Mail newMail = new MailImpl(mail); + Mail newMail = MailImpl.duplicate(mail); newMail.setRecipients(matchedRcpts); // Set a header because the matcher matched. This can be http://git-wip-us.apache.org/repos/asf/james-project/blob/05e5da35/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/AbstractRecipientRewriteTable.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/AbstractRecipientRewriteTable.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/AbstractRecipientRewriteTable.java index 095af8e..86c4077 100755 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/AbstractRecipientRewriteTable.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/AbstractRecipientRewriteTable.java @@ -176,7 +176,7 @@ public abstract class AbstractRecipientRewriteTable extends GenericMailet { // duplicates the Mail object, to be able to modify the new mail // keeping the original untouched - MailImpl newMail = new MailImpl(mail); + MailImpl newMail = MailImpl.duplicate(mail); try { try { newMail.setRemoteAddr(dns.getLocalHost().getHostAddress()); http://git-wip-us.apache.org/repos/asf/james-project/blob/05e5da35/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/DSNBounce.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/DSNBounce.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/DSNBounce.java index f1edc22..13b0e9a 100755 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/DSNBounce.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/DSNBounce.java @@ -242,7 +242,7 @@ public class DSNBounce extends GenericMailet implements RedirectNotify { } private void trySendBounce(Mail originalMail) throws MessagingException { - MailImpl newMail = new MailImpl(originalMail); + MailImpl newMail = MailImpl.duplicate(originalMail); try { newMail.setRemoteHost(getRemoteHost()); newMail.setRemoteAddr(getRemoteAddr()); http://git-wip-us.apache.org/repos/asf/james-project/blob/05e5da35/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/ProcessRedirectNotify.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/ProcessRedirectNotify.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/ProcessRedirectNotify.java index 0cf003c..7e4e297 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/ProcessRedirectNotify.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/ProcessRedirectNotify.java @@ -47,7 +47,7 @@ public class ProcessRedirectNotify { // duplicates the Mail object, to be able to modify the new mail keeping // the original untouched - MailImpl newMail = new MailImpl(originalMail); + MailImpl newMail = MailImpl.duplicate(originalMail); try { MailModifier mailModifier = MailModifier.builder() .mailet(mailet) --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org