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

Reply via email to