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 1bb8b68 ISIS-2340: use one binding converter for all the java numbers
1bb8b68 is described below
commit 1bb8b68143a9b4b2ab2b3fa0d1f1434340747108
Author: Andi Huber <[email protected]>
AuthorDate: Thu Aug 13 15:34:00 2020 +0200
ISIS-2340: use one binding converter for all the java numbers
---
.../ui/components/number/NumberFieldFactory.java | 9 +++----
.../common/model/binding/BindingConverter.java | 6 ++---
...java => NumberConverterForStringComponent.java} | 29 ++++++++++++++++++----
.../model/components/UiComponentFactory.java | 9 +++++++
4 files changed, 39 insertions(+), 14 deletions(-)
diff --git
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/number/NumberFieldFactory.java
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/number/NumberFieldFactory.java
index 0589b66..0b64556 100644
---
a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/number/NumberFieldFactory.java
+++
b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/number/NumberFieldFactory.java
@@ -23,13 +23,11 @@ import javax.inject.Inject;
import org.springframework.core.annotation.Order;
import org.apache.isis.applib.annotation.OrderPrecedence;
-import
org.apache.isis.core.metamodel.facets.value.doubles.DoubleFloatingPointValueFacet;
-import
org.apache.isis.core.metamodel.facets.value.floats.FloatingPointValueFacet;
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.DoubleOrFloatConverterForStringComponent;
+import
org.apache.isis.viewer.common.model.binding.NumberConverterForStringComponent;
import
org.apache.isis.viewer.common.model.components.UiComponentFactory.ComponentRequest;
import javafx.scene.Node;
@@ -44,8 +42,7 @@ public class NumberFieldFactory implements
UiComponentHandlerFx {
@Override
public boolean isHandling(ComponentRequest request) {
- return request.hasFeatureTypeFacet(DoubleFloatingPointValueFacet.class)
- || request.hasFeatureTypeFacet(FloatingPointValueFacet.class);
+ return
request.hasFeatureTypeFacetAnyOf(NumberConverterForStringComponent.getSupportedFacets());
}
@Override
@@ -53,7 +50,7 @@ public class NumberFieldFactory implements
UiComponentHandlerFx {
val uiComponent = new TextField();
val valueSpec = request.getFeatureTypeSpec();
- val converter = new
DoubleOrFloatConverterForStringComponent(valueSpec);
+ val converter = new NumberConverterForStringComponent(valueSpec);
if(request.getManagedFeature() instanceof ManagedParameter) {
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 6394f41..5ce583f 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
@@ -20,6 +20,7 @@ package org.apache.isis.viewer.common.model.binding;
import java.util.Optional;
+import org.apache.isis.core.commons.collections.Can;
import org.apache.isis.core.commons.internal.base._Casts;
import org.apache.isis.core.commons.internal.base._NullSafe;
import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -46,9 +47,8 @@ public interface BindingConverter<T> {
}
default Optional<? extends Facet> lookupFacetOneOf(
- @SuppressWarnings("unchecked") final Class<? extends Facet> ...
facetTypes) {
-
- return _NullSafe.stream(facetTypes)
+ @NonNull Can<Class<? extends Facet>> facetTypes) {
+ return facetTypes.stream()
.map(getValueSpecification()::getFacet)
.filter(_NullSafe::isPresent)
.findFirst();
diff --git
a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/DoubleOrFloatConverterForStringComponent.java
b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/NumberConverterForStringComponent.java
similarity index 63%
rename from
viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/DoubleOrFloatConverterForStringComponent.java
rename to
viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/NumberConverterForStringComponent.java
index 0f99f1a..0c31776 100644
---
a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/DoubleOrFloatConverterForStringComponent.java
+++
b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/NumberConverterForStringComponent.java
@@ -18,10 +18,18 @@
*/
package org.apache.isis.viewer.common.model.binding;
+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.bigdecimal.BigDecimalValueFacet;
+import
org.apache.isis.core.metamodel.facets.value.biginteger.BigIntegerValueFacet;
+import org.apache.isis.core.metamodel.facets.value.bytes.ByteValueFacet;
import
org.apache.isis.core.metamodel.facets.value.doubles.DoubleFloatingPointValueFacet;
import
org.apache.isis.core.metamodel.facets.value.floats.FloatingPointValueFacet;
+import org.apache.isis.core.metamodel.facets.value.integer.IntegerValueFacet;
+import org.apache.isis.core.metamodel.facets.value.longs.LongValueFacet;
+import org.apache.isis.core.metamodel.facets.value.shortint.ShortValueFacet;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ManagedObjects;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -29,19 +37,17 @@ import
org.apache.isis.core.metamodel.spec.ObjectSpecification;
import lombok.Getter;
import lombok.val;
-public final class DoubleOrFloatConverterForStringComponent implements
BindingConverter<String> {
+public final class NumberConverterForStringComponent implements
BindingConverter<String> {
@Getter(onMethod_ = {@Override})
private final ObjectSpecification valueSpecification;
private final ValueSemanticsProviderAndFacetAbstract<? extends Number>
valueFacet;
@SuppressWarnings("unchecked")
- public DoubleOrFloatConverterForStringComponent(final ObjectSpecification
valueSpecification) {
+ public NumberConverterForStringComponent(final ObjectSpecification
valueSpecification) {
this.valueSpecification = valueSpecification;
- this.valueFacet = lookupFacetOneOf(
- DoubleFloatingPointValueFacet.class,
- FloatingPointValueFacet.class)
+ this.valueFacet = lookupFacetOneOf(getSupportedFacets())
.map(ValueSemanticsProviderAndFacetAbstract.class::cast)
.orElseThrow(()->_Exceptions.noSuchElement("missing 'double'
or 'float' value facet"));
}
@@ -57,5 +63,18 @@ public final class DoubleOrFloatConverterForStringComponent
implements BindingCo
val number = (Number) ManagedObjects.UnwrapUtil.single(object);
return valueFacet.parseableTitleOf(number);
}
+
+
+ // for performance reasons in order of likelihood (just guessing)
+ @Getter
+ private final static Can<Class<? extends Facet>> supportedFacets = Can.of(
+ IntegerValueFacet.class,
+ DoubleFloatingPointValueFacet.class,
+ ByteValueFacet.class,
+ LongValueFacet.class,
+ BigIntegerValueFacet.class,
+ BigDecimalValueFacet.class,
+ ShortValueFacet.class,
+ FloatingPointValueFacet.class);
}
\ No newline at end of file
diff --git
a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/components/UiComponentFactory.java
b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/components/UiComponentFactory.java
index 40e7e8b..57c1e3b 100644
---
a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/components/UiComponentFactory.java
+++
b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/components/UiComponentFactory.java
@@ -24,7 +24,9 @@ import java.util.function.Consumer;
import javax.annotation.Nullable;
import org.apache.isis.applib.annotation.LabelPosition;
+import org.apache.isis.core.commons.collections.Can;
import org.apache.isis.core.commons.handler.ChainOfResponsibility;
+import org.apache.isis.core.commons.internal.base._NullSafe;
import org.apache.isis.core.commons.internal.functions._Predicates;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.interactions.managed.InteractionVeto;
@@ -111,6 +113,13 @@ public interface UiComponentFactory<B, C> {
: false;
}
+ public <T extends Facet> boolean hasFeatureTypeFacetAnyOf(
+ @NonNull Can<Class<? extends Facet>> facetTypes) {
+ return facetTypes.stream()
+ .map(getFeatureTypeSpec()::getFacet)
+ .anyMatch(_NullSafe::isPresent);
+ }
+
@Deprecated
public <T> Optional<T> getFeatureValue(@Nullable Class<T> type) {
val managedProperty = (ManagedProperty)managedFeature;