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 c878afd  ISIS-2340: fixes java.time predefined formats for LocalDate
c878afd is described below

commit c878afd4a4041cda5dd9566627026ac31ff47348
Author: Andi Huber <[email protected]>
AuthorDate: Sat Aug 15 14:29:43 2020 +0200

    ISIS-2340: fixes java.time predefined formats for LocalDate
    
    other 5 temporal types need fixes as well
---
 .../TemporalValueSemanticsProviderAbstract.java    | 11 ++++++++
 .../localdate/LocalDateValueSemanticsProvider.java | 33 +++++++++++++---------
 .../javafx/ui/components/UiComponentHandlerFx.java |  8 +++++-
 .../components/temporal/TemporalFieldFactory.java  | 11 ++++----
 .../TemporalConverterForLocalDateComponent.java    |  5 ++--
 5 files changed, 46 insertions(+), 22 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 6826285..dc0f40e 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
@@ -19,6 +19,7 @@
 package org.apache.isis.core.metamodel.facets.value.temporal;
 
 import java.time.format.DateTimeFormatter;
+import java.time.format.FormatStyle;
 import java.time.temporal.Temporal;
 import java.time.temporal.TemporalQuery;
 import java.util.Locale;
@@ -26,6 +27,7 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.function.BiFunction;
 import java.util.function.Function;
+import java.util.stream.Stream;
 
 import javax.annotation.Nullable;
 
@@ -114,6 +116,15 @@ implements TemporalValueFacet<T> {
         namedFormatters.put(name, DateTimeFormatter.ofPattern(pattern, 
Locale.getDefault()));
     }
     
+    protected Optional<FormatStyle> lookupFormatStyle(String styleName) {
+        if(styleName==null) {
+            return Optional.empty();
+        }
+        return Stream.of(FormatStyle.values())
+        .filter(style->style.name().toLowerCase().equals(styleName))
+        .findFirst();
+    }
+    
     protected Optional<DateTimeFormatter> lookupNamedFormatter(String 
formatName) {
         return Optional.ofNullable(namedFormatters.get(formatName));
     }
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 2d0bde0..c59d590 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,6 +22,8 @@ package 
org.apache.isis.core.metamodel.facets.value.temporal.localdate;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.Locale;
+import java.util.Optional;
+import java.util.stream.Stream;
 
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.value.temporal.TemporalAdjust;
@@ -45,9 +47,6 @@ extends TemporalValueSemanticsProviderAbstract<LocalDate> {
                 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();
@@ -56,23 +55,29 @@ extends TemporalValueSemanticsProviderAbstract<LocalDate> {
 
         val configuredNameOrPattern = 
getConfiguration().getValueTypes().getJavaTime().getLocalDate().getFormat();
 
-        val formatter = 
lookupNamedFormatter(configuredNameOrPattern).orElse(null);
-
-        setTitleFormatter(formatter != null ? formatter : 
formatterFrom(configuredNameOrPattern));
+        // walk through 4 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),
+                
lookupFormatStyle("medium").map(DateTimeFormatter::ofLocalizedDate)
+                )
+        .filter(Optional::isPresent)
+        .map(Optional::get)
+        .findFirst()
+        .get();
+        
+        setTitleFormatter(formatter);
+        
     }
 
-    private DateTimeFormatter formatterFrom(String configuredNameOrPattern) {
-        DateTimeFormatter result = null;
+    private Optional<DateTimeFormatter> formatterFromPattern(String pattern) {
         try {
-            result = DateTimeFormatter.ofPattern(configuredNameOrPattern, 
Locale.getDefault());
+            Optional.ofNullable(DateTimeFormatter.ofPattern(pattern, 
Locale.getDefault()));
         } catch (Exception e) {
             log.warn(e);
         }
-        if (result == null) {
-            result = lookupNamedFormatterElseFail("medium");
-        }
-        return result;
+        return Optional.empty();
     }
 
-
 }
diff --git 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/UiComponentHandlerFx.java
 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/UiComponentHandlerFx.java
index 4a15e1e..38e279c 100644
--- 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/UiComponentHandlerFx.java
+++ 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/UiComponentHandlerFx.java
@@ -28,7 +28,13 @@ import lombok.NonNull;
 public interface UiComponentHandlerFx 
 extends UiComponentFactory.Handler<Node> {
 
-    default <T> StringConverter<T> toStringConverter(
+    /**
+     * Converts given {@code bindingConverter} to {@link StringConverter} from 
JavaFX Universe 
+     * @param <T>
+     * @param bindingConverter
+     * @return
+     */
+    default <T> StringConverter<T> toJavaFxStringConverter(
             final @NonNull BindingConverter<T> bindingConverter) {
 
         return new StringConverter<T>() {
diff --git 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/temporal/TemporalFieldFactory.java
 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/temporal/TemporalFieldFactory.java
index cba3945..260ed55 100644
--- 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/temporal/TemporalFieldFactory.java
+++ 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/temporal/TemporalFieldFactory.java
@@ -51,13 +51,14 @@ public class TemporalFieldFactory implements 
UiComponentHandlerFx {
         val uiComponent = new DatePicker();
         val valueSpec = request.getFeatureTypeSpec();
         val converter = new TemporalConverterForLocalDateComponent(valueSpec);
+        val feature = request.getManagedFeature();
         
         //FIXME format error ?
-        //uiComponent.setConverter(toStringConverter(converter));
+        uiComponent.setConverter(toJavaFxStringConverter(converter));
         
-        if(request.getManagedFeature() instanceof ManagedParameter) {
+        if(feature instanceof ManagedParameter) {
 
-            val managedParameter = 
(ManagedParameter)request.getManagedFeature();
+            val managedParameter = (ManagedParameter)feature;
 
             BindingsFx.bindBidirectional(
                     uiComponent.valueProperty(),
@@ -66,9 +67,9 @@ public class TemporalFieldFactory implements 
UiComponentHandlerFx {
 
             //TODO bind parameter validation feedback
 
-        } else if(request.getManagedFeature() instanceof ManagedProperty) {
+        } else if(feature instanceof ManagedProperty) {
 
-            val managedProperty = (ManagedProperty)request.getManagedFeature();
+            val managedProperty = (ManagedProperty)feature;
 
             // readonly binding
             BindingsFx.bind(
diff --git 
a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/TemporalConverterForLocalDateComponent.java
 
b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/TemporalConverterForLocalDateComponent.java
index 6d8ff3e..d12623b 100644
--- 
a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/TemporalConverterForLocalDateComponent.java
+++ 
b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/TemporalConverterForLocalDateComponent.java
@@ -21,6 +21,7 @@ package org.apache.isis.viewer.common.model.binding;
 import java.time.LocalDate;
 
 import org.apache.isis.core.commons.collections.Can;
+import org.apache.isis.core.commons.internal.base._Casts;
 import org.apache.isis.core.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import 
org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
@@ -43,8 +44,8 @@ public class TemporalConverterForLocalDateComponent 
implements BindingConverter<
     public TemporalConverterForLocalDateComponent(final ObjectSpecification 
valueSpecification) {
         this.valueSpecification = valueSpecification;
 
-        this.valueFacet = (ValueSemanticsProviderAndFacetAbstract<LocalDate>) 
lookupFacetOneOf(getSupportedFacets())
-                .orElseThrow(()->_Exceptions.noSuchElement("missing 'temporal' 
value facet"));
+        this.valueFacet = 
_Casts.uncheckedCast(lookupFacetOneOf(getSupportedFacets())
+                .orElseThrow(()->_Exceptions.noSuchElement("missing 'temporal' 
value facet")));
     }
 
     @Override

Reply via email to