You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/01/10 11:37:26 UTC

[isis] branch master updated: ISIS-2941: fixes numerical primitive field editing

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 a7baeb5  ISIS-2941: fixes numerical primitive field editing
a7baeb5 is described below

commit a7baeb5fbc59a7f0e14743fb997d531a04e594db
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Jan 10 12:36:54 2022 +0100

    ISIS-2941: fixes numerical primitive field editing
    
    - adds primitive converter variants to the wicket-component factories
---
 .../ui/components/scalars/TextFieldValueModel.java | 15 +++++++-----
 .../ComponentFactoryRegistrarDefault.java          | 27 ++++++++++++++--------
 2 files changed, 27 insertions(+), 15 deletions(-)

diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
index 15e9836..6fd4fc6 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
@@ -24,6 +24,7 @@ import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.model.Model;
 
 import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.spec.ManagedObjects;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 
 import lombok.val;
@@ -50,12 +51,7 @@ public class TextFieldValueModel<T extends Serializable> extends Model<T> {
     public T getObject() {
         final ScalarModel model = scalarModelProvider.getModel();
         val objectAdapter = model.getObject();
-        return asT(objectAdapter);
-    }
-
-    @SuppressWarnings("unchecked")
-    private T asT(final ManagedObject objectAdapter) {
-        return (T) (objectAdapter != null? objectAdapter.getPojo(): null);
+        return unwrap(objectAdapter);
     }
 
     @Override
@@ -71,5 +67,12 @@ public class TextFieldValueModel<T extends Serializable> extends Model<T> {
         }
     }
 
+    // -- HELPER
+
+    @SuppressWarnings("unchecked")
+    private T unwrap(final ManagedObject objectAdapter) {
+        return (T) ManagedObjects.UnwrapUtil.single(objectAdapter);
+    }
+
 
 }
\ No newline at end of file
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
index 2312f97..bd12cb6 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
@@ -84,6 +84,7 @@ import org.apache.isis.viewer.wicket.ui.components.voidreturn.VoidReturnPanelFac
 import org.apache.isis.viewer.wicket.ui.components.welcome.WelcomePanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.widgets.entitysimplelink.EntityLinkSimplePanelFactory;
 
+import lombok.NonNull;
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
@@ -303,14 +304,7 @@ public class ComponentFactoryRegistrarDefault implements ComponentFactoryRegistr
     public static <T extends Serializable> ComponentFactoryScalarAbstract
     createScalarPanelUsingTextField(final Class<T> valueTypeClass) {
 
-        var valueTypeClasses = Can.<Class<?>>ofSingleton(valueTypeClass);
-
-        // if the valueType is a wrapper type, also append its unboxed variant
-        if(ClassUtils.isPrimitiveWrapper(valueTypeClass)) {
-            val unboxed = org.apache.isis.core.metamodel.commons.ClassUtil
-                    .unboxPrimitiveIfNecessary(valueTypeClass);
-            valueTypeClasses = valueTypeClasses.add(unboxed);
-        }
+        var valueTypeClasses = withPrimitiveVariant(valueTypeClass);
 
         return new ComponentFactoryScalarAbstract(
                 ScalarPanelTextFieldWithValueSemantics.class,
@@ -329,7 +323,7 @@ public class ComponentFactoryRegistrarDefault implements ComponentFactoryRegistr
     public static <T extends Serializable> ComponentFactoryScalarAbstract
     createScalarPanelUsingNumberField(final Class<T> valueTypeClass) {
 
-        val valueTypeClasses = Can.<Class<?>>ofSingleton(valueTypeClass);
+        var valueTypeClasses = withPrimitiveVariant(valueTypeClass);
 
         return new ComponentFactoryScalarAbstract(
                 ScalarPanelTextFieldNumeric.class,
@@ -348,6 +342,7 @@ public class ComponentFactoryRegistrarDefault implements ComponentFactoryRegistr
     public static <T extends Serializable> ComponentFactoryScalarAbstract
     createScalarPanelUsingTemporalPicker(final Class<T> valueTypeClass) {
 
+        // assuming there is no primitive temporal type
         val valueTypeClasses = Can.<Class<?>>ofSingleton(valueTypeClass);
 
         return new ComponentFactoryScalarAbstract(
@@ -364,5 +359,19 @@ public class ComponentFactoryRegistrarDefault implements ComponentFactoryRegistr
         };
     }
 
+    // -- HELPER
+
+    private static Can<Class<?>> withPrimitiveVariant(final @NonNull Class<?> valueTypeClass) {
+        var valueTypeClasses = Can.<Class<?>>ofSingleton(valueTypeClass);
+
+        // if the valueType is a wrapper type, also append its unboxed variant
+        if(ClassUtils.isPrimitiveWrapper(valueTypeClass)) {
+            val unboxed = org.apache.isis.core.metamodel.commons.ClassUtil
+                    .unboxPrimitiveIfNecessary(valueTypeClass);
+            valueTypeClasses = valueTypeClasses.add(unboxed);
+        }
+
+        return valueTypeClasses;
+    }
 
 }