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

Reply via email to