This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 0b9ba6b ISIS-2340: use temporal format providers lazily
0b9ba6b is described below
commit 0b9ba6ba57334ebc67c6d850be68e49f61fa45f0
Author: Andi Huber <[email protected]>
AuthorDate: Sun Aug 16 18:55:52 2020 +0200
ISIS-2340: use temporal format providers lazily
---
.../temporal/TemporalValueSemanticsProviderAbstract.java | 12 +++++++++++-
.../localdate/LocalDateValueSemanticsProvider.java | 16 ++++++----------
.../LocalDateTimeValueSemanticsProvider.java | 16 ++++++----------
.../localtime/LocalTimeValueSemanticsProvider.java | 14 ++++++--------
.../OffsetDateTimeValueSemanticsProvider.java | 14 ++++++--------
.../offsettime/OffsetTimeValueSemanticsProvider.java | 16 ++++++----------
.../ZonedDateTimeValueSemanticsProvider.java | 16 ++++++----------
7 files changed, 47 insertions(+), 57 deletions(-)
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
index 86d86a4..ff15494 100644
---
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
@@ -27,6 +27,7 @@ import java.util.Map;
import java.util.Optional;
import java.util.function.BiFunction;
import java.util.function.Function;
+import java.util.function.Supplier;
import java.util.stream.Stream;
import javax.annotation.Nullable;
@@ -139,7 +140,7 @@ implements TemporalValueFacet<T> {
try {
return Optional.of(DateTimeFormatter.ofPattern(pattern,
Locale.getDefault()));
} catch (Exception e) {
- log.warn(e);
+ log.warn("cannot parse pattern '{}'", pattern, e);
}
return Optional.empty();
}
@@ -151,6 +152,15 @@ implements TemporalValueFacet<T> {
});
}
+ protected Optional<DateTimeFormatter> formatterFirstOf(
+ final @NonNull Can<Supplier<Optional<DateTimeFormatter>>>
formatterProviders) {
+ return formatterProviders.stream()
+ .map(Supplier::get)
+ .filter(Optional::isPresent)
+ .map(Optional::get)
+ .findFirst();
+ }
+
// -- TEMPORAL VALUE FACET
@Override
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
index 47f72a1..2a6cc84 100644
---
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
@@ -22,9 +22,8 @@ package
org.apache.isis.core.metamodel.facets.value.temporal.localdate;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
-import java.util.Optional;
-import java.util.stream.Stream;
+import org.apache.isis.core.commons.collections.Can;
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;
@@ -55,14 +54,11 @@ extends TemporalValueSemanticsProviderAbstract<LocalDate> {
val configuredNameOrPattern =
getConfiguration().getValueTypes().getJavaTime().getLocalDate().getFormat();
// walk through 3 methods of generating a formatter, first one to
return non empty wins
- val formatter = Stream.<Optional<DateTimeFormatter>>of(
-
lookupFormatStyle(configuredNameOrPattern).map(DateTimeFormatter::ofLocalizedDate),
- lookupNamedFormatter(configuredNameOrPattern),
- formatterFromPattern(configuredNameOrPattern)
- )
- .filter(Optional::isPresent)
- .map(Optional::get)
- .findFirst()
+ val formatter = formatterFirstOf(Can.of(
+
()->lookupFormatStyle(configuredNameOrPattern).map(DateTimeFormatter::ofLocalizedDate),
+ ()->lookupNamedFormatter(configuredNameOrPattern),
+ ()->formatterFromPattern(configuredNameOrPattern)
+ ))
.orElseGet(()->DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM));
// fallback
setTitleFormatter(formatter);
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
index f56b076..a1be4ad 100644
---
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
@@ -23,9 +23,8 @@ import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Locale;
-import java.util.Optional;
-import java.util.stream.Stream;
+import org.apache.isis.core.commons.collections.Can;
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;
@@ -64,14 +63,11 @@ extends
TemporalValueSemanticsProviderAbstract<LocalDateTime> {
// walk through 3 methods of generating a formatter, first one to
return non empty wins
- val formatter = Stream.<Optional<DateTimeFormatter>>of(
-
lookupFormatStyle(configuredNameOrPattern).map(DateTimeFormatter::ofLocalizedDateTime),
- lookupNamedFormatter(configuredNameOrPattern),
- formatterFromPattern(configuredNameOrPattern)
- )
- .filter(Optional::isPresent)
- .map(Optional::get)
- .findFirst()
+ val formatter = formatterFirstOf(Can.of(
+
()->lookupFormatStyle(configuredNameOrPattern).map(DateTimeFormatter::ofLocalizedDateTime),
+ ()->lookupNamedFormatter(configuredNameOrPattern),
+ ()->formatterFromPattern(configuredNameOrPattern)
+ ))
.orElseGet(()->DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM)); //
fallback
setTitleFormatter(formatter);
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
index 99b8ffc..3ba8b0f 100644
---
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
@@ -26,6 +26,7 @@ import java.util.Locale;
import java.util.Optional;
import java.util.stream.Stream;
+import org.apache.isis.core.commons.collections.Can;
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;
@@ -60,14 +61,11 @@ extends TemporalValueSemanticsProviderAbstract<LocalTime> {
val configuredNameOrPattern =
getConfiguration().getValueTypes().getJavaTime().getLocalTime().getFormat();
// walk through 3 methods of generating a formatter, first one to
return non empty wins
- val formatter = Stream.<Optional<DateTimeFormatter>>of(
-
lookupFormatStyle(configuredNameOrPattern).map(DateTimeFormatter::ofLocalizedTime),
- lookupNamedFormatter(configuredNameOrPattern),
- formatterFromPattern(configuredNameOrPattern)
- )
- .filter(Optional::isPresent)
- .map(Optional::get)
- .findFirst()
+ val formatter = formatterFirstOf(Can.of(
+
()->lookupFormatStyle(configuredNameOrPattern).map(DateTimeFormatter::ofLocalizedTime),
+ ()->lookupNamedFormatter(configuredNameOrPattern),
+ ()->formatterFromPattern(configuredNameOrPattern)
+ ))
.orElseGet(()->DateTimeFormatter.ofLocalizedTime(FormatStyle.MEDIUM));
// fallback
setTitleFormatter(formatter);
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
index 12c3cd1..2d8e2ae 100644
---
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
@@ -26,6 +26,7 @@ import java.util.Locale;
import java.util.Optional;
import java.util.stream.Stream;
+import org.apache.isis.core.commons.collections.Can;
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;
@@ -61,14 +62,11 @@ extends
TemporalValueSemanticsProviderAbstract<OffsetDateTime> {
val configuredNameOrPattern =
getConfiguration().getValueTypes().getJavaTime().getOffsetDateTime().getFormat();
// walk through 3 methods of generating a formatter, first one to
return non empty wins
- val formatter = Stream.<Optional<DateTimeFormatter>>of(
-
lookupFormatStyle(configuredNameOrPattern).map(DateTimeFormatter::ofLocalizedDateTime),
- lookupNamedFormatter(configuredNameOrPattern),
- formatterFromPattern(configuredNameOrPattern)
- )
- .filter(Optional::isPresent)
- .map(Optional::get)
- .findFirst()
+ val formatter = formatterFirstOf(Can.of(
+
()->lookupFormatStyle(configuredNameOrPattern).map(DateTimeFormatter::ofLocalizedDateTime),
+ ()->lookupNamedFormatter(configuredNameOrPattern),
+ ()->formatterFromPattern(configuredNameOrPattern)
+ ))
.orElseGet(()->DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM)); //
fallback
//TODO those FormatStyle based formatters potentially need additional
zone information
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
index 81b070d..590c118 100644
---
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
@@ -22,9 +22,8 @@ package
org.apache.isis.core.metamodel.facets.value.temporal.offsettime;
import java.time.OffsetTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
-import java.util.Optional;
-import java.util.stream.Stream;
+import org.apache.isis.core.commons.collections.Can;
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;
@@ -58,14 +57,11 @@ extends TemporalValueSemanticsProviderAbstract<OffsetTime> {
val configuredNameOrPattern =
getConfiguration().getValueTypes().getJavaTime().getOffsetTime().getFormat();
// walk through 3 methods of generating a formatter, first one to
return non empty wins
- val formatter = Stream.<Optional<DateTimeFormatter>>of(
-
lookupFormatStyle(configuredNameOrPattern).map(DateTimeFormatter::ofLocalizedTime),
- lookupNamedFormatter(configuredNameOrPattern),
- formatterFromPattern(configuredNameOrPattern)
- )
- .filter(Optional::isPresent)
- .map(Optional::get)
- .findFirst()
+ val formatter = formatterFirstOf(Can.of(
+
()->lookupFormatStyle(configuredNameOrPattern).map(DateTimeFormatter::ofLocalizedTime),
+ ()->lookupNamedFormatter(configuredNameOrPattern),
+ ()->formatterFromPattern(configuredNameOrPattern)
+ ))
.orElseGet(()->DateTimeFormatter.ofLocalizedTime(FormatStyle.MEDIUM));
// fallback
//TODO those FormatStyle based formatters potentially need additional
zone information
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
index 73517aa..8799b3c 100644
---
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
@@ -22,9 +22,8 @@ package
org.apache.isis.core.metamodel.facets.value.temporal.zoneddatetime;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
-import java.util.Optional;
-import java.util.stream.Stream;
+import org.apache.isis.core.commons.collections.Can;
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;
@@ -59,14 +58,11 @@ extends
TemporalValueSemanticsProviderAbstract<ZonedDateTime> {
val configuredNameOrPattern =
getConfiguration().getValueTypes().getJavaTime().getZonedDateTime().getFormat();
// walk through 3 methods of generating a formatter, first one to
return non empty wins
- val formatter = Stream.<Optional<DateTimeFormatter>>of(
-
lookupFormatStyle(configuredNameOrPattern).map(DateTimeFormatter::ofLocalizedDateTime),
- lookupNamedFormatter(configuredNameOrPattern),
- formatterFromPattern(configuredNameOrPattern)
- )
- .filter(Optional::isPresent)
- .map(Optional::get)
- .findFirst()
+ val formatter = formatterFirstOf(Can.of(
+
()->lookupFormatStyle(configuredNameOrPattern).map(DateTimeFormatter::ofLocalizedDateTime),
+ ()->lookupNamedFormatter(configuredNameOrPattern),
+ ()->formatterFromPattern(configuredNameOrPattern)
+ ))
.orElseGet(()->DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM)); //
fallback
//TODO those FormatStyle based formatters potentially need additional
zone information