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;

Reply via email to