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

Reply via email to