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 376052071a7a740baf5363f9db1c37ab5f422677
Author: Benoit Tellier <btell...@linagora.com>
AuthorDate: Thu Jul 11 16:00:58 2019 +0200

    JAMES-2810 Extract JSON serialization concern to its own class
---
 .../apache/james/vault/metadata/MetadataDAO.java   | 29 ++--------
 .../james/vault/metadata/MetadataSerializer.java   | 66 ++++++++++++++++++++++
 .../CassandraDeletedMessageMetadataVaultTest.java  |  2 +-
 .../james/vault/metadata/MetadataDAOTest.java      |  3 +-
 4 files changed, 74 insertions(+), 26 deletions(-)

diff --git 
a/mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/MetadataDAO.java
 
b/mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/MetadataDAO.java
index 34f77f5..4669a5e 100644
--- 
a/mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/MetadataDAO.java
+++ 
b/mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/MetadataDAO.java
@@ -34,24 +34,14 @@ import 
org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.blob.api.BucketName;
 import org.apache.james.core.User;
 import org.apache.james.mailbox.model.MessageId;
-import 
org.apache.james.vault.dto.DeletedMessageWithStorageInformationConverter;
-import org.apache.james.vault.dto.DeletedMessageWithStorageInformationDTO;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.Session;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
-import com.github.fge.lambdas.Throwing;
 
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 
 class MetadataDAO {
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(MetadataDAO.class);
-
     private final CassandraAsyncExecutor cassandraAsyncExecutor;
     private final PreparedStatement addStatement;
     private final PreparedStatement removeStatement;
@@ -59,11 +49,9 @@ class MetadataDAO {
     private final PreparedStatement readStatement;
     private final PreparedStatement readMessageIdStatement;
     private final MessageId.Factory messageIdFactory;
-    private final ObjectMapper objectMapper;
-    private final DeletedMessageWithStorageInformationConverter dtoConverter;
-
+    private final MetadataSerializer metadataSerializer;
 
-    MetadataDAO(Session session, MessageId.Factory messageIdFactory, 
DeletedMessageWithStorageInformationConverter dtoConverter) {
+    MetadataDAO(Session session, MessageId.Factory messageIdFactory, 
MetadataSerializer metadataSerializer) {
         this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session);
         this.addStatement = prepareAdd(session);
         this.removeStatement = prepareRemove(session);
@@ -71,10 +59,7 @@ class MetadataDAO {
         this.readStatement = prepareRead(session, PAYLOAD);
         this.readMessageIdStatement = prepareRead(session, MESSAGE_ID);
         this.messageIdFactory = messageIdFactory;
-        this.dtoConverter = dtoConverter;
-        this.objectMapper = new ObjectMapper()
-            .registerModule(new Jdk8Module())
-            .setSerializationInclusion(JsonInclude.Include.NON_ABSENT);
+        this.metadataSerializer = metadataSerializer;
     }
 
     private PreparedStatement prepareRead(Session session, String fieldName) {
@@ -107,8 +92,7 @@ class MetadataDAO {
 
     Mono<Void> store(DeletedMessageWithStorageInformation metadata) {
         return Mono.just(metadata)
-            .map(DeletedMessageWithStorageInformationDTO::toDTO)
-            .map(Throwing.function(objectMapper::writeValueAsString))
+            .map(metadataSerializer::serialize)
             .flatMap(payload -> 
cassandraAsyncExecutor.executeVoid(addStatement.bind()
                 .setString(BUCKET_NAME, 
metadata.getStorageInformation().getBucketName().asString())
                 .setString(OWNER, 
metadata.getDeletedMessage().getOwner().asString())
@@ -122,10 +106,7 @@ class MetadataDAO {
                 .setString(BUCKET_NAME, bucketName.asString())
                 .setString(OWNER, user.asString()))
             .map(row -> row.getString(PAYLOAD))
-            .flatMap(string -> Mono.fromCallable(() -> 
objectMapper.readValue(string, DeletedMessageWithStorageInformationDTO.class))
-                .onErrorResume(e -> Mono.fromRunnable(() -> 
LOGGER.error("Error deserializing JSON metadata", e))))
-            .flatMap(dto -> Mono.fromCallable(() -> 
dtoConverter.toDomainObject(dto))
-                .onErrorResume(e -> Mono.fromRunnable(() -> 
LOGGER.error("Error deserializing DTO", e))));
+            .flatMap(metadataSerializer::deserialize);
     }
 
     Flux<MessageId> retrieveMessageIds(BucketName bucketName, User user) {
diff --git 
a/mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/MetadataSerializer.java
 
b/mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/MetadataSerializer.java
new file mode 100644
index 0000000..7f62f96
--- /dev/null
+++ 
b/mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/MetadataSerializer.java
@@ -0,0 +1,66 @@
+/****************************************************************
+ * 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.vault.metadata;
+
+import 
org.apache.james.vault.dto.DeletedMessageWithStorageInformationConverter;
+import org.apache.james.vault.dto.DeletedMessageWithStorageInformationDTO;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
+
+import reactor.core.publisher.Mono;
+
+class MetadataSerializer {
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(MetadataSerializer.class);
+
+
+    private final ObjectMapper objectMapper;
+    private final DeletedMessageWithStorageInformationConverter dtoConverter;
+
+    MetadataSerializer(DeletedMessageWithStorageInformationConverter 
dtoConverter) {
+        this.dtoConverter = dtoConverter;
+        this.objectMapper = new ObjectMapper()
+            .registerModule(new Jdk8Module())
+            .setSerializationInclusion(JsonInclude.Include.NON_ABSENT);
+    }
+
+    Mono<DeletedMessageWithStorageInformation> deserialize(String payload) {
+        return Mono.just(payload)
+            .flatMap(string -> Mono.fromCallable(() -> 
objectMapper.readValue(string, DeletedMessageWithStorageInformationDTO.class))
+                .onErrorResume(e -> Mono.fromRunnable(() -> 
LOGGER.error("Error deserializing JSON metadata", e))))
+            .flatMap(dto -> Mono.fromCallable(() -> 
dtoConverter.toDomainObject(dto))
+                .onErrorResume(e -> Mono.fromRunnable(() -> 
LOGGER.error("Error deserializing DTO", e))));
+
+    }
+
+    String serialize(DeletedMessageWithStorageInformation message) {
+        DeletedMessageWithStorageInformationDTO dto = 
DeletedMessageWithStorageInformationDTO.toDTO(message);
+
+        try {
+            return objectMapper.writeValueAsString(dto);
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
diff --git 
a/mailbox/plugin/deleted-messages-vault-cassandra/src/test/java/org/apache/james/vault/metadata/CassandraDeletedMessageMetadataVaultTest.java
 
b/mailbox/plugin/deleted-messages-vault-cassandra/src/test/java/org/apache/james/vault/metadata/CassandraDeletedMessageMetadataVaultTest.java
index b823d75..bb4cd53 100644
--- 
a/mailbox/plugin/deleted-messages-vault-cassandra/src/test/java/org/apache/james/vault/metadata/CassandraDeletedMessageMetadataVaultTest.java
+++ 
b/mailbox/plugin/deleted-messages-vault-cassandra/src/test/java/org/apache/james/vault/metadata/CassandraDeletedMessageMetadataVaultTest.java
@@ -63,7 +63,7 @@ public class CassandraDeletedMessageMetadataVaultTest 
implements DeletedMessageM
         InMemoryMessageId.Factory messageIdFactory = new 
InMemoryMessageId.Factory();
         DeletedMessageWithStorageInformationConverter dtoConverter = new 
DeletedMessageWithStorageInformationConverter(blobIdFactory, messageIdFactory, 
new InMemoryId.Factory());
 
-        metadataDAO = spy(new MetadataDAO(cassandra.getConf(), 
messageIdFactory, dtoConverter));
+        metadataDAO = spy(new MetadataDAO(cassandra.getConf(), 
messageIdFactory, new MetadataSerializer(dtoConverter)));
         storageInformationDAO = spy(new 
StorageInformationDAO(cassandra.getConf(), blobIdFactory));
         userPerBucketDAO = spy(new UserPerBucketDAO(cassandra.getConf()));
 
diff --git 
a/mailbox/plugin/deleted-messages-vault-cassandra/src/test/java/org/apache/james/vault/metadata/MetadataDAOTest.java
 
b/mailbox/plugin/deleted-messages-vault-cassandra/src/test/java/org/apache/james/vault/metadata/MetadataDAOTest.java
index 956d4e1..c333ff6 100644
--- 
a/mailbox/plugin/deleted-messages-vault-cassandra/src/test/java/org/apache/james/vault/metadata/MetadataDAOTest.java
+++ 
b/mailbox/plugin/deleted-messages-vault-cassandra/src/test/java/org/apache/james/vault/metadata/MetadataDAOTest.java
@@ -51,7 +51,8 @@ class MetadataDAOTest {
         DeletedMessageWithStorageInformationConverter dtoConverter = new 
DeletedMessageWithStorageInformationConverter(
             new HashBlobId.Factory(), new InMemoryMessageId.Factory(), new 
InMemoryId.Factory());
 
-        testee = new MetadataDAO(cassandra.getConf(), new 
InMemoryMessageId.Factory(), dtoConverter);
+        testee = new MetadataDAO(cassandra.getConf(), new 
InMemoryMessageId.Factory(),
+            new MetadataSerializer(dtoConverter));
     }
 
     @Test


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