JAMES-2540 extract mail loading into another class
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c8921e53 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c8921e53 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c8921e53 Branch: refs/heads/master Commit: c8921e53b7e5dd2ba1452aac7c0ecf2957224033 Parents: e9c23cd Author: Matthieu Baechler <matth...@apache.org> Authored: Tue Sep 11 16:40:33 2018 +0200 Committer: Antoine Duprat <adup...@linagora.com> Committed: Mon Sep 17 08:13:24 2018 +0200 ---------------------------------------------------------------------- .../apache/james/queue/rabbitmq/Dequeuer.java | 27 ++------- .../apache/james/queue/rabbitmq/MailLoader.java | 58 ++++++++++++++++++++ .../james/queue/rabbitmq/RabbitMQMailQueue.java | 7 ++- 3 files changed, 67 insertions(+), 25 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/c8921e53/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Dequeuer.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Dequeuer.java b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Dequeuer.java index 6c501dd..89a40f4 100644 --- a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Dequeuer.java +++ b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Dequeuer.java @@ -23,6 +23,7 @@ import static org.apache.james.queue.api.MailQueue.DEQUEUED_METRIC_NAME_PREFIX; import java.io.IOException; import java.util.concurrent.Executors; +import java.util.function.Function; import javax.mail.MessagingException; import javax.mail.internet.AddressException; @@ -74,16 +75,14 @@ class Dequeuer { private final MailQueueName name; private final RabbitClient rabbitClient; - private final Store<MimeMessage, MimeMessagePartsId> mimeMessageStore; - private final BlobId.Factory blobIdFactory; + private final Function<MailReferenceDTO, Mail> mailLoader; private final Metric dequeueMetric; private final MailReferenceSerializer mailReferenceSerializer; - Dequeuer(MailQueueName name, RabbitClient rabbitClient, Store<MimeMessage, MimeMessagePartsId> mimeMessageStore, BlobId.Factory blobIdFactory, MailReferenceSerializer serializer, MetricFactory metricFactory) { + Dequeuer(MailQueueName name, RabbitClient rabbitClient, Function<MailReferenceDTO, Mail> mailLoader, MailReferenceSerializer serializer, MetricFactory metricFactory) { this.name = name; this.rabbitClient = rabbitClient; - this.mimeMessageStore = mimeMessageStore; - this.blobIdFactory = blobIdFactory; + this.mailLoader = mailLoader; this.mailReferenceSerializer = serializer; this.dequeueMetric = metricFactory.generate(DEQUEUED_METRIC_NAME_PREFIX + name.asString()); } @@ -91,7 +90,7 @@ class Dequeuer { MailQueue.MailQueueItem deQueue() throws MailQueue.MailQueueException { GetResponse getResponse = pollChannel(); MailReferenceDTO mailDTO = toDTO(getResponse); - Mail mail = toMail(mailDTO); + Mail mail = mailLoader.apply(mailDTO); dequeueMetric.increment(); return new RabbitMQMailQueueItem(rabbitClient, getResponse.getEnvelope().getDeliveryTag(), mail); } @@ -119,20 +118,4 @@ class Dequeuer { .orElseThrow(NoMailYetException::new); } - private Mail toMail(MailReferenceDTO dto) throws MailQueue.MailQueueException { - try { - MimeMessage mimeMessage = mimeMessageStore.read( - MimeMessagePartsId.builder() - .headerBlobId(blobIdFactory.from(dto.getHeaderBlobId())) - .bodyBlobId(blobIdFactory.from(dto.getBodyBlobId())) - .build()) - .join(); - - return dto.toMailWithMimeMessage(mimeMessage); - } catch (AddressException e) { - throw new MailQueue.MailQueueException("Failed to parse mail address", e); - } catch (MessagingException e) { - throw new MailQueue.MailQueueException("Failed to generate mime message", e); - } - } } http://git-wip-us.apache.org/repos/asf/james-project/blob/c8921e53/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailLoader.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailLoader.java b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailLoader.java new file mode 100644 index 0000000..0016702 --- /dev/null +++ b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailLoader.java @@ -0,0 +1,58 @@ +/**************************************************************** + * 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.queue.rabbitmq; + +import javax.mail.MessagingException; +import javax.mail.internet.AddressException; +import javax.mail.internet.MimeMessage; + +import org.apache.james.blob.api.BlobId; +import org.apache.james.blob.api.Store; +import org.apache.james.blob.mail.MimeMessagePartsId; +import org.apache.james.queue.api.MailQueue; +import org.apache.mailet.Mail; + +class MailLoader { + + private final Store<MimeMessage, MimeMessagePartsId> mimeMessageStore; + private final BlobId.Factory blobIdFactory; + + MailLoader(Store<MimeMessage, MimeMessagePartsId> mimeMessageStore, BlobId.Factory blobIdFactory) { + this.mimeMessageStore = mimeMessageStore; + this.blobIdFactory = blobIdFactory; + } + + Mail load(MailReferenceDTO dto) throws MailQueue.MailQueueException { + try { + MimeMessage mimeMessage = mimeMessageStore.read( + MimeMessagePartsId.builder() + .headerBlobId(blobIdFactory.from(dto.getHeaderBlobId())) + .bodyBlobId(blobIdFactory.from(dto.getBodyBlobId())) + .build()) + .join(); + + return dto.toMailWithMimeMessage(mimeMessage); + } catch (AddressException e) { + throw new MailQueue.MailQueueException("Failed to parse mail address", e); + } catch (MessagingException e) { + throw new MailQueue.MailQueueException("Failed to generate mime message", e); + } + } +} http://git-wip-us.apache.org/repos/asf/james-project/blob/c8921e53/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueue.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueue.java b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueue.java index a97fbe3..e4b8881 100644 --- a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueue.java +++ b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueue.java @@ -20,6 +20,7 @@ package org.apache.james.queue.rabbitmq; import java.util.concurrent.TimeUnit; +import java.util.function.Function; import javax.inject.Inject; import javax.mail.internet.MimeMessage; @@ -44,8 +45,8 @@ public class RabbitMQMailQueue implements MailQueue { private final MetricFactory metricFactory; private final RabbitClient rabbitClient; private final Store<MimeMessage, MimeMessagePartsId> mimeMessageStore; - private final BlobId.Factory blobIdFactory; private final MailReferenceSerializer mailReferenceSerializer; + private final Function<MailReferenceDTO, Mail> mailLoader; @Inject @VisibleForTesting Factory(MetricFactory metricFactory, RabbitClient rabbitClient, @@ -53,14 +54,14 @@ public class RabbitMQMailQueue implements MailQueue { this.metricFactory = metricFactory; this.rabbitClient = rabbitClient; this.mimeMessageStore = mimeMessageStore; - this.blobIdFactory = blobIdFactory; this.mailReferenceSerializer = new MailReferenceSerializer(); + this.mailLoader = Throwing.function(new MailLoader(mimeMessageStore, blobIdFactory)::load).sneakyThrow(); } RabbitMQMailQueue create(MailQueueName mailQueueName) { return new RabbitMQMailQueue(metricFactory, mailQueueName, new Enqueuer(mailQueueName, rabbitClient, mimeMessageStore, mailReferenceSerializer, metricFactory), - new Dequeuer(mailQueueName, rabbitClient, mimeMessageStore, blobIdFactory, mailReferenceSerializer, metricFactory)); + new Dequeuer(mailQueueName, rabbitClient, mailLoader, mailReferenceSerializer, metricFactory)); } } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org