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 bt...@apache.org on 2017/08/23 02:33:51 UTC

[3/3] james-project git commit: JAMES-2126 Migrate MessageParser to Java-8

JAMES-2126 Migrate MessageParser to Java-8

Optionals and functions


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

Branch: refs/heads/master
Commit: 4be31c3264b589dea57de2c4bf395c31d6d7f167
Parents: 656de84
Author: benwa <bt...@linagora.com>
Authored: Tue Aug 22 09:48:01 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Wed Aug 23 09:32:45 2017 +0700

----------------------------------------------------------------------
 mailbox/store/pom.xml                           |  4 ++
 .../store/mail/model/impl/MessageParser.java    | 47 ++++++++++----------
 2 files changed, 27 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/4be31c32/mailbox/store/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/store/pom.xml b/mailbox/store/pom.xml
index a12e0ff..196285e 100644
--- a/mailbox/store/pom.xml
+++ b/mailbox/store/pom.xml
@@ -42,6 +42,10 @@
         </dependency>
         <dependency>
             <groupId>org.apache.james</groupId>
+            <artifactId>james-server-util-java8</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.james</groupId>
             <artifactId>apache-mime4j-core</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/4be31c32/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 63f80af..378da5a 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
@@ -24,6 +24,8 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
 import java.util.Locale;
+import java.util.Optional;
+import java.util.function.Function;
 
 import org.apache.james.mailbox.model.Attachment;
 import org.apache.james.mailbox.model.Cid;
@@ -44,11 +46,10 @@ import org.apache.james.mime4j.message.DefaultMessageBuilder;
 import org.apache.james.mime4j.message.DefaultMessageWriter;
 import org.apache.james.mime4j.stream.Field;
 import org.apache.james.mime4j.stream.MimeConfig;
+import org.apache.james.util.OptionalConverter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableList;
 
 public class MessageParser {
@@ -136,10 +137,10 @@ public class MessageParser {
         return MessageAttachment.builder()
                 .attachment(Attachment.builder()
                     .bytes(getBytes(messageWriter, entity.getBody()))
-                    .type(contentType.or(DEFAULT_CONTENT_TYPE))
+                    .type(contentType.orElse(DEFAULT_CONTENT_TYPE))
                     .build())
-                .name(name.orNull())
-                .cid(cid.orNull())
+                .name(name.orElse(null))
+                .cid(cid.orElse(null))
                 .isInline(isInline)
                 .build();
     }
@@ -155,37 +156,35 @@ public class MessageParser {
     @SuppressWarnings("unchecked")
     private <U extends ParsedField> Optional<U> castField(Field field, Class<U> clazz) {
         if (field == null || !clazz.isInstance(field)) {
-            return Optional.absent();
+            return Optional.empty();
         }
         return Optional.of((U) field);
     }
 
     private Optional<String> contentType(Optional<ContentTypeField> contentTypeField) {
-        return contentTypeField.transform(field -> Optional.fromNullable(field.getMimeType()))
-            .or(Optional.<String> absent());
+        return contentTypeField.map(ContentTypeField::getMimeType);
     }
 
     private Optional<String> name(Optional<ContentTypeField> contentTypeField) {
         return contentTypeField
-            .transform(field -> Optional.fromNullable(field.getParameter("name"))
-                .transform(
-                    fieldValue -> {
-                        DecodeMonitor monitor = null;
-                        return DecoderUtil.decodeEncodedWords(fieldValue, monitor);
-                    }))
-            .or(Optional.<String> absent());
+            .flatMap(field -> Optional.ofNullable(field.getParameter("name"))
+            .map(
+                fieldValue -> {
+                    DecodeMonitor monitor = null;
+                    return DecoderUtil.decodeEncodedWords(fieldValue, monitor);
+                }));
     }
 
     private Optional<Cid> cid(Optional<ContentIdField> contentIdField) {
         if (!contentIdField.isPresent()) {
-            return Optional.absent();
+            return Optional.empty();
         }
-        return contentIdField.transform(toCid())
+        return contentIdField.map(toCid())
             .get();
     }
 
     private Function<ContentIdField, Optional<Cid>> toCid() {
-        return contentIdField -> cidParser.parse(contentIdField.getId());
+        return contentIdField -> OptionalConverter.fromGuava(cidParser.parse(contentIdField.getId()));
     }
 
     private boolean isMultipart(Entity entity) {
@@ -193,18 +192,18 @@ public class MessageParser {
     }
 
     private boolean isInline(Optional<ContentDispositionField> contentDispositionField) {
-        return contentDispositionField.transform(ContentDispositionField::isInline)
-            .or(false);
+        return contentDispositionField.map(ContentDispositionField::isInline)
+            .orElse(false);
     }
 
     private boolean isAttachment(Entity part, Context context) {
         if (context == Context.BODY && isTextPart(part)) {
             return false;
         }
-        return Optional.fromNullable(part.getDispositionType())
-                .transform(dispositionType -> ATTACHMENT_CONTENT_DISPOSITIONS.contains(
+        return Optional.ofNullable(part.getDispositionType())
+                .map(dispositionType -> ATTACHMENT_CONTENT_DISPOSITIONS.contains(
                     dispositionType.toLowerCase(Locale.US)))
-            .or(false);
+            .orElse(false);
     }
 
     private boolean isTextPart(Entity part) {
@@ -224,7 +223,7 @@ public class MessageParser {
         return out.toByteArray();
     }
 
-    private static enum Context {
+    private enum Context {
         BODY,
         OTHER;
 


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