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 2018/01/25 15:36:45 UTC
[12/14] james-project git commit: JAMES-2291 Introduce a builder for
MailImpl
JAMES-2291 Introduce a builder for MailImpl
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/5afe3f62
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/5afe3f62
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/5afe3f62
Branch: refs/heads/master
Commit: 5afe3f6208970488949468c0358e946ad9fc60d8
Parents: d4d0c8f
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Wed Jan 24 15:06:20 2018 +0100
Committer: benwa <bt...@linagora.com>
Committed: Thu Jan 25 16:28:45 2018 +0700
----------------------------------------------------------------------
.../org/apache/james/server/core/MailImpl.java | 150 +++++++++++++++++++
1 file changed, 150 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/5afe3f62/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 4318f3f..00cc4c2 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
@@ -33,7 +33,9 @@ import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.UUID;
import javax.mail.Address;
@@ -45,6 +47,7 @@ import javax.mail.internet.ParseException;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.james.core.MailAddress;
+import org.apache.james.core.builder.MimeMessageBuilder;
import org.apache.james.lifecycle.api.Disposable;
import org.apache.james.lifecycle.api.LifecycleUtil;
import org.apache.mailet.Mail;
@@ -58,6 +61,8 @@ import com.github.steveash.guavate.Guavate;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import com.google.common.primitives.Chars;
/**
@@ -96,6 +101,151 @@ public class MailImpl implements Disposable, Mail {
return new MailImpl(name, sender, recipients, mimeMessage);
}
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public static class Builder {
+
+ private Optional<MimeMessage> mimeMessage;
+ private List<MailAddress> recipients;
+ private Optional<String> name;
+ private Optional<MailAddress> sender;
+ private Optional<String> state;
+ private Optional<String> errorMessage;
+ private Optional<Date> lastUpdated;
+ private Map<String, Serializable> attributes;
+ private Optional<String> remoteAddr;
+ private Optional<String> remoteHost;
+ private PerRecipientHeaders perRecipientHeaders;
+
+ private Builder() {
+ mimeMessage = Optional.empty();
+ recipients = Lists.newArrayList();
+ name = Optional.empty();
+ sender = Optional.empty();
+ state = Optional.empty();
+ errorMessage = Optional.empty();
+ lastUpdated = Optional.empty();
+ attributes = Maps.newHashMap();
+ remoteAddr = Optional.empty();
+ remoteHost = Optional.empty();
+ perRecipientHeaders = new PerRecipientHeaders();
+ }
+
+ public Builder mimeMessage(MimeMessage mimeMessage) {
+ this.mimeMessage = Optional.ofNullable(mimeMessage);
+ return this;
+ }
+
+ public Builder mimeMessage(MimeMessageBuilder mimeMessage) throws MessagingException {
+ this.mimeMessage = Optional.ofNullable(mimeMessage.build());
+ return this;
+ }
+
+ public Builder recipients() {
+ return this;
+ }
+
+ public Builder recipients(List<MailAddress> recipients) {
+ this.recipients.addAll(recipients);
+ return this;
+ }
+
+ public Builder recipients(MailAddress... recipients) {
+ return recipients(ImmutableList.copyOf(recipients));
+ }
+
+ public Builder recipients(String... recipients) {
+ return recipients(Arrays.stream(recipients)
+ .map(Throwing.function(MailAddress::new))
+ .collect(Guavate.toImmutableList()));
+ }
+
+ public Builder recipient(MailAddress recipient) {
+ return recipients(recipient);
+ }
+
+ public Builder recipient(String recipient) throws AddressException {
+ return recipients(recipient);
+ }
+
+ public Builder name(String name) {
+ this.name = Optional.ofNullable(name);
+ return this;
+ }
+
+ public Builder sender(MailAddress sender) {
+ this.sender = Optional.ofNullable(sender);
+ return this;
+ }
+
+ public Builder sender(String sender) throws AddressException {
+ return sender(new MailAddress(sender));
+ }
+
+ public Builder state(String state) {
+ this.state = Optional.ofNullable(state);
+ return this;
+ }
+
+ public Builder errorMessage(String errorMessage) {
+ this.errorMessage = Optional.ofNullable(errorMessage);
+ return this;
+ }
+
+ public Builder lastUpdated(Date lastUpdated) {
+ this.lastUpdated = Optional.ofNullable(lastUpdated);
+ return this;
+ }
+
+ public Builder attribute(String name, Serializable object) {
+ this.attributes.put(name, object);
+ return this;
+ }
+
+ public Builder attributes(Map<String, Serializable> attributes) {
+ this.attributes.putAll(attributes);
+ return this;
+ }
+
+ public Builder remoteAddr(String remoteAddr) {
+ this.remoteAddr = Optional.ofNullable(remoteAddr);
+ return this;
+ }
+
+ public Builder remoteHost(String remoteHost) {
+ this.remoteHost = Optional.ofNullable(remoteHost);
+ return this;
+ }
+
+ public Builder addHeaderForRecipient(Header header, MailAddress recipient) {
+ this.perRecipientHeaders.addHeaderForRecipient(header, recipient);
+ return this;
+ }
+
+ public Builder addAllHeadersForRecipients(PerRecipientHeaders perRecipientHeaders) {
+ this.perRecipientHeaders.addAll(perRecipientHeaders);
+ return this;
+ }
+
+ public MailImpl build() {
+ MailImpl mail = new MailImpl();
+ mimeMessage.ifPresent(mail::setMessage);
+ name.ifPresent(mail::setName);
+ sender.ifPresent(mail::setSender);
+ mail.setRecipients(recipients);
+ state.ifPresent(mail::setState);
+ errorMessage.ifPresent(mail::setErrorMessage);
+ lastUpdated.ifPresent(mail::setLastUpdated);
+ mail.setAttributesRaw(new HashMap<>(attributes));
+ remoteAddr.ifPresent(mail::setRemoteAddr);
+ remoteHost.ifPresent(mail::setRemoteHost);
+ mail.perRecipientSpecificHeaders.addAll(perRecipientHeaders);
+ return mail;
+ }
+ }
+
private static ImmutableList<MailAddress> getRecipients(MimeMessage mimeMessage) throws MessagingException {
return Arrays.stream(mimeMessage.getAllRecipients())
.map(Throwing.function(MailImpl::castToMailAddress).sneakyThrow())
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org