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