JAMES-2540 extract serialization 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/e7f1a847
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/e7f1a847
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/e7f1a847

Branch: refs/heads/master
Commit: e7f1a8477106b0102dab68ebd1a3b10a46964dfc
Parents: 47eb3bf
Author: Matthieu Baechler <matth...@apache.org>
Authored: Tue Sep 11 16:15:55 2018 +0200
Committer: Antoine Duprat <adup...@linagora.com>
Committed: Mon Sep 17 07:55:32 2018 +0200

----------------------------------------------------------------------
 .../apache/james/queue/rabbitmq/Dequeuer.java   |  8 ++--
 .../apache/james/queue/rabbitmq/Enqueuer.java   |  9 ++--
 .../queue/rabbitmq/MailReferenceSerializer.java | 48 ++++++++++++++++++++
 .../james/queue/rabbitmq/RabbitMQMailQueue.java | 26 +++--------
 .../queue/rabbitmq/RabbitMQMailQueueTest.java   |  3 --
 .../rabbitmq/RabbitMqMailQueueFactoryTest.java  |  3 +-
 6 files changed, 64 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/e7f1a847/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 eeb2ef8..6c501dd 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
@@ -76,15 +76,15 @@ class Dequeuer {
     private final RabbitClient rabbitClient;
     private final Store<MimeMessage, MimeMessagePartsId> mimeMessageStore;
     private final BlobId.Factory blobIdFactory;
-    private final ObjectMapper objectMapper;
     private final Metric dequeueMetric;
+    private final MailReferenceSerializer mailReferenceSerializer;
 
-    Dequeuer(MailQueueName name, RabbitClient rabbitClient, Store<MimeMessage, 
MimeMessagePartsId> mimeMessageStore, BlobId.Factory blobIdFactory, 
ObjectMapper objectMapper, MetricFactory metricFactory) {
+    Dequeuer(MailQueueName name, RabbitClient rabbitClient, Store<MimeMessage, 
MimeMessagePartsId> mimeMessageStore, BlobId.Factory blobIdFactory, 
MailReferenceSerializer serializer, MetricFactory metricFactory) {
         this.name = name;
         this.rabbitClient = rabbitClient;
         this.mimeMessageStore = mimeMessageStore;
         this.blobIdFactory = blobIdFactory;
-        this.objectMapper = objectMapper;
+        this.mailReferenceSerializer = serializer;
         this.dequeueMetric = 
metricFactory.generate(DEQUEUED_METRIC_NAME_PREFIX + name.asString());
     }
 
@@ -98,7 +98,7 @@ class Dequeuer {
 
     private MailReferenceDTO toDTO(GetResponse getResponse) throws 
MailQueue.MailQueueException {
         try {
-            return objectMapper.readValue(getResponse.getBody(), 
MailReferenceDTO.class);
+            return mailReferenceSerializer.read(getResponse.getBody());
         } catch (IOException e) {
             throw new MailQueue.MailQueueException("Failed to parse DTO", e);
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/e7f1a847/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Enqueuer.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Enqueuer.java
 
b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Enqueuer.java
index 30ec819..c99f6a6 100644
--- 
a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Enqueuer.java
+++ 
b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Enqueuer.java
@@ -34,21 +34,20 @@ import org.apache.james.queue.api.MailQueue;
 import org.apache.mailet.Mail;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
 
 class Enqueuer {
     private final MailQueueName name;
     private final RabbitClient rabbitClient;
     private final Store<MimeMessage, MimeMessagePartsId> mimeMessageStore;
-    private final ObjectMapper objectMapper;
+    private final MailReferenceSerializer mailReferenceSerializer;
     private final Metric enqueueMetric;
 
     Enqueuer(MailQueueName name, RabbitClient rabbitClient, Store<MimeMessage, 
MimeMessagePartsId> mimeMessageStore,
-             ObjectMapper objectMapper, MetricFactory metricFactory) {
+             MailReferenceSerializer serializer, MetricFactory metricFactory) {
         this.name = name;
         this.rabbitClient = rabbitClient;
         this.mimeMessageStore = mimeMessageStore;
-        this.objectMapper = objectMapper;
+        this.mailReferenceSerializer = serializer;
         this.enqueueMetric = 
metricFactory.generate(ENQUEUED_METRIC_NAME_PREFIX + name.asString());
     }
 
@@ -71,7 +70,7 @@ class Enqueuer {
 
     private byte[] getMessageBytes(MailReferenceDTO mailDTO) throws 
MailQueue.MailQueueException {
         try {
-            return objectMapper.writeValueAsBytes(mailDTO);
+            return mailReferenceSerializer.write(mailDTO);
         } catch (JsonProcessingException e) {
             throw new MailQueue.MailQueueException("Unable to serialize 
message", e);
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/e7f1a847/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailReferenceSerializer.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailReferenceSerializer.java
 
b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailReferenceSerializer.java
new file mode 100644
index 0000000..0a70dec
--- /dev/null
+++ 
b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailReferenceSerializer.java
@@ -0,0 +1,48 @@
+/****************************************************************
+ * 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 java.io.IOException;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.datatype.guava.GuavaModule;
+import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+
+class MailReferenceSerializer {
+
+    private final ObjectMapper objectMapper;
+
+    MailReferenceSerializer() {
+        this.objectMapper = new ObjectMapper()
+            .registerModule(new Jdk8Module())
+            .registerModule(new JavaTimeModule())
+            .registerModule(new GuavaModule());
+    }
+
+    MailReferenceDTO read(byte[] bytes) throws IOException {
+        return objectMapper.readValue(bytes, MailReferenceDTO.class);
+    }
+
+    byte[] write(MailReferenceDTO mailDTO) throws JsonProcessingException {
+        return objectMapper.writeValueAsBytes(mailDTO);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/e7f1a847/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 fd564bb..a97fbe3 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
@@ -27,17 +27,12 @@ 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.metrics.api.GaugeRegistry;
 import org.apache.james.metrics.api.MetricFactory;
 import org.apache.james.queue.api.MailQueue;
 import org.apache.mailet.Mail;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.datatype.guava.GuavaModule;
-import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
-import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
 import com.github.fge.lambdas.Throwing;
 import com.google.common.annotations.VisibleForTesting;
 
@@ -47,40 +42,34 @@ public class RabbitMQMailQueue implements MailQueue {
 
     static class Factory {
         private final MetricFactory metricFactory;
-        private final GaugeRegistry gaugeRegistry;
         private final RabbitClient rabbitClient;
         private final Store<MimeMessage, MimeMessagePartsId> mimeMessageStore;
         private final BlobId.Factory blobIdFactory;
-        private final ObjectMapper objectMapper;
+        private final MailReferenceSerializer mailReferenceSerializer;
 
         @Inject
-        @VisibleForTesting Factory(MetricFactory metricFactory, GaugeRegistry 
gaugeRegistry, RabbitClient rabbitClient,
+        @VisibleForTesting Factory(MetricFactory metricFactory, RabbitClient 
rabbitClient,
                                    Store<MimeMessage, MimeMessagePartsId> 
mimeMessageStore, BlobId.Factory blobIdFactory) {
             this.metricFactory = metricFactory;
-            this.gaugeRegistry = gaugeRegistry;
             this.rabbitClient = rabbitClient;
             this.mimeMessageStore = mimeMessageStore;
             this.blobIdFactory = blobIdFactory;
-            this.objectMapper = new ObjectMapper()
-                .registerModule(new Jdk8Module())
-                .registerModule(new JavaTimeModule())
-                .registerModule(new GuavaModule());
+            this.mailReferenceSerializer = new MailReferenceSerializer();
         }
 
         RabbitMQMailQueue create(MailQueueName mailQueueName) {
-            return new RabbitMQMailQueue(metricFactory, gaugeRegistry, 
mailQueueName,
-                new Enqueuer(mailQueueName, rabbitClient, mimeMessageStore, 
objectMapper, metricFactory),
-                new Dequeuer(mailQueueName, rabbitClient, mimeMessageStore, 
blobIdFactory, objectMapper, metricFactory));
+            return new RabbitMQMailQueue(metricFactory, mailQueueName,
+                new Enqueuer(mailQueueName, rabbitClient, mimeMessageStore, 
mailReferenceSerializer, metricFactory),
+                new Dequeuer(mailQueueName, rabbitClient, mimeMessageStore, 
blobIdFactory, mailReferenceSerializer, metricFactory));
         }
     }
 
     private final MailQueueName name;
     private final MetricFactory metricFactory;
-    private final GaugeRegistry gaugeRegistry;
     private final Enqueuer enqueuer;
     private final Dequeuer dequeuer;
 
-    RabbitMQMailQueue(MetricFactory metricFactory, GaugeRegistry 
gaugeRegistry, MailQueueName name,
+    RabbitMQMailQueue(MetricFactory metricFactory, MailQueueName name,
                       Enqueuer enqueuer, Dequeuer dequeuer) {
 
         this.name = name;
@@ -88,7 +77,6 @@ public class RabbitMQMailQueue implements MailQueue {
         this.dequeuer = dequeuer;
 
         this.metricFactory = metricFactory;
-        this.gaugeRegistry = gaugeRegistry;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/e7f1a847/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
 
b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
index 04e1b72..f883883 100644
--- 
a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
+++ 
b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
@@ -42,8 +42,6 @@ import org.apache.james.blob.cassandra.CassandraBlobModule;
 import org.apache.james.blob.cassandra.CassandraBlobsDAO;
 import org.apache.james.blob.mail.MimeMessagePartsId;
 import org.apache.james.blob.mail.MimeMessageStore;
-import org.apache.james.metrics.api.NoopGaugeRegistry;
-import org.apache.james.metrics.api.NoopMetricFactory;
 import org.apache.james.queue.api.MailQueue;
 import org.apache.james.queue.api.MailQueueContract;
 import org.apache.james.queue.api.MailQueueMetricContract;
@@ -98,7 +96,6 @@ public class RabbitMQMailQueueTest implements 
MailQueueContract, MailQueueMetric
         RabbitClient rabbitClient = new RabbitClient(new 
RabbitChannelPool(rabbitMQConnectionFactory));
         RabbitMQMailQueue.Factory factory = new RabbitMQMailQueue.Factory(
             metricTestSystem.getSpyMetricFactory(),
-            metricTestSystem.getSpyGaugeRegistry(),
             rabbitClient,
             mimeMessageStore,
             BLOB_ID_FACTORY);

http://git-wip-us.apache.org/repos/asf/james-project/blob/e7f1a847/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java
 
b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java
index 08e4b78..dc086d6 100644
--- 
a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java
+++ 
b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java
@@ -42,7 +42,6 @@ import org.apache.james.blob.cassandra.CassandraBlobModule;
 import org.apache.james.blob.cassandra.CassandraBlobsDAO;
 import org.apache.james.blob.mail.MimeMessagePartsId;
 import org.apache.james.blob.mail.MimeMessageStore;
-import org.apache.james.metrics.api.NoopGaugeRegistry;
 import org.apache.james.metrics.api.NoopMetricFactory;
 import org.apache.james.queue.api.MailQueueFactory;
 import org.apache.james.queue.api.MailQueueFactoryContract;
@@ -94,7 +93,7 @@ class RabbitMqMailQueueFactoryTest implements 
MailQueueFactoryContract<RabbitMQM
             new 
AsyncRetryExecutor(Executors.newSingleThreadScheduledExecutor()));
 
         RabbitClient rabbitClient = new RabbitClient(new 
RabbitChannelPool(rabbitMQConnectionFactory));
-        RabbitMQMailQueue.Factory factory = new RabbitMQMailQueue.Factory(new 
NoopMetricFactory(), new NoopGaugeRegistry(), rabbitClient, mimeMessageStore, 
BLOB_ID_FACTORY);
+        RabbitMQMailQueue.Factory factory = new RabbitMQMailQueue.Factory(new 
NoopMetricFactory(), rabbitClient, mimeMessageStore, BLOB_ID_FACTORY);
 
         RabbitMQManagementApi mqManagementApi = new 
RabbitMQManagementApi(rabbitManagementUri, new 
RabbitMQManagementCredentials("guest", "guest".toCharArray()));
         mailQueueFactory = new RabbitMQMailQueueFactory(rabbitClient, 
mqManagementApi, factory);


---------------------------------------------------------------------
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