You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/11/24 13:33:09 UTC
[isis] branch master updated: ISIS-2877: fixes java<->joda ZoneId conversion
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 20e25b8 ISIS-2877: fixes java<->joda ZoneId conversion
20e25b8 is described below
commit 20e25b8e89fc6d85296d1df0613ecd51a6a0e08c
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Nov 24 14:32:56 2021 +0100
ISIS-2877: fixes java<->joda ZoneId conversion
---
.../ui/component/EventProviderAbstract.java | 4 +-
valuetypes/jodatime/applib/pom.xml | 8 ++
...timeConverters.java => JodaTimeConverters.java} | 6 +-
.../applib/value/JodaTimeConvertersTest.java | 92 ++++++++++++++++++++++
.../valuesemantics/JodaDateTimeValueSemantics.java | 6 +-
.../JodaLocalDateTimeValueSemantics.java | 6 +-
.../JodaLocalDateValueSemantics.java | 6 +-
.../JodaLocalTimeValueSemantics.java | 6 +-
8 files changed, 117 insertions(+), 17 deletions(-)
diff --git a/extensions/vw/fullcalendar/ui/src/main/java/org/apache/isis/extensions/fullcalendar/ui/component/EventProviderAbstract.java b/extensions/vw/fullcalendar/ui/src/main/java/org/apache/isis/extensions/fullcalendar/ui/component/EventProviderAbstract.java
index 52909c2..e536164 100644
--- a/extensions/vw/fullcalendar/ui/src/main/java/org/apache/isis/extensions/fullcalendar/ui/component/EventProviderAbstract.java
+++ b/extensions/vw/fullcalendar/ui/src/main/java/org/apache/isis/extensions/fullcalendar/ui/component/EventProviderAbstract.java
@@ -36,7 +36,7 @@ import org.apache.isis.core.metamodel.spec.ManagedObjects;
import org.apache.isis.core.runtime.context.IsisAppCommonContext;
import org.apache.isis.extensions.fullcalendar.applib.spi.CalendarableDereferencingService;
import org.apache.isis.extensions.fullcalendar.applib.value.CalendarEvent;
-import org.apache.isis.valuetypes.jodatime.applib.value.JodatimeConverters;
+import org.apache.isis.valuetypes.jodatime.applib.value.JodaTimeConverters;
import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
import lombok.val;
@@ -99,7 +99,7 @@ public abstract class EventProviderAbstract implements EventProvider {
.map(InteractionContext::getTimeZone)
.orElse(ZoneId.systemDefault());
- val start = JodatimeConverters.toJoda(calendarEvent.asDateTime(timeZone));
+ val start = JodaTimeConverters.toJoda(calendarEvent.asDateTime(timeZone));
val end = start;
final Event event = new Event();
diff --git a/valuetypes/jodatime/applib/pom.xml b/valuetypes/jodatime/applib/pom.xml
index 1941555..89ce264 100644
--- a/valuetypes/jodatime/applib/pom.xml
+++ b/valuetypes/jodatime/applib/pom.xml
@@ -44,6 +44,14 @@
<artifactId>joda-time</artifactId>
</dependency>
+ <!-- TESTING -->
+
+ <dependency>
+ <groupId>org.apache.isis.core</groupId>
+ <artifactId>isis-core-internaltestsupport</artifactId>
+ <scope>test</scope>
+ </dependency>
+
</dependencies>
</project>
diff --git a/valuetypes/jodatime/applib/src/main/java/org/apache/isis/valuetypes/jodatime/applib/value/JodatimeConverters.java b/valuetypes/jodatime/applib/src/main/java/org/apache/isis/valuetypes/jodatime/applib/value/JodaTimeConverters.java
similarity index 96%
rename from valuetypes/jodatime/applib/src/main/java/org/apache/isis/valuetypes/jodatime/applib/value/JodatimeConverters.java
rename to valuetypes/jodatime/applib/src/main/java/org/apache/isis/valuetypes/jodatime/applib/value/JodaTimeConverters.java
index df24c32..3aa32cb 100644
--- a/valuetypes/jodatime/applib/src/main/java/org/apache/isis/valuetypes/jodatime/applib/value/JodatimeConverters.java
+++ b/valuetypes/jodatime/applib/src/main/java/org/apache/isis/valuetypes/jodatime/applib/value/JodaTimeConverters.java
@@ -31,7 +31,7 @@ import lombok.experimental.UtilityClass;
* @since 2.0 {@index}
*/
@UtilityClass
-public final class JodatimeConverters {
+public final class JodaTimeConverters {
// -- INSTANT
@@ -106,11 +106,11 @@ public final class JodatimeConverters {
// -- TIME ZONE
public DateTimeZone toJoda(final java.time.ZoneId input) {
- return DateTimeZone.forID(input.getId());
+ return DateTimeZone.forTimeZone(java.util.TimeZone.getTimeZone(input));
}
public java.time.ZoneId fromJoda(final DateTimeZone input) {
- return java.time.ZoneId.of(input.getID());
+ return input.toTimeZone().toZoneId();
}
// -- HELPER
diff --git a/valuetypes/jodatime/applib/src/test/java/org/apache/isis/valuetypes/jodatime/applib/value/JodaTimeConvertersTest.java b/valuetypes/jodatime/applib/src/test/java/org/apache/isis/valuetypes/jodatime/applib/value/JodaTimeConvertersTest.java
new file mode 100644
index 0000000..c2d8d47
--- /dev/null
+++ b/valuetypes/jodatime/applib/src/test/java/org/apache/isis/valuetypes/jodatime/applib/value/JodaTimeConvertersTest.java
@@ -0,0 +1,92 @@
+/*
+ * 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.isis.valuetypes.jodatime.applib.value;
+
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.stream.Stream;
+
+import org.joda.time.DateTimeZone;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
+
+class JodaTimeConvertersTest {
+
+ @ParameterizedTest(name = "{index} {0}")
+ @MethodSource("provideAllZoneIds")
+ void timeZone_Roundtrip(final String zoneIdName, final ZoneId zoneId) {
+
+ final DateTimeZone jodaValue;
+
+ try {
+ jodaValue = JodaTimeConverters.toJoda(zoneId);
+ } catch (Exception e) {
+ fail(String.format("conversion failed for %s", zoneIdName), e);
+ return;
+ }
+
+ final ZoneId recoveredValue = JodaTimeConverters.fromJoda(jodaValue);
+ assertEquals(zoneId.getRules(), recoveredValue.getRules(), ()->String.format("rountrip failed for %s", zoneIdName));
+ }
+
+ @ParameterizedTest(name = "{index} {0}")
+ @MethodSource("provideAllZoneIds")
+ void zonedDateFormat_roundtrip(final String zoneIdName, final ZoneId zoneId) {
+
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss x");
+ ZonedDateTime zonedDateTime = ZonedDateTime.of(2021, 11, 24, 11, 13, 41, 0, zoneId);
+
+ org.joda.time.DateTime jodaValue = JodaTimeConverters.toJoda(zonedDateTime);
+ ZonedDateTime recoveredValue = JodaTimeConverters.fromJoda(jodaValue);
+
+ assertEquals(zonedDateTime.format(formatter), recoveredValue.format(formatter));
+ }
+
+ @Test
+ void zonedDateFormat_zeroOffset() {
+
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss x");
+ ZonedDateTime zonedDateTime = formatter.parse("2021-11-24 11:13:41 +00", ZonedDateTime::from);
+
+ org.joda.time.DateTime jodaValue = JodaTimeConverters.toJoda(zonedDateTime);
+ ZonedDateTime recoveredValue = JodaTimeConverters.fromJoda(jodaValue);
+
+ assertEquals(zonedDateTime.format(formatter), recoveredValue.format(formatter));
+ }
+
+ // -- TEST PARAMS
+
+ static Stream<Arguments> provideAllZoneIds() {
+ return ZoneId.getAvailableZoneIds().stream()
+ .filter(zoneIdName->!zoneIdName.startsWith("SystemV/"))
+ .filter(zoneIdName->!zoneIdName.equals("Pacific/Enderbury"))
+ .map(ZoneId::of)
+ .map(zoneId->Arguments.of(
+ zoneId.getId(), zoneId));
+ }
+
+
+
+}
diff --git a/valuetypes/jodatime/integration/src/main/java/org/apache/isis/valuetypes/jodatime/integration/valuesemantics/JodaDateTimeValueSemantics.java b/valuetypes/jodatime/integration/src/main/java/org/apache/isis/valuetypes/jodatime/integration/valuesemantics/JodaDateTimeValueSemantics.java
index 274d70d..63e1052 100644
--- a/valuetypes/jodatime/integration/src/main/java/org/apache/isis/valuetypes/jodatime/integration/valuesemantics/JodaDateTimeValueSemantics.java
+++ b/valuetypes/jodatime/integration/src/main/java/org/apache/isis/valuetypes/jodatime/integration/valuesemantics/JodaDateTimeValueSemantics.java
@@ -30,7 +30,7 @@ import org.apache.isis.applib.value.semantics.ValueSemanticsAbstract;
import org.apache.isis.core.metamodel.valuesemantics.temporal.ZonedDateTimeValueSemantics;
import org.apache.isis.core.metamodel.valuetypes.TemporalSemanticsAdapter;
import org.apache.isis.schema.common.v2.ValueType;
-import org.apache.isis.valuetypes.jodatime.applib.value.JodatimeConverters;
+import org.apache.isis.valuetypes.jodatime.applib.value.JodaTimeConverters;
@Component
@Named("isis.val.JodaDateTimeValueSemantics")
@@ -56,12 +56,12 @@ extends TemporalSemanticsAdapter<org.joda.time.DateTime, ZonedDateTime> {
@Override
public DateTime fromDelegateValue(final ZonedDateTime delegateValue) {
- return JodatimeConverters.toJoda(delegateValue);
+ return JodaTimeConverters.toJoda(delegateValue);
}
@Override
public ZonedDateTime toDelegateValue(final DateTime value) {
- return JodatimeConverters.fromJoda(value);
+ return JodaTimeConverters.fromJoda(value);
}
}
diff --git a/valuetypes/jodatime/integration/src/main/java/org/apache/isis/valuetypes/jodatime/integration/valuesemantics/JodaLocalDateTimeValueSemantics.java b/valuetypes/jodatime/integration/src/main/java/org/apache/isis/valuetypes/jodatime/integration/valuesemantics/JodaLocalDateTimeValueSemantics.java
index 543d0b5..39d76fe 100644
--- a/valuetypes/jodatime/integration/src/main/java/org/apache/isis/valuetypes/jodatime/integration/valuesemantics/JodaLocalDateTimeValueSemantics.java
+++ b/valuetypes/jodatime/integration/src/main/java/org/apache/isis/valuetypes/jodatime/integration/valuesemantics/JodaLocalDateTimeValueSemantics.java
@@ -27,7 +27,7 @@ import org.apache.isis.applib.value.semantics.ValueSemanticsAbstract;
import org.apache.isis.core.metamodel.valuesemantics.temporal.LocalDateTimeValueSemantics;
import org.apache.isis.core.metamodel.valuetypes.TemporalSemanticsAdapter;
import org.apache.isis.schema.common.v2.ValueType;
-import org.apache.isis.valuetypes.jodatime.applib.value.JodatimeConverters;
+import org.apache.isis.valuetypes.jodatime.applib.value.JodaTimeConverters;
@Component
@Named("isis.val.JodaLocalDateTimeValueSemantics")
@@ -53,12 +53,12 @@ extends TemporalSemanticsAdapter<org.joda.time.LocalDateTime, java.time.LocalDat
@Override
public org.joda.time.LocalDateTime fromDelegateValue(final java.time.LocalDateTime delegateValue) {
- return JodatimeConverters.toJoda(delegateValue);
+ return JodaTimeConverters.toJoda(delegateValue);
}
@Override
public java.time.LocalDateTime toDelegateValue(final org.joda.time.LocalDateTime value) {
- return JodatimeConverters.fromJoda(value);
+ return JodaTimeConverters.fromJoda(value);
}
}
diff --git a/valuetypes/jodatime/integration/src/main/java/org/apache/isis/valuetypes/jodatime/integration/valuesemantics/JodaLocalDateValueSemantics.java b/valuetypes/jodatime/integration/src/main/java/org/apache/isis/valuetypes/jodatime/integration/valuesemantics/JodaLocalDateValueSemantics.java
index 5281048..444d104 100644
--- a/valuetypes/jodatime/integration/src/main/java/org/apache/isis/valuetypes/jodatime/integration/valuesemantics/JodaLocalDateValueSemantics.java
+++ b/valuetypes/jodatime/integration/src/main/java/org/apache/isis/valuetypes/jodatime/integration/valuesemantics/JodaLocalDateValueSemantics.java
@@ -27,7 +27,7 @@ import org.apache.isis.applib.value.semantics.ValueSemanticsAbstract;
import org.apache.isis.core.metamodel.valuesemantics.temporal.LocalDateValueSemantics;
import org.apache.isis.core.metamodel.valuetypes.TemporalSemanticsAdapter;
import org.apache.isis.schema.common.v2.ValueType;
-import org.apache.isis.valuetypes.jodatime.applib.value.JodatimeConverters;
+import org.apache.isis.valuetypes.jodatime.applib.value.JodaTimeConverters;
@Component
@Named("isis.val.JodaLocalDateValueSemantics")
@@ -53,12 +53,12 @@ extends TemporalSemanticsAdapter<org.joda.time.LocalDate, java.time.LocalDate>
@Override
public org.joda.time.LocalDate fromDelegateValue(final java.time.LocalDate delegateValue) {
- return JodatimeConverters.toJoda(delegateValue);
+ return JodaTimeConverters.toJoda(delegateValue);
}
@Override
public java.time.LocalDate toDelegateValue(final org.joda.time.LocalDate value) {
- return JodatimeConverters.fromJoda(value);
+ return JodaTimeConverters.fromJoda(value);
}
diff --git a/valuetypes/jodatime/integration/src/main/java/org/apache/isis/valuetypes/jodatime/integration/valuesemantics/JodaLocalTimeValueSemantics.java b/valuetypes/jodatime/integration/src/main/java/org/apache/isis/valuetypes/jodatime/integration/valuesemantics/JodaLocalTimeValueSemantics.java
index 1815a4e..7d5a6a4 100644
--- a/valuetypes/jodatime/integration/src/main/java/org/apache/isis/valuetypes/jodatime/integration/valuesemantics/JodaLocalTimeValueSemantics.java
+++ b/valuetypes/jodatime/integration/src/main/java/org/apache/isis/valuetypes/jodatime/integration/valuesemantics/JodaLocalTimeValueSemantics.java
@@ -27,7 +27,7 @@ import org.apache.isis.applib.value.semantics.ValueSemanticsAbstract;
import org.apache.isis.core.metamodel.valuesemantics.temporal.LocalTimeValueSemantics;
import org.apache.isis.core.metamodel.valuetypes.TemporalSemanticsAdapter;
import org.apache.isis.schema.common.v2.ValueType;
-import org.apache.isis.valuetypes.jodatime.applib.value.JodatimeConverters;
+import org.apache.isis.valuetypes.jodatime.applib.value.JodaTimeConverters;
@Component
@Named("isis.val.JodaLocalTimeValueSemantics")
@@ -53,12 +53,12 @@ extends TemporalSemanticsAdapter<org.joda.time.LocalTime, java.time.LocalTime>
@Override
public org.joda.time.LocalTime fromDelegateValue(final java.time.LocalTime delegateValue) {
- return JodatimeConverters.toJoda(delegateValue);
+ return JodaTimeConverters.toJoda(delegateValue);
}
@Override
public java.time.LocalTime toDelegateValue(final org.joda.time.LocalTime value) {
- return JodatimeConverters.fromJoda(value);
+ return JodaTimeConverters.fromJoda(value);
}
}