This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit d22b91ea7eb38fe8d92e4be19ef21028fc37c58f Author: Tran Tien Duc <[email protected]> AuthorDate: Mon Dec 2 11:23:29 2019 +0700 JAMES-2992 Move Emailer factory methods inside Emailer the factory methods are took from the MessageViewFactory in order to simplify the factory --- .../org/apache/james/jmap/draft/model/Emailer.java | 42 ++++++++++++++++ .../apache/james/jmap/draft/model/EmailerTest.java | 58 ++++++++++++++++++++++ 2 files changed, 100 insertions(+) diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Emailer.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Emailer.java index d895633..9060c76 100644 --- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Emailer.java +++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Emailer.java @@ -19,12 +19,16 @@ package org.apache.james.jmap.draft.model; +import java.util.List; import java.util.Objects; import java.util.Optional; import javax.mail.internet.AddressException; import org.apache.james.core.MailAddress; +import org.apache.james.mime4j.dom.address.AddressList; +import org.apache.james.mime4j.dom.address.Mailbox; +import org.apache.james.mime4j.dom.address.MailboxList; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -32,15 +36,53 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.github.steveash.guavate.Guavate; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; @JsonDeserialize(builder = Emailer.Builder.class) public class Emailer { private static final Logger LOGGER = LoggerFactory.getLogger(Emailer.class); + public static List<Emailer> fromAddressList(AddressList list) { + if (list == null) { + return ImmutableList.of(); + } + return list.flatten() + .stream() + .map(Emailer::fromMailbox) + .collect(Guavate.toImmutableList()); + } + + public static Emailer firstFromMailboxList(MailboxList list) { + if (list == null) { + return null; + } + return list.stream() + .map(Emailer::fromMailbox) + .findFirst() + .orElse(null); + } + + private static Emailer fromMailbox(Mailbox mailbox) { + return Emailer.builder() + .name(getNameOrAddress(mailbox)) + .email(mailbox.getAddress()) + .allowInvalid() + .build(); + } + + private static String getNameOrAddress(Mailbox mailbox) { + if (mailbox.getName() != null) { + return mailbox.getName(); + } + return mailbox.getAddress(); + } + + public static Builder builder() { return new Builder(); } diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/EmailerTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/EmailerTest.java index a2b570d..f056d0c 100644 --- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/EmailerTest.java +++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/EmailerTest.java @@ -22,6 +22,9 @@ import static org.assertj.core.api.Assertions.assertThat; import java.util.Optional; +import org.apache.james.mime4j.dom.address.AddressList; +import org.apache.james.mime4j.dom.address.Mailbox; +import org.apache.james.mime4j.dom.address.MailboxList; import org.junit.Test; public class EmailerTest { @@ -111,4 +114,59 @@ public class EmailerTest { assertThat(actual).isEqualToComparingFieldByField(expected); } + + @Test + public void fromAddressListShouldReturnEmptyWhenNullAddress() { + assertThat(Emailer.fromAddressList(null)) + .isEmpty(); + } + + @Test + public void fromAddressListShouldReturnListOfEmailersContainingAddresses() { + assertThat(Emailer.fromAddressList(new AddressList( + new Mailbox("user1", "james.org"), + new Mailbox("user2", "james.org")))) + .containsExactly( + Emailer.builder() + .name("[email protected]") + .email("[email protected]") + .build(), + Emailer.builder() + .name("[email protected]") + .email("[email protected]") + .build()); + } + + @Test + public void fromAddressListShouldReturnListOfEmailersContainingAddressesWithNames() { + assertThat(Emailer.fromAddressList(new AddressList( + new Mailbox("myInbox", "user1", "james.org"), + new Mailbox("hisInbox", "user2", "james.org")))) + .containsExactly( + Emailer.builder() + .name("myInbox") + .email("[email protected]") + .build(), + Emailer.builder() + .name("hisInbox") + .email("[email protected]") + .build()); + } + + @Test + public void firstFromMailboxListShouldReturnNullWhenNullMailboxList() { + assertThat(Emailer.firstFromMailboxList(null)) + .isNull(); + } + + @Test + public void firstFromMailboxListShouldReturnTheFirstAddressInList() { + assertThat(Emailer.firstFromMailboxList(new MailboxList( + new Mailbox("user1Inbox", "user1", "james.org"), + new Mailbox("user2Inbox", "user2", "james.org")))) + .isEqualTo(Emailer.builder() + .name("user1Inbox") + .email("[email protected]") + .build()); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
