JAMES-2352 Propose a StreamUtils::ofNullable (T[] ) It leverage Stream.of(...) in order to handle possible null value. That is a recuring need in the code base.
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/8c9289f2 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/8c9289f2 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/8c9289f2 Branch: refs/heads/master Commit: 8c9289f2924501d3b7284ebb4358c7f7f0dc991b Parents: 9af52da Author: benwa <btell...@linagora.com> Authored: Mon Mar 19 14:06:30 2018 +0700 Committer: benwa <btell...@linagora.com> Committed: Tue Mar 27 15:13:47 2018 +0700 ---------------------------------------------------------------------- .../transport/mailets/ICALToJsonAttribute.java | 19 ++++++++++--------- .../mailets/ICALToJsonAttributeTest.java | 2 +- .../transport/mailets/ContactExtractor.java | 12 +++++------- .../apache/james/utils/ExtendedClassLoader.java | 7 ++----- .../java/org/apache/james/util/StreamUtils.java | 11 +++++++++++ .../org/apache/james/util/StreamUtilsTest.java | 14 ++++++++++++++ 6 files changed, 43 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/8c9289f2/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java ---------------------------------------------------------------------- diff --git a/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java b/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java index b561842..e09bbfd 100644 --- a/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java +++ b/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java @@ -21,7 +21,6 @@ package org.apache.james.transport.mailets; import java.io.Serializable; import java.nio.charset.StandardCharsets; -import java.util.Arrays; import java.util.Map; import java.util.Optional; import java.util.UUID; @@ -35,6 +34,8 @@ import javax.mail.internet.MimeMessage; import org.apache.commons.lang3.tuple.Pair; import org.apache.james.core.MailAddress; import org.apache.james.transport.mailets.model.ICAL; +import org.apache.james.util.OptionalUtils; +import org.apache.james.util.StreamUtils; import org.apache.mailet.Mail; import org.apache.mailet.base.GenericMailet; import org.slf4j.Logger; @@ -209,17 +210,17 @@ public class ICALToJsonAttribute extends GenericMailet { } private Optional<String> retrieveSender(Mail mail) throws MessagingException { - Optional<String> from = Optional.ofNullable(mail.getMessage()) - .map(Throwing.function(MimeMessage::getFrom).orReturn(new Address[]{})) - .map(Arrays::stream) - .orElse(Stream.of()) + Optional<String> fromMime = StreamUtils.ofOptional( + Optional.ofNullable(mail.getMessage()) + .map(Throwing.function(MimeMessage::getFrom).orReturn(new Address[]{}))) .map(address -> (InternetAddress) address) .map(InternetAddress::getAddress) .findFirst(); - if (from.isPresent()) { - return from; - } - return Optional.ofNullable(mail.getSender()) + Optional<String> fromEnvelope = Optional.ofNullable(mail.getSender()) .map(MailAddress::asString); + + return OptionalUtils.or( + fromMime, + fromEnvelope); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/8c9289f2/mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICALToJsonAttributeTest.java ---------------------------------------------------------------------- diff --git a/mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICALToJsonAttributeTest.java b/mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICALToJsonAttributeTest.java index 2db08a9..c0232de 100644 --- a/mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICALToJsonAttributeTest.java +++ b/mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICALToJsonAttributeTest.java @@ -63,7 +63,7 @@ public class ICALToJsonAttributeTest { } @Test - public void getMailetInfoShouldReturnExpectedValue() throws Exception { + public void getMailetInfoShouldReturnExpectedValue() { assertThat(testee.getMailetInfo()).isEqualTo("ICALToJson Mailet"); } http://git-wip-us.apache.org/repos/asf/james-project/blob/8c9289f2/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java ---------------------------------------------------------------------- diff --git a/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java b/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java index 5759c26..f52bbab 100644 --- a/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java +++ b/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java @@ -19,7 +19,6 @@ package org.apache.james.transport.mailets; import java.io.IOException; -import java.util.Arrays; import java.util.Optional; import java.util.function.Function; import java.util.stream.Stream; @@ -131,13 +130,12 @@ public class ContactExtractor extends GenericMailet implements Mailet { private Stream<String> getRecipients(MimeMessage mimeMessage, RecipientType recipientType) throws MessagingException { boolean notStrict = false; Function<String, InternetAddress[]> parseRecipient = - Throwing - .function((String header) -> InternetAddress.parseHeader(header, notStrict)) + Throwing.function((String header) -> InternetAddress.parseHeader(header, notStrict)) .sneakyThrow(); - return Optional.ofNullable(mimeMessage.getHeader(recipientType.toString(), ",")) - .map(parseRecipient) - .map(Arrays::stream) - .orElse(Stream.empty()) + + return StreamUtils.ofOptional( + Optional.ofNullable(mimeMessage.getHeader(recipientType.toString(), ",")) + .map(parseRecipient)) .map(Address::toString) .map(MimeUtil::unscrambleHeaderValue); } http://git-wip-us.apache.org/repos/asf/james-project/blob/8c9289f2/server/container/guice/mailet/src/main/java/org/apache/james/utils/ExtendedClassLoader.java ---------------------------------------------------------------------- diff --git a/server/container/guice/mailet/src/main/java/org/apache/james/utils/ExtendedClassLoader.java b/server/container/guice/mailet/src/main/java/org/apache/james/utils/ExtendedClassLoader.java index 282e128..5b98666 100644 --- a/server/container/guice/mailet/src/main/java/org/apache/james/utils/ExtendedClassLoader.java +++ b/server/container/guice/mailet/src/main/java/org/apache/james/utils/ExtendedClassLoader.java @@ -24,13 +24,12 @@ import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; -import java.util.Arrays; -import java.util.Optional; import java.util.stream.Stream; import javax.inject.Inject; import org.apache.james.filesystem.api.FileSystem; +import org.apache.james.util.StreamUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -61,9 +60,7 @@ public class ExtendedClassLoader { } private Stream<URL> recursiveExpand(File file) { - return Optional.ofNullable(file.listFiles()) - .map(Arrays::stream) - .orElse(Stream.of()) + return StreamUtils.ofNullable(file.listFiles()) .flatMap(Throwing.function(this::expandFile).sneakyThrow()); } http://git-wip-us.apache.org/repos/asf/james-project/blob/8c9289f2/server/container/util-java8/src/main/java/org/apache/james/util/StreamUtils.java ---------------------------------------------------------------------- diff --git a/server/container/util-java8/src/main/java/org/apache/james/util/StreamUtils.java b/server/container/util-java8/src/main/java/org/apache/james/util/StreamUtils.java index 4036ae5..e8a71bd 100644 --- a/server/container/util-java8/src/main/java/org/apache/james/util/StreamUtils.java +++ b/server/container/util-java8/src/main/java/org/apache/james/util/StreamUtils.java @@ -21,11 +21,22 @@ package org.apache.james.util; import java.util.Arrays; import java.util.Collection; +import java.util.Optional; import java.util.function.Function; import java.util.stream.Stream; public class StreamUtils { + public static <T> Stream<T> ofNullable(T[] array) { + return ofOptional(Optional.ofNullable(array)); + } + + public static <T> Stream<T> ofOptional(Optional<T[]> array) { + return array + .map(Arrays::stream) + .orElse(Stream.empty()); + } + public static <T> Stream<T> flatten(Collection<Stream<T>> streams) { return flatten(streams.stream()); } http://git-wip-us.apache.org/repos/asf/james-project/blob/8c9289f2/server/container/util-java8/src/test/java/org/apache/james/util/StreamUtilsTest.java ---------------------------------------------------------------------- diff --git a/server/container/util-java8/src/test/java/org/apache/james/util/StreamUtilsTest.java b/server/container/util-java8/src/test/java/org/apache/james/util/StreamUtilsTest.java index 13729f4..1b2e86c 100644 --- a/server/container/util-java8/src/test/java/org/apache/james/util/StreamUtilsTest.java +++ b/server/container/util-java8/src/test/java/org/apache/james/util/StreamUtilsTest.java @@ -98,4 +98,18 @@ public class StreamUtilsTest { assertThat(StreamUtils.flatten(Stream.of(1), Stream.of(2)).collect(Guavate.toImmutableList())) .containsExactly(1, 2); } + + @Test + public void ofNullableShouldReturnEmptyStreamWhenNull() { + assertThat(StreamUtils.ofNullable(null) + .collect(Guavate.toImmutableList())) + .isEmpty(); + } + + @Test + public void ofNullableShouldReturnAStreamWithElementsOfTheArray() { + assertThat(StreamUtils.ofNullable(ImmutableList.of(1, 2).toArray()) + .collect(Guavate.toImmutableList())) + .containsExactly(1, 2); + } } \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org