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