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 684837a ISIS-2340: fx: naive LocalDate support
684837a is described below
commit 684837ae0f2d74aa58669997d8117da8d9b4bb42
Author: Andi Huber <[email protected]>
AuthorDate: Thu Aug 13 16:04:28 2020 +0200
ISIS-2340: fx: naive LocalDate support
---
.../javafx/ui/IsisModuleIncViewerJavaFxUi.java | 2 +
.../components/temporal/TemporalFieldFactory.java | 87 ++++++++++++++++++++++
.../binding/NumberConverterForStringComponent.java | 2 +-
.../common/model/binding/TemporalConverter.java | 63 ++++++++++++++++
4 files changed, 153 insertions(+), 1 deletion(-)
diff --git
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/IsisModuleIncViewerJavaFxUi.java
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/IsisModuleIncViewerJavaFxUi.java
index 461b965..bf8701a 100644
---
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/IsisModuleIncViewerJavaFxUi.java
+++
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/IsisModuleIncViewerJavaFxUi.java
@@ -27,6 +27,7 @@ import
org.apache.isis.incubator.viewer.javafx.ui.components.markup.MarkupFieldF
import
org.apache.isis.incubator.viewer.javafx.ui.components.number.NumberFieldFactory;
import
org.apache.isis.incubator.viewer.javafx.ui.components.objectref.ObjectReferenceFieldFactory;
import
org.apache.isis.incubator.viewer.javafx.ui.components.other.FallbackFieldFactory;
+import
org.apache.isis.incubator.viewer.javafx.ui.components.temporal.TemporalFieldFactory;
import
org.apache.isis.incubator.viewer.javafx.ui.components.text.TextFieldFactory;
import
org.apache.isis.incubator.viewer.javafx.ui.decorator.disabling.DisablingDecoratorForButton;
import
org.apache.isis.incubator.viewer.javafx.ui.decorator.disabling.DisablingDecoratorForFormField;
@@ -61,6 +62,7 @@ import
org.apache.isis.viewer.common.model.IsisModuleViewerCommon;
MarkupFieldFactory.class,
ObjectReferenceFieldFactory.class,
NumberFieldFactory.class,
+ TemporalFieldFactory.class,
FallbackFieldFactory.class,
// Decorators
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
new file mode 100644
index 0000000..2c68854
--- /dev/null
+++
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/temporal/TemporalFieldFactory.java
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.incubator.viewer.javafx.ui.components.temporal;
+
+import javax.inject.Inject;
+
+import org.springframework.core.annotation.Order;
+
+import org.apache.isis.applib.annotation.OrderPrecedence;
+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.components.UiComponentFactory.ComponentRequest;
+
+import javafx.scene.Node;
+import javafx.scene.control.DatePicker;
+import lombok.RequiredArgsConstructor;
+import lombok.val;
+
[email protected]
+@Order(OrderPrecedence.MIDPOINT)
+@RequiredArgsConstructor(onConstructor_ = {@Inject})
+public class TemporalFieldFactory implements UiComponentHandlerFx {
+
+ @Override
+ public boolean isHandling(ComponentRequest request) {
+ return
request.hasFeatureTypeFacetAnyOf(TemporalConverter.getSupportedFacets());
+ }
+
+ @Override
+ public Node handle(ComponentRequest request) {
+
+ val uiComponent = new DatePicker();
+ val valueSpec = request.getFeatureTypeSpec();
+ val converter = new TemporalConverter(valueSpec);
+
+ if(request.getManagedFeature() instanceof ManagedParameter) {
+
+ val managedParameter =
(ManagedParameter)request.getManagedFeature();
+
+ BindingsFx.bindBidirectional(
+ uiComponent.valueProperty(),
+ managedParameter.getValue(),
+ converter);
+
+ //TODO bind parameter validation feedback
+
+ } else if(request.getManagedFeature() instanceof ManagedProperty) {
+
+ val managedProperty = (ManagedProperty)request.getManagedFeature();
+
+ // readonly binding
+ BindingsFx.bind(
+ uiComponent.valueProperty(),
+ managedProperty.getValue(),
+ converter);
+
+ //TODO allow property editing
+ //TODO bind property validation feedback
+ }
+
+ return uiComponent;
+ }
+
+ // -- HELPER
+
+
+
+}
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 0c31776..a55a705 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
@@ -49,7 +49,7 @@ public final class NumberConverterForStringComponent
implements BindingConverter
this.valueFacet = lookupFacetOneOf(getSupportedFacets())
.map(ValueSemanticsProviderAndFacetAbstract.class::cast)
- .orElseThrow(()->_Exceptions.noSuchElement("missing 'double'
or 'float' value facet"));
+ .orElseThrow(()->_Exceptions.noSuchElement("missing 'number'
value facet"));
}
@Override
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/TemporalConverter.java
new file mode 100644
index 0000000..64e1a96
--- /dev/null
+++
b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/TemporalConverter.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+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.exceptions._Exceptions;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+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;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+
+import lombok.Getter;
+import lombok.val;
+
+public final class TemporalConverter implements BindingConverter<LocalDate> {
+
+ @Getter(onMethod_ = {@Override})
+ private final ObjectSpecification valueSpecification;
+ private final TemporalValueFacet<?> valueFacet;
+
+ public TemporalConverter(final ObjectSpecification valueSpecification) {
+ this.valueSpecification = valueSpecification;
+
+ this.valueFacet = (TemporalValueFacet<?>)
lookupFacetOneOf(getSupportedFacets())
+ .orElseThrow(()->_Exceptions.noSuchElement("missing 'temporal'
value facet"));
+ }
+
+ @Override
+ public ManagedObject wrap(LocalDate localDate) {
+ return ManagedObject.of(getValueSpecification(), localDate);
+ }
+
+ @Override
+ public LocalDate unwrap(ManagedObject object) {
+ 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);
+
+}
\ No newline at end of file