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 2021/11/19 06:18:28 UTC

[isis] 01/02: ISIS-2882: fixes regression with value-types using StringValidation while not of type String

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

commit 0965563d92e953f0624bee2b90dcdda340bd5620
Author: andi-huber <ah...@apache.org>
AuthorDate: Fri Nov 19 07:09:28 2021 +0100

    ISIS-2882: fixes regression with value-types using StringValidation
    while not of type String
    
    - also remove UuidConverterWkt, as we can now use a generic one
---
 .../converter/ConverterBasedOnValueSemantics.java  |  4 +--
 .../scalars/ScalarPanelTextFieldAbstract.java      |  4 ++-
 ...rPanelTextFieldWithValueSemanticsAbstract.java} | 33 ++++++++++++++++------
 .../ui/components/scalars/uuid/UuidPanel.java      | 18 ++----------
 .../scalars/uuid/UuidConverterTest_roundtrip.java  | 20 ++++++-------
 5 files changed, 42 insertions(+), 37 deletions(-)

diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/converter/ConverterBasedOnValueSemantics.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/converter/ConverterBasedOnValueSemantics.java
index f40024e..7ebbfac 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/converter/ConverterBasedOnValueSemantics.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/converter/ConverterBasedOnValueSemantics.java
@@ -39,7 +39,7 @@ import lombok.NonNull;
 import lombok.Synchronized;
 import lombok.val;
 
-public abstract class ConverterBasedOnValueSemantics<T>
+public class ConverterBasedOnValueSemantics<T>
 implements
     IConverter<T>,
     HasCommonContext {
@@ -51,7 +51,7 @@ implements
     private transient _Either<OneToOneAssociation,  ObjectActionParameter> propOrParam;
     private transient IsisAppCommonContext commonContext;
 
-    protected ConverterBasedOnValueSemantics(
+    public ConverterBasedOnValueSemantics(
             final @NonNull ObjectFeature propOrParam,
             final @NonNull ScalarRepresentation scalarRepresentation) {
         this.scalarRepresentation = scalarRepresentation;
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index d974330..c612a00 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -211,7 +211,9 @@ implements TextFieldValueModel.ScalarModelProvider {
 
         if(maxLength != null) {
             textField.add(new AttributeModifier("maxlength", Model.of("" + maxLength)));
-            textField.add(StringValidator.maximumLength(maxLength));
+            if(cls.equals(String.class)) {
+                textField.add(StringValidator.maximumLength(maxLength));
+            }
         }
     }
 
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/converter/UuidConverterWkt.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldWithValueSemanticsAbstract.java
similarity index 50%
rename from viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/converter/UuidConverterWkt.java
rename to viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldWithValueSemanticsAbstract.java
index 2186fc7..b8301a9 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/converter/UuidConverterWkt.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldWithValueSemanticsAbstract.java
@@ -16,24 +16,41 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.viewer.wicket.model.converter;
+package org.apache.isis.viewer.wicket.ui.components.scalars;
 
-import java.util.UUID;
+import java.io.Serializable;
 
+import org.apache.wicket.util.convert.IConverter;
+
+import org.apache.isis.applib.adapters.ValueSemanticsProvider;
 import org.apache.isis.core.metamodel.commons.ScalarRepresentation;
 import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
+import org.apache.isis.viewer.wicket.model.converter.ConverterBasedOnValueSemantics;
+import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 
 import lombok.NonNull;
 
-public class UuidConverterWkt
-extends ConverterBasedOnValueSemantics<UUID> {
+/**
+ * Specialization of {@link ScalarPanelTextFieldAbstract},
+ * where the scalar (parameter or property) is a value-type,
+ * using conversion that is backed by a {@link ValueSemanticsProvider}.
+ */
+public abstract class ScalarPanelTextFieldWithValueSemanticsAbstract<T extends Serializable>
+extends ScalarPanelTextFieldAbstract<T> {
 
     private static final long serialVersionUID = 1L;
 
-    public UuidConverterWkt(
-            final @NonNull ObjectFeature objFeature,
+    protected ScalarPanelTextFieldWithValueSemanticsAbstract(
+            final String id,
+            final ScalarModel scalarModel, final Class<T> type) {
+        super(id, scalarModel, type);
+    }
+
+    @Override
+    protected IConverter<T> getConverter(
+            final @NonNull ObjectFeature propOrParam,
             final @NonNull ScalarRepresentation scalarRepresentation) {
-        super(objFeature, scalarRepresentation);
+        return new ConverterBasedOnValueSemantics<>(propOrParam, scalarRepresentation);
     }
 
-}
\ No newline at end of file
+}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/uuid/UuidPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/uuid/UuidPanel.java
index 5b3e4a5..848dfc2 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/uuid/UuidPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/uuid/UuidPanel.java
@@ -20,21 +20,14 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.uuid;
 
 import java.util.UUID;
 
-import org.apache.wicket.util.convert.IConverter;
-
-import org.apache.isis.core.metamodel.commons.ScalarRepresentation;
-import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
-import org.apache.isis.viewer.wicket.model.converter.UuidConverterWkt;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldAbstract;
-
-import lombok.NonNull;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldWithValueSemanticsAbstract;
 
 /**
  * Panel for rendering scalars of type {@link UUID}.
  */
 public class UuidPanel
-extends ScalarPanelTextFieldAbstract<UUID> {
+extends ScalarPanelTextFieldWithValueSemanticsAbstract<UUID> {
 
     private static final long serialVersionUID = 1L;
 
@@ -42,13 +35,6 @@ extends ScalarPanelTextFieldAbstract<UUID> {
         super(id, scalarModel, UUID.class);
     }
 
-    @Override
-    protected IConverter<UUID> getConverter(
-            final @NonNull ObjectFeature propOrParam,
-            final @NonNull ScalarRepresentation scalarRepresentation) {
-        return new UuidConverterWkt(propOrParam, scalarRepresentation);
-    }
-
 }
 
 
diff --git a/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/uuid/UuidConverterTest_roundtrip.java b/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/uuid/UuidConverterTest_roundtrip.java
index d912036..1049e3c 100644
--- a/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/uuid/UuidConverterTest_roundtrip.java
+++ b/viewers/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/uuid/UuidConverterTest_roundtrip.java
@@ -25,12 +25,6 @@ import org.apache.wicket.util.convert.ConversionException;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.services.iactnlayer.InteractionService;
@@ -40,7 +34,13 @@ import org.apache.isis.core.metamodel.commons.ScalarRepresentation;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.valuesemantics.UUIDValueSemantics;
 import org.apache.isis.core.security._testing.InteractionService_forTesting;
-import org.apache.isis.viewer.wicket.model.converter.UuidConverterWkt;
+import org.apache.isis.viewer.wicket.model.converter.ConverterBasedOnValueSemantics;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -52,7 +52,7 @@ class UuidConverterTest_roundtrip {
 
     final UUID valid = UUID.randomUUID();
 
-    private UuidConverterWkt converter;
+    private ConverterBasedOnValueSemantics<UUID> converter;
 
     private InteractionService interactionService;
     private MetaModelContext mmc;
@@ -103,10 +103,10 @@ class UuidConverterTest_roundtrip {
 
     // -- HELPER
 
-    private UuidConverterWkt newConverter(final Class<?> type) {
+    private ConverterBasedOnValueSemantics<UUID> newConverter(final Class<?> type) {
         val customerSpec = mmc.getSpecificationLoader().specForTypeElseFail(type);
         val prop = customerSpec.getPropertyElseFail("value");
-        return new UuidConverterWkt(prop, ScalarRepresentation.EDITING);
+        return new ConverterBasedOnValueSemantics<>(prop, ScalarRepresentation.EDITING);
     }
 
     // -- SCENARIOS