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
commit d56f056ecb39bac2daf46f893f4b553dabb99dd6 Author: Benoit TELLIER <btell...@linagora.com> AuthorDate: Wed Jan 15 16:53:13 2025 +0100 JAMES-4103 Bind MessageParser rather than MessageParserImpl --- .../mailbox/cassandra/CassandraMailboxManager.java | 4 +- .../mailbox/cassandra/CassandraMessageManager.java | 4 +- .../model/openjpa/AbstractJPAMailboxMessage.java | 3 +- .../mailbox/jpa/openjpa/OpenJPAMailboxManager.java | 4 +- .../mailbox/inmemory/InMemoryMailboxManager.java | 4 +- .../mailbox/inmemory/InMemoryMessageManager.java | 4 +- .../manager/InMemoryIntegrationResources.java | 10 ++-- .../apache/james/mailbox/store/MessageStorer.java | 14 ++--- .../james/mailbox/store/StoreMailboxManager.java | 8 +-- .../store/mail/model/impl/MessageParser.java | 57 ++++++++++++++++++ .../store/mail/model/impl/MessageParserImpl.java | 23 +------- .../mail/model/impl/MessageParserImplTest.java | 68 +++++++++++----------- .../modules/mailbox/CassandraMailboxModule.java | 3 + .../james/modules/mailbox/JPAMailboxModule.java | 3 + .../james/modules/mailbox/MemoryMailboxModule.java | 3 + 15 files changed, 129 insertions(+), 83 deletions(-) diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java index 0afe54b9b6..fe1dac1827 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java @@ -38,7 +38,7 @@ import org.apache.james.mailbox.store.StoreMailboxManager; import org.apache.james.mailbox.store.StoreMessageManager; import org.apache.james.mailbox.store.StoreRightManager; import org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm; -import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl; +import org.apache.james.mailbox.store.mail.model.impl.MessageParser; import org.apache.james.mailbox.store.quota.QuotaComponents; import org.apache.james.mailbox.store.search.MessageSearchIndex; @@ -62,7 +62,7 @@ public class CassandraMailboxManager extends StoreMailboxManager { @Inject public CassandraMailboxManager(CassandraMailboxSessionMapperFactory mapperFactory, SessionProvider sessionProvider, - MailboxPathLocker locker, MessageParserImpl messageParser, + MailboxPathLocker locker, MessageParser messageParser, MessageId.Factory messageIdFactory, EventBus eventBus, StoreMailboxAnnotationManager annotationManager, StoreRightManager storeRightManager, QuotaComponents quotaComponents, MessageSearchIndex index, diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java index fc5fdf0fb9..73862b6e55 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java @@ -37,7 +37,7 @@ import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.StoreMessageManager; import org.apache.james.mailbox.store.StoreRightManager; import org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm; -import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl; +import org.apache.james.mailbox.store.mail.model.impl.MessageParser; import org.apache.james.mailbox.store.search.MessageSearchIndex; /** @@ -47,7 +47,7 @@ public class CassandraMessageManager extends StoreMessageManager { CassandraMessageManager(CassandraMailboxSessionMapperFactory mapperFactory, MessageSearchIndex index, EventBus eventBus, MailboxPathLocker locker, Mailbox mailbox, QuotaManager quotaManager, - QuotaRootResolver quotaRootResolver, MessageParserImpl messageParser, MessageId.Factory messageIdFactory, + QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes, StoreRightManager storeRightManager, PreDeletionHooks preDeletionHooks, diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java index e8335f2938..62c94c6238 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java @@ -61,6 +61,7 @@ import org.apache.james.mailbox.store.mail.model.DelegatingMailboxMessage; import org.apache.james.mailbox.store.mail.model.FlagsFactory; import org.apache.james.mailbox.store.mail.model.MailboxMessage; import org.apache.james.mailbox.store.mail.model.Property; +import org.apache.james.mailbox.store.mail.model.impl.MessageParser; import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl; import org.apache.james.mailbox.store.mail.model.impl.Properties; import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder; @@ -558,7 +559,7 @@ public abstract class AbstractJPAMailboxMessage implements MailboxMessage { public List<MessageAttachmentMetadata> getAttachments() { try { AtomicInteger counter = new AtomicInteger(0); - MessageParserImpl.ParsingResult parsingResult = new MessageParserImpl().retrieveAttachments(getFullContent()); + MessageParser.ParsingResult parsingResult = new MessageParserImpl().retrieveAttachments(getFullContent()); ImmutableList<MessageAttachmentMetadata> result = parsingResult .getAttachments() .stream() diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java index 06145be925..b82d46ba98 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java @@ -38,7 +38,7 @@ import org.apache.james.mailbox.store.StoreMailboxManager; import org.apache.james.mailbox.store.StoreMessageManager; import org.apache.james.mailbox.store.StoreRightManager; import org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm; -import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl; +import org.apache.james.mailbox.store.mail.model.impl.MessageParser; import org.apache.james.mailbox.store.quota.QuotaComponents; import org.apache.james.mailbox.store.search.MessageSearchIndex; @@ -55,7 +55,7 @@ public class OpenJPAMailboxManager extends StoreMailboxManager { @Inject public OpenJPAMailboxManager(JPAMailboxSessionMapperFactory mapperFactory, SessionProvider sessionProvider, - MessageParserImpl messageParser, + MessageParser messageParser, MessageId.Factory messageIdFactory, EventBus eventBus, StoreMailboxAnnotationManager annotationManager, diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java index 062766afd7..aa350a8a69 100644 --- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java +++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java @@ -38,7 +38,7 @@ import org.apache.james.mailbox.store.StoreMailboxManager; import org.apache.james.mailbox.store.StoreMessageManager; import org.apache.james.mailbox.store.StoreRightManager; import org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm; -import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl; +import org.apache.james.mailbox.store.mail.model.impl.MessageParser; import org.apache.james.mailbox.store.quota.QuotaComponents; import org.apache.james.mailbox.store.search.MessageSearchIndex; @@ -54,7 +54,7 @@ public class InMemoryMailboxManager extends StoreMailboxManager { @Inject public InMemoryMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, SessionProvider sessionProvider, - MailboxPathLocker locker, MessageParserImpl messageParser, MessageId.Factory messageIdFactory, + MailboxPathLocker locker, MessageParser messageParser, MessageId.Factory messageIdFactory, EventBus eventBus, StoreMailboxAnnotationManager annotationManager, StoreRightManager storeRightManager, diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java index 2de53ef6e0..35dd6b1a60 100644 --- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java +++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java @@ -37,7 +37,7 @@ import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.StoreMessageManager; import org.apache.james.mailbox.store.StoreRightManager; import org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm; -import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl; +import org.apache.james.mailbox.store.mail.model.impl.MessageParser; import org.apache.james.mailbox.store.search.MessageSearchIndex; public class InMemoryMessageManager extends StoreMessageManager { @@ -48,7 +48,7 @@ public class InMemoryMessageManager extends StoreMessageManager { Mailbox mailbox, QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, - MessageParserImpl messageParser, + MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes, StoreRightManager storeRightManager, diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java index 493bbf815c..6ab2a9df3f 100644 --- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java +++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java @@ -63,7 +63,7 @@ import org.apache.james.mailbox.store.event.MailboxAnnotationListener; import org.apache.james.mailbox.store.extractor.DefaultTextExtractor; import org.apache.james.mailbox.store.mail.NaiveThreadIdGuessingAlgorithm; import org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm; -import org.apache.james.mailbox.store.mail.model.impl.MessageParser; +import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl; import org.apache.james.mailbox.store.quota.CurrentQuotaCalculator; import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater; @@ -119,10 +119,10 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM } interface RequireMessageParser { - RequireSearchIndex messageParser(MessageParser messageParser); + RequireSearchIndex messageParser(MessageParserImpl messageParser); default RequireSearchIndex defaultMessageParser() { - return messageParser(new MessageParser()); + return messageParser(new MessageParserImpl()); } } @@ -208,7 +208,7 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM private Optional<Integer> limitAnnotationCount; private Optional<Function<BaseQuotaComponentsStage, QuotaManager>> quotaManager; private Optional<Integer> limitAnnotationSize; - private Optional<MessageParser> messageParser; + private Optional<MessageParserImpl> messageParser; private Optional<UpdatableTickingClock> updatableTickingClock; private Optional<Function<MailboxManagerSearchIndexStage, MessageSearchIndex>> searchIndexFactory; private ImmutableSet.Builder<Function<MailboxManagerPreInstanciationStage, PreDeletionHook>> preDeletionHooksFactories; @@ -229,7 +229,7 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM } @Override - public Builder messageParser(MessageParser messageParser) { + public Builder messageParser(MessageParserImpl messageParser) { this.messageParser = Optional.of(messageParser); return this; } diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageStorer.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageStorer.java index 488d3f663a..d516cee44b 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageStorer.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageStorer.java @@ -42,7 +42,7 @@ import org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm; import org.apache.james.mailbox.store.mail.model.MailboxMessage; import org.apache.james.mailbox.store.mail.model.MimeMessageId; import org.apache.james.mailbox.store.mail.model.Subject; -import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl; +import org.apache.james.mailbox.store.mail.model.impl.MessageParser; import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder; import org.apache.james.mailbox.store.mail.utils.MimeMessageHeadersUtil; import org.apache.james.mime4j.dom.Message; @@ -78,13 +78,13 @@ public interface MessageStorer { private final MessageId.Factory messageIdFactory; private final MessageFactory messageFactory; private final AttachmentMapperFactory attachmentMapperFactory; - private final MessageParserImpl messageParser; + private final MessageParser messageParser; private final ThreadIdGuessingAlgorithm threadIdGuessingAlgorithm; private final Clock clock; public WithAttachment(MailboxSessionMapperFactory mapperFactory, MessageId.Factory messageIdFactory, MessageFactory messageFactory, AttachmentMapperFactory attachmentMapperFactory, - MessageParserImpl messageParser, ThreadIdGuessingAlgorithm threadIdGuessingAlgorithm, Clock clock) { + MessageParser messageParser, ThreadIdGuessingAlgorithm threadIdGuessingAlgorithm, Clock clock) { this.mapperFactory = mapperFactory; this.messageIdFactory = messageIdFactory; this.messageFactory = messageFactory; @@ -126,22 +126,22 @@ public interface MessageStorer { parsingResults -> Mono.fromRunnable(parsingResults::dispose).subscribeOn(Schedulers.boundedElastic())); } - private MessageParserImpl.ParsingResult extractAttachments(Content contentIn, Optional<Message> maybeMessage) { + private MessageParser.ParsingResult extractAttachments(Content contentIn, Optional<Message> maybeMessage) { return maybeMessage.map(message -> { try { - return new MessageParserImpl.ParsingResult(messageParser.retrieveAttachments(message), () -> { + return new MessageParser.ParsingResult(messageParser.retrieveAttachments(message), () -> { }); } catch (Exception e) { LOGGER.warn("Error while parsing mail's attachments: {}", e.getMessage(), e); - return MessageParserImpl.ParsingResult.EMPTY; + return MessageParser.ParsingResult.EMPTY; } }).orElseGet(() -> { try (InputStream inputStream = contentIn.getInputStream()) { return messageParser.retrieveAttachments(inputStream); } catch (Exception e) { LOGGER.warn("Error while parsing mail's attachments: {}", e.getMessage(), e); - return MessageParserImpl.ParsingResult.EMPTY; + return MessageParser.ParsingResult.EMPTY; } }); } diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java index 2d0464cb15..4eda433a06 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java @@ -81,7 +81,7 @@ import org.apache.james.mailbox.store.event.EventFactory; import org.apache.james.mailbox.store.mail.MailboxMapper; import org.apache.james.mailbox.store.mail.MessageMapper; import org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm; -import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl; +import org.apache.james.mailbox.store.mail.model.impl.MessageParser; import org.apache.james.mailbox.store.quota.QuotaComponents; import org.apache.james.mailbox.store.search.MessageSearchIndex; import org.apache.james.mailbox.store.user.SubscriptionMapper; @@ -124,7 +124,7 @@ public class StoreMailboxManager implements MailboxManager { private final MailboxSessionMapperFactory mailboxSessionMapperFactory; private final MailboxAnnotationManager annotationManager; private final MailboxPathLocker locker; - private final MessageParserImpl messageParser; + private final MessageParser messageParser; private final Factory messageIdFactory; private final SessionProvider sessionProvider; private final QuotaManager quotaManager; @@ -138,7 +138,7 @@ public class StoreMailboxManager implements MailboxManager { @Inject public StoreMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, SessionProvider sessionProvider, - MailboxPathLocker locker, MessageParserImpl messageParser, + MailboxPathLocker locker, MessageParser messageParser, Factory messageIdFactory, MailboxAnnotationManager annotationManager, EventBus eventBus, StoreRightManager storeRightManager, QuotaComponents quotaComponents, MessageSearchIndex searchIndex, MailboxManagerConfiguration configuration, @@ -223,7 +223,7 @@ public class StoreMailboxManager implements MailboxManager { return storeRightManager; } - protected MessageParserImpl getMessageParser() { + protected MessageParser getMessageParser() { return messageParser; } 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 new file mode 100644 index 0000000000..d7e11f6898 --- /dev/null +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParser.java @@ -0,0 +1,57 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.mailbox.store.mail.model.impl; + +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +import org.apache.james.mailbox.model.ParsedAttachment; +import org.apache.james.mime4j.dom.Message; + +import com.google.common.collect.ImmutableList; + +public interface MessageParser { + class ParsingResult { + public static final MessageParser.ParsingResult EMPTY = new MessageParser.ParsingResult(ImmutableList.of(), () -> { + + }); + + private final List<ParsedAttachment> attachments; + private final Runnable dispose; + + public ParsingResult(List<ParsedAttachment> attachments, Runnable dispose) { + this.attachments = attachments; + this.dispose = dispose; + } + + public List<ParsedAttachment> getAttachments() { + return attachments; + } + + public void dispose() { + dispose.run(); + } + } + + MessageParser.ParsingResult retrieveAttachments(InputStream fullContent) throws IOException; + + List<ParsedAttachment> retrieveAttachments(Message message) throws IOException; +} diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserImpl.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserImpl.java index 58bf11d69f..2069986e4e 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserImpl.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserImpl.java @@ -53,28 +53,7 @@ import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import com.google.common.io.ByteSource; -public class MessageParserImpl { - public static class ParsingResult { - public static final ParsingResult EMPTY = new ParsingResult(ImmutableList.of(), () -> { - - }); - - private final List<ParsedAttachment> attachments; - private final Runnable dispose; - - public ParsingResult(List<ParsedAttachment> attachments, Runnable dispose) { - this.attachments = attachments; - this.dispose = dispose; - } - - public List<ParsedAttachment> getAttachments() { - return attachments; - } - - public void dispose() { - dispose.run(); - } - } +public class MessageParserImpl implements MessageParser { private static final String TEXT_MEDIA_TYPE = "text"; private static final String CONTENT_TYPE = "Content-Type"; diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserImplTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserImplTest.java index 977f2cc79d..24004bbc52 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserImplTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserImplTest.java @@ -50,28 +50,28 @@ class MessageParserImplTest { @Test void getAttachmentsShouldBeEmptyWhenNoAttachment() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/noAttachment.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/noAttachment.eml")); assertThat(attachments.getAttachments()).isEmpty(); } @Test void getAttachmentsShouldIgnoreInlineWhenMixedMultipart() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/inlined-mixed.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/inlined-mixed.eml")); assertThat(attachments.getAttachments()).hasSize(2); } @Test void getAttachmentsShouldRetrieveAttachmentsWhenOneAttachment() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentAndSomeTextInlined.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentAndSomeTextInlined.eml")); assertThat(attachments.getAttachments()).hasSize(1); } @Test void getAttachmentsShouldRetrieveAttachmentNameWhenOne() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentAndSomeTextInlined.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentAndSomeTextInlined.eml")); assertThat(attachments.getAttachments()).hasSize(1); Optional<String> expectedName = Optional.of("exploits_of_a_mom.png"); @@ -80,14 +80,14 @@ class MessageParserImplTest { @Test void getAttachmentsShouldRetrieveAttachmentNameWhenOneContainingNonASCIICharacters() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/messageWithNonASCIIFilenameAttachment.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/messageWithNonASCIIFilenameAttachment.eml")); assertThat(attachments.getAttachments()).hasSize(1); assertThat(attachments.getAttachments().get(0).getName()).contains("ديناصور.odt"); } @Test void getAttachmentsShouldRetrieveEmptyNameWhenNone() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentWithoutName.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentWithoutName.eml")); assertThat(attachments.getAttachments()).hasSize(1); assertThat(attachments.getAttachments().get(0).getName()).isEqualTo(Optional.empty()); @@ -95,7 +95,7 @@ class MessageParserImplTest { @Test void getAttachmentsShouldNotFailWhenContentTypeIsNotHere() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentWithoutContentType.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentWithoutContentType.eml")); assertThat(attachments.getAttachments()).hasSize(1); assertThat(attachments.getAttachments().get(0).getContentType()) @@ -104,7 +104,7 @@ class MessageParserImplTest { @Test void getAttachmentsShouldNotFailWhenContentTypeIsEmpty() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentWithEmptyContentType.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentWithEmptyContentType.eml")); assertThat(attachments.getAttachments()).hasSize(1); assertThat(attachments.getAttachments().get(0).getContentType()) @@ -113,7 +113,7 @@ class MessageParserImplTest { @Test void getAttachmentsShouldRetrieveTheAttachmentContentTypeWhenOneAttachment() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentAndSomeTextInlined.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentAndSomeTextInlined.eml")); assertThat(attachments.getAttachments()).hasSize(1); assertThat(attachments.getAttachments().get(0).getContentType()) @@ -122,21 +122,21 @@ class MessageParserImplTest { @Test void retrieveAttachmentsShouldNotFailOnMessagesWithManyHeaders() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/mailWithManyHeaders.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/mailWithManyHeaders.eml")); assertThat(attachments.getAttachments()).hasSize(1); } @Test void retrieveAttachmentsShouldNotFailOnMessagesWithLongHeaders() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/mailWithLongHeaders.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/mailWithLongHeaders.eml")); assertThat(attachments.getAttachments()).hasSize(1); } @Test void getAttachmentsShouldRetrieveTheAttachmentContentTypeWhenOneAttachmentWithSimpleContentType() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentWithSimpleContentType.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentWithSimpleContentType.eml")); assertThat(attachments.getAttachments()).hasSize(1); assertThat(attachments.getAttachments().get(0).getContentType()) @@ -145,7 +145,7 @@ class MessageParserImplTest { @Test void getAttachmentsShouldReturnTheExpectedAttachment() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentAndSomeTextInlined.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneAttachmentAndSomeTextInlined.eml")); ParsedAttachment attachment = attachments.getAttachments().get(0); assertThat(attachment.getContent().openStream()) @@ -154,14 +154,14 @@ class MessageParserImplTest { @Test void getAttachmentsShouldRetrieveAttachmentsWhenTwo() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/twoAttachments.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/twoAttachments.eml")); assertThat(attachments.getAttachments()).hasSize(2); } @Test void retrieveAttachmentShouldUseFilenameAsNameWhenNoName() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/filenameOnly.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/filenameOnly.eml")); assertThat(attachments.getAttachments()).hasSize(1) .extracting(ParsedAttachment::getName) @@ -172,7 +172,7 @@ class MessageParserImplTest { @Test void retrieveAttachmentShouldUseNameWhenBothNameAndFilename() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/filenameAndName.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/filenameAndName.eml")); assertThat(attachments.getAttachments()).hasSize(1) .extracting(ParsedAttachment::getName) @@ -183,21 +183,21 @@ class MessageParserImplTest { @Test void getAttachmentsShouldRetrieveEmbeddedAttachmentsWhenSome() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/embeddedAttachmentWithInline.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/embeddedAttachmentWithInline.eml")); assertThat(attachments.getAttachments()).hasSize(1); } @Test void getAttachmentsShouldRetrieveInlineAttachmentsWhenSome() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/embeddedAttachmentWithAttachment.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/embeddedAttachmentWithAttachment.eml")); assertThat(attachments.getAttachments()).hasSize(1); } @Test void getAttachmentsShouldRetrieveTheAttachmentCIDWhenOne() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachment.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachment.eml")); assertThat(attachments.getAttachments()).hasSize(1); assertThat(attachments.getAttachments().get(0).getCid()).isEqualTo(Optional.of(Cid.from("part1.37a15c92.a7c34...@linagora.com"))); @@ -205,7 +205,7 @@ class MessageParserImplTest { @Test void getAttachmentsShouldSetInlineWhenOneInlinedAttachment() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachment.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachment.eml")); assertThat(attachments.getAttachments()).hasSize(1); assertThat(attachments.getAttachments().get(0).isInline()).isTrue(); @@ -213,63 +213,63 @@ class MessageParserImplTest { @Test void getAttachementsShouldRetrieveHtmlAttachementsWhenSome() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneHtmlAttachmentAndSomeTextInlined.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneHtmlAttachmentAndSomeTextInlined.eml")); assertThat(attachments.getAttachments()).hasSize(1); } @Test void getAttachementsShouldRetrieveAttachmentsWhenSomeAreInTheMultipartAlternative() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/invitationEmailFromOP.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/invitationEmailFromOP.eml")); assertThat(attachments.getAttachments()).hasSize(6); } @Test void getAttachmentsShouldNotConsiderUnknownContentDispositionAsAttachments() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/unknownDisposition.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/unknownDisposition.eml")); assertThat(attachments.getAttachments()).hasSize(0); } @Test void getAttachmentsShouldConsiderNoContentDispositionAsAttachmentsWhenCID() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/noContentDispositionWithCID.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/noContentDispositionWithCID.eml")); assertThat(attachments.getAttachments()).hasSize(1); } @Test void getAttachmentsShouldRetrieveAttachmentsWhenNoCidForInlined() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachmentWithNoCid.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachmentWithNoCid.eml")); assertThat(attachments.getAttachments()).hasSize(1); } @Test void getAttachmentsShouldRetrieveAttachmentsWhenEmptyCidForInlined() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachmentWithEmptyCid.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachmentWithEmptyCid.eml")); assertThat(attachments.getAttachments()).hasSize(1); } @Test void getAttachmentsShouldRetrieveAttachmentsWhenBlankCidForInlined() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachmentWithBlankCid.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachmentWithBlankCid.eml")); assertThat(attachments.getAttachments()).hasSize(1); } @Test void getAttachmentsShouldRetrieveAttachmentsWhenOneFailOnWrongContentDisposition() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/multiAttachmentsWithOneWrongContentDisposition.eml")); + MessageParser.ParsingResult attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/multiAttachmentsWithOneWrongContentDisposition.eml")); assertThat(attachments.getAttachments()).hasSize(2); } @Test void getAttachmentsShouldRetrieveOneAttachmentWhenMessageWithAttachmentContentDisposition() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments( + MessageParser.ParsingResult attachments = testee.retrieveAttachments( ClassLoader.getSystemResourceAsStream("eml/emailWithOnlyAttachment.eml")); assertThat(attachments.getAttachments()).hasSize(1); @@ -277,7 +277,7 @@ class MessageParserImplTest { @Test void getAttachmentsShouldRetrieveCharset() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments( + MessageParser.ParsingResult attachments = testee.retrieveAttachments( ClassLoader.getSystemResourceAsStream("eml/charset.eml")); assertThat(attachments.getAttachments()).hasSize(1) @@ -288,7 +288,7 @@ class MessageParserImplTest { @Test void getAttachmentsShouldRetrieveAllPartsCharset() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments( + MessageParser.ParsingResult attachments = testee.retrieveAttachments( ClassLoader.getSystemResourceAsStream("eml/charset2.eml")); assertThat(attachments.getAttachments()).hasSize(2) @@ -299,7 +299,7 @@ class MessageParserImplTest { @Test void getAttachmentsShouldNotConsiderTextCalendarAsAttachmentsByDefault() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments( + MessageParser.ParsingResult attachments = testee.retrieveAttachments( ClassLoader.getSystemResourceAsStream("eml/calendar.eml")); assertThat(attachments.getAttachments()) @@ -308,7 +308,7 @@ class MessageParserImplTest { @Test void getAttachmentsShouldConsiderTextCalendarAsAttachments() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments( + MessageParser.ParsingResult attachments = testee.retrieveAttachments( ClassLoader.getSystemResourceAsStream("eml/calendar2.eml")); assertThat(attachments.getAttachments()) @@ -319,7 +319,7 @@ class MessageParserImplTest { @Test void gpgSignatureShouldBeConsideredAsAnAttachment() throws Exception { - MessageParserImpl.ParsingResult attachments = testee.retrieveAttachments( + MessageParser.ParsingResult attachments = testee.retrieveAttachments( ClassLoader.getSystemResourceAsStream("eml/signedMessage.eml")); assertThat(attachments.getAttachments()).hasSize(2) diff --git a/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java index f0f93b5908..fd6c2b9f1e 100644 --- a/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java +++ b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java @@ -123,6 +123,8 @@ import org.apache.james.mailbox.store.mail.MessageMapperFactory; import org.apache.james.mailbox.store.mail.ModSeqProvider; import org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm; import org.apache.james.mailbox.store.mail.UidProvider; +import org.apache.james.mailbox.store.mail.model.impl.MessageParser; +import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl; import org.apache.james.mailbox.store.user.SubscriptionMapperFactory; import org.apache.james.user.api.DeleteUserDataTaskStep; import org.apache.james.user.api.UsernameChangeTaskStep; @@ -215,6 +217,7 @@ public class CassandraMailboxModule extends AbstractModule { bind(SessionProvider.class).to(SessionProviderImpl.class); bind(AttachmentContentLoader.class).to(AttachmentManager.class); bind(MailboxCounterCorrector.class).to(CassandraMailboxCounterCorrector.class); + bind(MessageParser.class).toInstance(new MessageParserImpl()); bind(Limit.class).annotatedWith(Names.named(CassandraEmailChangeRepository.LIMIT_NAME)).toInstance(Limit.of(256)); bind(Limit.class).annotatedWith(Names.named(CassandraMailboxChangeRepository.LIMIT_NAME)).toInstance(Limit.of(256)); diff --git a/server/container/guice/mailbox-jpa/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java b/server/container/guice/mailbox-jpa/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java index f9150f564d..0c209c7111 100644 --- a/server/container/guice/mailbox-jpa/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java +++ b/server/container/guice/mailbox-jpa/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java @@ -65,6 +65,8 @@ import org.apache.james.mailbox.store.mail.NaiveThreadIdGuessingAlgorithm; import org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm; import org.apache.james.mailbox.store.mail.UidProvider; import org.apache.james.mailbox.store.mail.model.DefaultMessageId; +import org.apache.james.mailbox.store.mail.model.impl.MessageParser; +import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl; import org.apache.james.mailbox.store.user.SubscriptionMapperFactory; import org.apache.james.modules.data.JPAEntityManagerModule; import org.apache.james.user.api.DeleteUserDataTaskStep; @@ -122,6 +124,7 @@ public class JPAMailboxModule extends AbstractModule { bind(AttachmentIdFactory.class).to(StringBackedAttachmentIdFactory.class); bind(AttachmentContentLoader.class).to(JPAAttachmentContentLoader.class); bind(MailboxCounterCorrector.class).toInstance(MailboxCounterCorrector.DEFAULT); + bind(MessageParser.class).toInstance(new MessageParserImpl()); bind(ReIndexer.class).to(ReIndexerImpl.class); diff --git a/server/container/guice/memory/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java b/server/container/guice/memory/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java index 5fbb80e4ce..b4ab0044e9 100644 --- a/server/container/guice/memory/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java +++ b/server/container/guice/memory/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java @@ -77,6 +77,8 @@ import org.apache.james.mailbox.store.mail.ModSeqProvider; import org.apache.james.mailbox.store.mail.SearchThreadIdGuessingAlgorithm; import org.apache.james.mailbox.store.mail.ThreadIdGuessingAlgorithm; import org.apache.james.mailbox.store.mail.UidProvider; +import org.apache.james.mailbox.store.mail.model.impl.MessageParser; +import org.apache.james.mailbox.store.mail.model.impl.MessageParserImpl; import org.apache.james.mailbox.store.user.SubscriptionMapperFactory; import org.apache.james.user.api.DeleteUserDataTaskStep; import org.apache.james.user.api.UsernameChangeTaskStep; @@ -132,6 +134,7 @@ public class MemoryMailboxModule extends AbstractModule { bind(AttachmentContentLoader.class).to(AttachmentManager.class); bind(DeletedMessageMetadataVault.class).to(MemoryDeletedMessageMetadataVault.class); + bind(MessageParser.class).toInstance(new MessageParserImpl()); bind(MailboxCounterCorrector.class).toInstance(MailboxCounterCorrector.DEFAULT); bind(InMemoryMailboxSessionMapperFactory.class).in(Scopes.SINGLETON); --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org