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