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 2020/01/14 19:22:11 UTC
[isis] 01/02: ISIS-2263: re-implement java.time facet factories
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch 2263-Update_RO_spec
in repository https://gitbox.apache.org/repos/asf/isis.git
commit af17748288bc14b3a2cbe8cabe41bf40eb3cbf1f
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Jan 14 15:40:49 2020 +0100
ISIS-2263: re-implement java.time facet factories
---
.../xmlsnapshot/XmlSnapshotServiceAbstract.java | 9 +-
.../applib/services/urlencoding/MementosTest.java | 6 +-
.../XmlSnapshotServiceAbstractTest.java | 4 +-
.../apache/isis/applib/util/schema/Roundtrip.java | 64 ++---
.../isis/schema/timeadapters/XmlTimeUtil.java | 96 ++++++++
.../value/datejdk8local/Jdk8LocalDateUtil.java | 170 -------------
...ateValueFacetUsingSemanticsProviderFactory.java | 45 ----
.../Jdk8LocalDateValueSemanticsProvider.java | 252 -------------------
.../facets/value/datejdk8local/TimeFormatter.java | 27 --
.../datetimejdk8local/Jdk8LocalDateTimeUtil.java | 157 ------------
...imeValueFacetUsingSemanticsProviderFactory.java | 45 ----
.../Jdk8LocalDateTimeValueSemanticsProvider.java | 272 ---------------------
.../value/datetimejdk8local/TimeFormatter.java | 27 --
.../facets/value/datetimejdk8local/TimeParser.java | 27 --
...imeValueFacetUsingSemanticsProviderFactory.java | 45 ----
.../Jdk8OffsetDateTimeValueSemanticsProvider.java | 103 --------
...fsetDateTimeValueSemanticsProviderAbstract.java | 121 ---------
.../facets/value/temporal/TemporalAdjust.java | 108 ++++++++
.../facets/value/temporal/TemporalAdjustUtil.java | 61 +++++
.../TemporalValueFacet.java} | 27 +-
...ralValueFacetUsingSemanticsProviderFactory.java | 64 +++++
.../TemporalValueSemanticsProviderAbstract.java | 234 ++++++++++++++++++
...teValueFacetUsingSemanticsProviderFactory.java} | 14 +-
.../localdate/LocalDateValueSemanticsProvider.java | 53 ++++
...meValueFacetUsingSemanticsProviderFactory.java} | 14 +-
.../LocalDateTimeValueSemanticsProvider.java | 64 +++++
...meValueFacetUsingSemanticsProviderFactory.java} | 14 +-
.../localtime/LocalTimeValueSemanticsProvider.java | 63 +++++
...meValueFacetUsingSemanticsProviderFactory.java} | 14 +-
.../OffsetDateTimeValueSemanticsProvider.java | 65 +++++
...meValueFacetUsingSemanticsProviderFactory.java} | 16 +-
.../OffsetTimeValueSemanticsProvider.java | 60 +++++
...meValueFacetUsingSemanticsProviderFactory.java} | 16 +-
.../ZonedDateTimeValueSemanticsProvider.java | 61 +++++
.../time/TimeValueSemanticsProviderAbstract.java | 3 +-
.../dflt/ProgrammingModelFacetsJava8.java | 96 ++++----
...HelperTest_newPropertyDomainEvent_forClear.java | 7 +-
...elperTest_newPropertyDomainEvent_forModify.java | 11 +-
.../core/runtimeservices/i18n/po/PoWriter.java | 11 +-
.../applib/bean/FixtureDatumFactoriesForTime.java | 76 ++++++
.../unittestsupport/applib/dom/valuetypes/VT.java | 2 +-
41 files changed, 1186 insertions(+), 1438 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/xmlsnapshot/XmlSnapshotServiceAbstract.java b/api/applib/src/main/java/org/apache/isis/applib/services/xmlsnapshot/XmlSnapshotServiceAbstract.java
index a8d0168..7003d18 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/xmlsnapshot/XmlSnapshotServiceAbstract.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/xmlsnapshot/XmlSnapshotServiceAbstract.java
@@ -21,6 +21,8 @@ package org.apache.isis.applib.services.xmlsnapshot;
import java.io.StringReader;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
import java.util.Locale;
import javax.xml.transform.OutputKeys;
@@ -30,8 +32,6 @@ import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.stream.StreamSource;
-import org.joda.time.format.DateTimeFormat;
-import org.joda.time.format.DateTimeFormatter;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -75,8 +75,9 @@ public abstract class XmlSnapshotServiceAbstract implements XmlSnapshotService {
}
if("isis:LocalDate".equals(dataType)) {
final String str = getChildTextValue(chldEl);
- final DateTimeFormatter forPattern = DateTimeFormat.forPattern("dd-MMM-yyyy").withLocale(Locale.ENGLISH);
- return (T)forPattern.parseLocalDate(str);
+ final DateTimeFormatter parser = DateTimeFormatter
+ .ofPattern("dd-MMM-yyyy", Locale.ENGLISH);
+ return (T)parser.parse(str, LocalDate::from);
}
if("isis:Byte".equals(dataType)) {
final String str = getChildTextValue(chldEl);
diff --git a/api/applib/src/test/java/org/apache/isis/applib/services/urlencoding/MementosTest.java b/api/applib/src/test/java/org/apache/isis/applib/services/urlencoding/MementosTest.java
index b6fa72a..f426698 100644
--- a/api/applib/src/test/java/org/apache/isis/applib/services/urlencoding/MementosTest.java
+++ b/api/applib/src/test/java/org/apache/isis/applib/services/urlencoding/MementosTest.java
@@ -22,9 +22,9 @@ package org.apache.isis.applib.services.urlencoding;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.time.LocalDate;
import java.util.Date;
-import org.joda.time.LocalDate;
import org.junit.Before;
import org.junit.Test;
@@ -93,7 +93,7 @@ public class MementosTest {
memento.put("someBooleanFalse", Boolean.FALSE);
memento.put("someBigInteger", new BigInteger("123456789012345678901234567890"));
memento.put("someBigDecimal", new BigDecimal("123456789012345678901234567890.123456789"));
- memento.put("someLocalDate", new LocalDate(2013,9,3));
+ memento.put("someLocalDate", LocalDate.of(2013,9,3));
memento.put("someJavaUtilDate", new Date(300_000_000));
memento.put("someBookmark", new Bookmark("CUS", "12345"));
@@ -117,7 +117,7 @@ public class MementosTest {
assertThat(memento2.get("someBooleanFalse", Boolean.class), is(Boolean.FALSE));
assertThat(memento2.get("someBigInteger", BigInteger.class), is(new BigInteger("123456789012345678901234567890")));
assertThat(memento2.get("someBigDecimal", BigDecimal.class), is(new BigDecimal("123456789012345678901234567890.123456789")));
- assertThat(memento2.get("someLocalDate", LocalDate.class), is(new LocalDate(2013,9,3)));
+ assertThat(memento2.get("someLocalDate", LocalDate.class), is(LocalDate.of(2013,9,3)));
assertThat(memento2.get("someJavaUtilDate", Date.class), is(new Date(300_000_000)));
assertThat(memento2.get("someBookmark", Bookmark.class), is(new Bookmark("CUS", "12345")));
diff --git a/api/applib/src/test/java/org/apache/isis/applib/services/xmlsnapshot/XmlSnapshotServiceAbstractTest.java b/api/applib/src/test/java/org/apache/isis/applib/services/xmlsnapshot/XmlSnapshotServiceAbstractTest.java
index 2b301da..2eab325 100644
--- a/api/applib/src/test/java/org/apache/isis/applib/services/xmlsnapshot/XmlSnapshotServiceAbstractTest.java
+++ b/api/applib/src/test/java/org/apache/isis/applib/services/xmlsnapshot/XmlSnapshotServiceAbstractTest.java
@@ -19,9 +19,9 @@ package org.apache.isis.applib.services.xmlsnapshot;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.nio.charset.Charset;
+import java.time.LocalDate;
import java.util.Locale;
-import org.joda.time.LocalDate;
import org.junit.Before;
import org.junit.Test;
import org.w3c.dom.Document;
@@ -65,7 +65,7 @@ public class XmlSnapshotServiceAbstractTest {
assertThat(
xmlSnapshotService.getChildElementValue(rootEl, "app:someString", String.class), is("OXF"));
assertThat(
- xmlSnapshotService.getChildElementValue(rootEl, "app:someLocalDate", LocalDate.class), is(new LocalDate(2013,4,1)));
+ xmlSnapshotService.getChildElementValue(rootEl, "app:someLocalDate", LocalDate.class), is(LocalDate.of(2013,4,1)));
assertThat(
xmlSnapshotService.getChildElementValue(rootEl, "app:someBigDecimal", BigDecimal.class), is(new BigDecimal("123456789012345678901234567890.12345678")));
assertThat(
diff --git a/api/applib/src/test/java/org/apache/isis/applib/util/schema/Roundtrip.java b/api/applib/src/test/java/org/apache/isis/applib/util/schema/Roundtrip.java
index 923d65c..87a752d 100644
--- a/api/applib/src/test/java/org/apache/isis/applib/util/schema/Roundtrip.java
+++ b/api/applib/src/test/java/org/apache/isis/applib/util/schema/Roundtrip.java
@@ -21,16 +21,16 @@ import java.io.CharArrayWriter;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Timestamp;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.OffsetDateTime;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import org.hamcrest.Matchers;
-import org.joda.time.DateTime;
-import org.joda.time.LocalDate;
-import org.joda.time.LocalDateTime;
-import org.joda.time.LocalTime;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.equalTo;
@@ -133,20 +133,20 @@ public class Roundtrip {
.addParamArg(interactionDto, "nullBigDecimal", java.math.BigDecimal.class, (java.math.BigDecimal) null, null);
InteractionDtoUtils
- .addParamArg(interactionDto, "aJodaDateTime", org.joda.time.DateTime.class, new org.joda.time.DateTime(2015, 5, 23, 9, 54, 1), null);
+ .addParamArg(interactionDto, "aOffsetDateTime", java.time.OffsetDateTime.class, OffsetDateTime.of(2015, 5, 23, 9, 54, 1, 0, null), null);
InteractionDtoUtils
- .addParamArg(interactionDto, "nullJodaDateTime", org.joda.time.DateTime.class, (org.joda.time.DateTime) null, null);
+ .addParamArg(interactionDto, "nullOffsetDateTime", java.time.OffsetDateTime.class, (OffsetDateTime) null, null);
InteractionDtoUtils
- .addParamArg(interactionDto, "aJodaLocalDate", org.joda.time.LocalDate.class, new org.joda.time.LocalDate(2015, 5, 23), null);
- InteractionDtoUtils.addParamArg(interactionDto, "nullJodaLocalDate", org.joda.time.LocalDate.class, (org.joda.time.LocalDate) null, null);
+ .addParamArg(interactionDto, "aLocalDate", java.time.LocalDate.class, LocalDate.of(2015, 5, 23), null);
+ InteractionDtoUtils.addParamArg(interactionDto, "nullLocalDate", java.time.LocalDate.class, (LocalDate) null, null);
- InteractionDtoUtils.addParamArg(interactionDto, "aJodaLocalDateTime", org.joda.time.LocalDateTime.class, new org.joda.time.LocalDateTime(2015, 5, 23, 9, 54, 1), null);
- InteractionDtoUtils.addParamArg(interactionDto, "nullJodaLocalDateTime", org.joda.time.LocalDateTime.class, (org.joda.time.LocalDateTime) null, null);
+ InteractionDtoUtils.addParamArg(interactionDto, "aLocalDateTime", java.time.LocalDateTime.class, LocalDateTime.of(2015, 5, 23, 9, 54, 1), null);
+ InteractionDtoUtils.addParamArg(interactionDto, "nullLocalDateTime", java.time.LocalDateTime.class, (LocalDateTime) null, null);
InteractionDtoUtils
- .addParamArg(interactionDto, "aJodaLocalTime", org.joda.time.LocalTime.class, new org.joda.time.LocalTime(9, 54, 1), null);
- InteractionDtoUtils.addParamArg(interactionDto, "nullJodaLocalTime", org.joda.time.LocalTime.class, (org.joda.time.LocalTime) null, null);
+ .addParamArg(interactionDto, "aLocalTime", java.time.LocalTime.class, LocalTime.of(9, 54, 1), null);
+ InteractionDtoUtils.addParamArg(interactionDto, "nullLocalTime", java.time.LocalTime.class, (LocalTime) null, null);
InteractionDtoUtils.addParamArg(interactionDto, "aReference", null, new Bookmark("ORD", "12345"), null);
InteractionDtoUtils.addParamArg(interactionDto, "nullReference", null, null, null);
@@ -292,52 +292,52 @@ public class Roundtrip {
assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(true));
param++;
- assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("aJodaDateTime"));
- assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.JODA_DATE_TIME));
+ assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("aOffsetDateTime"));
+ assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.OFFSET_DATE_TIME));
assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(false));
// bit hacky... regular comparison fails but toString() works... must be some additional data that differs, not sure what tho'
assertThat(
- InteractionDtoUtils.getParameterArgValue(invocationDto, param, DateTime.class).toString(), is(new DateTime(2015, 5, 23, 9, 54, 1).toString()));
+ InteractionDtoUtils.getParameterArgValue(invocationDto, param, OffsetDateTime.class).toString(), is(OffsetDateTime.of(2015, 5, 23, 9, 54, 1, 0, null).toString()));
param++;
- assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullJodaDateTime"));
- assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.JODA_DATE_TIME));
+ assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullOffsetDateTime"));
+ assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.OFFSET_DATE_TIME));
assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(true));
param++;
- assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("aJodaLocalDate"));
- assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.JODA_LOCAL_DATE));
+ assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("aLocalDate"));
+ assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.LOCAL_DATE));
assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(false));
final LocalDate actual = InteractionDtoUtils.getParameterArgValue(invocationDto, param, LocalDate.class);
- final LocalDate expected = new LocalDate(2015, 5, 23);
+ final LocalDate expected = LocalDate.of(2015, 5, 23);
assertThat(actual, equalTo(expected));
param++;
- assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullJodaLocalDate"));
- assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.JODA_LOCAL_DATE));
+ assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullLocalDate"));
+ assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.LOCAL_DATE));
assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(true));
param++;
- assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("aJodaLocalDateTime"));
- assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.JODA_LOCAL_DATE_TIME));
+ assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("aLocalDateTime"));
+ assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.LOCAL_DATE_TIME));
assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(false));
- assertThat(InteractionDtoUtils.getParameterArgValue(invocationDto, param, LocalDateTime.class), is(new org.joda.time.LocalDateTime(2015, 5, 23, 9, 54, 1)));
+ assertThat(InteractionDtoUtils.getParameterArgValue(invocationDto, param, LocalDateTime.class), is(LocalDateTime.of(2015, 5, 23, 9, 54, 1)));
param++;
- assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullJodaLocalDateTime"));
- assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.JODA_LOCAL_DATE_TIME));
+ assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullLocalDateTime"));
+ assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.LOCAL_DATE_TIME));
assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(true));
param++;
- assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("aJodaLocalTime"));
- assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.JODA_LOCAL_TIME));
+ assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("aLocalTime"));
+ assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.LOCAL_TIME));
assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(false));
assertThat(
- InteractionDtoUtils.getParameterArgValue(invocationDto, param, LocalTime.class), is(new org.joda.time.LocalTime(9, 54, 1)));
+ InteractionDtoUtils.getParameterArgValue(invocationDto, param, LocalTime.class), is(LocalTime.of(9, 54, 1)));
param++;
- assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullJodaLocalTime"));
- assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.JODA_LOCAL_TIME));
+ assertThat(InteractionDtoUtils.getParameterName(invocationDto, param), is("nullLocalTime"));
+ assertThat(InteractionDtoUtils.getParameterType(invocationDto, param), Matchers.is(ValueType.LOCAL_TIME));
assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(true));
param++;
diff --git a/api/schema/src/main/java/org/apache/isis/schema/timeadapters/XmlTimeUtil.java b/api/schema/src/main/java/org/apache/isis/schema/timeadapters/XmlTimeUtil.java
new file mode 100644
index 0000000..a097e2e
--- /dev/null
+++ b/api/schema/src/main/java/org/apache/isis/schema/timeadapters/XmlTimeUtil.java
@@ -0,0 +1,96 @@
+/*
+ * 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.schema.timeadapters;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.ZonedDateTime;
+
+import javax.xml.datatype.XMLGregorianCalendar;
+
+public class XmlTimeUtil {
+
+ // -- TO XML
+
+ public static XMLGregorianCalendar fromLocalDate(LocalDate localDate) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public static XMLGregorianCalendar fromLocalDateTime(LocalDateTime localDateTime) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public static XMLGregorianCalendar fromOffsetDateTime(OffsetDateTime offsetDateTime) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public static XMLGregorianCalendar fromLocalTime(LocalTime localTime) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public static XMLGregorianCalendar fromOffsetTime(OffsetTime offsetTime) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public static XMLGregorianCalendar fromZonedDateTime(ZonedDateTime zonedDateTime) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ // -- FROM XML
+
+ public static LocalDate toLocalDate(XMLGregorianCalendar cal) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public static LocalTime toLocalTime(XMLGregorianCalendar localTime) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public static LocalDateTime toLocalDateTime(XMLGregorianCalendar localDateTime) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public static OffsetDateTime toOffsetDateTime(XMLGregorianCalendar offsetDateTime) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public static OffsetTime toOffsetTime(XMLGregorianCalendar offsetTime) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public static ZonedDateTime toZonedDateTime(XMLGregorianCalendar zonedDateTime) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateUtil.java
deleted file mode 100644
index da56196..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateUtil.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * 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.core.metamodel.facets.value.datejdk8local;
-
-import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
-import java.util.List;
-import java.util.Locale;
-import java.util.StringTokenizer;
-
-import org.joda.time.format.DateTimeFormat;
-
-import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
-
-final class Jdk8LocalDateUtil {
-
- private Jdk8LocalDateUtil(){}
-
- // -- CONVERSION (LEGACY OF JODA TIME LIBRARY)
-
- static TimeParser parserOfStyle(String style) {
- return parserOf(DateTimeFormat.forStyle(style));
- }
-
- private static TimeParser parserOf(org.joda.time.format.DateTimeFormatter jodaFormatter) {
- return t->
- toJava8(jodaFormatter.withLocale(Locale.getDefault()).parseLocalDate(t));
- }
-
- private static LocalDate toJava8(org.joda.time.LocalDate x) {
- return LocalDate.of(x.getYear(), x.getMonthOfYear(), x.getDayOfMonth());
- }
-
- static TimeFormatter formatterOfStyle(String style) {
- return formatterOf(DateTimeFormat.forStyle(style));
- }
-
- private static TimeFormatter formatterOf(org.joda.time.format.DateTimeFormatter jodaFormatter) {
- return t->
- jodaFormatter.withLocale(Locale.getDefault()).print(toJoda(t));
- }
-
- private static org.joda.time.LocalDate toJoda(LocalDate x) {
- return new org.joda.time.LocalDate(x.getYear(), x.getMonthValue(), x.getDayOfMonth());
- }
-
- // -- PARSING AND FORMATING GENERALIZATION
-
- static TimeFormatter formatterOf(DateTimeFormatter formatter) {
- return t->
- formatter.withLocale(Locale.getDefault()).format(t);
- }
-
- static TimeParser parserOf(DateTimeFormatter formatter) {
- return text->
- LocalDate.parse(text, formatter.withLocale(Locale.getDefault()));
- }
-
- // //////////////////////////////////////
-
- static LocalDate parseDate(
- final String dateStr,
- List<TimeParser> parsers) {
- LocalDate parsedDate = _parseDate(dateStr, parsers);
- return parsedDate;
- }
-
- private static LocalDate _parseDate(String dateStr, Iterable<TimeParser> parsers) {
- for(TimeParser parser: parsers) {
- try {
- return parser.apply(dateStr);
- } catch (final IllegalArgumentException e) {
- // continue to next
- }
- }
- throw new TextEntryParseException("Not recognised as a date: " + dateStr);
- }
-
- // //////////////////////////////////////
-
- static LocalDate relativeDate(final LocalDate contextDate, final String str, final boolean add) {
- LocalDate relativeDate = contextDate;
- if (str.equals("")) {
- return contextDate;
- }
-
- try {
- final StringTokenizer st = new StringTokenizer(str.substring(1), " ");
- while (st.hasMoreTokens()) {
- final String token = st.nextToken();
- relativeDate = adjustDate(relativeDate, token, add);
- }
- return relativeDate;
- } catch (final Exception e) {
- return contextDate;
- }
- }
-
- private static LocalDate adjustDate(final LocalDate contextDate, String str, final boolean add) {
- int hours = 0;
- int minutes = 0;
- int days = 0;
- int months = 0;
- int years = 0;
-
- if (str.endsWith("H")) {
- str = str.substring(0, str.length() - 1);
- hours = Integer.valueOf(str).intValue();
- } else if (str.endsWith("M")) {
- str = str.substring(0, str.length() - 1);
- minutes = Integer.valueOf(str).intValue();
- } else if (str.endsWith("w")) {
- str = str.substring(0, str.length() - 1);
- days = 7 * Integer.valueOf(str).intValue();
- } else if (str.endsWith("y")) {
- str = str.substring(0, str.length() - 1);
- years = Integer.valueOf(str).intValue();
- } else if (str.endsWith("m")) {
- str = str.substring(0, str.length() - 1);
- months = Integer.valueOf(str).intValue();
- } else if (str.endsWith("d")) {
- str = str.substring(0, str.length() - 1);
- days = Integer.valueOf(str).intValue();
- } else {
- days = Integer.valueOf(str).intValue();
- }
-
- if (add) {
- return add(contextDate, years, months, days, hours, minutes);
- } else {
- return add(contextDate, -years, -months, -days, -hours, -minutes);
- }
- }
-
- private static LocalDate add(final LocalDate original, final int years, final int months, final int days, final int hours, final int minutes) {
- if(hours != 0 || minutes != 0) {
- throw new IllegalArgumentException("cannot add non-zero hours or minutes to a LocalDate");
- }
- return original.plusYears(years).plusMonths(months).plusDays(days);
- }
-
-
- // //////////////////////////////////////
-
- public static String titleString(final TimeFormatter formatter, final LocalDate date) {
- return date == null ? "" : formatter.apply(date);
- }
-
-
-
-
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueFacetUsingSemanticsProviderFactory.java
deleted file mode 100644
index 703436b..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueFacetUsingSemanticsProviderFactory.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.core.metamodel.facets.value.datejdk8local;
-
-import java.time.LocalDate;
-
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueFacetUsingSemanticsProviderFactory;
-
-public class Jdk8LocalDateValueFacetUsingSemanticsProviderFactory extends ValueFacetUsingSemanticsProviderFactory<LocalDate> {
-
- public Jdk8LocalDateValueFacetUsingSemanticsProviderFactory() {
- // as per inherited DateTimeValueSemanticsProvider#facetType
- super();
- }
-
- @Override
- public void process(final ProcessClassContext processClassContext) {
- final Class<?> type = processClassContext.getCls();
- final FacetHolder holder = processClassContext.getFacetHolder();
-
- if (type != LocalDate.class) {
- return;
- }
- addFacets(new Jdk8LocalDateValueSemanticsProvider(holder));
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueSemanticsProvider.java
deleted file mode 100644
index e44d865..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueSemanticsProvider.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * 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.core.metamodel.facets.value.datejdk8local;
-
-import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.isis.applib.adapters.EncoderDecoder;
-import org.apache.isis.applib.adapters.EncodingException;
-import org.apache.isis.core.commons.internal.collections._Lists;
-import org.apache.isis.core.commons.internal.collections._Maps;
-import org.apache.isis.core.config.IsisConfiguration.Value.FormatIdentifier;
-import org.apache.isis.core.metamodel.facets.value.datejodalocal.JodaLocalDateValueFacet;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-
-public class Jdk8LocalDateValueSemanticsProvider
-extends ValueSemanticsProviderAndFacetAbstract<LocalDate>
-implements Jdk8LocalDateValueFacet {
-
- public static final int MAX_LENGTH = 12;
- public static final int TYPICAL_LENGTH = MAX_LENGTH;
-
- /**
- * Introduced to allow BDD tests to provide a different format string "mid-flight".
- *
- * <p>
- * REVIEW: This seems only to have any effect if 'propertyType' is set to 'date'.
- *
- * @see #setTitlePatternOverride(String)
- * @deprecated - because 'propertyType' parameter is never used
- */
- @Deprecated
- public static void setFormat(final String propertyType, final String pattern) {
- setTitlePatternOverride(pattern);
- }
- /**
- * A replacement for {@link #setFormat(String, String)}.
- */
- public static void setTitlePatternOverride(final String pattern) {
- override_title_pattern.set(pattern);
- }
-
- /**
- * Keys represent the values which can be configured, and which are used for the rendering of dates.
- *
- */
- private static Map<String, TimeFormatter> named_title_formatters = _Maps.newHashMap();
- static {
- named_title_formatters.put("iso_encoding", Jdk8LocalDateUtil.formatterOf(DateTimeFormatter.ofPattern("yyyyMMdd")));
- named_title_formatters.put("iso", Jdk8LocalDateUtil.formatterOf(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
- named_title_formatters.put("long", Jdk8LocalDateUtil.formatterOfStyle("L-"));
- named_title_formatters.put("medium", Jdk8LocalDateUtil.formatterOfStyle("M-"));
- named_title_formatters.put("short", Jdk8LocalDateUtil.formatterOfStyle("S-"));
- }
-
- private final static ThreadLocal<String> override_title_pattern = new ThreadLocal<String>() {
- @Override
- protected String initialValue() {
- return null;
- }
- };
-
-
- private final static List<TimeParser> parse_formatters = _Lists.newArrayList();
- static {
- parse_formatters.add(Jdk8LocalDateUtil.parserOfStyle("L-"));
- parse_formatters.add(Jdk8LocalDateUtil.parserOfStyle("M-"));
- parse_formatters.add(Jdk8LocalDateUtil.parserOfStyle("S-"));
- parse_formatters.add(Jdk8LocalDateUtil.parserOf(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
- parse_formatters.add(Jdk8LocalDateUtil.parserOf(DateTimeFormatter.ofPattern("yyyyMMdd")));
- }
-
- public static Class<? extends Facet> type() {
- return JodaLocalDateValueFacet.class;
- }
-
-
- // no default
- private static final LocalDate DEFAULT_VALUE = null;
-
-
- private final DateTimeFormatter encodingFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
-
- private TimeFormatter titleStringFormatter;
- private String titleStringFormatNameOrPattern;
-
-
- // //////////////////////////////////////
- // constructor
- // //////////////////////////////////////
-
- /**
- * Required because implementation of {@link TimeParser} and
- * {@link EncoderDecoder}.
- */
- public Jdk8LocalDateValueSemanticsProvider() {
- this(null);
- }
-
- /**
- * Uses {@link #type()} as the facet type.
- */
- public Jdk8LocalDateValueSemanticsProvider(final FacetHolder holder) {
- super(type(), holder, LocalDate.class, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE);
-
- String configuredNameOrPattern = getConfiguration()
- .getValue().getFormatOrElse(FormatIdentifier.DATE, "medium");
- updateTitleStringFormatter(configuredNameOrPattern);
- }
-
-
- private void updateTitleStringFormatter(String titleStringFormatNameOrPattern) {
- titleStringFormatter = named_title_formatters.get(titleStringFormatNameOrPattern);
- if (titleStringFormatter == null) {
- titleStringFormatter = Jdk8LocalDateUtil.formatterOf(DateTimeFormatter.ofPattern(titleStringFormatNameOrPattern));
- }
- this.titleStringFormatNameOrPattern = titleStringFormatNameOrPattern;
- }
-
-
- // //////////////////////////////////////////////////////////////////
- // Parsing
- // //////////////////////////////////////////////////////////////////
-
- @Override
- protected LocalDate doParse(
- final String entry,
- final Object context) {
-
- updateTitleStringFormatterIfOverridden();
-
- LocalDate contextDate = (LocalDate) context;
-
- final String dateString = entry.trim().toUpperCase();
- if (dateString.startsWith("+") && contextDate != null) {
- return Jdk8LocalDateUtil.relativeDate(contextDate, dateString, true);
- } else if (dateString.startsWith("-") && contextDate != null) {
- return Jdk8LocalDateUtil.relativeDate(contextDate, dateString, false);
- } else {
- return parseDate(dateString, contextDate);
- }
- }
-
- private void updateTitleStringFormatterIfOverridden() {
- final String overridePattern = override_title_pattern.get();
- if (overridePattern == null ||
- titleStringFormatNameOrPattern.equals(overridePattern)) {
- return;
- }
-
- // (re)create format
- updateTitleStringFormatter(overridePattern);
- }
-
- private LocalDate parseDate(final String dateStr, final Object original) {
- return Jdk8LocalDateUtil.parseDate(dateStr, parse_formatters);
- }
-
-
- // ///////////////////////////////////////////////////////////////////////////
- // TitleProvider
- // ///////////////////////////////////////////////////////////////////////////
-
- @Override
- public String titleString(final Object value) {
- if (value == null) {
- return null;
- }
- final LocalDate date = (LocalDate) value;
- //DateTimeFormatter f = titleStringFormatter.withLocale(Locale.getDefault());
- return Jdk8LocalDateUtil.titleString(titleStringFormatter, date);
- }
-
- @Override
- public String titleStringWithMask(final Object value, final String usingMask) {
- final LocalDate date = (LocalDate) value;
- return Jdk8LocalDateUtil.titleString(Jdk8LocalDateUtil.formatterOf(DateTimeFormatter.ofPattern(usingMask)), date);
- }
-
-
- // //////////////////////////////////////////////////////////////////
- // EncoderDecoder
- // //////////////////////////////////////////////////////////////////
-
- @Override
- protected String doEncode(final Object object) {
- final LocalDate date = (LocalDate) object;
- return encode(date);
- }
-
- private synchronized String encode(final LocalDate date) {
- return encodingFormatter.format(date);
- }
-
- @Override
- protected LocalDate doRestore(final String data) {
- try {
- return parse(data);
- } catch (final IllegalArgumentException e) {
- throw new EncodingException(e);
- }
- }
-
- private synchronized LocalDate parse(final String data) {
- return LocalDate.parse(data, encodingFormatter);
- }
-
- // //////////////////////////////////////////////////////////////////
- // Jdk8LocalDateValueFacet
- // //////////////////////////////////////////////////////////////////
-
- @Override
- public final LocalDate dateValue(final ManagedObject object) {
- return (LocalDate) (object == null ? null : object.getPojo());
- }
-
- @Override
- public final ManagedObject createValue(final LocalDate date) {
- return getObjectManager().adapt(date);
- }
-
-
- // //////////////////////////////////////
-
- @Override
- public String toString() {
- return "Jdk8LocalDateValueSemanticsProvider: " + titleStringFormatter;
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/TimeFormatter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/TimeFormatter.java
deleted file mode 100644
index 0769108..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/TimeFormatter.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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.core.metamodel.facets.value.datejdk8local;
-
-import java.time.LocalDate;
-import java.util.function.Function;
-
-interface TimeFormatter extends Function<LocalDate, String> {
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/Jdk8LocalDateTimeUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/Jdk8LocalDateTimeUtil.java
deleted file mode 100644
index 2c088a1..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/Jdk8LocalDateTimeUtil.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * 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.core.metamodel.facets.value.datetimejdk8local;
-
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.util.Date;
-import java.util.List;
-import java.util.Locale;
-import java.util.StringTokenizer;
-
-import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
-
-final class Jdk8LocalDateTimeUtil {
-
- private Jdk8LocalDateTimeUtil(){}
-
- // -- CONVERSION (LEGACY OF JODA TIME LIBRARY)
-
- private final static ZoneId zId = ZoneId.systemDefault();
-
- static TimeParser parserOf(org.joda.time.format.DateTimeFormatter jodaFormatter) {
- return t->
- toJava8(jodaFormatter.withLocale(Locale.getDefault()).parseLocalDateTime(t));
- }
-
- private static LocalDateTime toJava8(org.joda.time.LocalDateTime x){
- if(x==null)
- return null;
- return toLocalDateTime(x.toDate().getTime());
- }
-
- private static LocalDateTime toLocalDateTime(long epochMilli) {
- return LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli),zId);
- }
-
- static TimeFormatter formatterOf(org.joda.time.format.DateTimeFormatter jodaFormatter) {
- return t->
- jodaFormatter.withLocale(Locale.getDefault()).print(toJoda(t));
-
- }
-
- private static org.joda.time.LocalDateTime toJoda(LocalDateTime x){
- if(x==null)
- return null;
- return org.joda.time.LocalDateTime.fromDateFields(new Date(toEpochMilli(x)));
- }
-
- private static long toEpochMilli(LocalDateTime localDateTime){
- return localDateTime.atZone(zId).toInstant().toEpochMilli();
- }
-
- // //////////////////////////////////////
-
- static LocalDateTime parseDate(
- final String dateStr,
- List<TimeParser> parseFormatters) {
- return parseDateTime(dateStr, parseFormatters);
- }
-
- private static LocalDateTime parseDateTime(String dateStr, Iterable<TimeParser> parsers) {
- for(TimeParser parser: parsers) {
- try {
- return parser.apply(dateStr);
- } catch (final IllegalArgumentException e) {
- // continue to next
- }
- }
- throw new TextEntryParseException("Not recognised as a date: " + dateStr);
- }
-
- // //////////////////////////////////////
-
-
- static LocalDateTime relativeDateTime(final LocalDateTime contextDate, final String str, final boolean add) {
- LocalDateTime relativeDate = contextDate;
- if (str.equals("")) {
- return contextDate;
- }
-
- try {
- final StringTokenizer st = new StringTokenizer(str.substring(1), " ");
- while (st.hasMoreTokens()) {
- final String token = st.nextToken();
- relativeDate = adjustDateTime(relativeDate, token, add);
- }
- return relativeDate;
- } catch (final Exception e) {
- return contextDate;
- }
- }
-
- private static LocalDateTime adjustDateTime(final LocalDateTime contextDateTime, String str, final boolean add) {
- int hours = 0;
- int minutes = 0;
- int days = 0;
- int months = 0;
- int years = 0;
-
- if (str.endsWith("H")) {
- str = str.substring(0, str.length() - 1);
- hours = Integer.valueOf(str).intValue();
- } else if (str.endsWith("M")) {
- str = str.substring(0, str.length() - 1);
- minutes = Integer.valueOf(str).intValue();
- } else if (str.endsWith("w")) {
- str = str.substring(0, str.length() - 1);
- days = 7 * Integer.valueOf(str).intValue();
- } else if (str.endsWith("y")) {
- str = str.substring(0, str.length() - 1);
- years = Integer.valueOf(str).intValue();
- } else if (str.endsWith("m")) {
- str = str.substring(0, str.length() - 1);
- months = Integer.valueOf(str).intValue();
- } else if (str.endsWith("d")) {
- str = str.substring(0, str.length() - 1);
- days = Integer.valueOf(str).intValue();
- } else {
- days = Integer.valueOf(str).intValue();
- }
-
- if (add) {
- return add(contextDateTime, years, months, days, hours, minutes);
- } else {
- return add(contextDateTime, -years, -months, -days, -hours, -minutes);
- }
- }
-
- private static LocalDateTime add(final LocalDateTime original, final int years, final int months, final int days, final int hours, final int minutes) {
- return original.plusYears(years).plusMonths(months).plusDays(days).plusHours(hours).plusMinutes(minutes);
- }
-
- // //////////////////////////////////////
-
- static String titleString(TimeFormatter titleFormatter, LocalDateTime dateTime) {
- return dateTime == null ? "" : titleFormatter.apply(dateTime);
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/Jdk8LocalDateTimeValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/Jdk8LocalDateTimeValueFacetUsingSemanticsProviderFactory.java
deleted file mode 100644
index ab3cedd..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/Jdk8LocalDateTimeValueFacetUsingSemanticsProviderFactory.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.core.metamodel.facets.value.datetimejdk8local;
-
-import java.time.LocalDateTime;
-
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueFacetUsingSemanticsProviderFactory;
-
-public class Jdk8LocalDateTimeValueFacetUsingSemanticsProviderFactory extends ValueFacetUsingSemanticsProviderFactory<LocalDateTime> {
-
- public Jdk8LocalDateTimeValueFacetUsingSemanticsProviderFactory() {
- // as per inherited DateTimeValueSemanticsProvider#facetType
- super();
- }
-
- @Override
- public void process(final ProcessClassContext processClassContext) {
- final Class<?> type = processClassContext.getCls();
- final FacetHolder holder = processClassContext.getFacetHolder();
-
- if (type != LocalDateTime.class) {
- return;
- }
- addFacets(new Jdk8LocalDateTimeValueSemanticsProvider(holder));
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/Jdk8LocalDateTimeValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/Jdk8LocalDateTimeValueSemanticsProvider.java
deleted file mode 100644
index 127b779..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/Jdk8LocalDateTimeValueSemanticsProvider.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * 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.core.metamodel.facets.value.datetimejdk8local;
-
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.List;
-import java.util.Map;
-
-import org.joda.time.format.DateTimeFormat;
-import org.joda.time.format.ISODateTimeFormat;
-
-import org.apache.isis.applib.adapters.EncoderDecoder;
-import org.apache.isis.applib.adapters.EncodingException;
-import org.apache.isis.core.commons.internal.collections._Lists;
-import org.apache.isis.core.commons.internal.collections._Maps;
-import org.apache.isis.core.config.IsisConfiguration.Value.FormatIdentifier;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-
-
-public class Jdk8LocalDateTimeValueSemanticsProvider extends ValueSemanticsProviderAndFacetAbstract<LocalDateTime> implements Jdk8LocalDateTimeValueFacet {
-
- public static final int MAX_LENGTH = 36;
- public static final int TYPICAL_LENGTH = 22;
-
- /**
- * Introduced to allow BDD tests to provide a different format string "mid-flight".
- *
- * <p>
- * REVIEW: This seems only to have any effect if 'propertyType' is set to 'date'.
- *
- * @see #setTitlePatternOverride(String)
- * @deprecated - because 'propertyType' parameter is never used
- */
- @Deprecated
- public static void setFormat(final String propertyType, final String pattern) {
- setTitlePatternOverride(pattern);
- }
- /**
- * A replacement for {@link #setFormat(String, String)}.
- */
- public static void setTitlePatternOverride(final String pattern) {
- OVERRIDE_TITLE_PATTERN.set(pattern);
- }
-
- /*
- * Key to indicate how LocalDateTime should be parsed/rendered.
- *
- * <p>
- * eg:
- * <pre>
- * isis.value.format.datetime=iso
- * </pre>
- *
- * <p>
- * A pre-determined list of values is available, specifically 'iso_encoding', 'iso' and 'medium' (see
- * {@link #NAMED_TITLE_FORMATTERS}). Alternatively, can also specify a mask, eg <tt>dd-MMM-yyyy</tt>.
- *
- * @see #NAMED_TITLE_FORMATTERS
- */
- //public final static String CFG_FORMAT_KEY = ConfigurationConstants.ROOT + "value.format.datetime";
-
-
- /**
- * Keys represent the values which can be configured, and which are used for the rendering of dates.
- *
- */
- private static Map<String, TimeFormatter> NAMED_TITLE_FORMATTERS = _Maps.newHashMap();
- static {
- NAMED_TITLE_FORMATTERS.put("iso_encoding", Jdk8LocalDateTimeUtil.formatterOf(ISODateTimeFormat.basicDateTime()));
- NAMED_TITLE_FORMATTERS.put("iso", Jdk8LocalDateTimeUtil.formatterOf(ISODateTimeFormat.basicDateTimeNoMillis()));
- NAMED_TITLE_FORMATTERS.put("long", Jdk8LocalDateTimeUtil.formatterOf(DateTimeFormat.forStyle("LL")));
- NAMED_TITLE_FORMATTERS.put("medium", Jdk8LocalDateTimeUtil.formatterOf(DateTimeFormat.forStyle("MM")));
- NAMED_TITLE_FORMATTERS.put("short", Jdk8LocalDateTimeUtil.formatterOf(DateTimeFormat.forStyle("SS")));
- }
-
- private final static ThreadLocal<String> OVERRIDE_TITLE_PATTERN = new ThreadLocal<String>() {
- @Override
- protected String initialValue() {
- return null;
- }
- };
-
-
- private final static List<TimeParser> PARSE_FORMATTERS = _Lists.newArrayList();
- static {
- PARSE_FORMATTERS.add(Jdk8LocalDateTimeUtil.parserOf(DateTimeFormat.forStyle("LL")));
- PARSE_FORMATTERS.add(Jdk8LocalDateTimeUtil.parserOf(DateTimeFormat.forStyle("MM")));
- PARSE_FORMATTERS.add(Jdk8LocalDateTimeUtil.parserOf(DateTimeFormat.forStyle("SS")));
- PARSE_FORMATTERS.add(Jdk8LocalDateTimeUtil.parserOf(ISODateTimeFormat.basicDateTimeNoMillis()));
- PARSE_FORMATTERS.add(Jdk8LocalDateTimeUtil.parserOf(ISODateTimeFormat.basicDateTime()));
- }
-
- public static Class<? extends Facet> type() {
- return Jdk8LocalDateTimeValueFacet.class;
- }
-
- // no default
- private static final LocalDateTime DEFAULT_VALUE = null;
-
- private final TimeParser encodingParser = Jdk8LocalDateTimeUtil.parserOf(ISODateTimeFormat.dateHourMinuteSecondMillis());
- private final TimeFormatter encodingFormatter = Jdk8LocalDateTimeUtil.formatterOf(ISODateTimeFormat.dateHourMinuteSecondMillis());
-
- private TimeFormatter titleStringFormatter;
- private String titleStringFormatNameOrPattern;
-
-
- // //////////////////////////////////////
- // constructor
- // //////////////////////////////////////
-
- /**
- * Required because implementation of {@link TimeParser} and
- * {@link EncoderDecoder}.
- */
- public Jdk8LocalDateTimeValueSemanticsProvider() {
- this(null);
- }
-
- /**
- * Uses {@link #type()} as the facet type.
- */
- public Jdk8LocalDateTimeValueSemanticsProvider(final FacetHolder holder) {
- super(type(), holder, LocalDateTime.class, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE);
-
- String configuredNameOrPattern = getConfiguration()
- .getValue().getFormatOrElse(FormatIdentifier.DATETIME, "medium");
- updateTitleStringFormatter(configuredNameOrPattern);
- }
-
-
- private void updateTitleStringFormatter(String titleStringFormatNameOrPattern) {
- titleStringFormatter = NAMED_TITLE_FORMATTERS.get(titleStringFormatNameOrPattern);
- if (titleStringFormatter == null) {
- titleStringFormatter =
- DateTimeFormatter.ofPattern(titleStringFormatNameOrPattern)::format;
- }
- this.titleStringFormatNameOrPattern = titleStringFormatNameOrPattern;
- }
-
-
- // //////////////////////////////////////////////////////////////////
- // Parsing
- // //////////////////////////////////////////////////////////////////
-
- @Override
- protected LocalDateTime doParse(
- final String entry,
- final Object context) {
-
- updateTitleStringFormatterIfOverridden();
-
- LocalDateTime contextDateTime = (LocalDateTime) context;
-
- final String dateString = entry.trim().toUpperCase();
- if (dateString.startsWith("+") && contextDateTime != null) {
- return Jdk8LocalDateTimeUtil.relativeDateTime(contextDateTime, dateString, true);
- } else if (dateString.startsWith("-") && contextDateTime != null) {
- return Jdk8LocalDateTimeUtil.relativeDateTime(contextDateTime, dateString, false);
- } else {
- return parseDateTime(dateString, contextDateTime);
- }
- }
-
- private void updateTitleStringFormatterIfOverridden() {
- final String overridePattern = OVERRIDE_TITLE_PATTERN.get();
- if (overridePattern == null ||
- titleStringFormatNameOrPattern.equals(overridePattern)) {
- return;
- }
-
- // (re)create format
- updateTitleStringFormatter(overridePattern);
- }
-
- private LocalDateTime parseDateTime(final String dateStr, final Object original) {
- return Jdk8LocalDateTimeUtil.parseDate(dateStr, PARSE_FORMATTERS);
- }
-
-
- // ///////////////////////////////////////////////////////////////////////////
- // TitleProvider
- // ///////////////////////////////////////////////////////////////////////////
-
- @Override
- public String titleString(final Object value) {
- if (value == null) {
- return null;
- }
- final LocalDateTime dateTime = (LocalDateTime) value;
- return Jdk8LocalDateTimeUtil.titleString(titleStringFormatter, dateTime);
- }
-
- @Override
- public String titleStringWithMask(final Object value, final String usingMask) {
- final LocalDateTime dateTime = (LocalDateTime) value;
- return Jdk8LocalDateTimeUtil.titleString(
- DateTimeFormatter.ofPattern(usingMask)::format,
- dateTime);
- }
-
-
- // //////////////////////////////////////////////////////////////////
- // EncoderDecoder
- // //////////////////////////////////////////////////////////////////
-
- @Override
- protected String doEncode(final Object object) {
- final LocalDateTime date = (LocalDateTime) object;
- return encode(date);
- }
-
- private synchronized String encode(final LocalDateTime date) {
- return encodingFormatter.apply(date);
- }
-
- @Override
- protected LocalDateTime doRestore(final String data) {
- try {
- return parse(data);
- } catch (final IllegalArgumentException e) {
- throw new EncodingException(e);
- }
- }
-
- private synchronized LocalDateTime parse(final String data) {
- return encodingParser.apply(data);
- }
-
- // //////////////////////////////////////////////////////////////////
- // Jdk8LocalDateValueFacet
- // //////////////////////////////////////////////////////////////////
-
- @Override
- public final LocalDateTime dateValue(final ManagedObject object) {
- return (LocalDateTime) (object == null ? null : object.getPojo());
- }
-
- @Override
- public final ManagedObject createValue(final LocalDateTime date) {
- return getObjectManager().adapt(date);
- }
-
-
- // //////////////////////////////////////
-
- @Override
- public String toString() {
- return "Jdk8LocalDateTimeValueSemanticsProvider: " + titleStringFormatter;
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/TimeFormatter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/TimeFormatter.java
deleted file mode 100644
index 4911dfc..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/TimeFormatter.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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.core.metamodel.facets.value.datetimejdk8local;
-
-import java.time.LocalDateTime;
-import java.util.function.Function;
-
-interface TimeFormatter extends Function<LocalDateTime, String> {
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/TimeParser.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/TimeParser.java
deleted file mode 100644
index 2417cfd..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/TimeParser.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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.core.metamodel.facets.value.datetimejdk8local;
-
-import java.time.LocalDateTime;
-import java.util.function.Function;
-
-interface TimeParser extends Function<String, LocalDateTime> {
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8offset/Jdk8OffsetDateTimeValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8offset/Jdk8OffsetDateTimeValueFacetUsingSemanticsProviderFactory.java
deleted file mode 100644
index ab0dfa9..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8offset/Jdk8OffsetDateTimeValueFacetUsingSemanticsProviderFactory.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.core.metamodel.facets.value.datetimejdk8offset;
-
-import java.time.OffsetDateTime;
-
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueFacetUsingSemanticsProviderFactory;
-
-public class Jdk8OffsetDateTimeValueFacetUsingSemanticsProviderFactory extends ValueFacetUsingSemanticsProviderFactory<OffsetDateTime> {
-
- public Jdk8OffsetDateTimeValueFacetUsingSemanticsProviderFactory() {
- // as per inherited DateTimeValueSemanticsProvider#facetType
- super();
- }
-
- @Override
- public void process(final ProcessClassContext processClassContext) {
- final Class<?> type = processClassContext.getCls();
- final FacetHolder holder = processClassContext.getFacetHolder();
-
- if (type != OffsetDateTime.class) {
- return;
- }
- addFacets(new Jdk8OffsetDateTimeValueSemanticsProvider(holder));
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8offset/Jdk8OffsetDateTimeValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8offset/Jdk8OffsetDateTimeValueSemanticsProvider.java
deleted file mode 100644
index 26d06b7..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8offset/Jdk8OffsetDateTimeValueSemanticsProvider.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * 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.core.metamodel.facets.value.datetimejdk8offset;
-
-import java.time.OffsetDateTime;
-import java.time.ZoneOffset;
-import java.time.format.DateTimeFormatter;
-import java.util.Date;
-
-import org.apache.isis.applib.adapters.EncoderDecoder;
-import org.apache.isis.applib.adapters.EncodingException;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.value.datetimejoda.JodaDateTimeValueSemanticsProviderAbstract;
-
-public class Jdk8OffsetDateTimeValueSemanticsProvider extends JodaDateTimeValueSemanticsProviderAbstract<OffsetDateTime> {
-
- // no default
- private static final OffsetDateTime DEFAULT_VALUE = null;
-
-
- /**
- * Required because implementation of {@link TimeParser} and
- * {@link EncoderDecoder}.
- */
- public Jdk8OffsetDateTimeValueSemanticsProvider() {
- this(null);
- }
-
- public Jdk8OffsetDateTimeValueSemanticsProvider(final FacetHolder holder) {
- super(holder, OffsetDateTime.class, DEFAULT_VALUE);
- }
-
- @Override
- protected OffsetDateTime add(final OffsetDateTime original, final int years, final int months, final int days, final int hours, final int minutes) {
- if(hours != 0 || minutes != 0) {
- throw new IllegalArgumentException("cannot add non-zero hours or minutes to a DateTime");
- }
- return original.plusYears(years).plusMonths(months).plusDays(days);
- }
-
- @Override
- protected OffsetDateTime now() {
- return OffsetDateTime.now();
- }
-
- @Override
- protected Date dateValue(final Object value) {
- long epochMilli = ((OffsetDateTime) value).toInstant().toEpochMilli();
- return new Date(epochMilli);
- }
-
- @Override
- protected OffsetDateTime setDate(final Date date) {
- return OffsetDateTime.ofInstant(date.toInstant(), ZoneOffset.UTC);
- }
-
- // //////////////////////////////////////////////////////////////////
- // EncoderDecoder
- // //////////////////////////////////////////////////////////////////
-
- private final DateTimeFormatter encodingFormatter = DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmss.SSSZ");
-
- @Override
- protected String doEncode(final Object object) {
- final OffsetDateTime date = (OffsetDateTime) object;
- return encode(date);
- }
-
- private synchronized String encode(final OffsetDateTime date) {
- return encodingFormatter.format(date);
- }
-
- @Override
- protected OffsetDateTime doRestore(final String data) {
- try {
- return parse(data);
- } catch (final IllegalArgumentException e) {
- throw new EncodingException(e);
- }
- }
-
- private synchronized OffsetDateTime parse(final String data) {
- return OffsetDateTime.parse(data, encodingFormatter);
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8offset/Jdk8OffsetDateTimeValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8offset/Jdk8OffsetDateTimeValueSemanticsProviderAbstract.java
deleted file mode 100644
index 93111e0..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8offset/Jdk8OffsetDateTimeValueSemanticsProviderAbstract.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * 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.core.metamodel.facets.value.datetimejdk8offset;
-
-import java.text.DateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.isis.core.commons.internal.collections._Maps;
-import org.apache.isis.core.config.IsisConfiguration.Value.FormatIdentifier;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.value.ValueSemanticsProviderAbstractTemporal;
-
-public abstract class Jdk8OffsetDateTimeValueSemanticsProviderAbstract<T> extends ValueSemanticsProviderAbstractTemporal<T> {
-
- private static final Map<String, DateFormat> FORMATS = _Maps.newHashMap();
-
- static {
- FORMATS.put(ISO_ENCODING_FORMAT, createDateEncodingFormat("yyyyMMdd"));
- FORMATS.put("iso", createDateFormat("yyyy-MM-dd"));
- FORMATS.put("medium", DateFormat.getDateInstance(DateFormat.MEDIUM));
- }
-
- public Jdk8OffsetDateTimeValueSemanticsProviderAbstract(final FacetHolder holder, final Class<T> adaptedClass, final T defaultValue) {
- super(FormatIdentifier.DATE, holder, adaptedClass, 12, Immutability.IMMUTABLE, EqualByContent.HONOURED, defaultValue);
-
- String formatRequired = getConfiguration()
- .getValue().getFormatOrElse(FormatIdentifier.DATE, "medium");
-
- if (formatRequired == null) {
- format = formats().get(defaultFormat());
- } else {
- setMask(formatRequired);
- }
- }
-
-
- // //////////////////////////////////////////////////////////////////
- // temporal-specific stuff
- // //////////////////////////////////////////////////////////////////
-
- @Override
- protected void clearFields(final Calendar cal) {
- cal.set(Calendar.HOUR, 0);
- cal.set(Calendar.HOUR_OF_DAY, 0);
- cal.set(Calendar.MINUTE, 0);
- cal.set(Calendar.SECOND, 0);
- cal.set(Calendar.AM_PM, 0);
- cal.set(Calendar.MILLISECOND, 0);
- }
-
- @Override
- protected String defaultFormat() {
- return "medium";
- }
-
- @Override
- protected boolean ignoreTimeZone() {
- return true;
- }
-
- @Override
- protected Map<String, DateFormat> formats() {
- return FORMATS;
- }
-
- @Override
- public String toString() {
- return "DateValueSemanticsProvider: " + format;
- }
-
- @Override
- protected DateFormat format() {
- final Locale locale = Locale.getDefault();
-
- final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
- dateFormat.setTimeZone(UTC_TIME_ZONE);
- return dateFormat;
- }
-
- @Override
- protected List<DateFormat> formatsToTry() {
-
- final Locale locale = Locale.getDefault();
-
- List<DateFormat> formats = new ArrayList<>();
-
- formats.add(DateFormat.getDateInstance(DateFormat.LONG, locale));
- formats.add(DateFormat.getDateInstance(DateFormat.MEDIUM, locale));
- formats.add(DateFormat.getDateInstance(DateFormat.SHORT, locale));
- formats.add(createDateFormat("yyyy-MM-dd"));
- formats.add(createDateFormat("yyyyMMdd"));
-
- for (DateFormat format : formats) {
- format.setTimeZone(UTC_TIME_ZONE);
- }
-
- return formats;
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalAdjust.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalAdjust.java
new file mode 100644
index 0000000..f03b100
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalAdjust.java
@@ -0,0 +1,108 @@
+package org.apache.isis.core.metamodel.facets.value.temporal;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.ZonedDateTime;
+
+import org.apache.isis.core.commons.internal.exceptions._Exceptions;
+
+import lombok.Value;
+
+@Value(staticConstructor = "of")
+public class TemporalAdjust {
+
+ private int years;
+ private int months;
+ private int days;
+ private int hours;
+ private int minutes;
+
+ public static TemporalAdjust parse(String str) {
+ int hours = 0;
+ int minutes = 0;
+ int days = 0;
+ int months = 0;
+ int years = 0;
+
+ if (str.endsWith("H")) {
+ str = str.substring(0, str.length() - 1);
+ hours = Integer.valueOf(str).intValue();
+ } else if (str.endsWith("M")) {
+ str = str.substring(0, str.length() - 1);
+ minutes = Integer.valueOf(str).intValue();
+ } else if (str.endsWith("w")) {
+ str = str.substring(0, str.length() - 1);
+ days = 7 * Integer.valueOf(str).intValue();
+ } else if (str.endsWith("y")) {
+ str = str.substring(0, str.length() - 1);
+ years = Integer.valueOf(str).intValue();
+ } else if (str.endsWith("m")) {
+ str = str.substring(0, str.length() - 1);
+ months = Integer.valueOf(str).intValue();
+ } else if (str.endsWith("d")) {
+ str = str.substring(0, str.length() - 1);
+ days = Integer.valueOf(str).intValue();
+ } else {
+ days = Integer.valueOf(str).intValue();
+ }
+
+ return TemporalAdjust.of(years, months, days, hours, minutes);
+ }
+
+ public TemporalAdjust sign(int sign) {
+ if(sign==1) {
+ return this;
+ }
+ if(sign==-1) {
+ return of(-this.years, -this.months, -this.days, -this.hours, -this.minutes);
+ }
+ throw _Exceptions.unsupportedOperation();
+ }
+
+
+ public LocalDate adjustLocalDate(final LocalDate temporal) {
+ if(hours != 0 || minutes != 0) {
+ throw _Exceptions.illegalState("cannot add non-zero hours or minutes to a %s",
+ temporal.getClass().getName());
+ }
+ return temporal.plusYears(years).plusMonths(months).plusDays(days);
+ }
+
+ public LocalTime adjustLocalTime(final LocalTime temporal) {
+ if(years != 0 || months != 0 || days != 0) {
+ throw _Exceptions.illegalState("cannot add non-zero years, months or days to a %s",
+ temporal.getClass().getName());
+ }
+ return temporal.plusHours(hours).plusMinutes(minutes);
+ }
+
+ public OffsetTime adjustOffsetTime(final OffsetTime temporal) {
+ if(years != 0 || months != 0 || days != 0) {
+ throw _Exceptions.illegalState("cannot add non-zero years, months or days to a %s",
+ temporal.getClass().getName());
+ }
+ return temporal.plusHours(hours).plusMinutes(minutes);
+ }
+
+ public LocalDateTime adjustLocalDateTime(final LocalDateTime temporal) {
+ return temporal.plusYears(years).plusMonths(months).plusDays(days)
+ .plusHours(hours).plusMinutes(minutes);
+ }
+
+ public OffsetDateTime adjustOffsetDateTime(final OffsetDateTime temporal) {
+ return temporal.plusYears(years).plusMonths(months).plusDays(days)
+ .plusHours(hours).plusMinutes(minutes);
+ }
+
+ public ZonedDateTime adjustZonedDateTime(final ZonedDateTime temporal) {
+ return temporal.plusYears(years).plusMonths(months).plusDays(days)
+ .plusHours(hours).plusMinutes(minutes);
+ }
+
+
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalAdjustUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalAdjustUtil.java
new file mode 100644
index 0000000..9b114f3
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalAdjustUtil.java
@@ -0,0 +1,61 @@
+package org.apache.isis.core.metamodel.facets.value.temporal;
+
+import java.time.temporal.Temporal;
+import java.util.StringTokenizer;
+import java.util.function.BiFunction;
+
+import lombok.val;
+import lombok.experimental.UtilityClass;
+
+@UtilityClass
+final class TemporalAdjustUtil {
+
+ static <T extends Temporal> T parseAdjustment(
+ final BiFunction<TemporalAdjust, T, T> adjuster,
+ final T contextTemporal,
+ final String temporalString) {
+
+ if (temporalString.startsWith("+")) {
+ return TemporalAdjustUtil.relativeTemporal(adjuster, contextTemporal, temporalString, 1);
+ }
+ if (temporalString.startsWith("-")) {
+ return TemporalAdjustUtil.relativeTemporal(adjuster, contextTemporal, temporalString, -1);
+ }
+ return null;
+ }
+
+ private static <T extends Temporal> T relativeTemporal(
+ final BiFunction<TemporalAdjust, T, T> adjuster,
+ final T contextTemporal,
+ final String str,
+ final int sign) {
+
+ T relativeDate = contextTemporal;
+ if (str.equals("")) {
+ return contextTemporal;
+ }
+
+ try {
+ final StringTokenizer st = new StringTokenizer(str.substring(1), " ");
+ while (st.hasMoreTokens()) {
+ final String token = st.nextToken();
+ relativeDate = adjustTemporal(adjuster, relativeDate, token, sign);
+ }
+ return relativeDate;
+ } catch (final Exception e) {
+ return contextTemporal;
+ }
+ }
+
+ private static <T extends Temporal> T adjustTemporal(
+ final BiFunction<TemporalAdjust, T, T> adjuster,
+ final T contextDate,
+ final String str,
+ final int sign) {
+
+ val temporalAdjust = TemporalAdjust.parse(str).sign(sign);
+ return adjuster.apply(temporalAdjust, contextDate);
+ }
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalValueFacet.java
similarity index 61%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueFacet.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalValueFacet.java
index f67c452..6e9cec9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalValueFacet.java
@@ -16,18 +16,31 @@
* specific language governing permissions and limitations
* under the License.
*/
+package org.apache.isis.core.metamodel.facets.value.temporal;
-package org.apache.isis.core.metamodel.facets.value.datejdk8local;
-
-import java.time.LocalDate;
+import java.time.temporal.Temporal;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.spec.ManagedObject;
-public interface Jdk8LocalDateValueFacet extends Facet {
-
- LocalDate dateValue(ManagedObject object);
+/**
+ * Common base for {@link java.time.temporal.Temporal} types.
+ *
+ * @since 2.0
+ *
+ * @param <T> implementing {@link java.time.temporal.Temporal} type
+ */
+public interface TemporalValueFacet<T extends Temporal> extends Facet {
- ManagedObject createValue(LocalDate date);
+ T temporalValue(ManagedObject object);
+ ManagedObject createValue(T temporal);
+
+// TemporalCategory getTemporalCategory();
+//
+// static enum TemporalCategory {
+// TIME_ONLY,
+// DATE_ONLY,
+// DATE_TIME
+// }
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalValueFacetUsingSemanticsProviderFactory.java
new file mode 100644
index 0000000..a47be49
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalValueFacetUsingSemanticsProviderFactory.java
@@ -0,0 +1,64 @@
+/*
+ * 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.core.metamodel.facets.value.temporal;
+
+import java.time.temporal.Temporal;
+import java.util.function.Function;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueFacetUsingSemanticsProviderFactory;
+import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
+
+import lombok.NonNull;
+import lombok.val;
+
+/**
+ * Common base for {@link java.time.temporal.Temporal} types.
+ *
+ * @since 2.0
+ *
+ * @param <T> implementing {@link java.time.temporal.Temporal} type
+ */
+public abstract class TemporalValueFacetUsingSemanticsProviderFactory<T extends Temporal>
+extends ValueFacetUsingSemanticsProviderFactory<T> {
+
+ @NonNull protected final Class<T> valueType;
+ @NonNull protected final Function<FacetHolder, ValueSemanticsProviderAndFacetAbstract<T>> facetFactory;
+
+ public TemporalValueFacetUsingSemanticsProviderFactory(Class<T> valueType,
+ Function<FacetHolder, ValueSemanticsProviderAndFacetAbstract<T>> facetFactory) {
+ super();
+ this.valueType = valueType;
+ this.facetFactory = facetFactory;
+ }
+
+ @Override
+ public final void process(final ProcessClassContext processClassContext) {
+ val type = processClassContext.getCls();
+ if (!valueType.isAssignableFrom(type)) {
+ return;
+ }
+ val facetHolder = processClassContext.getFacetHolder();
+ addFacets(facetFactory.apply(facetHolder));
+ }
+
+
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalValueSemanticsProviderAbstract.java
new file mode 100644
index 0000000..1ae7121
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/TemporalValueSemanticsProviderAbstract.java
@@ -0,0 +1,234 @@
+/*
+ * 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.core.metamodel.facets.value.temporal;
+
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.Temporal;
+import java.time.temporal.TemporalQuery;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Optional;
+import java.util.function.BiFunction;
+import java.util.function.Function;
+
+import javax.annotation.Nullable;
+
+import org.apache.isis.applib.adapters.EncodingException;
+import org.apache.isis.core.commons.collections.Can;
+import org.apache.isis.core.commons.internal.base._Casts;
+import org.apache.isis.core.commons.internal.collections._Maps;
+import org.apache.isis.core.commons.internal.exceptions._Exceptions;
+import org.apache.isis.core.config.IsisConfiguration.Value.FormatIdentifier;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
+import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
+
+import lombok.Getter;
+import lombok.NonNull;
+import lombok.Setter;
+import lombok.val;
+import lombok.extern.log4j.Log4j2;
+
+/**
+ * Common base for {@link java.time.temporal.Temporal} types.
+ *
+ * @since 2.0
+ *
+ * @param <T> implementing {@link java.time.temporal.Temporal} type
+ */
+@Log4j2
+public abstract class TemporalValueSemanticsProviderAbstract<T extends Temporal>
+extends ValueSemanticsProviderAndFacetAbstract<T>
+implements TemporalValueFacet<T> {
+
+ @Getter private DateTimeFormatter encodingFormatter;
+ @Getter @Setter private DateTimeFormatter titleFormatter;
+
+ /**
+ * Keys represent the values which can be configured,
+ * and which are used for the rendering of dates.
+ */
+ protected final Map<String, DateTimeFormatter> namedFormatters;
+ protected Can<Function<String, T>> parsers;
+
+ protected final TemporalQuery<T> query;
+ protected final BiFunction<TemporalAdjust, T, T> adjuster;
+
+ public TemporalValueSemanticsProviderAbstract(
+ Class<? extends Facet> adapterFacetType,
+ FacetHolder holder,
+ Class<T> valueType,
+ int typicalLength,
+ int maxLength,
+ TemporalQuery<T> query,
+ BiFunction<TemporalAdjust, T, T> adjuster) {
+
+ super(adapterFacetType, holder, valueType, typicalLength, maxLength,
+ Immutability.IMMUTABLE, EqualByContent.HONOURED, /*DEFAULT_VALUE*/ null);
+
+ this.query = query;
+ this.adjuster = adjuster;
+
+ namedFormatters = _Maps.newLinkedHashMap();
+ namedFormatters.put("internal_encoding", this.getEncodingFormatter());
+ updateParsers();
+ }
+
+ protected void setEncodingFormatter(DateTimeFormatter encodingFormatter) {
+ this.encodingFormatter = encodingFormatter;
+ }
+
+ protected void addNamedFormat(String name, String pattern) {
+ namedFormatters.put(name, DateTimeFormatter.ofPattern(pattern, Locale.getDefault()));
+ }
+
+ protected Optional<DateTimeFormatter> lookupNamedFormatter(String formatName) {
+ return Optional.ofNullable(namedFormatters.get(formatName));
+ }
+
+ protected DateTimeFormatter lookupNamedFormatterElseFail(String formatName) {
+ return lookupNamedFormatter(formatName)
+ .orElseThrow(()->_Exceptions.noSuchElement("unknown format name %s", formatName));
+ }
+
+ protected DateTimeFormatter formatterFromConfig(FormatIdentifier formatIdentifier, String namedFallback) {
+
+ val configuredNameOrPattern = getConfiguration()
+ .getValue()
+ .getFormatOrElse(formatIdentifier, namedFallback);
+
+ val formatter = lookupNamedFormatter(configuredNameOrPattern).orElse(null);
+ if(formatter!=null) {
+ return formatter;
+ }
+
+ try {
+ return DateTimeFormatter.ofPattern(configuredNameOrPattern, Locale.getDefault());
+ } catch (Exception e) {
+ log.warn(e);
+ }
+
+ return lookupNamedFormatterElseFail(namedFallback);
+
+ }
+
+
+ protected void updateParsers() {
+ parsers = Can.ofCollection(namedFormatters.values())
+ .map(formatter->{
+ return $->formatter.parse($, query);
+ });
+ }
+
+ // -- TEMPORAL VALUE FACET
+
+ @Override
+ public final T temporalValue(final ManagedObject adapter) {
+ return _Casts.uncheckedCast(ManagedObject.unwrapSingle(adapter));
+ }
+
+ @Override
+ public final ManagedObject createValue(final T temporal) {
+ return getObjectManager().adapt(temporal);
+ }
+
+ // -- ENCODER/DECODER
+
+ @Override
+ protected String doEncode(final Object object) {
+ final T temporal = _Casts.uncheckedCast(object);
+ return encodingFormatter.format(temporal);
+ }
+
+ @Override
+ protected T doRestore(final String data) {
+ try {
+ return encodingFormatter.parse(data, query);
+ } catch (final IllegalArgumentException e) {
+ throw new EncodingException(e);
+ }
+ }
+
+ // -- PARSING
+
+ @Override
+ protected T doParse(
+ final String entry,
+ final Object context) {
+
+ T contextTemporal = _Casts.uncheckedCast(context);
+
+ val temporalString = entry.trim().toUpperCase();
+ if(contextTemporal != null) {
+ val adjusted = TemporalAdjustUtil
+ .parseAdjustment(adjuster, contextTemporal, temporalString);
+ if(adjusted!=null) {
+ return adjusted;
+ }
+ }
+ return parse(temporalString, parsers);
+ }
+
+ private T parse(String dateStr, Iterable<Function<String, T>> parsers) {
+ for(val parser: parsers) {
+ try {
+ return parser.apply(dateStr);
+ } catch (final IllegalArgumentException e) {
+ // continue to next
+ }
+ }
+ val msg = String.format("Not recognised as a %s: %s",
+ super.getAdaptedClass().getName(),
+ dateStr);
+ throw new TextEntryParseException(msg);
+ }
+
+ // -- TITLE
+
+ @Override
+ public String titleString(final Object value) {
+ if (value == null) {
+ return null;
+ }
+ val temporal = _Casts.<T>uncheckedCast(value);
+ return titleString(titleFormatter, temporal);
+ }
+
+ @Override
+ public String titleStringWithMask(final Object value, final String usingMask) {
+ val temporal = _Casts.<T>uncheckedCast(value);
+ val formatter = DateTimeFormatter.ofPattern(usingMask, Locale.getDefault());
+ return titleString(formatter, temporal);
+ }
+
+ private String titleString(@NonNull DateTimeFormatter formatter, @Nullable T temporal) {
+ return temporal != null ? formatter.format(temporal) : "";
+ }
+
+ // --
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName()+ ": " + titleFormatter;
+ }
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/localdate/LocalDateValueFacetUsingSemanticsProviderFactory.java
similarity index 65%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueFacet.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/localdate/LocalDateValueFacetUsingSemanticsProviderFactory.java
index f67c452..a22118d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/localdate/LocalDateValueFacetUsingSemanticsProviderFactory.java
@@ -17,17 +17,17 @@
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.value.datejdk8local;
+package org.apache.isis.core.metamodel.facets.value.temporal.localdate;
import java.time.LocalDate;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalValueFacetUsingSemanticsProviderFactory;
-public interface Jdk8LocalDateValueFacet extends Facet {
+public class LocalDateValueFacetUsingSemanticsProviderFactory
+extends TemporalValueFacetUsingSemanticsProviderFactory<LocalDate> {
- LocalDate dateValue(ManagedObject object);
-
- ManagedObject createValue(LocalDate date);
+ public LocalDateValueFacetUsingSemanticsProviderFactory() {
+ super(LocalDate.class, LocalDateValueSemanticsProvider::new);
+ }
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/localdate/LocalDateValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/localdate/LocalDateValueSemanticsProvider.java
new file mode 100644
index 0000000..9af407f
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/localdate/LocalDateValueSemanticsProvider.java
@@ -0,0 +1,53 @@
+/*
+ * 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.core.metamodel.facets.value.temporal.localdate;
+
+import java.time.LocalDate;
+
+import org.apache.isis.core.config.IsisConfiguration.Value.FormatIdentifier;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalAdjust;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalValueFacet;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalValueSemanticsProviderAbstract;
+
+public class LocalDateValueSemanticsProvider
+extends TemporalValueSemanticsProviderAbstract<LocalDate> {
+
+ public static final int MAX_LENGTH = 12;
+ public static final int TYPICAL_LENGTH = MAX_LENGTH;
+
+ public LocalDateValueSemanticsProvider(final FacetHolder holder) {
+ super(TemporalValueFacet.class, holder, LocalDate.class, TYPICAL_LENGTH, MAX_LENGTH,
+ LocalDate::from,
+ TemporalAdjust::adjustLocalDate);
+
+ super.addNamedFormat("long", "L-");
+ super.addNamedFormat("medium", "M-");
+ super.addNamedFormat("short", "S-");
+ super.addNamedFormat("iso", "yyyy-MM-dd");
+ super.addNamedFormat("iso_encoding", "yyyy-MM-dd");
+ super.updateParsers();
+
+ setEncodingFormatter(lookupNamedFormatterElseFail("iso_encoding"));
+ setTitleFormatter(formatterFromConfig(FormatIdentifier.DATE, "medium"));
+ }
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/Jdk8LocalDateTimeValueFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/localdatetime/LocalDateTimeValueFacetUsingSemanticsProviderFactory.java
similarity index 64%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/Jdk8LocalDateTimeValueFacet.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/localdatetime/LocalDateTimeValueFacetUsingSemanticsProviderFactory.java
index 1a69d2f..04e0d71 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/Jdk8LocalDateTimeValueFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/localdatetime/LocalDateTimeValueFacetUsingSemanticsProviderFactory.java
@@ -17,17 +17,17 @@
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.value.datetimejdk8local;
+package org.apache.isis.core.metamodel.facets.value.temporal.localdatetime;
import java.time.LocalDateTime;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalValueFacetUsingSemanticsProviderFactory;
-public interface Jdk8LocalDateTimeValueFacet extends Facet {
+public class LocalDateTimeValueFacetUsingSemanticsProviderFactory
+extends TemporalValueFacetUsingSemanticsProviderFactory<LocalDateTime> {
- LocalDateTime dateValue(ManagedObject object);
-
- ManagedObject createValue(LocalDateTime date);
+ public LocalDateTimeValueFacetUsingSemanticsProviderFactory() {
+ super(LocalDateTime.class, LocalDateTimeValueSemanticsProvider::new);
+ }
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/localdatetime/LocalDateTimeValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/localdatetime/LocalDateTimeValueSemanticsProvider.java
new file mode 100644
index 0000000..42bc101
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/localdatetime/LocalDateTimeValueSemanticsProvider.java
@@ -0,0 +1,64 @@
+/*
+ * 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.core.metamodel.facets.value.temporal.localdatetime;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Locale;
+
+import org.apache.isis.core.config.IsisConfiguration.Value.FormatIdentifier;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalAdjust;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalValueFacet;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalValueSemanticsProviderAbstract;
+
+import lombok.val;
+
+
+public class LocalDateTimeValueSemanticsProvider
+extends TemporalValueSemanticsProviderAbstract<LocalDateTime> {
+
+ public static final int MAX_LENGTH = 36;
+ public static final int TYPICAL_LENGTH = 22;
+
+ public LocalDateTimeValueSemanticsProvider(final FacetHolder holder) {
+ super(TemporalValueFacet.class, holder, LocalDateTime.class, TYPICAL_LENGTH, MAX_LENGTH,
+ LocalDateTime::from,
+ TemporalAdjust::adjustLocalDateTime);
+
+ val dateHourMinuteSecondMillis = "yyyy-MM-dd'T'HH:mm:ss.SSS";
+ val basicDateTimeNoMillis = "yyyyMMdd'T'HHmmssZ";
+ val basicDateTime = "yyyyMMdd'T'HHmmss.SSSZ";
+
+ super.addNamedFormat("long", "LL");
+ super.addNamedFormat("medium", "MM");
+ super.addNamedFormat("short", "SS");
+ super.addNamedFormat("iso", basicDateTimeNoMillis);
+ super.addNamedFormat("iso_encoding", basicDateTime);
+
+ super.updateParsers();
+
+ setEncodingFormatter(
+ DateTimeFormatter.ofPattern(dateHourMinuteSecondMillis, Locale.getDefault()));
+ setTitleFormatter(formatterFromConfig(FormatIdentifier.DATETIME, "medium"));
+
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/TimeParser.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/localtime/LocalTimeValueFacetUsingSemanticsProviderFactory.java
similarity index 63%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/TimeParser.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/localtime/LocalTimeValueFacetUsingSemanticsProviderFactory.java
index b8d945a..94a8d9f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/TimeParser.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/localtime/LocalTimeValueFacetUsingSemanticsProviderFactory.java
@@ -17,11 +17,17 @@
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.value.datejdk8local;
+package org.apache.isis.core.metamodel.facets.value.temporal.localtime;
-import java.time.LocalDate;
-import java.util.function.Function;
+import java.time.LocalTime;
-interface TimeParser extends Function<String, LocalDate> {
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalValueFacetUsingSemanticsProviderFactory;
+
+public class LocalTimeValueFacetUsingSemanticsProviderFactory
+extends TemporalValueFacetUsingSemanticsProviderFactory<LocalTime> {
+
+ public LocalTimeValueFacetUsingSemanticsProviderFactory() {
+ super(LocalTime.class, LocalTimeValueSemanticsProvider::new);
+ }
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/localtime/LocalTimeValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/localtime/LocalTimeValueSemanticsProvider.java
new file mode 100644
index 0000000..1eee4c0
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/localtime/LocalTimeValueSemanticsProvider.java
@@ -0,0 +1,63 @@
+/*
+ * 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.core.metamodel.facets.value.temporal.localtime;
+
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Locale;
+
+import org.apache.isis.core.config.IsisConfiguration.Value.FormatIdentifier;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalAdjust;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalValueFacet;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalValueSemanticsProviderAbstract;
+
+import lombok.val;
+
+public class LocalTimeValueSemanticsProvider
+extends TemporalValueSemanticsProviderAbstract<LocalTime> {
+
+ public static final int MAX_LENGTH = 12;
+ public static final int TYPICAL_LENGTH = MAX_LENGTH;
+
+ public LocalTimeValueSemanticsProvider(final FacetHolder holder) {
+ super(TemporalValueFacet.class, holder, LocalTime.class, TYPICAL_LENGTH, MAX_LENGTH,
+ LocalTime::from,
+ TemporalAdjust::adjustLocalTime);
+
+ val hourMinuteSecondMillis = "HH:mm:ss.SSS";
+ val basicTimeNoMillis = "HHmmssZ";
+ val basicTime = "HHmmss.SSSZ";
+
+ super.addNamedFormat("long", "-L");
+ super.addNamedFormat("medium", "-M");
+ super.addNamedFormat("short", "-S");
+ super.addNamedFormat("iso", basicTimeNoMillis);
+ super.addNamedFormat("iso_encoding", basicTime);
+ super.updateParsers();
+
+ setEncodingFormatter(
+ DateTimeFormatter.ofPattern(hourMinuteSecondMillis, Locale.getDefault()));
+ setTitleFormatter(formatterFromConfig(FormatIdentifier.TIME, "medium"));
+
+ }
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8offset/Jdk8OffsetDateTimeValueFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/offsetdatetime/OffsetDateTimeValueFacetUsingSemanticsProviderFactory.java
similarity index 64%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8offset/Jdk8OffsetDateTimeValueFacet.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/offsetdatetime/OffsetDateTimeValueFacetUsingSemanticsProviderFactory.java
index 8c48349..5700867 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8offset/Jdk8OffsetDateTimeValueFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/offsetdatetime/OffsetDateTimeValueFacetUsingSemanticsProviderFactory.java
@@ -17,17 +17,17 @@
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.value.datetimejdk8offset;
+package org.apache.isis.core.metamodel.facets.value.temporal.offsetdatetime;
import java.time.OffsetDateTime;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalValueFacetUsingSemanticsProviderFactory;
-public interface Jdk8OffsetDateTimeValueFacet extends Facet {
+public class OffsetDateTimeValueFacetUsingSemanticsProviderFactory
+extends TemporalValueFacetUsingSemanticsProviderFactory<OffsetDateTime> {
- OffsetDateTime dateValue(ManagedObject object);
-
- ManagedObject createValue(OffsetDateTime date);
+ public OffsetDateTimeValueFacetUsingSemanticsProviderFactory() {
+ super(OffsetDateTime.class, OffsetDateTimeValueSemanticsProvider::new);
+ }
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/offsetdatetime/OffsetDateTimeValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/offsetdatetime/OffsetDateTimeValueSemanticsProvider.java
new file mode 100644
index 0000000..6b5bbdd
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/offsetdatetime/OffsetDateTimeValueSemanticsProvider.java
@@ -0,0 +1,65 @@
+/*
+ * 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.core.metamodel.facets.value.temporal.offsetdatetime;
+
+import java.time.OffsetDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Locale;
+
+import org.apache.isis.core.config.IsisConfiguration.Value.FormatIdentifier;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalAdjust;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalValueFacet;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalValueSemanticsProviderAbstract;
+
+import lombok.val;
+
+
+public class OffsetDateTimeValueSemanticsProvider
+extends TemporalValueSemanticsProviderAbstract<OffsetDateTime> {
+
+ public static final int MAX_LENGTH = 36;
+ public static final int TYPICAL_LENGTH = 22;
+
+ public OffsetDateTimeValueSemanticsProvider(final FacetHolder holder) {
+ super(TemporalValueFacet.class, holder, OffsetDateTime.class, TYPICAL_LENGTH, MAX_LENGTH,
+ OffsetDateTime::from,
+ TemporalAdjust::adjustOffsetDateTime);
+
+ val basicDateTimeNoMillis = "yyyyMMdd'T'HHmmssZ";
+ val basicDateTime = "yyyyMMdd'T'HHmmss.SSSZ";
+
+ super.addNamedFormat("long", "LL");
+ super.addNamedFormat("medium", "MM");
+ super.addNamedFormat("short", "SS");
+ super.addNamedFormat("iso", basicDateTimeNoMillis);
+ super.addNamedFormat("iso_encoding", basicDateTime);
+
+ super.updateParsers();
+
+ setEncodingFormatter(
+ DateTimeFormatter.ofPattern(basicDateTime, Locale.getDefault()));
+
+ setTitleFormatter(formatterFromConfig(FormatIdentifier.DATETIME, "medium"));
+
+
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/offsettime/OffsetTimeValueFacetUsingSemanticsProviderFactory.java
similarity index 63%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueFacet.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/offsettime/OffsetTimeValueFacetUsingSemanticsProviderFactory.java
index f67c452..76b77e3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/offsettime/OffsetTimeValueFacetUsingSemanticsProviderFactory.java
@@ -17,17 +17,17 @@
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.value.datejdk8local;
+package org.apache.isis.core.metamodel.facets.value.temporal.offsettime;
-import java.time.LocalDate;
+import java.time.OffsetTime;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalValueFacetUsingSemanticsProviderFactory;
-public interface Jdk8LocalDateValueFacet extends Facet {
+public class OffsetTimeValueFacetUsingSemanticsProviderFactory
+extends TemporalValueFacetUsingSemanticsProviderFactory<OffsetTime> {
- LocalDate dateValue(ManagedObject object);
-
- ManagedObject createValue(LocalDate date);
+ public OffsetTimeValueFacetUsingSemanticsProviderFactory() {
+ super(OffsetTime.class, OffsetTimeValueSemanticsProvider::new);
+ }
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/offsettime/OffsetTimeValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/offsettime/OffsetTimeValueSemanticsProvider.java
new file mode 100644
index 0000000..60bac06
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/offsettime/OffsetTimeValueSemanticsProvider.java
@@ -0,0 +1,60 @@
+/*
+ * 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.core.metamodel.facets.value.temporal.offsettime;
+
+import java.time.OffsetTime;
+
+import org.apache.isis.core.config.IsisConfiguration.Value.FormatIdentifier;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalAdjust;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalValueFacet;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalValueSemanticsProviderAbstract;
+
+import lombok.val;
+
+public class OffsetTimeValueSemanticsProvider
+extends TemporalValueSemanticsProviderAbstract<OffsetTime> {
+
+ public static final int MAX_LENGTH = 12;
+ public static final int TYPICAL_LENGTH = MAX_LENGTH;
+
+ public OffsetTimeValueSemanticsProvider(final FacetHolder holder) {
+ super(TemporalValueFacet.class, holder, OffsetTime.class, TYPICAL_LENGTH, MAX_LENGTH,
+ OffsetTime::from,
+ TemporalAdjust::adjustOffsetTime);
+
+ val basicTimeNoMillis = "HHmmssZ";
+ val basicTime = "HHmmss.SSSZ";
+
+ super.addNamedFormat("long", "-L");
+ super.addNamedFormat("medium", "-M");
+ super.addNamedFormat("short", "-S");
+ super.addNamedFormat("iso", basicTimeNoMillis);
+ super.addNamedFormat("iso_encoding", basicTime);
+ super.updateParsers();
+
+ setEncodingFormatter(lookupNamedFormatterElseFail("iso_encoding"));
+ setTitleFormatter(formatterFromConfig(FormatIdentifier.TIME, "medium"));
+ }
+
+
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/zoneddatetime/ZonedDateTimeValueFacetUsingSemanticsProviderFactory.java
similarity index 62%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueFacet.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/zoneddatetime/ZonedDateTimeValueFacetUsingSemanticsProviderFactory.java
index f67c452..f6520f7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/zoneddatetime/ZonedDateTimeValueFacetUsingSemanticsProviderFactory.java
@@ -17,17 +17,17 @@
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.value.datejdk8local;
+package org.apache.isis.core.metamodel.facets.value.temporal.zoneddatetime;
-import java.time.LocalDate;
+import java.time.ZonedDateTime;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalValueFacetUsingSemanticsProviderFactory;
-public interface Jdk8LocalDateValueFacet extends Facet {
+public class ZonedDateTimeValueFacetUsingSemanticsProviderFactory
+extends TemporalValueFacetUsingSemanticsProviderFactory<ZonedDateTime> {
- LocalDate dateValue(ManagedObject object);
-
- ManagedObject createValue(LocalDate date);
+ public ZonedDateTimeValueFacetUsingSemanticsProviderFactory() {
+ super(ZonedDateTime.class, ZonedDateTimeValueSemanticsProvider::new);
+ }
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/zoneddatetime/ZonedDateTimeValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/zoneddatetime/ZonedDateTimeValueSemanticsProvider.java
new file mode 100644
index 0000000..04dd12e
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/temporal/zoneddatetime/ZonedDateTimeValueSemanticsProvider.java
@@ -0,0 +1,61 @@
+/*
+ * 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.core.metamodel.facets.value.temporal.zoneddatetime;
+
+import java.time.ZonedDateTime;
+
+import org.apache.isis.core.config.IsisConfiguration.Value.FormatIdentifier;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalAdjust;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalValueFacet;
+import org.apache.isis.core.metamodel.facets.value.temporal.TemporalValueSemanticsProviderAbstract;
+
+import lombok.val;
+
+
+public class ZonedDateTimeValueSemanticsProvider
+extends TemporalValueSemanticsProviderAbstract<ZonedDateTime> {
+
+ public static final int MAX_LENGTH = 36;
+ public static final int TYPICAL_LENGTH = 22;
+
+ //TODO adjust formats and config options (just copied over from OffsetDateTime... )
+ public ZonedDateTimeValueSemanticsProvider(final FacetHolder holder) {
+ super(TemporalValueFacet.class, holder, ZonedDateTime.class, TYPICAL_LENGTH, MAX_LENGTH,
+ ZonedDateTime::from,
+ TemporalAdjust::adjustZonedDateTime);
+
+ val basicDateTimeNoMillis = "yyyyMMdd'T'HHmmssZ";
+ val basicDateTime = "yyyyMMdd'T'HHmmss.SSSZ";
+
+ super.addNamedFormat("long", "LL");
+ super.addNamedFormat("medium", "MM");
+ super.addNamedFormat("short", "SS");
+ super.addNamedFormat("iso", basicDateTimeNoMillis);
+ super.addNamedFormat("iso_encoding", basicDateTime);
+
+ super.updateParsers();
+
+ setEncodingFormatter(lookupNamedFormatterElseFail("iso_encoding"));
+ setTitleFormatter(formatterFromConfig(FormatIdentifier.TIME, "medium"));
+
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/time/TimeValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/time/TimeValueSemanticsProviderAbstract.java
index 6da2493..3fda3df 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/time/TimeValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/time/TimeValueSemanticsProviderAbstract.java
@@ -30,7 +30,8 @@ import org.apache.isis.core.config.IsisConfiguration.Value.FormatIdentifier;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.value.ValueSemanticsProviderAbstractTemporal;
-public abstract class TimeValueSemanticsProviderAbstract<T> extends ValueSemanticsProviderAbstractTemporal<T> {
+public abstract class TimeValueSemanticsProviderAbstract<T>
+extends ValueSemanticsProviderAbstractTemporal<T> {
private static final Object DEFAULT_VALUE = null; // no default
private static final int TYPICAL_LENGTH = 8;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava8.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava8.java
index d807f3b..6bc4609 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava8.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava8.java
@@ -23,6 +23,7 @@ import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.core.commons.internal.ioc.BeanSort;
import org.apache.isis.core.metamodel.authorization.standard.AuthorizationFacetFactory;
+import org.apache.isis.core.metamodel.facets.OrphanedSupportingMethodValidator;
import org.apache.isis.core.metamodel.facets.actions.action.ActionAnnotationFacetFactory;
import org.apache.isis.core.metamodel.facets.actions.action.ActionChoicesForCollectionParameterFacetFactory;
import org.apache.isis.core.metamodel.facets.actions.defaults.method.ActionDefaultsFacetViaMethodFactory;
@@ -32,7 +33,17 @@ import org.apache.isis.core.metamodel.facets.actions.notcontributed.derived.NotC
import org.apache.isis.core.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromMixinFacetFactory;
import org.apache.isis.core.metamodel.facets.actions.notinservicemenu.derived.NotInServiceMenuFacetDerivedFromDomainServiceFacetFactory;
import org.apache.isis.core.metamodel.facets.actions.validate.method.ActionValidationFacetViaMethodFactory;
+import org.apache.isis.core.metamodel.facets.all.i18n.TranslationFacetFactory;
+import org.apache.isis.core.metamodel.facets.collections.accessor.CollectionAccessorFacetViaAccessorFactory;
+import org.apache.isis.core.metamodel.facets.collections.clear.CollectionClearFacetFactory;
+import org.apache.isis.core.metamodel.facets.collections.collection.CollectionAnnotationFacetFactory;
+import org.apache.isis.core.metamodel.facets.collections.javautilcollection.CollectionFacetFactory;
+import org.apache.isis.core.metamodel.facets.collections.layout.CollectionLayoutFacetFactory;
+import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToRemoveFromAndValidateFacetFactory;
+import org.apache.isis.core.metamodel.facets.collections.parented.ParentedFacetSinceCollectionFactory;
+import org.apache.isis.core.metamodel.facets.collections.sortedby.annotation.SortedByFacetAnnotationFactory;
import org.apache.isis.core.metamodel.facets.fallback.FallbackFacetFactory;
+import org.apache.isis.core.metamodel.facets.jaxb.JaxbFacetFactory;
import org.apache.isis.core.metamodel.facets.members.cssclass.annotprop.CssClassFacetOnActionFromConfiguredRegexFactory;
import org.apache.isis.core.metamodel.facets.members.cssclassfa.annotprop.CssClassFaFacetOnMemberFactory;
import org.apache.isis.core.metamodel.facets.members.describedas.annotprop.DescribedAsFacetOnMemberFactory;
@@ -40,12 +51,38 @@ import org.apache.isis.core.metamodel.facets.members.disabled.method.DisableForC
import org.apache.isis.core.metamodel.facets.members.hidden.method.HideForContextFacetViaMethodFactory;
import org.apache.isis.core.metamodel.facets.members.order.annotprop.MemberOrderFacetFactory;
import org.apache.isis.core.metamodel.facets.object.ViewModelSemanticCheckingFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.bookmarkable.BookmarkPolicyFacetFallbackFactory;
+import org.apache.isis.core.metamodel.facets.object.callbacks.CreatedCallbackFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.callbacks.LoadCallbackFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.callbacks.PersistCallbackFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.callbacks.PersistCallbackViaSaveMethodFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.callbacks.RemoveCallbackFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.callbacks.UpdateCallbackFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.choices.enums.EnumFacetUsingValueFacetUsingSemanticsProviderFactory;
+import org.apache.isis.core.metamodel.facets.object.cssclass.method.CssClassFacetMethodFactory;
+import org.apache.isis.core.metamodel.facets.object.defaults.annotcfg.DefaultedFacetAnnotationElseConfigurationFactory;
+import org.apache.isis.core.metamodel.facets.object.disabled.method.DisabledObjectFacetViaMethodFactory;
+import org.apache.isis.core.metamodel.facets.object.domainobject.DomainObjectAnnotationFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.DomainObjectLayoutFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.domainservice.annotation.DomainServiceFacetAnnotationFactory;
import org.apache.isis.core.metamodel.facets.object.domainservicelayout.DomainServiceLayoutFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.facets.annotation.FacetsFacetAnnotationFactory;
import org.apache.isis.core.metamodel.facets.object.grid.GridFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.hidden.method.HiddenObjectFacetViaMethodFactory;
import org.apache.isis.core.metamodel.facets.object.icon.method.IconFacetMethodFactory;
+import org.apache.isis.core.metamodel.facets.object.ignore.annotation.RemoveAnnotatedMethodsFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.ignore.javalang.IteratorFilteringFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.ignore.javalang.RemoveMethodsFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.layout.LayoutFacetFactory;
import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacetForMixinAnnotationFactory;
+import org.apache.isis.core.metamodel.facets.object.navparent.annotation.NavigableParentAnnotationFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.objectspecid.classname.ObjectSpecIdFacetDerivedFromClassNameFactory;
+import org.apache.isis.core.metamodel.facets.object.objectvalidprops.impl.ObjectValidPropertiesFacetImplFactory;
+import org.apache.isis.core.metamodel.facets.object.recreatable.RecreatableObjectFacetFactory;
import org.apache.isis.core.metamodel.facets.object.title.annotation.TitleAnnotationFacetFactory;
import org.apache.isis.core.metamodel.facets.object.title.methods.TitleFacetViaMethodsFactory;
+import org.apache.isis.core.metamodel.facets.object.validating.validateobject.method.ValidateObjectFacetMethodFactory;
+import org.apache.isis.core.metamodel.facets.object.value.annotcfg.ValueFacetAnnotationOrConfigurationFactory;
import org.apache.isis.core.metamodel.facets.param.autocomplete.method.ActionParameterAutoCompleteFacetViaMethodFactory;
import org.apache.isis.core.metamodel.facets.param.bigdecimal.javaxvaldigits.BigDecimalFacetOnParameterFromJavaxValidationAnnotationFactory;
import org.apache.isis.core.metamodel.facets.param.choices.method.ActionChoicesFacetViaMethodFactory;
@@ -59,12 +96,14 @@ import org.apache.isis.core.metamodel.facets.param.name.ParameterNameFacetFactor
import org.apache.isis.core.metamodel.facets.param.parameter.ParameterAnnotationFacetFactory;
import org.apache.isis.core.metamodel.facets.param.validate.method.ActionParameterValidationFacetViaMethodFactory;
import org.apache.isis.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessorFactory;
+import org.apache.isis.core.metamodel.facets.properties.autocomplete.method.PropertyAutoCompleteFacetMethodFactory;
import org.apache.isis.core.metamodel.facets.properties.bigdecimal.javaxvaldigits.BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory;
import org.apache.isis.core.metamodel.facets.properties.choices.method.PropertyChoicesFacetViaMethodFactory;
import org.apache.isis.core.metamodel.facets.properties.defaults.method.PropertyDefaultFacetViaMethodFactory;
import org.apache.isis.core.metamodel.facets.properties.disabled.inferred.DisabledFacetOnPropertyInferredFactory;
import org.apache.isis.core.metamodel.facets.properties.mandatory.dflt.MandatoryFacetOnProperyDefaultFactory;
import org.apache.isis.core.metamodel.facets.properties.property.PropertyAnnotationFacetFactory;
+import org.apache.isis.core.metamodel.facets.properties.propertylayout.PropertyLayoutFacetFactory;
import org.apache.isis.core.metamodel.facets.properties.update.PropertyModifyFacetFactory;
import org.apache.isis.core.metamodel.facets.properties.update.PropertySetAndClearFacetFactory;
import org.apache.isis.core.metamodel.facets.properties.validating.dflt.PropertyValidateFacetDefaultFactory;
@@ -79,11 +118,8 @@ import org.apache.isis.core.metamodel.facets.value.bytes.ByteWrapperValueFacetUs
import org.apache.isis.core.metamodel.facets.value.chars.CharPrimitiveValueFacetUsingSemanticsProviderFactory;
import org.apache.isis.core.metamodel.facets.value.chars.CharWrapperValueFacetUsingSemanticsProviderFactory;
import org.apache.isis.core.metamodel.facets.value.clobs.ClobValueFacetUsingSemanticsProviderFactory;
-import org.apache.isis.core.metamodel.facets.value.datejdk8local.Jdk8LocalDateValueFacetUsingSemanticsProviderFactory;
import org.apache.isis.core.metamodel.facets.value.datejodalocal.JodaLocalDateValueFacetUsingSemanticsProviderFactory;
import org.apache.isis.core.metamodel.facets.value.datesql.JavaSqlDateValueFacetUsingSemanticsProviderFactory;
-import org.apache.isis.core.metamodel.facets.value.datetimejdk8local.Jdk8LocalDateTimeValueFacetUsingSemanticsProviderFactory;
-import org.apache.isis.core.metamodel.facets.value.datetimejdk8offset.Jdk8OffsetDateTimeValueFacetUsingSemanticsProviderFactory;
import org.apache.isis.core.metamodel.facets.value.datetimejoda.JodaDateTimeValueFacetUsingSemanticsProviderFactory;
import org.apache.isis.core.metamodel.facets.value.datetimejodalocal.JodaLocalDateTimeValueFacetUsingSemanticsProviderFactory;
import org.apache.isis.core.metamodel.facets.value.dateutil.JavaUtilDateValueFacetUsingSemanticsProviderFactory;
@@ -102,51 +138,18 @@ import org.apache.isis.core.metamodel.facets.value.password.PasswordValueFacetUs
import org.apache.isis.core.metamodel.facets.value.shortint.ShortPrimitiveValueFacetUsingSemanticsProviderFactory;
import org.apache.isis.core.metamodel.facets.value.shortint.ShortWrapperValueFacetUsingSemanticsProviderFactory;
import org.apache.isis.core.metamodel.facets.value.string.StringValueFacetUsingSemanticsProviderFactory;
+import org.apache.isis.core.metamodel.facets.value.temporal.localdate.LocalDateValueFacetUsingSemanticsProviderFactory;
+import org.apache.isis.core.metamodel.facets.value.temporal.localdatetime.LocalDateTimeValueFacetUsingSemanticsProviderFactory;
+import org.apache.isis.core.metamodel.facets.value.temporal.localtime.LocalTimeValueFacetUsingSemanticsProviderFactory;
+import org.apache.isis.core.metamodel.facets.value.temporal.offsetdatetime.OffsetDateTimeValueFacetUsingSemanticsProviderFactory;
+import org.apache.isis.core.metamodel.facets.value.temporal.offsettime.OffsetTimeValueFacetUsingSemanticsProviderFactory;
+import org.apache.isis.core.metamodel.facets.value.temporal.zoneddatetime.ZonedDateTimeValueFacetUsingSemanticsProviderFactory;
import org.apache.isis.core.metamodel.facets.value.timejodalocal.JodaLocalTimeValueFacetSimpleFactory;
import org.apache.isis.core.metamodel.facets.value.timesql.JavaSqlTimeValueFacetUsingSemanticsProviderFactory;
import org.apache.isis.core.metamodel.facets.value.timestampsql.JavaSqlTimeStampValueFacetUsingSemanticsProviderFactory;
import org.apache.isis.core.metamodel.facets.value.url.URLValueFacetUsingSemanticsProviderFactory;
import org.apache.isis.core.metamodel.facets.value.uuid.UUIDValueFacetUsingSemanticsProviderFactory;
import org.apache.isis.core.metamodel.postprocessors.param.DeriveFacetsPostProcessor;
-import org.apache.isis.core.metamodel.facets.OrphanedSupportingMethodValidator;
-import org.apache.isis.core.metamodel.facets.all.i18n.TranslationFacetFactory;
-import org.apache.isis.core.metamodel.facets.collections.accessor.CollectionAccessorFacetViaAccessorFactory;
-import org.apache.isis.core.metamodel.facets.collections.clear.CollectionClearFacetFactory;
-import org.apache.isis.core.metamodel.facets.collections.collection.CollectionAnnotationFacetFactory;
-import org.apache.isis.core.metamodel.facets.collections.javautilcollection.CollectionFacetFactory;
-import org.apache.isis.core.metamodel.facets.collections.layout.CollectionLayoutFacetFactory;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToRemoveFromAndValidateFacetFactory;
-import org.apache.isis.core.metamodel.facets.collections.parented.ParentedFacetSinceCollectionFactory;
-import org.apache.isis.core.metamodel.facets.collections.sortedby.annotation.SortedByFacetAnnotationFactory;
-import org.apache.isis.core.metamodel.facets.jaxb.JaxbFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.bookmarkable.BookmarkPolicyFacetFallbackFactory;
-import org.apache.isis.core.metamodel.facets.object.callbacks.CreatedCallbackFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.callbacks.LoadCallbackFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.callbacks.PersistCallbackFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.callbacks.PersistCallbackViaSaveMethodFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.callbacks.RemoveCallbackFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.callbacks.UpdateCallbackFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.choices.enums.EnumFacetUsingValueFacetUsingSemanticsProviderFactory;
-import org.apache.isis.core.metamodel.facets.object.cssclass.method.CssClassFacetMethodFactory;
-import org.apache.isis.core.metamodel.facets.object.defaults.annotcfg.DefaultedFacetAnnotationElseConfigurationFactory;
-import org.apache.isis.core.metamodel.facets.object.disabled.method.DisabledObjectFacetViaMethodFactory;
-import org.apache.isis.core.metamodel.facets.object.domainobject.DomainObjectAnnotationFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.DomainObjectLayoutFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.domainservice.annotation.DomainServiceFacetAnnotationFactory;
-import org.apache.isis.core.metamodel.facets.object.facets.annotation.FacetsFacetAnnotationFactory;
-import org.apache.isis.core.metamodel.facets.object.hidden.method.HiddenObjectFacetViaMethodFactory;
-import org.apache.isis.core.metamodel.facets.object.ignore.annotation.RemoveAnnotatedMethodsFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.ignore.javalang.IteratorFilteringFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.ignore.javalang.RemoveMethodsFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.layout.LayoutFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.navparent.annotation.NavigableParentAnnotationFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.objectspecid.classname.ObjectSpecIdFacetDerivedFromClassNameFactory;
-import org.apache.isis.core.metamodel.facets.object.objectvalidprops.impl.ObjectValidPropertiesFacetImplFactory;
-import org.apache.isis.core.metamodel.facets.object.recreatable.RecreatableObjectFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.validating.validateobject.method.ValidateObjectFacetMethodFactory;
-import org.apache.isis.core.metamodel.facets.object.value.annotcfg.ValueFacetAnnotationOrConfigurationFactory;
-import org.apache.isis.core.metamodel.facets.properties.autocomplete.method.PropertyAutoCompleteFacetMethodFactory;
-import org.apache.isis.core.metamodel.facets.properties.propertylayout.PropertyLayoutFacetFactory;
import org.apache.isis.core.metamodel.progmodel.ProgrammingModelAbstract;
import org.apache.isis.core.metamodel.services.title.TitlesAndTranslationsValidator;
import org.apache.isis.core.metamodel.spec.feature.Contributed;
@@ -334,9 +337,12 @@ public final class ProgrammingModelFacetsJava8 extends ProgrammingModelAbstract
addFactory(FacetProcessingOrder.G1_VALUE_TYPES, JodaLocalTimeValueFacetSimpleFactory.class);
// java 8 time values
- addFactory(FacetProcessingOrder.G1_VALUE_TYPES, Jdk8LocalDateValueFacetUsingSemanticsProviderFactory.class);
- addFactory(FacetProcessingOrder.G1_VALUE_TYPES, Jdk8OffsetDateTimeValueFacetUsingSemanticsProviderFactory.class);
- addFactory(FacetProcessingOrder.G1_VALUE_TYPES, Jdk8LocalDateTimeValueFacetUsingSemanticsProviderFactory.class);
+ addFactory(FacetProcessingOrder.G1_VALUE_TYPES, LocalTimeValueFacetUsingSemanticsProviderFactory.class);
+ addFactory(FacetProcessingOrder.G1_VALUE_TYPES, OffsetTimeValueFacetUsingSemanticsProviderFactory.class);
+ addFactory(FacetProcessingOrder.G1_VALUE_TYPES, LocalDateValueFacetUsingSemanticsProviderFactory.class);
+ addFactory(FacetProcessingOrder.G1_VALUE_TYPES, LocalDateTimeValueFacetUsingSemanticsProviderFactory.class);
+ addFactory(FacetProcessingOrder.G1_VALUE_TYPES, OffsetDateTimeValueFacetUsingSemanticsProviderFactory.class);
+ addFactory(FacetProcessingOrder.G1_VALUE_TYPES, ZonedDateTimeValueFacetUsingSemanticsProviderFactory.class);
addFactory(FacetProcessingOrder.Z0_BEFORE_FINALLY, AuthorizationFacetFactory.class);
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forClear.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forClear.java
index c17aff9..3dfc238 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forClear.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forClear.java
@@ -18,7 +18,8 @@
*/
package org.apache.isis.core.metamodel.facets;
-import org.joda.time.LocalDate;
+import java.time.LocalDate;
+
import org.junit.Test;
import static org.hamcrest.CoreMatchers.is;
@@ -43,7 +44,7 @@ public class DomainEventHelperTest_newPropertyDomainEvent_forClear {
SomeDomainObject sdo = new SomeDomainObject();
Identifier identifier = Identifier.propertyOrCollectionIdentifier(SomeDomainObject.class, "someDateProperty");
- LocalDate oldValue = new LocalDate(2013,4,1);
+ LocalDate oldValue = LocalDate.of(2013,4,1);
LocalDate newValue = null;
Utils.domainEventHelper();
@@ -61,7 +62,7 @@ public class DomainEventHelperTest_newPropertyDomainEvent_forClear {
SomeDomainObject sdo = new SomeDomainObject();
Identifier identifier = Identifier.propertyOrCollectionIdentifier(SomeDomainObject.class, "someDateProperty");
- LocalDate oldValue = new LocalDate(2013,4,1);
+ LocalDate oldValue = LocalDate.of(2013,4,1);
LocalDate newValue = null;
Utils.domainEventHelper();
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forModify.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forModify.java
index dcf4048..319edc6 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forModify.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/DomainEventHelperTest_newPropertyDomainEvent_forModify.java
@@ -18,7 +18,8 @@
*/
package org.apache.isis.core.metamodel.facets;
-import org.joda.time.LocalDate;
+import java.time.LocalDate;
+
import org.junit.Test;
import static org.hamcrest.CoreMatchers.is;
@@ -39,8 +40,8 @@ public class DomainEventHelperTest_newPropertyDomainEvent_forModify {
SomeDomainObject sdo = new SomeDomainObject();
Identifier identifier = Identifier.propertyOrCollectionIdentifier(SomeDomainObject.class, "someDateProperty");
- LocalDate oldValue = new LocalDate(2013,4,1);
- LocalDate newValue = new LocalDate(2013,5,2);
+ LocalDate oldValue = LocalDate.of(2013,4,1);
+ LocalDate newValue = LocalDate.of(2013,5,2);
Utils.domainEventHelper();
final PropertyDomainEvent<Object, Object> ev =
@@ -57,8 +58,8 @@ public class DomainEventHelperTest_newPropertyDomainEvent_forModify {
SomeDomainObject sdo = new SomeDomainObject();
Identifier identifier = Identifier.propertyOrCollectionIdentifier(SomeDomainObject.class, "someDateProperty");
- LocalDate oldValue = new LocalDate(2013,4,1);
- LocalDate newValue = new LocalDate(2013,5,2);
+ LocalDate oldValue = LocalDate.of(2013,4,1);
+ LocalDate newValue = LocalDate.of(2013,5,2);
Utils.domainEventHelper();
final PropertyDomainEvent<SomeDomainObject, LocalDate> ev =
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/i18n/po/PoWriter.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/i18n/po/PoWriter.java
index 9651285..36f5be9 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/i18n/po/PoWriter.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/i18n/po/PoWriter.java
@@ -18,11 +18,12 @@
*/
package org.apache.isis.core.runtimeservices.i18n.po;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Locale;
import java.util.SortedMap;
import java.util.SortedSet;
-import org.joda.time.LocalDateTime;
-
import org.apache.isis.applib.services.i18n.TranslationService;
import org.apache.isis.core.commons.internal.collections._Maps;
import org.apache.isis.core.commons.internal.collections._Sets;
@@ -80,11 +81,15 @@ class PoWriter extends PoAbstract {
log.info(buf.toString());
}
+ final static DateTimeFormatter timestampFormat =
+ DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss+Z", Locale.US);
+
/**
* As per <a href="http://pology.nedohodnik.net/doc/user/en_US/ch-poformat.html">section 2.6</a>.
*/
protected void header(final StringBuilder buf) {
- final String createdAt = LocalDateTime.now().toString("yyyy-MM-dd HH:mm:ss+Z");
+
+ final String createdAt = LocalDateTime.now().format(timestampFormat);
buf.append("#, fuzzy").append("\n");
buf.append("msgid \"\"").append("\n");
buf.append("msgstr \"\"").append("\n");
diff --git a/testing/unittestsupport/applib/src/main/java/org/apache/isis/testing/unittestsupport/applib/bean/FixtureDatumFactoriesForTime.java b/testing/unittestsupport/applib/src/main/java/org/apache/isis/testing/unittestsupport/applib/bean/FixtureDatumFactoriesForTime.java
new file mode 100644
index 0000000..b0f35a7
--- /dev/null
+++ b/testing/unittestsupport/applib/src/main/java/org/apache/isis/testing/unittestsupport/applib/bean/FixtureDatumFactoriesForTime.java
@@ -0,0 +1,76 @@
+/*
+ * 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.testing.unittestsupport.applib.bean;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.OffsetDateTime;
+import java.time.ZoneOffset;
+
+/**
+ *
+ * @since 2.0
+ *
+ */
+public class FixtureDatumFactoriesForTime {
+
+ public static PojoTester.FixtureDatumFactory<LocalTime> localTimes() {
+ return new PojoTester.FixtureDatumFactory<>(
+ LocalTime.class,
+ LocalTime.of(11, 15),
+ LocalTime.of(12, 20),
+ LocalTime.of(13, 30),
+ LocalTime.of(14, 45)
+ );
+ }
+
+ public static PojoTester.FixtureDatumFactory<LocalDate> localDates() {
+ return new PojoTester.FixtureDatumFactory<>(
+ LocalDate.class,
+ LocalDate.of(2012, 7, 19),
+ LocalDate.of(2012, 7, 20),
+ LocalDate.of(2012, 8, 19),
+ LocalDate.of(2013, 7, 19)
+ );
+ }
+
+ public static PojoTester.FixtureDatumFactory<LocalDateTime> localDateTimes() {
+ return new PojoTester.FixtureDatumFactory<>(
+ LocalDateTime.class,
+ LocalDateTime.of(2012, 7, 19, 11, 15),
+ LocalDateTime.of(2012, 7, 20, 12, 20),
+ LocalDateTime.of(2012, 8, 19, 13, 30),
+ LocalDateTime.of(2013, 7, 19, 14, 45)
+ );
+ }
+
+
+ public static PojoTester.FixtureDatumFactory<OffsetDateTime> offsetDateTimes() {
+ return new PojoTester.FixtureDatumFactory<>(
+ OffsetDateTime.class,
+ OffsetDateTime.of(2012, 7, 19, 11, 15, 0, 0, ZoneOffset.UTC),
+ OffsetDateTime.of(2012, 7, 20, 12, 20, 0, 0, ZoneOffset.UTC),
+ OffsetDateTime.of(2012, 8, 19, 13, 30, 0, 0, ZoneOffset.UTC),
+ OffsetDateTime.of(2013, 7, 19, 14, 45, 0, 0, ZoneOffset.UTC)
+ );
+ }
+
+
+}
diff --git a/testing/unittestsupport/applib/src/main/java/org/apache/isis/testing/unittestsupport/applib/dom/valuetypes/VT.java b/testing/unittestsupport/applib/src/main/java/org/apache/isis/testing/unittestsupport/applib/dom/valuetypes/VT.java
index a454635..66202d5 100644
--- a/testing/unittestsupport/applib/src/main/java/org/apache/isis/testing/unittestsupport/applib/dom/valuetypes/VT.java
+++ b/testing/unittestsupport/applib/src/main/java/org/apache/isis/testing/unittestsupport/applib/dom/valuetypes/VT.java
@@ -35,7 +35,7 @@ public final class VT {
// }
//
// public static LocalDate ld(int yyyy, int mm, int dd) {
-// return new LocalDate(yyyy,mm,dd);
+// return LocalDate.of(yyyy,mm,dd);
// }
//
// // //////////////////////////////////////