You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ad...@apache.org on 2017/11/30 14:22:22 UTC

[2/9] james-project git commit: MAILBOX-321 Functional style for attachment parsing

MAILBOX-321 Functional style for attachment parsing


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

Branch: refs/heads/master
Commit: c2b04bc5ba0728993f45b37d3517065b72c71166
Parents: 58bd6d4
Author: benwa <bt...@linagora.com>
Authored: Tue Nov 28 10:17:10 2017 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Thu Nov 30 14:54:06 2017 +0100

----------------------------------------------------------------------
 .../store/mail/model/impl/MessageParser.java    | 40 +++++++++++---------
 1 file changed, 22 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/c2b04bc5/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParser.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParser.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParser.java
index 67df235..362f5ac 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParser.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParser.java
@@ -26,6 +26,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Optional;
 import java.util.function.Function;
+import java.util.stream.Stream;
 
 import org.apache.james.mailbox.model.Attachment;
 import org.apache.james.mailbox.model.Cid;
@@ -48,6 +49,7 @@ import org.apache.james.mime4j.util.MimeUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.github.steveash.guavate.Guavate;
 import com.google.common.collect.ImmutableList;
 
 public class MessageParser {
@@ -91,8 +93,9 @@ public class MessageParser {
             }
 
             if (body instanceof Multipart) {
-                Multipart multipartBody = (Multipart)body;
-                return listAttachments(multipartBody, Context.fromSubType(multipartBody.getSubType()));
+                Multipart multipartBody = (Multipart) body;
+                return listAttachments(multipartBody, Context.fromSubType(multipartBody.getSubType()))
+                    .collect(Guavate.toImmutableList());
             } else {
                 return ImmutableList.of();
             }
@@ -105,25 +108,26 @@ public class MessageParser {
         return contentDisposition.isPresent() && contentDisposition.get().isAttachment();
     }
 
-    private List<MessageAttachment> listAttachments(Multipart multipart, Context context) throws IOException {
-        ImmutableList.Builder<MessageAttachment> attachments = ImmutableList.builder();
+    private Stream<MessageAttachment> listAttachments(Multipart multipart, Context context) {
+        return multipart.getBodyParts()
+            .stream()
+            .flatMap(entity -> listAttachments(entity, context));
+    }
 
-        for (Entity entity : multipart.getBodyParts()) {
-            if (isMultipart(entity)) {
-                attachments.addAll(listAttachments((Multipart) entity.getBody(), Context.fromEntity(entity)));
-            } else {
-                if (isAttachment(entity, context)) {
-                    try {
-                        attachments.add(retrieveAttachment(entity));
-                    } catch (IllegalStateException e) {
-                        LOGGER.error("The attachment is not well-formed: " + e.getCause());
-                    } catch (IOException e) {
-                        LOGGER.error("There is error on retrieve attachment: " + e.getCause());
-                    }
-                }
+    private Stream<MessageAttachment> listAttachments(Entity entity, Context context) {
+        if (isMultipart(entity)) {
+            return listAttachments((Multipart) entity.getBody(), Context.fromEntity(entity));
+        }
+        if (isAttachment(entity, context)) {
+            try {
+                return Stream.of(retrieveAttachment(entity));
+            } catch (IllegalStateException e) {
+                LOGGER.error("The attachment is not well-formed: " + e.getCause());
+            } catch (IOException e) {
+                LOGGER.error("There is error on retrieve attachment: " + e.getCause());
             }
         }
-        return attachments.build();
+        return Stream.empty();
     }
 
     private MessageAttachment retrieveAttachment(Entity entity) throws IOException {


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org