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

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new 0399046307 ISIS-3105: de-duplicate time conversion code
0399046307 is described below

commit 03990463070e31170388d18dead2b54bc5fc3ee7
Author: Andi Huber <[email protected]>
AuthorDate: Tue Aug 2 11:37:13 2022 +0200

    ISIS-3105: de-duplicate time conversion code
---
 .../apache/isis/commons/internal/base/_Times.java  | 66 +++++++++++++++++++++-
 ...ter.java => OffsetDateTimeConverterForJdo.java} | 13 ++---
 ...nverter.java => OffsetTimeConverterForJdo.java} | 13 ++---
 ...rter.java => ZonedDateTimeConverterForJdo.java} | 15 ++---
 .../jdo/datanucleus/src/main/resources/plugin.xml  |  6 +-
 .../IsisModulePersistenceJpaIntegration.java       | 12 ++--
 ...ter.java => OffsetDateTimeConverterForJpa.java} | 13 ++---
 ...nverter.java => OffsetTimeConverterForJpa.java} | 13 ++---
 ...rter.java => ZonedDateTimeConverterForJpa.java} | 15 ++---
 9 files changed, 106 insertions(+), 60 deletions(-)

diff --git 
a/commons/src/main/java/org/apache/isis/commons/internal/base/_Times.java 
b/commons/src/main/java/org/apache/isis/commons/internal/base/_Times.java
index 0a282fab2e..090c43bafe 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/base/_Times.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/base/_Times.java
@@ -21,6 +21,9 @@ package org.apache.isis.commons.internal.base;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.sql.Timestamp;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.Optional;
 
@@ -72,9 +75,70 @@ public final class _Times {
                         : Optional.empty();
     }
 
-    // -- HELPER
+    // -- TEMPORAL TO STRING CONVERTERS
+
+    /**
+     * Returns a {@link String} representing given temporal suitable for the 
data-store.
+     */
+    @Nullable
+    public String enstringOffsetTime(final @Nullable OffsetTime temporal) {
+        return temporal != null
+                ? temporal.format(DateTimeFormatter.ISO_OFFSET_TIME)
+                : null;
+    }
+
+    /**
+     * Recovers a temporal from given {@link String}.
+     */
+    @Nullable
+    public OffsetTime destringAsOffsetTime(final @Nullable String 
datastoreValue) {
+        return _Strings.isNotEmpty(datastoreValue)
+                ? OffsetTime.parse(datastoreValue, 
DateTimeFormatter.ISO_OFFSET_TIME)
+                : null;
+    }
+
+    /**
+     * Returns a {@link String} representing given temporal suitable for the 
data-store.
+     */
+    @Nullable
+    public String enstringOffsetDateTime(final @Nullable OffsetDateTime 
temporal) {
+        return temporal != null
+                ? temporal.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
+                : null;
+    }
 
+    /**
+     * Recovers a temporal from given {@link String}.
+     */
+    @Nullable
+    public OffsetDateTime destringAsOffsetDateTime(final @Nullable String 
datastoreValue) {
+        return _Strings.isNotEmpty(datastoreValue)
+                ? OffsetDateTime.parse(datastoreValue, 
DateTimeFormatter.ISO_OFFSET_DATE_TIME)
+                : null;
+    }
+
+    /**
+     * Returns a {@link String} representing given temporal suitable for the 
data-store.
+     */
+    @Nullable
+    public String enstringZonedDateTime(final @Nullable ZonedDateTime 
temporal) {
+        return temporal != null
+                ? temporal.format(DateTimeFormatter.ISO_ZONED_DATE_TIME)
+                : null;
+    }
 
+    /**
+     * Recovers a temporal from given {@link String}.
+     */
+    @Nullable
+    public ZonedDateTime destringAsZonedDateTime(final @Nullable String 
datastoreValue) {
+        return _Strings.isNotEmpty(datastoreValue)
+                ? ZonedDateTime.parse(datastoreValue, 
DateTimeFormatter.ISO_ZONED_DATE_TIME)
+                : null;
+    }
+
+
+    // -- HELPER
 
     private static BigDecimal millisToSeconds(final long millis) {
         return new BigDecimal(millis)
diff --git 
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/IsoOffsetDateTimeConverter.java
 
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/OffsetDateTimeConverterForJdo.java
similarity index 74%
rename from 
persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/IsoOffsetDateTimeConverter.java
rename to 
persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/OffsetDateTimeConverterForJdo.java
index 0a6f4ee3c6..362752a2e4 100644
--- 
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/IsoOffsetDateTimeConverter.java
+++ 
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/OffsetDateTimeConverterForJdo.java
@@ -19,29 +19,26 @@
 package org.apache.isis.persistence.jdo.datanucleus.typeconverters.time;
 
 import java.time.OffsetDateTime;
-import java.time.format.DateTimeFormatter;
 
 import org.datanucleus.store.types.converters.TypeConverter;
 
+import org.apache.isis.commons.internal.base._Times;
+
 /**
  * @since 2.0 {@index}
  */
-public class IsoOffsetDateTimeConverter implements 
TypeConverter<OffsetDateTime, String>{
+public class OffsetDateTimeConverterForJdo implements 
TypeConverter<OffsetDateTime, String>{
 
     private static final long serialVersionUID = 1L;
 
     @Override
     public String toDatastoreType(final OffsetDateTime offsetDateTime) {
-        return offsetDateTime != null
-                ? offsetDateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
-                : null;
+        return _Times.enstringOffsetDateTime(offsetDateTime);
     }
 
     @Override
     public OffsetDateTime toMemberType(final String datastoreValue) {
-        return datastoreValue != null
-                ? OffsetDateTime.parse(datastoreValue, 
DateTimeFormatter.ISO_OFFSET_DATE_TIME)
-                : null;
+        return _Times.destringAsOffsetDateTime(datastoreValue);
     }
 
 }
diff --git 
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/IsoOffsetTimeConverter.java
 
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/OffsetTimeConverterForJdo.java
similarity index 75%
rename from 
persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/IsoOffsetTimeConverter.java
rename to 
persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/OffsetTimeConverterForJdo.java
index 6c4a1bfca7..09a90eb8f2 100644
--- 
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/IsoOffsetTimeConverter.java
+++ 
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/OffsetTimeConverterForJdo.java
@@ -19,29 +19,26 @@
 package org.apache.isis.persistence.jdo.datanucleus.typeconverters.time;
 
 import java.time.OffsetTime;
-import java.time.format.DateTimeFormatter;
 
 import org.datanucleus.store.types.converters.TypeConverter;
 
+import org.apache.isis.commons.internal.base._Times;
+
 /**
  * @since 2.0 {@index}
  */
-public class IsoOffsetTimeConverter implements TypeConverter<OffsetTime, 
String>{
+public class OffsetTimeConverterForJdo implements TypeConverter<OffsetTime, 
String>{
 
     private static final long serialVersionUID = 1L;
 
     @Override
     public String toDatastoreType(final OffsetTime offsetTime) {
-        return offsetTime != null
-                ? offsetTime.format(DateTimeFormatter.ISO_OFFSET_TIME)
-                : null;
+        return _Times.enstringOffsetTime(offsetTime);
     }
 
     @Override
     public OffsetTime toMemberType(final String datastoreValue) {
-        return datastoreValue != null
-                ? OffsetTime.parse(datastoreValue, 
DateTimeFormatter.ISO_OFFSET_TIME)
-                : null;
+        return _Times.destringAsOffsetTime(datastoreValue);
     }
 
 }
diff --git 
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/IsoZonedDateTimeConverter.java
 
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/ZonedDateTimeConverterForJdo.java
similarity index 71%
rename from 
persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/IsoZonedDateTimeConverter.java
rename to 
persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/ZonedDateTimeConverterForJdo.java
index 7dd3070447..1bd1b35fe4 100644
--- 
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/IsoZonedDateTimeConverter.java
+++ 
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/typeconverters/time/ZonedDateTimeConverterForJdo.java
@@ -19,29 +19,26 @@
 package org.apache.isis.persistence.jdo.datanucleus.typeconverters.time;
 
 import java.time.ZonedDateTime;
-import java.time.format.DateTimeFormatter;
 
 import org.datanucleus.store.types.converters.TypeConverter;
 
+import org.apache.isis.commons.internal.base._Times;
+
 /**
  * @since 2.0 {@index}
  */
-public class IsoZonedDateTimeConverter implements TypeConverter<ZonedDateTime, 
String>{
+public class ZonedDateTimeConverterForJdo implements 
TypeConverter<ZonedDateTime, String>{
 
     private static final long serialVersionUID = 1L;
 
     @Override
-    public String toDatastoreType(final ZonedDateTime offsetTime) {
-        return offsetTime != null
-                ? offsetTime.format(DateTimeFormatter.ISO_ZONED_DATE_TIME)
-                : null;
+    public String toDatastoreType(final ZonedDateTime zonedDateTime) {
+        return _Times.enstringZonedDateTime(zonedDateTime);
     }
 
     @Override
     public ZonedDateTime toMemberType(final String datastoreValue) {
-        return datastoreValue != null
-                ? ZonedDateTime.parse(datastoreValue, 
DateTimeFormatter.ISO_ZONED_DATE_TIME)
-                : null;
+        return _Times.destringAsZonedDateTime(datastoreValue);
     }
 
 }
diff --git a/persistence/jdo/datanucleus/src/main/resources/plugin.xml 
b/persistence/jdo/datanucleus/src/main/resources/plugin.xml
index b2bd10c7d9..8c9538f5cd 100644
--- a/persistence/jdo/datanucleus/src/main/resources/plugin.xml
+++ b/persistence/jdo/datanucleus/src/main/resources/plugin.xml
@@ -153,7 +153,7 @@
                 name="iso.zoneddatetime-string"
                 member-type="java.time.ZonedDateTime"
                 datastore-type="java.lang.String"
-                
converter-class="org.apache.isis.persistence.jdo.datanucleus.typeconverters.time.IsoZonedDateTimeConverter"/>
+                
converter-class="org.apache.isis.persistence.jdo.datanucleus.typeconverters.time.ZonedDateTimeConverterForJdo"/>
     </extension>
 
        <extension point="org.datanucleus.type_converter">
@@ -161,7 +161,7 @@
                 name="iso.offsetdatetime-string"
                 member-type="java.time.OffsetDateTime"
                 datastore-type="java.lang.String"
-                
converter-class="org.apache.isis.persistence.jdo.datanucleus.typeconverters.time.IsoOffsetDateTimeConverter"/>
+                
converter-class="org.apache.isis.persistence.jdo.datanucleus.typeconverters.time.OffsetDateTimeConverterForJdo"/>
     </extension>
 
     <extension point="org.datanucleus.type_converter">
@@ -169,7 +169,7 @@
                 name="iso.offsettime-string"
                 member-type="java.time.OffsetTime"
                 datastore-type="java.lang.String"
-                
converter-class="org.apache.isis.persistence.jdo.datanucleus.typeconverters.time.IsoOffsetTimeConverter"/>
+                
converter-class="org.apache.isis.persistence.jdo.datanucleus.typeconverters.time.OffsetTimeConverterForJdo"/>
     </extension>
 
     <extension point="org.datanucleus.type_converter">
diff --git 
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/IsisModulePersistenceJpaIntegration.java
 
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/IsisModulePersistenceJpaIntegration.java
index 05e9903295..682b625059 100644
--- 
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/IsisModulePersistenceJpaIntegration.java
+++ 
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/IsisModulePersistenceJpaIntegration.java
@@ -31,9 +31,9 @@ import 
org.apache.isis.persistence.jpa.integration.typeconverters.applib.IsisLoc
 import 
org.apache.isis.persistence.jpa.integration.typeconverters.applib.IsisMarkupConverter;
 import 
org.apache.isis.persistence.jpa.integration.typeconverters.applib.IsisPasswordConverter;
 import 
org.apache.isis.persistence.jpa.integration.typeconverters.java.awt.JavaAwtBufferedImageByteArrayConverter;
-import 
org.apache.isis.persistence.jpa.integration.typeconverters.java.time.JavaTimeIsoOffsetDateTimeConverter;
-import 
org.apache.isis.persistence.jpa.integration.typeconverters.java.time.JavaTimeIsoOffsetTimeConverter;
-import 
org.apache.isis.persistence.jpa.integration.typeconverters.java.time.JavaTimeIsoZonedDateTimeConverter;
+import 
org.apache.isis.persistence.jpa.integration.typeconverters.java.time.OffsetDateTimeConverterForJpa;
+import 
org.apache.isis.persistence.jpa.integration.typeconverters.java.time.OffsetTimeConverterForJpa;
+import 
org.apache.isis.persistence.jpa.integration.typeconverters.java.time.ZonedDateTimeConverterForJpa;
 import 
org.apache.isis.persistence.jpa.integration.typeconverters.java.util.JavaUtilUuidConverter;
 import 
org.apache.isis.persistence.jpa.integration.typeconverters.schema.v2.IsisChangesDtoConverter;
 import 
org.apache.isis.persistence.jpa.integration.typeconverters.schema.v2.IsisCommandDtoConverter;
@@ -68,9 +68,9 @@ import 
org.apache.isis.persistence.jpa.metamodel.IsisModulePersistenceJpaMetamod
         IsisOidDtoConverter.class,
         JavaAwtBufferedImageByteArrayConverter.class,
         JavaUtilUuidConverter.class,
-        JavaTimeIsoOffsetTimeConverter.class,
-        JavaTimeIsoOffsetDateTimeConverter.class,
-        JavaTimeIsoZonedDateTimeConverter.class
+        OffsetTimeConverterForJpa.class,
+        OffsetDateTimeConverterForJpa.class,
+        ZonedDateTimeConverterForJpa.class
 
 })
 public class IsisModulePersistenceJpaIntegration {
diff --git 
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/typeconverters/java/time/JavaTimeIsoOffsetDateTimeConverter.java
 
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/typeconverters/java/time/OffsetDateTimeConverterForJpa.java
similarity index 77%
rename from 
persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/typeconverters/java/time/JavaTimeIsoOffsetDateTimeConverter.java
rename to 
persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/typeconverters/java/time/OffsetDateTimeConverterForJpa.java
index d0f34d9e31..a2e783217e 100644
--- 
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/typeconverters/java/time/JavaTimeIsoOffsetDateTimeConverter.java
+++ 
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/typeconverters/java/time/OffsetDateTimeConverterForJpa.java
@@ -19,30 +19,27 @@
 package org.apache.isis.persistence.jpa.integration.typeconverters.java.time;
 
 import java.time.OffsetDateTime;
-import java.time.format.DateTimeFormatter;
 
 import javax.persistence.AttributeConverter;
 import javax.persistence.Converter;
 
+import org.apache.isis.commons.internal.base._Times;
+
 /**
  * @since 2.0 {@index}
  */
 @Converter(autoApply = true)
-public class JavaTimeIsoOffsetDateTimeConverter
+public class OffsetDateTimeConverterForJpa
 implements AttributeConverter<OffsetDateTime, String> {
 
     @Override
     public String convertToDatabaseColumn(final OffsetDateTime offsetDateTime) 
{
-        return offsetDateTime != null
-                ? offsetDateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
-                : null;
+        return _Times.enstringOffsetDateTime(offsetDateTime);
     }
 
     @Override
     public OffsetDateTime convertToEntityAttribute(final String 
datastoreValue) {
-        return datastoreValue != null
-                ? OffsetDateTime.parse(datastoreValue, 
DateTimeFormatter.ISO_OFFSET_DATE_TIME)
-                : null;
+        return _Times.destringAsOffsetDateTime(datastoreValue);
     }
 
 }
diff --git 
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/typeconverters/java/time/JavaTimeIsoOffsetTimeConverter.java
 
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/typeconverters/java/time/OffsetTimeConverterForJpa.java
similarity index 78%
rename from 
persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/typeconverters/java/time/JavaTimeIsoOffsetTimeConverter.java
rename to 
persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/typeconverters/java/time/OffsetTimeConverterForJpa.java
index 4f76e06bee..1b5b0c2082 100644
--- 
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/typeconverters/java/time/JavaTimeIsoOffsetTimeConverter.java
+++ 
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/typeconverters/java/time/OffsetTimeConverterForJpa.java
@@ -19,30 +19,27 @@
 package org.apache.isis.persistence.jpa.integration.typeconverters.java.time;
 
 import java.time.OffsetTime;
-import java.time.format.DateTimeFormatter;
 
 import javax.persistence.AttributeConverter;
 import javax.persistence.Converter;
 
+import org.apache.isis.commons.internal.base._Times;
+
 /**
  * @since 2.0 {@index}
  */
 @Converter(autoApply = true)
-public class JavaTimeIsoOffsetTimeConverter
+public class OffsetTimeConverterForJpa
 implements AttributeConverter<OffsetTime, String>{
 
     @Override
     public String convertToDatabaseColumn(final OffsetTime offsetTime) {
-        return offsetTime != null
-                ? offsetTime.format(DateTimeFormatter.ISO_OFFSET_TIME)
-                : null;
+        return _Times.enstringOffsetTime(offsetTime);
     }
 
     @Override
     public OffsetTime convertToEntityAttribute(final String datastoreValue) {
-        return datastoreValue != null
-                ? OffsetTime.parse(datastoreValue, 
DateTimeFormatter.ISO_OFFSET_TIME)
-                : null;
+        return _Times.destringAsOffsetTime(datastoreValue);
     }
 
 }
diff --git 
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/typeconverters/java/time/JavaTimeIsoZonedDateTimeConverter.java
 
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/typeconverters/java/time/ZonedDateTimeConverterForJpa.java
similarity index 73%
rename from 
persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/typeconverters/java/time/JavaTimeIsoZonedDateTimeConverter.java
rename to 
persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/typeconverters/java/time/ZonedDateTimeConverterForJpa.java
index f7fdd57e48..70e3cd9761 100644
--- 
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/typeconverters/java/time/JavaTimeIsoZonedDateTimeConverter.java
+++ 
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/typeconverters/java/time/ZonedDateTimeConverterForJpa.java
@@ -19,30 +19,27 @@
 package org.apache.isis.persistence.jpa.integration.typeconverters.java.time;
 
 import java.time.ZonedDateTime;
-import java.time.format.DateTimeFormatter;
 
 import javax.persistence.AttributeConverter;
 import javax.persistence.Converter;
 
+import org.apache.isis.commons.internal.base._Times;
+
 /**
  * @since 2.0 {@index}
  */
 @Converter(autoApply = true)
-public class JavaTimeIsoZonedDateTimeConverter
+public class ZonedDateTimeConverterForJpa
 implements AttributeConverter<ZonedDateTime, String> {
 
     @Override
-    public String convertToDatabaseColumn(final ZonedDateTime offsetTime) {
-        return offsetTime != null
-                ? offsetTime.format(DateTimeFormatter.ISO_ZONED_DATE_TIME)
-                : null;
+    public String convertToDatabaseColumn(final ZonedDateTime zonedDateTime) {
+        return _Times.enstringZonedDateTime(zonedDateTime);
     }
 
     @Override
     public ZonedDateTime convertToEntityAttribute(final String datastoreValue) 
{
-        return datastoreValue != null
-                ? ZonedDateTime.parse(datastoreValue, 
DateTimeFormatter.ISO_ZONED_DATE_TIME)
-                : null;
+        return _Times.destringAsZonedDateTime(datastoreValue);
     }
 
 }

Reply via email to