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);
}
}