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 1800957  ISIS-2340: fx: prepare for temporal value format
1800957 is described below

commit 1800957f742d54347531df6856b52bc1df798fbb
Author: Andi Huber <[email protected]>
AuthorDate: Thu Aug 13 16:54:59 2020 +0200

    ISIS-2340: fx: prepare for temporal value format
---
 .../javafx/ui/components/UiComponentHandlerFx.java | 21 ++++++++++++++
 .../components/temporal/TemporalFieldFactory.java  | 13 ++++++---
 .../ui/components/text/TextFieldFactory.java       | 11 ++++++++
 .../common/model/binding/BindingConverter.java     |  6 ++++
 .../binding/NumberConverterForStringComponent.java | 10 +++++++
 ...=> TemporalConverterForLocalDateComponent.java} | 32 ++++++++++++++++++----
 6 files changed, 84 insertions(+), 9 deletions(-)

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 fd875bf..4a15e1e 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
@@ -18,11 +18,32 @@
  */
 package org.apache.isis.incubator.viewer.javafx.ui.components;
 
+import org.apache.isis.viewer.common.model.binding.BindingConverter;
 import org.apache.isis.viewer.common.model.components.UiComponentFactory;
 
 import javafx.scene.Node;
+import javafx.util.StringConverter;
+import lombok.NonNull;
 
 public interface UiComponentHandlerFx 
 extends UiComponentFactory.Handler<Node> {
 
+    default <T> StringConverter<T> toStringConverter(
+            final @NonNull BindingConverter<T> bindingConverter) {
+
+        return new StringConverter<T>() {
+
+            @Override
+            public String toString(T value) {
+                return bindingConverter.toString(value);
+            }
+
+            @Override
+            public T fromString(String stringifiedValue) {
+                return bindingConverter.fromString(stringifiedValue);
+            }
+            
+        };
+    }
+    
 }
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 2c68854..cba3945 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
@@ -27,7 +27,7 @@ import 
org.apache.isis.core.metamodel.interactions.managed.ManagedParameter;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedProperty;
 import org.apache.isis.incubator.viewer.javafx.model.binding.BindingsFx;
 import 
org.apache.isis.incubator.viewer.javafx.ui.components.UiComponentHandlerFx;
-import org.apache.isis.viewer.common.model.binding.TemporalConverter;
+import 
org.apache.isis.viewer.common.model.binding.TemporalConverterForLocalDateComponent;
 import 
org.apache.isis.viewer.common.model.components.UiComponentFactory.ComponentRequest;
 
 import javafx.scene.Node;
@@ -42,7 +42,7 @@ public class TemporalFieldFactory implements 
UiComponentHandlerFx {
 
     @Override
     public boolean isHandling(ComponentRequest request) {
-        return 
request.hasFeatureTypeFacetAnyOf(TemporalConverter.getSupportedFacets());
+        return 
request.hasFeatureTypeFacetAnyOf(TemporalConverterForLocalDateComponent.getSupportedFacets());
     }
 
     @Override
@@ -50,7 +50,10 @@ public class TemporalFieldFactory implements 
UiComponentHandlerFx {
 
         val uiComponent = new DatePicker();
         val valueSpec = request.getFeatureTypeSpec();
-        val converter = new TemporalConverter(valueSpec);
+        val converter = new TemporalConverterForLocalDateComponent(valueSpec);
+        
+        //FIXME format error ?
+        //uiComponent.setConverter(toStringConverter(converter));
         
         if(request.getManagedFeature() instanceof ManagedParameter) {
 
@@ -80,8 +83,10 @@ public class TemporalFieldFactory implements 
UiComponentHandlerFx {
         return uiComponent;
     }
 
-    // -- HELPER
 
 
+    // -- HELPER
+
+    
 
 }
diff --git 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/text/TextFieldFactory.java
 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/text/TextFieldFactory.java
index 7a57f5a..633096b 100644
--- 
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/text/TextFieldFactory.java
+++ 
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/text/TextFieldFactory.java
@@ -90,6 +90,17 @@ public class TextFieldFactory implements 
UiComponentHandlerFx {
 
         @Getter(onMethod_ = {@Override})
         private final ObjectSpecification valueSpecification;
+        
+        @Override
+        public String toString(String value) {
+            return value; // identity
+        }
+
+        @Override
+        public String fromString(String stringifiedValue) {
+            return stringifiedValue; // identity
+        }
+        
     }
 
 
diff --git 
a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/BindingConverter.java
 
b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/BindingConverter.java
index 5ce583f..5b4b237 100644
--- 
a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/BindingConverter.java
+++ 
b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/BindingConverter.java
@@ -53,6 +53,12 @@ public interface BindingConverter<T> {
         .filter(_NullSafe::isPresent)
         .findFirst();
     }
+
+    // -- STRING CONVERSION
+    
+    String toString(T value);
+
+    T fromString(String stringifiedValue);
     
 }
 
diff --git 
a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/NumberConverterForStringComponent.java
 
b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/NumberConverterForStringComponent.java
index a55a705..d827101 100644
--- 
a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/NumberConverterForStringComponent.java
+++ 
b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/NumberConverterForStringComponent.java
@@ -77,4 +77,14 @@ public final class NumberConverterForStringComponent 
implements BindingConverter
             ShortValueFacet.class,
             FloatingPointValueFacet.class);
 
+    @Override
+    public String toString(String value) {
+        return value; // identity
+    }
+
+    @Override
+    public String fromString(String stringifiedValue) {
+        return stringifiedValue; // identity
+    }
+
 }
\ No newline at end of file
diff --git 
a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/TemporalConverter.java
 
b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/TemporalConverterForLocalDateComponent.java
similarity index 67%
rename from 
viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/TemporalConverter.java
rename to 
viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/TemporalConverterForLocalDateComponent.java
index 64e1a96..6d8ff3e 100644
--- 
a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/TemporalConverter.java
+++ 
b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/TemporalConverterForLocalDateComponent.java
@@ -23,6 +23,7 @@ import java.time.LocalDate;
 import org.apache.isis.core.commons.collections.Can;
 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;
 import org.apache.isis.core.metamodel.facets.value.temporal.TemporalValueFacet;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
@@ -31,16 +32,18 @@ import 
org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import lombok.Getter;
 import lombok.val;
 
-public final class TemporalConverter implements BindingConverter<LocalDate> {
+public class TemporalConverterForLocalDateComponent implements 
BindingConverter<LocalDate> {
 
     @Getter(onMethod_ = {@Override})
     private final ObjectSpecification valueSpecification;
-    private final TemporalValueFacet<?> valueFacet; 
 
-    public TemporalConverter(final ObjectSpecification valueSpecification) {
+    @Getter
+    private final ValueSemanticsProviderAndFacetAbstract<LocalDate> 
valueFacet; 
+
+    public TemporalConverterForLocalDateComponent(final ObjectSpecification 
valueSpecification) {
         this.valueSpecification = valueSpecification;
 
-        this.valueFacet = (TemporalValueFacet<?>) 
lookupFacetOneOf(getSupportedFacets())
+        this.valueFacet = (ValueSemanticsProviderAndFacetAbstract<LocalDate>) 
lookupFacetOneOf(getSupportedFacets())
                 .orElseThrow(()->_Exceptions.noSuchElement("missing 'temporal' 
value facet"));
     }
 
@@ -54,10 +57,29 @@ public final class TemporalConverter implements 
BindingConverter<LocalDate> {
         val localDate = (LocalDate) ManagedObjects.UnwrapUtil.single(object);
         return localDate;
     }
-    
+
     // for performance reasons in order of likelihood (just guessing)
     @Getter
     private final static Can<Class<? extends Facet>> supportedFacets = Can.of(
             TemporalValueFacet.class);
 
+    @Override
+    public String toString(LocalDate value) {
+        return valueFacet.parseableTitleOf(value);
+    }
+
+    @Override
+    public LocalDate fromString(String stringifiedValue) {
+        val value = valueFacet.parseTextEntry(null, stringifiedValue);
+        if(value==null) {
+            return null;
+        }
+        if(value instanceof LocalDate) {
+            return (LocalDate) value;
+        }
+        // TODO might require additional cases
+        throw _Exceptions.unmatchedCase(value.getClass());  
+    }
+
+
 }
\ No newline at end of file

Reply via email to