JAMES-1913 Use flatMap instead of map+filtering

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/174bfcb8
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/174bfcb8
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/174bfcb8

Branch: refs/heads/master
Commit: 174bfcb8575446bd7e2edd1d4624b988ddb28ad5
Parents: c59faa5
Author: Raphael Ouazana <raphael.ouaz...@linagora.com>
Authored: Mon Jan 30 10:37:31 2017 +0100
Committer: Raphael Ouazana <raphael.ouaz...@linagora.com>
Committed: Tue Jan 31 16:08:32 2017 +0100

----------------------------------------------------------------------
 .../jmap/model/MessageContentExtractor.java      | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/174bfcb8/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageContentExtractor.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageContentExtractor.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageContentExtractor.java
index 5bc3813..c27bc3e 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageContentExtractor.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageContentExtractor.java
@@ -23,6 +23,7 @@ import java.io.IOException;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.function.Predicate;
+import java.util.stream.Stream;
 
 import javax.mail.internet.MimeMessage;
 
@@ -107,23 +108,27 @@ public class MessageContentExtractor {
         return multipart.getBodyParts()
             .stream()
             .filter(this::isNotAttachment)
-            .map(Throwing.function(this::returnIfReadable).sneakyThrow())
-            
.filter(((Predicate<MessageContent>)MessageContent::isEmpty).negate())
+            
.flatMap(Throwing.function(this::extractContentIfReadable).sneakyThrow())
             .findFirst()
             .orElse(MessageContent.empty());
     }
 
-    private MessageContent returnIfReadable(Entity entity) throws IOException {
+    private Stream<MessageContent> extractContentIfReadable(Entity entity) 
throws IOException {
         if (TEXT_HTML.equals(entity.getMimeType()) && entity.getBody() 
instanceof TextBody) {
-            return 
MessageContent.ofHtmlOnly(asString((TextBody)entity.getBody()));
+            return Stream.of(
+                    
MessageContent.ofHtmlOnly(asString((TextBody)entity.getBody())));
         }
         if (TEXT_PLAIN.equals(entity.getMimeType()) && entity.getBody() 
instanceof TextBody) {
-            return 
MessageContent.ofTextOnly(asString((TextBody)entity.getBody()));
+            return Stream.of(
+                    
MessageContent.ofTextOnly(asString((TextBody)entity.getBody())));
         }
         if (entity.isMultipart() && entity.getBody() instanceof Multipart) {
-            return parseMultipart(entity, (Multipart)entity.getBody());
+            MessageContent innerMultipartContent = parseMultipart(entity, 
(Multipart)entity.getBody());
+            if (!innerMultipartContent.isEmpty()) {
+                return Stream.of(innerMultipartContent);
+            }
         }
-        return MessageContent.empty();
+        return Stream.empty();
     }
 
     private Optional<String> getFirstMatchingTextBody(Multipart multipart, 
String mimeType) throws IOException {


---------------------------------------------------------------------
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