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