You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2021/07/15 01:25:53 UTC

[james-project] branch master updated: [UPGRADE] Upgrade to MIME4J 0.8.5 (#536)

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git


The following commit(s) were added to refs/heads/master by this push:
     new 7b63f7a  [UPGRADE] Upgrade to MIME4J 0.8.5 (#536)
7b63f7a is described below

commit 7b63f7ab9540cf6f35650f7bafff8351bd8d8cd8
Author: Tellier Benoit <bt...@linagora.com>
AuthorDate: Thu Jul 15 08:25:46 2021 +0700

    [UPGRADE] Upgrade to MIME4J 0.8.5 (#536)
    
    This allow leveraging the multiple performance enhancements that this release
    contributed.
---
 .../store/search/comparator/SentDateComparator.java   |  5 +++--
 .../search/comparator/SentDateComparatorTest.java     |  2 +-
 pom.xml                                               |  2 +-
 .../model/message/view/MessageFastViewFactory.java    |  2 +-
 .../model/message/view/MessageFullViewFactory.java    |  2 +-
 .../model/message/view/MessageHeaderViewFactory.java  |  2 +-
 .../draft/model/message/view/MessageViewFactory.java  | 19 ++++++++-----------
 7 files changed, 16 insertions(+), 18 deletions(-)

diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/comparator/SentDateComparator.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/comparator/SentDateComparator.java
index cf6db2b..1e67ee7 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/comparator/SentDateComparator.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/comparator/SentDateComparator.java
@@ -29,6 +29,7 @@ import java.util.Optional;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mime4j.field.DateTimeFieldLenientImpl;
 import org.apache.james.mime4j.stream.RawField;
@@ -78,9 +79,9 @@ public class SentDateComparator extends AbstractHeaderComparator {
         // This method is here to convert the first date into something parsable by RFC_1123_DATE_TIME DateTimeFormatter
         Matcher sanitizerMatcher = DATE_SANITIZING_PATTERN.matcher(value);
         if (sanitizerMatcher.find()) {
-            return value.substring(0, sanitizerMatcher.start());
+            return StringUtils.normalizeSpace(value.substring(0, sanitizerMatcher.start()));
         }
-        return value;
+        return StringUtils.normalizeSpace(value);
     }
 
     @Override
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/comparator/SentDateComparatorTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/comparator/SentDateComparatorTest.java
index 041ed0f..2122456 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/comparator/SentDateComparatorTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/comparator/SentDateComparatorTest.java
@@ -65,6 +65,6 @@ class SentDateComparatorTest {
     @Test
     void toISODateShouldParseRFC5322InvalidHeader() {
         assertThat(SentDateComparator.toISODate("Fri,  5 Jun 2020 10:41:00 +0000 (UTC)"))
-            .contains(ZonedDateTime.parse("2020-06-05T10:41Z[UTC]"));
+            .contains(ZonedDateTime.parse("2020-06-05T10:41Z"));
     }
 }
diff --git a/pom.xml b/pom.xml
index 2472431a..84b5e3d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -589,7 +589,7 @@
         <james.groupId>org.apache.james</james.groupId>
         <james.protocols.groupId>${james.groupId}.protocols</james.protocols.groupId>
         <activemq.version>5.16.1</activemq.version>
-        <apache-mime4j.version>0.8.4</apache-mime4j.version>
+        <apache-mime4j.version>0.8.5</apache-mime4j.version>
         <apache.openjpa.version>3.1.2</apache.openjpa.version>
         <derby.version>10.14.2.0</derby.version>
         <log4j2.version>2.14.0</log4j2.version>
diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFastViewFactory.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFastViewFactory.java
index edcff41..218221c 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFastViewFactory.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFastViewFactory.java
@@ -91,7 +91,7 @@ public class MessageFastViewFactory implements MessageViewFactory<MessageFastVie
                 .size(firstMessageResult.getSize())
                 .inReplyToMessageId(Helpers.getHeaderValue(mimeMessage, "in-reply-to"))
                 .subject(Strings.nullToEmpty(mimeMessage.getSubject()).trim())
-                .headers(Helpers.toHeaderMap(mimeMessage.getHeader().getFields()))
+                .headers(Helpers.toHeaderMap(mimeMessage.getHeader()))
                 .from(Emailer.firstFromMailboxList(mimeMessage.getFrom()))
                 .to(Emailer.fromAddressList(mimeMessage.getTo()))
                 .cc(Emailer.fromAddressList(mimeMessage.getCc()))
diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactory.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactory.java
index 9016143..7efdb06 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactory.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactory.java
@@ -118,7 +118,7 @@ public class MessageFullViewFactory implements MessageViewFactory<MessageFullVie
                 .inReplyToMessageId(Helpers.getHeaderValue(mimeMessage, "in-reply-to"))
                 .keywords(message.getKeywords())
                 .subject(Strings.nullToEmpty(mimeMessage.getSubject()).trim())
-                .headers(Helpers.toHeaderMap(mimeMessage.getHeader().getFields()))
+                .headers(Helpers.toHeaderMap(mimeMessage.getHeader()))
                 .from(Emailer.firstFromMailboxList(mimeMessage.getFrom()))
                 .to(Emailer.fromAddressList(mimeMessage.getTo()))
                 .cc(Emailer.fromAddressList(mimeMessage.getCc()))
diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactory.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactory.java
index 5232e09..a3ea461 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactory.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactory.java
@@ -82,7 +82,7 @@ public class MessageHeaderViewFactory implements MessageViewFactory<MessageHeade
             .size(firstMessageResult.getSize())
             .inReplyToMessageId(Helpers.getHeaderValue(mimeMessage, "in-reply-to"))
             .subject(Strings.nullToEmpty(mimeMessage.getSubject()).trim())
-            .headers(Helpers.toHeaderMap(mimeMessage.getHeader().getFields()))
+            .headers(Helpers.toHeaderMap(mimeMessage.getHeader()))
             .from(Emailer.firstFromMailboxList(mimeMessage.getFrom()))
             .to(Emailer.fromAddressList(mimeMessage.getTo()))
             .cc(Emailer.fromAddressList(mimeMessage.getCc()))
diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageViewFactory.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageViewFactory.java
index 3333bca..acaec8d 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageViewFactory.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageViewFactory.java
@@ -27,7 +27,6 @@ import java.time.Instant;
 import java.util.Collection;
 import java.util.Date;
 import java.util.List;
-import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
 import java.util.function.Function;
@@ -42,6 +41,7 @@ import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MessageResult;
 import org.apache.james.mime4j.codec.DecodeMonitor;
 import org.apache.james.mime4j.codec.DecoderUtil;
+import org.apache.james.mime4j.dom.Header;
 import org.apache.james.mime4j.dom.Message;
 import org.apache.james.mime4j.message.DefaultMessageBuilder;
 import org.apache.james.mime4j.stream.Field;
@@ -54,7 +54,6 @@ import com.github.fge.lambdas.Throwing;
 import com.github.steveash.guavate.Guavate;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Multimaps;
 
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
@@ -112,18 +111,16 @@ public interface MessageViewFactory<T extends MessageView> {
             return field.getBody();
         }
 
-        static ImmutableMap<String, String> toHeaderMap(List<Field> fields) {
-            Function<Map.Entry<String, Collection<Field>>, String> bodyConcatenator = fieldListEntry -> fieldListEntry.getValue()
-                .stream()
-                .map(Field::getBody)
-                .map(body -> DecoderUtil.decodeEncodedWords(body, DecodeMonitor.SILENT))
-                .collect(Collectors.joining(JMAP_MULTIVALUED_FIELD_DELIMITER));
 
-            return Multimaps.index(fields, Field::getName)
-                .asMap()
+        static ImmutableMap<String, String> toHeaderMap(Header header) {
+            return header.getFieldsAsMap()
                 .entrySet()
                 .stream()
-                .collect(Guavate.toImmutableMap(Map.Entry::getKey, bodyConcatenator));
+                .collect(Guavate.toImmutableMap(entry -> entry.getValue().get(0).getName(),
+                    entry -> entry.getValue().stream()
+                        .map(Field::getBody)
+                        .map(body -> DecoderUtil.decodeEncodedWords(body, DecodeMonitor.SILENT))
+                        .collect(Collectors.joining(JMAP_MULTIVALUED_FIELD_DELIMITER))));
         }
 
         static <T extends MessageView>  Function<Collection<MessageResult>, Mono<T>> toMessageViews(FromMessageResult<T> converter) {

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