You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ro...@apache.org on 2019/08/01 07:22:23 UTC

[james-project] 01/09: JAMES-2813 Move fromUDT and toUDT to CassandraZonedDateTimeModule

This is an automated email from the ASF dual-hosted git repository.

rouazana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 200983de1396a599eb052ea587e44911913d9218
Author: Gautier DI FOLCO <gd...@linagora.com>
AuthorDate: Mon Jul 29 15:33:15 2019 +0200

    JAMES-2813 Move fromUDT and toUDT to CassandraZonedDateTimeModule
---
 .../init/CassandraZonedDateTimeModule.java         | 23 ++++++++++++++++++++++
 .../cassandra/vacation/CassandraVacationDAO.java   | 17 ++--------------
 2 files changed, 25 insertions(+), 15 deletions(-)

diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraZonedDateTimeModule.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraZonedDateTimeModule.java
index 63c43c7..dfc0654 100644
--- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraZonedDateTimeModule.java
+++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraZonedDateTimeModule.java
@@ -22,7 +22,14 @@ package org.apache.james.backends.cassandra.init;
 import static com.datastax.driver.core.DataType.text;
 import static com.datastax.driver.core.DataType.timestamp;
 
+import java.time.ZonedDateTime;
+import java.util.Optional;
+
 import org.apache.james.backends.cassandra.components.CassandraModule;
+import org.apache.james.backends.cassandra.utils.ZonedDateTimeRepresentation;
+
+import com.datastax.driver.core.UDTValue;
+import com.datastax.driver.core.UserType;
 
 public interface CassandraZonedDateTimeModule {
     String ZONED_DATE_TIME = "zonedDateTime";
@@ -34,4 +41,20 @@ public interface CassandraZonedDateTimeModule {
             .addColumn(DATE, timestamp())
             .addColumn(TIME_ZONE, text()))
         .build();
+
+    static Optional<UDTValue> toUDT(UserType zonedDateTimeUserType, Optional<ZonedDateTime> zonedDateTimeOptional) {
+        return zonedDateTimeOptional.map(ZonedDateTimeRepresentation::fromZonedDateTime)
+            .map(representation -> zonedDateTimeUserType.newValue()
+                .setTimestamp(CassandraZonedDateTimeModule.DATE, representation.getDate())
+                .setString(CassandraZonedDateTimeModule.TIME_ZONE, representation.getSerializedZoneId()));
+    }
+
+    static Optional<ZonedDateTime> fromUDT(UDTValue value) {
+        return Optional.ofNullable(value)
+            .map(udtValue -> ZonedDateTimeRepresentation.fromDate(
+                    udtValue.getTimestamp(CassandraZonedDateTimeModule.DATE),
+                    udtValue.getString(CassandraZonedDateTimeModule.TIME_ZONE))
+                .getZonedDateTime());
+    }
+
 }
diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationDAO.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationDAO.java
index aacdf8e..6ef717d 100644
--- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationDAO.java
+++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationDAO.java
@@ -34,7 +34,6 @@ import javax.inject.Inject;
 import org.apache.james.backends.cassandra.init.CassandraTypesProvider;
 import org.apache.james.backends.cassandra.init.CassandraZonedDateTimeModule;
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
-import org.apache.james.backends.cassandra.utils.ZonedDateTimeRepresentation;
 import org.apache.james.jmap.api.vacation.AccountId;
 import org.apache.james.jmap.api.vacation.Vacation;
 import org.apache.james.jmap.api.vacation.VacationPatch;
@@ -44,7 +43,6 @@ import org.apache.james.util.ValuePatch;
 import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.Row;
 import com.datastax.driver.core.Session;
-import com.datastax.driver.core.UDTValue;
 import com.datastax.driver.core.UserType;
 import com.datastax.driver.core.querybuilder.Insert;
 import com.google.common.collect.ImmutableList;
@@ -100,11 +98,7 @@ public class CassandraVacationDAO {
     }
 
     private Optional<ZonedDateTime> retrieveDate(Row row, String dateField) {
-        return Optional.ofNullable(row.getUDTValue(dateField))
-            .map(udtValue -> ZonedDateTimeRepresentation.fromDate(
-                udtValue.getTimestamp(CassandraZonedDateTimeModule.DATE),
-                udtValue.getString(CassandraZonedDateTimeModule.TIME_ZONE))
-                .getZonedDateTime());
+        return CassandraZonedDateTimeModule.fromUDT(row.getUDTValue(dateField));
     }
 
     private Insert createSpecificUpdate(VacationPatch vacationPatch, Insert baseInsert) {
@@ -121,18 +115,11 @@ public class CassandraVacationDAO {
     public BiFunction<VacationPatch, Insert, Insert> applyPatchForFieldZonedDateTime(String field, Function<VacationPatch, ValuePatch<ZonedDateTime>> getter) {
         return (vacation, insert) -> 
             getter.apply(vacation)
-                .mapNotKeptToOptional(optionalValue -> applyPatchForField(field, convertToUDTOptional(optionalValue), insert))
+                .mapNotKeptToOptional(optionalValue -> applyPatchForField(field, CassandraZonedDateTimeModule.toUDT(zonedDateTimeUserType, optionalValue), insert))
                 .orElse(insert);
     }
 
     private <T> Insert applyPatchForField(String field, Optional<T> value, Insert insert) {
         return insert.value(field, value.orElse(null));
     }
-
-    private Optional<UDTValue> convertToUDTOptional(Optional<ZonedDateTime> zonedDateTimeOptional) {
-        return zonedDateTimeOptional.map(ZonedDateTimeRepresentation::fromZonedDateTime)
-            .map(representation -> zonedDateTimeUserType.newValue()
-                .setTimestamp(CassandraZonedDateTimeModule.DATE, representation.getDate())
-                .setString(CassandraZonedDateTimeModule.TIME_ZONE, representation.getSerializedZoneId()));
-    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org