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/18 09:39:06 UTC

[isis] branch master updated: ISIS-2882: create value-semantics for Bookmark and wire-up with BookmarkPanel

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 7acb4f7  ISIS-2882: create value-semantics for Bookmark and wire-up with BookmarkPanel
7acb4f7 is described below

commit 7acb4f7d454136742a6db5d96169495873138d13
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Nov 18 10:38:56 2021 +0100

    ISIS-2882: create value-semantics for Bookmark and wire-up with
    BookmarkPanel
---
 .../core/metamodel/IsisModuleCoreMetamodel.java    |   2 +
 .../valuesemantics/BookmarkValueSemantics.java     | 100 +++++++++++++++++++++
 .../model/converter/BookmarkConverterWkt.java}     |  22 ++---
 .../scalars/ScalarPanelTextFieldAbstract.java      |  46 +++++-----
 ...elTextFieldBasedOnStringSemanticsAbstract.java} |  20 +++--
 ...va => ScalarPanelTextFieldNumericAbstract.java} |   4 +-
 .../ScalarPanelTextFieldParseableAbstract.java     |  68 --------------
 ...rPanelTextFieldWithTemporalPickerAbstract.java} |  13 +--
 .../components/scalars/bookmark/BookmarkPanel.java |  21 ++++-
 .../scalars/jdk8time/Jdk8LocalDatePanel.java       |   4 +-
 .../scalars/jdk8time/Jdk8LocalDateTimePanel.java   |   4 +-
 .../scalars/jdk8time/Jdk8OffsetDateTimePanel.java  |   4 +-
 .../scalars/jdkdates/JavaSqlDatePanel.java         |   4 +-
 .../scalars/jdkdates/JavaSqlTimePanel.java         |   4 +-
 .../scalars/jdkdates/JavaSqlTimestampPanel.java    |   4 +-
 .../scalars/jdkdates/JavaUtilDatePanel.java        |   4 +-
 .../scalars/jdkmath/JavaMathBigDecimalPanel.java   |   4 +-
 .../scalars/jdkmath/JavaMathBigIntegerPanel.java   |   4 +-
 .../scalars/jodatime/JodaDateTimePanel.java        |   4 +-
 .../scalars/jodatime/JodaLocalDatePanel.java       |   4 +-
 .../scalars/jodatime/JodaLocalDateTimePanel.java   |   4 +-
 .../ui/components/scalars/oiddto/OidDtoPanel.java  |   4 +-
 .../scalars/passwd/IsisPasswordPanel.java          |   4 +-
 .../ui/components/scalars/primitive/BytePanel.java |   4 +-
 .../components/scalars/primitive/DoublePanel.java  |   4 +-
 .../components/scalars/primitive/FloatPanel.java   |   4 +-
 .../components/scalars/primitive/IntegerPanel.java |   4 +-
 .../ui/components/scalars/primitive/LongPanel.java |   4 +-
 .../components/scalars/primitive/ShortPanel.java   |   4 +-
 .../scalars/string/MultiLineStringPanel.java       |   4 +-
 .../ui/components/scalars/string/StringPanel.java  |   4 +-
 .../scalars/value/compound/ValueCompoundPanel.java |   4 +-
 .../scalars/value/fallback/ValueFallbackPanel.java |   4 +-
 .../wicket/ui/components/tree/TreePanel.java       |   4 +-
 34 files changed, 225 insertions(+), 171 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleCoreMetamodel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleCoreMetamodel.java
index 3f1e8fc..d6394d4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleCoreMetamodel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleCoreMetamodel.java
@@ -51,6 +51,7 @@ import org.apache.isis.core.metamodel.specloader.SpecificationLoaderDefault;
 import org.apache.isis.core.metamodel.valuesemantics.BigDecimalValueSemantics;
 import org.apache.isis.core.metamodel.valuesemantics.BigIntegerValueSemantics;
 import org.apache.isis.core.metamodel.valuesemantics.BlobValueSemantics;
+import org.apache.isis.core.metamodel.valuesemantics.BookmarkValueSemantics;
 import org.apache.isis.core.metamodel.valuesemantics.BooleanValueSemantics;
 import org.apache.isis.core.metamodel.valuesemantics.BufferedImageValueSemantics;
 import org.apache.isis.core.metamodel.valuesemantics.ByteValueSemantics;
@@ -126,6 +127,7 @@ import org.apache.isis.core.security.IsisModuleCoreSecurity;
         MarkupValueSemantics.class,
         URLValueSemantics.class,
         LocalResourcePathValueSemantics.class,
+        BookmarkValueSemantics.class,
         UUIDValueSemantics.class,
         TreeNodeValueSemantics.class,
         ChangesDtoValueSemantics.class,
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BookmarkValueSemantics.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BookmarkValueSemantics.java
new file mode 100644
index 0000000..c82a26c
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/BookmarkValueSemantics.java
@@ -0,0 +1,100 @@
+/*
+ *  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.core.metamodel.valuesemantics;
+
+import javax.inject.Named;
+
+import org.springframework.stereotype.Component;
+
+import org.apache.isis.applib.adapters.EncoderDecoder;
+import org.apache.isis.applib.adapters.Parser;
+import org.apache.isis.applib.adapters.Renderer;
+import org.apache.isis.applib.adapters.ValueSemanticsAbstract;
+import org.apache.isis.applib.adapters.ValueSemanticsProvider;
+import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.schema.common.v2.ValueType;
+
+import lombok.val;
+
+@Component
+@Named("isis.val.BookmarkValueSemantics")
+public class BookmarkValueSemantics
+extends ValueSemanticsAbstract<Bookmark>
+implements
+    EncoderDecoder<Bookmark>,
+    Parser<Bookmark>,
+    Renderer<Bookmark> {
+
+    @Override
+    public Class<Bookmark> getCorrespondingClass() {
+        return Bookmark.class;
+    }
+
+    @Override
+    public ValueType getSchemaValueType() {
+        return UNREPRESENTED;
+    }
+
+    // -- ENCODER DECODER
+
+    @Override
+    public String toEncodedString(final Bookmark object) {
+        return object.stringify();
+    }
+
+    @Override
+    public Bookmark fromEncodedString(final String data) {
+        return Bookmark.parse(data).orElseThrow(()->_Exceptions.illegalArgument("%s", data));
+    }
+
+    // -- RENDERER
+
+    @Override
+    public String simpleTextPresentation(final ValueSemanticsProvider.Context context, final Bookmark value) {
+        return value == null ? "" : value.stringify();
+    }
+
+    // -- PARSER
+
+    @Override
+    public String parseableTextRepresentation(final ValueSemanticsProvider.Context context, final Bookmark value) {
+        return value == null ? null : value.toString();
+    }
+
+    @Override
+    public Bookmark parseTextRepresentation(final ValueSemanticsProvider.Context context, final String text) {
+        val input = _Strings.blankToNullOrTrim(text);
+        return input!=null
+                ? Bookmark.parse(input).orElseThrow(()->_Exceptions.illegalArgument("%s", input))
+                : null;
+    }
+
+    @Override
+    public int typicalLength() {
+        return maxLength();
+    }
+
+    @Override
+    public int maxLength() {
+        return 4048;
+    }
+
+}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/bookmark/BookmarkPanel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/converter/BookmarkConverterWkt.java
similarity index 65%
copy from viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/bookmark/BookmarkPanel.java
copy to viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/converter/BookmarkConverterWkt.java
index 7d2a955..00de35a 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/bookmark/BookmarkPanel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/converter/BookmarkConverterWkt.java
@@ -16,21 +16,23 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.viewer.wicket.ui.components.scalars.bookmark;
+package org.apache.isis.viewer.wicket.model.converter;
 
 import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
+import org.apache.isis.core.metamodel.commons.ScalarRepresentation;
+import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
 
-/**
- * Panel for rendering scalars of type {@link Bookmark}.
- */
-public class BookmarkPanel extends ScalarPanelTextFieldParseableAbstract {
+import lombok.NonNull;
+
+public class BookmarkConverterWkt
+extends ConverterBasedOnValueSemantics<Bookmark> {
 
     private static final long serialVersionUID = 1L;
 
-    public BookmarkPanel(final String id, final ScalarModel scalarModel) {
-        super(id, scalarModel);
+    public BookmarkConverterWkt(
+            final @NonNull ObjectFeature objFeature,
+            final @NonNull ScalarRepresentation scalarRepresentation) {
+        super(objFeature, scalarRepresentation);
     }
 
-}
+}
\ No newline at end of file
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 80f85fb..d974330 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
@@ -34,6 +34,7 @@ import org.apache.wicket.util.convert.IConverter;
 import org.apache.wicket.validation.IValidatable;
 import org.apache.wicket.validation.IValidator;
 import org.apache.wicket.validation.ValidationError;
+import org.apache.wicket.validation.validator.StringValidator;
 
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.core.metamodel.commons.ScalarRepresentation;
@@ -191,10 +192,29 @@ implements TextFieldValueModel.ScalarModelProvider {
     protected void addStandardSemantics() {
         textField.setRequired(getModel().isRequired());
         setTextFieldSizeAndMaxLengthIfSpecified();
-
         addValidatorForIsisValidation();
     }
 
+    private void setTextFieldSizeAndMaxLengthIfSpecified() {
+
+        final Integer maxLength = getMaxLengthOf(getModel());
+        Integer typicalLength = getTypicalLenghtOf(getModel());
+
+        // doesn't make sense for typical length to be > maxLength
+        if(typicalLength != null && maxLength != null && typicalLength > maxLength) {
+            typicalLength = maxLength;
+        }
+
+        if (typicalLength != null) {
+            textField.add(new AttributeModifier("size", Model.of("" + typicalLength)));
+        }
+
+        if(maxLength != null) {
+            textField.add(new AttributeModifier("maxlength", Model.of("" + maxLength)));
+            textField.add(StringValidator.maximumLength(maxLength));
+        }
+    }
+
     private void addValidatorForIsisValidation() {
         val scalarModel = getModel();
 
@@ -225,27 +245,7 @@ implements TextFieldValueModel.ScalarModelProvider {
         });
     }
 
-    private void setTextFieldSizeAndMaxLengthIfSpecified() {
-
-        final Integer maxLength = getMaxLengthOf(getModel());
-        Integer typicalLength = getTypicalLenghtOf(getModel());
-
-        // doesn't make sense for typical length to be > maxLength
-        if(typicalLength != null && maxLength != null && typicalLength > maxLength) {
-            typicalLength = maxLength;
-        }
-
-        if (typicalLength != null) {
-            textField.add(new AttributeModifier("size", Model.of("" + typicalLength)));
-        }
-
-        if(maxLength != null) {
-            textField.add(new AttributeModifier("maxlength", Model.of("" + maxLength)));
-        }
-    }
-
-
-    // //////////////////////////////////////
+    // --
 
     /**
      * Mandatory hook method to build the component to render the model when in
@@ -256,6 +256,7 @@ implements TextFieldValueModel.ScalarModelProvider {
      */
     @Override
     protected Component createComponentForCompact() {
+        //FIXME[ISIS-2882] wire-up with value semantics to use Renderer instead of Parser here
         return Wkt.labelAdd(
                 getCompactFragment(CompactType.SPAN), ID_SCALAR_IF_COMPACT,
                 ()->getModel().getObjectAsString());
@@ -266,7 +267,6 @@ implements TextFieldValueModel.ScalarModelProvider {
         SPAN
     }
 
-
     Fragment getCompactFragment(final CompactType type) {
         Fragment compactFragment;
         switch (type) {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldBasedOnStringSemanticsAbstract.java
similarity index 68%
copy from viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java
copy to viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldBasedOnStringSemanticsAbstract.java
index f98e8fc..e43a336 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldBasedOnStringSemanticsAbstract.java
@@ -16,34 +16,36 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.viewer.wicket.ui.components.scalars.primitive;
+package org.apache.isis.viewer.wicket.ui.components.scalars;
 
 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.FloatConverterWkt;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
 
 import lombok.NonNull;
 
 /**
- * Panel for rendering scalars of type {@link Float} or <tt>float</tt>.
+ * Adapter for {@link ScalarPanelTextFieldAbstract textField-based scalar panel}
+ * s where moreover the scalar parameter or property is a value type that is
+ * parseable.
  */
-public class FloatPanel extends ScalarPanelTextFieldNumeric<Float> {
+public abstract class ScalarPanelTextFieldBasedOnStringSemanticsAbstract
+extends ScalarPanelTextFieldAbstract<String> {
 
     private static final long serialVersionUID = 1L;
 
-    public FloatPanel(final String id, final ScalarModel scalarModel) {
-        super(id, scalarModel, Float.class);
+    protected ScalarPanelTextFieldBasedOnStringSemanticsAbstract(final String id, final ScalarModel scalarModel) {
+        super(id, scalarModel, String.class);
     }
 
     @Override
-    protected IConverter<Float> getConverter(
+    protected final IConverter<String> getConverter(
             final @NonNull ObjectFeature propOrParam,
             final @NonNull ScalarRepresentation scalarRepresentation) {
-        return new FloatConverterWkt(propOrParam, scalarRepresentation);
+        return null; // does not use conversion
     }
 
+
 }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumericAbstract.java
similarity index 93%
rename from viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
rename to viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumericAbstract.java
index f58d592..321d02e 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumericAbstract.java
@@ -31,12 +31,12 @@ import lombok.val;
 /**
  * Panel for rendering numeric scalars.
  */
-public abstract class ScalarPanelTextFieldNumeric<T extends Serializable>
+public abstract class ScalarPanelTextFieldNumericAbstract<T extends Serializable>
 extends ScalarPanelTextFieldAbstract<T> {
 
     private static final long serialVersionUID = 1L;
 
-    protected ScalarPanelTextFieldNumeric(
+    protected ScalarPanelTextFieldNumericAbstract(
             final String id,
             final ScalarModel scalarModel,
             final Class<T> cls) {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldParseableAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldParseableAbstract.java
deleted file mode 100644
index fadb648..0000000
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldParseableAbstract.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- *  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.wicket.ui.components.scalars;
-
-import org.apache.wicket.util.convert.IConverter;
-import org.apache.wicket.validation.validator.StringValidator;
-
-import org.apache.isis.core.metamodel.commons.ScalarRepresentation;
-import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
-import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
-import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-
-import lombok.NonNull;
-
-/**
- * Adapter for {@link ScalarPanelTextFieldAbstract textField-based scalar panel}
- * s where moreover the scalar parameter or property is a value type that is
- * parseable.
- */
-@Deprecated //FIXME[ISIS-2882] probably remove class, have each value-type implement their own
-public abstract class ScalarPanelTextFieldParseableAbstract
-extends ScalarPanelTextFieldAbstract<String> {
-
-    private static final long serialVersionUID = 1L;
-
-    protected ScalarPanelTextFieldParseableAbstract(final String id, final ScalarModel scalarModel) {
-        super(id, scalarModel, String.class);
-    }
-
-    @Override
-    protected void addStandardSemantics() {
-        super.addStandardSemantics();
-        addMaxLengthValidator();
-    }
-
-    @Override
-    protected IConverter<String> getConverter(
-            final @NonNull ObjectFeature propOrParam,
-            final @NonNull ScalarRepresentation scalarRepresentation) {
-        return null; // does not use conversion
-    }
-
-    // -- HELPER
-
-    //FIXME[ISIS-2882] move up in hierarchy - also make sure logic is not already duplicated
-    private void addMaxLengthValidator() {
-        getModel().getScalarTypeSpec().lookupFacet(MaxLengthFacet.class)
-        .ifPresent(maxLengthFacet->
-            getTextField().add(StringValidator.maximumLength(maxLengthFacet.value())));
-    }
-
-}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldWithTemporalPickerAbstract.java
similarity index 92%
rename from viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
rename to viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldWithTemporalPickerAbstract.java
index ae52c1c..097d62e 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldWithTemporalPickerAbstract.java
@@ -41,22 +41,23 @@ import lombok.NonNull;
 /**
  * Panel for rendering scalars representing dates, along with a date picker.
  */
-public abstract class ScalarPanelTextFieldDatePickerAbstract<T extends Serializable>
+public abstract class ScalarPanelTextFieldWithTemporalPickerAbstract<T extends Serializable>
 extends ScalarPanelTextFieldAbstract<T>  {
 
     private static final long serialVersionUID = 1L;
 
     protected DateConverter<T> converter;
 
-    public ScalarPanelTextFieldDatePickerAbstract(final String id, final ScalarModel scalarModel, final Class<T> cls) {
+    public ScalarPanelTextFieldWithTemporalPickerAbstract(
+            final String id, final ScalarModel scalarModel, final Class<T> cls) {
         super(id, scalarModel, cls);
     }
 
     /**
      * Expected to be in subclasses' constructor.
-     *
      * <p>
-     * Is not passed into constructor only to allow subclass to read from injected {@link #getWicketViewerSettings()}.
+     * Is not passed into constructor only to allow subclass to read from injected
+     * {@link #getWicketViewerSettings()}.
      */
     protected void init(final DateConverter<T> converter) {
         this.converter = converter;
@@ -110,9 +111,9 @@ extends ScalarPanelTextFieldAbstract<T>  {
         return super.toStringConvertingModelOf(converter);
     }
 
-
     /**
-     * Optional override for subclasses to explicitly indicate desired amount to adjust compact form of textField
+     * Optional override for subclasses to explicitly indicate desired amount to adjust
+     * compact form of textField
      */
     protected Integer getLengthAdjustHint() {
         return null;
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/bookmark/BookmarkPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/bookmark/BookmarkPanel.java
index 7d2a955..e5a633d 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/bookmark/BookmarkPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/bookmark/BookmarkPanel.java
@@ -18,19 +18,34 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.scalars.bookmark;
 
+import org.apache.wicket.util.convert.IConverter;
+
 import org.apache.isis.applib.services.bookmark.Bookmark;
+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.BookmarkConverterWkt;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldAbstract;
+
+import lombok.NonNull;
 
 /**
  * Panel for rendering scalars of type {@link Bookmark}.
  */
-public class BookmarkPanel extends ScalarPanelTextFieldParseableAbstract {
+public class BookmarkPanel
+extends ScalarPanelTextFieldAbstract<Bookmark> {
 
     private static final long serialVersionUID = 1L;
 
     public BookmarkPanel(final String id, final ScalarModel scalarModel) {
-        super(id, scalarModel);
+        super(id, scalarModel, Bookmark.class);
+    }
+
+    @Override
+    protected IConverter<Bookmark> getConverter(
+            final @NonNull ObjectFeature propOrParam,
+            final @NonNull ScalarRepresentation scalarRepresentation) {
+        return new BookmarkConverterWkt(propOrParam, scalarRepresentation);
     }
 
 }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/Jdk8LocalDatePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/Jdk8LocalDatePanel.java
index 5997987..191b98c 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/Jdk8LocalDatePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/Jdk8LocalDatePanel.java
@@ -21,12 +21,12 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jdk8time;
 import java.time.LocalDate;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldDatePickerAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldWithTemporalPickerAbstract;
 /**
  * Panel for rendering scalars of type {@link LocalDate}.
  */
 public class Jdk8LocalDatePanel
-extends ScalarPanelTextFieldDatePickerAbstract<LocalDate> {
+extends ScalarPanelTextFieldWithTemporalPickerAbstract<LocalDate> {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/Jdk8LocalDateTimePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/Jdk8LocalDateTimePanel.java
index 2b1a6ae..16ec4a3 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/Jdk8LocalDateTimePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/Jdk8LocalDateTimePanel.java
@@ -21,13 +21,13 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jdk8time;
 import java.time.LocalDateTime;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldDatePickerAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldWithTemporalPickerAbstract;
 
 /**
  * Panel for rendering scalars of type {@link LocalDateTime}.
  */
 public class Jdk8LocalDateTimePanel
-extends ScalarPanelTextFieldDatePickerAbstract<LocalDateTime> {
+extends ScalarPanelTextFieldWithTemporalPickerAbstract<LocalDateTime> {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/Jdk8OffsetDateTimePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/Jdk8OffsetDateTimePanel.java
index 971d80d..8a0e944 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/Jdk8OffsetDateTimePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdk8time/Jdk8OffsetDateTimePanel.java
@@ -21,13 +21,13 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jdk8time;
 import java.time.OffsetDateTime;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldDatePickerAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldWithTemporalPickerAbstract;
 
 /**
  * Panel for rendering scalars of type {@link OffsetDateTime}.
  */
 public class Jdk8OffsetDateTimePanel
-extends ScalarPanelTextFieldDatePickerAbstract<OffsetDateTime> {
+extends ScalarPanelTextFieldWithTemporalPickerAbstract<OffsetDateTime> {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.java
index decacd2..4ea4fe8 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlDatePanel.java
@@ -21,13 +21,13 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates;
 import java.sql.Date;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldDatePickerAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldWithTemporalPickerAbstract;
 
 /**
  * Panel for rendering scalars of type {@link Date java.sql.Date}.
  */
 public class JavaSqlDatePanel
-extends ScalarPanelTextFieldDatePickerAbstract<java.sql.Date> {
+extends ScalarPanelTextFieldWithTemporalPickerAbstract<java.sql.Date> {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimePanel.java
index b7dba61..57c7689 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimePanel.java
@@ -21,12 +21,12 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates;
 import java.sql.Time;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldBasedOnStringSemanticsAbstract;
 
 /**
  * Panel for rendering scalars of type {@link Time java.sql.Time}.
  */
-public class JavaSqlTimePanel extends ScalarPanelTextFieldParseableAbstract {
+public class JavaSqlTimePanel extends ScalarPanelTextFieldBasedOnStringSemanticsAbstract {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimestampPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimestampPanel.java
index 6d5ebce..59e7051 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimestampPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaSqlTimestampPanel.java
@@ -22,13 +22,13 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates;
 import java.sql.Timestamp;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldDatePickerAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldWithTemporalPickerAbstract;
 
 /**
  * Panel for rendering scalars of type {@link java.sql.Timestamp}.
  */
 public class JavaSqlTimestampPanel
-extends ScalarPanelTextFieldDatePickerAbstract<Timestamp> {
+extends ScalarPanelTextFieldWithTemporalPickerAbstract<Timestamp> {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.java
index 1ec1fd3..30ba2ef 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/JavaUtilDatePanel.java
@@ -21,13 +21,13 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates;
 
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldDatePickerAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldWithTemporalPickerAbstract;
 
 /**
  * Panel for rendering scalars of type {@link java.util.Date}.
  */
 public class JavaUtilDatePanel
-extends ScalarPanelTextFieldDatePickerAbstract<java.util.Date> {
+extends ScalarPanelTextFieldWithTemporalPickerAbstract<java.util.Date> {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
index a7de058..74c7255 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
@@ -26,7 +26,7 @@ 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.BigDecimalConverterWkt;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumericAbstract;
 
 import lombok.NonNull;
 
@@ -34,7 +34,7 @@ import lombok.NonNull;
  * Panel for rendering scalars of type {@link BigDecimal}.
  */
 public class JavaMathBigDecimalPanel
-extends ScalarPanelTextFieldNumeric<BigDecimal> {
+extends ScalarPanelTextFieldNumericAbstract<BigDecimal> {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
index 04c4fe9..5fdeb1f 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
@@ -26,7 +26,7 @@ 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.BigIntegerConverterWkt;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumericAbstract;
 
 import lombok.NonNull;
 
@@ -34,7 +34,7 @@ import lombok.NonNull;
  * Panel for rendering scalars of type {@link BigInteger}.
  */
 public class JavaMathBigIntegerPanel
-extends ScalarPanelTextFieldNumeric<BigInteger> {
+extends ScalarPanelTextFieldNumericAbstract<BigInteger> {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.java
index e9715b1..faedd8b 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaDateTimePanel.java
@@ -22,13 +22,13 @@ import org.joda.time.DateTime;
 import org.joda.time.LocalDateTime;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldDatePickerAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldWithTemporalPickerAbstract;
 
 /**
  * Panel for rendering scalars of type {@link LocalDateTime}.
  */
 public class JodaDateTimePanel
-extends ScalarPanelTextFieldDatePickerAbstract<DateTime> {
+extends ScalarPanelTextFieldWithTemporalPickerAbstract<DateTime> {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.java
index 72a56d2..1f08525 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.java
@@ -21,13 +21,13 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jodatime;
 import org.joda.time.LocalDate;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldDatePickerAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldWithTemporalPickerAbstract;
 
 /**
  * Panel for rendering scalars of type {@link LocalDate}.
  */
 public class JodaLocalDatePanel
-extends ScalarPanelTextFieldDatePickerAbstract<LocalDate> {
+extends ScalarPanelTextFieldWithTemporalPickerAbstract<LocalDate> {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.java
index ba56685..d514297 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDateTimePanel.java
@@ -21,13 +21,13 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jodatime;
 import org.joda.time.LocalDateTime;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldDatePickerAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldWithTemporalPickerAbstract;
 
 /**
  * Panel for rendering scalars of type {@link LocalDateTime}.
  */
 public class JodaLocalDateTimePanel
-extends ScalarPanelTextFieldDatePickerAbstract<LocalDateTime> {
+extends ScalarPanelTextFieldWithTemporalPickerAbstract<LocalDateTime> {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/oiddto/OidDtoPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/oiddto/OidDtoPanel.java
index 8aefc91..1e1f571 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/oiddto/OidDtoPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/oiddto/OidDtoPanel.java
@@ -19,12 +19,12 @@
 package org.apache.isis.viewer.wicket.ui.components.scalars.oiddto;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldBasedOnStringSemanticsAbstract;
 
 /**
  * Panel for rendering scalars of type {@link org.apache.isis.schema.common.v2.OidDto}.
  */
-public class OidDtoPanel extends ScalarPanelTextFieldParseableAbstract {
+public class OidDtoPanel extends ScalarPanelTextFieldBasedOnStringSemanticsAbstract {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/passwd/IsisPasswordPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/passwd/IsisPasswordPanel.java
index 1c1de64..b4bc333 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/passwd/IsisPasswordPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/passwd/IsisPasswordPanel.java
@@ -24,7 +24,7 @@ import org.apache.wicket.markup.html.form.PasswordTextField;
 
 import org.apache.isis.applib.value.Password;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldBasedOnStringSemanticsAbstract;
 
 import de.agilecoders.wicket.core.util.Attributes;
 
@@ -32,7 +32,7 @@ import de.agilecoders.wicket.core.util.Attributes;
  * Panel for rendering scalars of type {@link Password Isis' applib.Password}.
  */
 public class IsisPasswordPanel
-extends ScalarPanelTextFieldParseableAbstract {
+extends ScalarPanelTextFieldBasedOnStringSemanticsAbstract {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java
index 25fe38e..1fde605 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java
@@ -24,7 +24,7 @@ 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.ByteConverterWkt;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumericAbstract;
 
 import lombok.NonNull;
 
@@ -32,7 +32,7 @@ import lombok.NonNull;
  * Panel for rendering scalars of type {@link Byte} or <tt>byte</tt>.
  */
 public class BytePanel
-extends ScalarPanelTextFieldNumeric<Byte> {
+extends ScalarPanelTextFieldNumericAbstract<Byte> {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.java
index 502d4de..d280663 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.java
@@ -24,7 +24,7 @@ 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.DoubleConverterWkt;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumericAbstract;
 
 import lombok.NonNull;
 
@@ -32,7 +32,7 @@ import lombok.NonNull;
  * Panel for rendering scalars of type {@link Double} or <tt>double</tt>.
  */
 public class DoublePanel
-extends ScalarPanelTextFieldNumeric<Double> {
+extends ScalarPanelTextFieldNumericAbstract<Double> {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java
index f98e8fc..73f4bb4 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java
@@ -24,14 +24,14 @@ 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.FloatConverterWkt;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumericAbstract;
 
 import lombok.NonNull;
 
 /**
  * Panel for rendering scalars of type {@link Float} or <tt>float</tt>.
  */
-public class FloatPanel extends ScalarPanelTextFieldNumeric<Float> {
+public class FloatPanel extends ScalarPanelTextFieldNumericAbstract<Float> {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.java
index c509281..a9cbc49 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.java
@@ -24,14 +24,14 @@ 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.IntegerConverterWkt;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumericAbstract;
 
 import lombok.NonNull;
 
 /**
  * Panel for rendering scalars of type {@link Integer} or <tt>int</tt>.
  */
-public class IntegerPanel extends ScalarPanelTextFieldNumeric<Integer> {
+public class IntegerPanel extends ScalarPanelTextFieldNumericAbstract<Integer> {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.java
index 2ba36ef..acf9c9d 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.java
@@ -24,7 +24,7 @@ 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.LongConverterWkt;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumericAbstract;
 
 import lombok.NonNull;
 
@@ -32,7 +32,7 @@ import lombok.NonNull;
  * Panel for rendering scalars of type {@link Long} or <tt>long</tt>.
  */
 public class LongPanel
-extends ScalarPanelTextFieldNumeric<Long> {
+extends ScalarPanelTextFieldNumericAbstract<Long> {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java
index f1ed507..bc93afb 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java
@@ -24,7 +24,7 @@ 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.ShortConverterWkt;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumericAbstract;
 
 import lombok.NonNull;
 
@@ -32,7 +32,7 @@ import lombok.NonNull;
  * Panel for rendering scalars of type {@link Short} or <tt>short</tt>.
  */
 public class ShortPanel
-extends ScalarPanelTextFieldNumeric<Short> {
+extends ScalarPanelTextFieldNumericAbstract<Short> {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java
index df3dc23..71b5411 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java
@@ -29,7 +29,7 @@ import org.apache.isis.core.metamodel.facets.SingleIntValueFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.multiline.MultiLineFacet;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldBasedOnStringSemanticsAbstract;
 import org.apache.isis.viewer.wicket.ui.util.Wkt;
 
 import lombok.val;
@@ -38,7 +38,7 @@ import lombok.val;
  * Panel for rendering MultiLine scalars of type String
  */
 public class MultiLineStringPanel
-extends ScalarPanelTextFieldParseableAbstract {
+extends ScalarPanelTextFieldBasedOnStringSemanticsAbstract {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.java
index 88deebf..e702cc0 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanel.java
@@ -19,12 +19,12 @@
 package org.apache.isis.viewer.wicket.ui.components.scalars.string;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldBasedOnStringSemanticsAbstract;
 
 /**
  * Panel for rendering scalars of type {@link String}.
  */
-public class StringPanel extends ScalarPanelTextFieldParseableAbstract {
+public class StringPanel extends ScalarPanelTextFieldBasedOnStringSemanticsAbstract {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/compound/ValueCompoundPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/compound/ValueCompoundPanel.java
index ba76246..cd958ca 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/compound/ValueCompoundPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/compound/ValueCompoundPanel.java
@@ -25,11 +25,11 @@ import org.apache.wicket.model.LambdaModel;
 import org.apache.isis.applib.adapters.Renderer;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldBasedOnStringSemanticsAbstract;
 
 //FIXME[ISIS-2877] introduced for experiments, should be removed
 public class ValueCompoundPanel
-extends ScalarPanelTextFieldParseableAbstract {
+extends ScalarPanelTextFieldBasedOnStringSemanticsAbstract {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/fallback/ValueFallbackPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/fallback/ValueFallbackPanel.java
index a9f0afd..b802d79 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/fallback/ValueFallbackPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/value/fallback/ValueFallbackPanel.java
@@ -22,7 +22,7 @@ import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldBasedOnStringSemanticsAbstract;
 
 /**
  * Panel for rendering any value types that do not have their own custom
@@ -33,7 +33,7 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldP
  * (typically through the Isis' {@link Value} annotation.
  */
 public class ValueFallbackPanel
-extends ScalarPanelTextFieldParseableAbstract {
+extends ScalarPanelTextFieldBasedOnStringSemanticsAbstract {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/TreePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/TreePanel.java
index ddf31fb..74beacd 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/TreePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/TreePanel.java
@@ -25,13 +25,13 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.Model;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldBasedOnStringSemanticsAbstract;
 import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
 
 /**
  * Immutable tree, reuses the ScalarPanelTextField functionality without the need of its text field.
  */
-public class TreePanel extends ScalarPanelTextFieldParseableAbstract {
+public class TreePanel extends ScalarPanelTextFieldBasedOnStringSemanticsAbstract {
 
     private static final long serialVersionUID = 1L;