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/09/15 11:13:36 UTC

[isis] branch master updated: ISIS-3198: start refactoring ScalarModel

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 8c499f6282 ISIS-3198: start refactoring ScalarModel
8c499f6282 is described below

commit 8c499f62822e0b365347b7fa7de430b2244df2da
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Sep 15 13:13:26 2022 +0200

    ISIS-3198: start refactoring ScalarModel
---
 .../commons/model/scalar/HasUiParameter.java       | 162 +++++++++++++++++++++
 .../scalar/{UiProperty.java => HasUiProperty.java} |  41 ++----
 .../viewer/commons/model/scalar/UiParameter.java   |  75 ++++++++--
 .../viewer/commons/model/scalar/UiProperty.java    |  10 ++
 .../isis/viewer/commons/model/scalar/UiScalar.java |  14 +-
 .../wicket/model/models/ActionModelImpl.java       |   4 +-
 .../viewer/wicket/model/models/ScalarModel.java    |   4 -
 .../wicket/model/models/ScalarParameterModel.java  |  50 ++-----
 .../wicket/model/models/ScalarPropertyModel.java   |  54 ++-----
 .../viewer/wicket/model/models/UiObjectWkt.java    |   2 +-
 .../interaction/act/ActionInteractionWkt.java      |   6 +-
 ...arameterUiModelWkt.java => UiParameterWkt.java} |   9 +-
 .../interaction/prop/PropertyInteractionWkt.java   |   6 +-
 ...{PropertyUiModelWkt.java => UiPropertyWkt.java} |   4 +-
 .../components/actions/ActionParametersForm.java   |   6 +-
 .../components/tree/IsisToWicketTreeAdapter.java   |   4 +-
 16 files changed, 300 insertions(+), 151 deletions(-)

diff --git a/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/HasUiParameter.java b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/HasUiParameter.java
new file mode 100644
index 0000000000..a3a2cd09c9
--- /dev/null
+++ b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/HasUiParameter.java
@@ -0,0 +1,162 @@
+/*
+ *  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.commons.model.scalar;
+
+import java.util.Optional;
+
+import org.apache.isis.commons.collections.Can;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.context.MetaModelContext;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.interactions.managed.ActionInteractionHead;
+import org.apache.isis.core.metamodel.interactions.managed.ParameterNegotiationModel;
+import org.apache.isis.core.metamodel.object.ManagedObject;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.isis.core.metamodel.util.Facets;
+
+import lombok.NonNull;
+
+@FunctionalInterface
+public interface HasUiParameter extends UiParameter {
+
+    UiParameter getUiParameter();
+
+    @Override
+    default ObjectActionParameter getMetaModel() {
+        return getUiParameter().getMetaModel();
+    }
+
+    @Override
+    default ManagedObject getOwner() {
+        return getUiParameter().getOwner();
+    }
+
+    @Override
+    default @NonNull ManagedObject getValue() {
+        return getUiParameter().getValue();
+    }
+
+    @Override
+    default void setValue(final ManagedObject paramValue) {
+        getUiParameter().setValue(paramValue);
+    }
+
+    @Override
+    default ParameterNegotiationModel getParameterNegotiationModel() {
+        return getUiParameter().getParameterNegotiationModel();
+    }
+
+    @Override
+    default int getAutoCompleteMinLength() {
+        return hasAutoComplete() ? getMetaModel().getAutoCompleteMinLength() : 0;
+    }
+
+    @Override
+    default boolean hasChoices() {
+        return getMetaModel().hasChoices();
+    }
+
+    @Override
+    default boolean hasAutoComplete() {
+        return getMetaModel().hasAutoComplete();
+    }
+
+    @Override
+    default ManagedObject getDefault() {
+        return getMetaModel().getDefault(getParameterNegotiationModel());
+    }
+
+    @Override
+    default Can<ManagedObject> getChoices() {
+        return getMetaModel().getChoices(getParameterNegotiationModel(), InteractionInitiatedBy.USER);
+    }
+
+    @Override
+    default Can<ManagedObject> getAutoComplete(final String searchArg) {
+        return getMetaModel().getAutoComplete(getParameterNegotiationModel(), searchArg, InteractionInitiatedBy.USER);
+    }
+
+    @Override
+    default String getFriendlyName() {
+        return getMetaModel().getFriendlyName(this::getOwner);
+    }
+
+    @Override
+    default boolean isCollection() {
+        return getMetaModel().getFeatureType() == FeatureType.ACTION_PARAMETER_COLLECTION
+                || getMetaModel().getFeatureType() == FeatureType.COLLECTION;
+    }
+
+    @Override
+    default boolean isScalar() {
+        return !isCollection();
+    }
+
+    @Override
+    default Optional<String> getDescribedAs() {
+        return getMetaModel().getDescription(this::getOwner);
+    }
+
+    @Override
+    default String getFileAccept() {
+        return Facets.fileAccept(getMetaModel()).orElse(null);
+    }
+
+    @Override
+    default boolean isRequired() {
+        return !getMetaModel().isOptional();
+    }
+
+    @Override
+    default ObjectSpecification getScalarTypeSpec() {
+        return getMetaModel().getElementType();
+    }
+
+    @Override
+    default boolean hasObjectAutoComplete() {
+        return Facets.autoCompleteIsPresent(getScalarTypeSpec());
+    }
+
+    @Override
+    default int getParameterIndex() {
+        return getMetaModel().getParameterIndex();
+    }
+
+    @Override
+    default String getCssClass() {
+        return getUiParameter().getCssClass();
+    }
+
+    @Override
+    default String getIdentifier() {
+        return getUiParameter().getIdentifier();
+    }
+
+    @Override
+    default ActionInteractionHead getPendingParamHead() {
+        return getMetaModel().getAction().interactionHead(getUiParameter().getOwner());
+    }
+
+    @Override
+    default MetaModelContext getMetaModelContext() {
+        return getUiParameter().getMetaModel().getMetaModelContext();
+    }
+
+}
diff --git a/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiProperty.java b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/HasUiProperty.java
similarity index 51%
copy from viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiProperty.java
copy to viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/HasUiProperty.java
index a0f0d95880..3f1ddecbd5 100644
--- a/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiProperty.java
+++ b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/HasUiProperty.java
@@ -18,52 +18,29 @@
  */
 package org.apache.isis.viewer.commons.model.scalar;
 
-import org.apache.isis.commons.collections.Can;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.interactions.managed.PropertyNegotiationModel;
 import org.apache.isis.core.metamodel.object.ManagedObject;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 
-public interface UiProperty extends UiScalar {
+@FunctionalInterface
+public interface HasUiProperty extends UiProperty {
 
-    /** prop meta model */
-    @Override
-    OneToOneAssociation getMetaModel();
-
-    // -- PENDING PROPERTY VALUE MODEL
-
-    PropertyNegotiationModel getPendingPropertyModel();
-
-    // -- SHORTCUTS
-
-    @Override
-    default int getAutoCompleteMinLength() {
-        return hasAutoComplete() ? getMetaModel().getAutoCompleteMinLength() : 0;
-    }
-
-    @Override
-    default boolean hasChoices() {
-        return getMetaModel().hasChoices();
-    }
+    UiProperty getUiProperty();
 
     @Override
-    default boolean hasAutoComplete() {
-        return getMetaModel().hasAutoComplete();
+    default ManagedObject getOwner() {
+        return getUiProperty().getOwner();
     }
 
     @Override
-    default ManagedObject getDefault() {
-        return getMetaModel().getDefault(getOwner());
+    default OneToOneAssociation getMetaModel() {
+        return getUiProperty().getMetaModel();
     }
 
     @Override
-    default Can<ManagedObject> getChoices() {
-        return getMetaModel().getChoices(getOwner(), InteractionInitiatedBy.USER);
+    default PropertyNegotiationModel getPendingPropertyModel() {
+        return getUiProperty().getPendingPropertyModel();
     }
 
-    @Override
-    default Can<ManagedObject> getAutoComplete(final String searchArg) {
-        return getMetaModel().getAutoComplete(getOwner(), searchArg, InteractionInitiatedBy.USER);
-    }
 
 }
diff --git a/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiParameter.java b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiParameter.java
index 81c65bf3ba..555c80d283 100644
--- a/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiParameter.java
+++ b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiParameter.java
@@ -18,12 +18,18 @@
  */
 package org.apache.isis.viewer.commons.model.scalar;
 
+import java.util.Optional;
+
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.context.MetaModelContext;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.interactions.managed.ActionInteractionHead;
 import org.apache.isis.core.metamodel.interactions.managed.ParameterNegotiationModel;
 import org.apache.isis.core.metamodel.object.ManagedObject;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.isis.core.metamodel.util.Facets;
 
 import lombok.NonNull;
 
@@ -40,19 +46,8 @@ public interface UiParameter extends UiScalar {
     /** param value */
     void setValue(ManagedObject paramValue);
 
-    String getCssClass();
-
-    // -- PENDING PARAMETER MODEL
-
     ParameterNegotiationModel getParameterNegotiationModel();
 
-    // -- SHORTCUTS
-
-    /** param index */
-    default int getParameterIndex() {
-        return getMetaModel().getParameterIndex();
-    }
-
     @Override
     default int getAutoCompleteMinLength() {
         return hasAutoComplete() ? getMetaModel().getAutoCompleteMinLength() : 0;
@@ -83,10 +78,68 @@ public interface UiParameter extends UiScalar {
         return getMetaModel().getAutoComplete(getParameterNegotiationModel(), searchArg, InteractionInitiatedBy.USER);
     }
 
+    @Override
+    default String getFriendlyName() {
+        return getMetaModel().getFriendlyName(this::getOwner);
+    }
+
+    @Override
+    default boolean isCollection() {
+        return getMetaModel().getFeatureType() == FeatureType.ACTION_PARAMETER_COLLECTION
+                || getMetaModel().getFeatureType() == FeatureType.COLLECTION;
+    }
+
+    @Override
+    default boolean isScalar() {
+        return !isCollection();
+    }
+
+    @Override
+    default Optional<String> getDescribedAs() {
+        return getMetaModel().getDescription(this::getOwner);
+    }
+
+    @Override
+    default String getFileAccept() {
+        return Facets.fileAccept(getMetaModel()).orElse(null);
+    }
+
+    @Override
+    default boolean isRequired() {
+        return !getMetaModel().isOptional();
+    }
+
+    @Override
+    default ObjectSpecification getScalarTypeSpec() {
+        return getMetaModel().getElementType();
+    }
+
+    @Override
+    default boolean hasObjectAutoComplete() {
+        return Facets.autoCompleteIsPresent(getScalarTypeSpec());
+    }
+
+    default int getParameterIndex() {
+        return getMetaModel().getParameterIndex();
+    }
+
+    default String getCssClass() {
+        return getMetaModel().getCssClass("isis-");
+    }
+
+    @Override
+    default String getIdentifier() {
+        return "" + getParameterIndex();
+    }
+
     default ActionInteractionHead getPendingParamHead() {
         return getMetaModel().getAction().interactionHead(getOwner());
     }
 
+    @Override
+    default MetaModelContext getMetaModelContext() {
+        return getMetaModel().getMetaModelContext();
+    }
 
 
 }
diff --git a/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiProperty.java b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiProperty.java
index a0f0d95880..2382c9a9e2 100644
--- a/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiProperty.java
+++ b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiProperty.java
@@ -36,6 +36,16 @@ public interface UiProperty extends UiScalar {
 
     // -- SHORTCUTS
 
+    @Override
+    default String getIdentifier() {
+        return getMetaModel().getFeatureIdentifier().getMemberLogicalName();
+    }
+
+    @Override
+    default String getCssClass() {
+        return getMetaModel().getCssClass("isis-");
+    }
+
     @Override
     default int getAutoCompleteMinLength() {
         return hasAutoComplete() ? getMetaModel().getAutoCompleteMinLength() : 0;
diff --git a/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiScalar.java b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiScalar.java
index 88f2aac15e..1b417b541c 100644
--- a/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiScalar.java
+++ b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/scalar/UiScalar.java
@@ -21,6 +21,8 @@ package org.apache.isis.viewer.commons.model.scalar;
 import java.util.Optional;
 
 import org.apache.isis.commons.collections.Can;
+import org.apache.isis.core.metamodel.context.HasMetaModelContext;
+import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.object.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -28,13 +30,23 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
 import org.apache.isis.core.metamodel.util.Facets;
 import org.apache.isis.viewer.commons.model.UiModel;
 
-public interface UiScalar extends UiModel {
+public interface UiScalar extends UiModel, HasMetaModelContext {
 
     ObjectFeature getMetaModel();
 
+    @Override
+    default MetaModelContext getMetaModelContext() {
+        return getMetaModel().getMetaModelContext();
+    }
+
     /** action's or property's owner */
     ManagedObject getOwner();
 
+    String getIdentifier();
+
+    String getCssClass();
+
+
     /** feature name */
     default String getFriendlyName() {
         return getMetaModel().getFriendlyName(this::getOwner);
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModelImpl.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModelImpl.java
index 82e350bd3f..4d31c7e5b5 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModelImpl.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModelImpl.java
@@ -33,7 +33,7 @@ import org.apache.isis.core.metamodel.interactions.managed.ActionInteractionHead
 import org.apache.isis.core.metamodel.object.ManagedObject;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.wicket.model.models.interaction.act.ActionInteractionWkt;
-import org.apache.isis.viewer.wicket.model.models.interaction.act.ParameterUiModelWkt;
+import org.apache.isis.viewer.wicket.model.models.interaction.act.UiParameterWkt;
 import org.apache.isis.viewer.wicket.model.util.PageParameterUtils;
 
 import lombok.val;
@@ -156,7 +156,7 @@ implements ActionModel {
     }
 
     @Override
-    public Stream<ParameterUiModelWkt> streamPendingParamUiModels() {
+    public Stream<UiParameterWkt> streamPendingParamUiModels() {
         return delegate.streamParameterUiModels();
     }
 
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index 2c7fbb8e4c..2615fa155a 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -213,8 +213,6 @@ implements HasRenderingHints, UiScalar, LinksProvider, FormExecutorContext {
 
     public abstract String validate(ManagedObject proposedAdapter);
 
-    public abstract String getCssClass();
-
     /**
      * Viewers should not use facets directly.
      * However, viewer extensions that provide their own facet types, will have to.
@@ -337,8 +335,6 @@ implements HasRenderingHints, UiScalar, LinksProvider, FormExecutorContext {
 
     protected abstract String toStringOf();
 
-    public abstract String getIdentifier();
-
     public final AssociatedActions getAssociatedActions() {
         if (associatedActions == null) {
             associatedActions = new AssociatedActions(calcAssociatedActions());
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
index b26b0b1370..e6984279fd 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
@@ -19,31 +19,29 @@
 package org.apache.isis.viewer.wicket.model.models;
 
 import org.apache.isis.commons.collections.Can;
-import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedValue;
-import org.apache.isis.core.metamodel.interactions.managed.ParameterNegotiationModel;
 import org.apache.isis.core.metamodel.object.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ActionScope;
 import org.apache.isis.core.metamodel.spec.feature.MixedIn;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
-import org.apache.isis.viewer.commons.model.scalar.UiParameter;
-import org.apache.isis.viewer.wicket.model.models.interaction.act.ParameterUiModelWkt;
+import org.apache.isis.viewer.commons.model.scalar.HasUiParameter;
+import org.apache.isis.viewer.wicket.model.models.interaction.act.UiParameterWkt;
 
+import lombok.Getter;
 import lombok.NonNull;
-import lombok.val;
 
 public class ScalarParameterModel
 extends ScalarModel
-implements UiParameter {
+implements HasUiParameter {
 
     private static final long serialVersionUID = 1L;
 
-    public static ScalarParameterModel wrap(final ParameterUiModelWkt delegate) {
+    public static ScalarParameterModel wrap(final UiParameterWkt delegate) {
         return new ScalarParameterModel(delegate);
     }
 
-    private final ParameterUiModelWkt delegate;
+    @Getter(onMethod_={@Override})
+    private final UiParameterWkt uiParameter;
 
     /**
      * Creates a model representing an action parameter of an action of a parent
@@ -51,24 +49,9 @@ implements UiParameter {
      * value (if any) of that action parameter.
      */
     private ScalarParameterModel(
-            final ParameterUiModelWkt delegate) {
-        super(UiObjectWkt.ofAdapter(delegate.getMetaModelContext(), delegate.getOwner()));
-        this.delegate = delegate;
-    }
-
-    @Override
-    public ObjectActionParameter getMetaModel() {
-        return delegate.getMetaModel();
-    }
-
-    @Override
-    public String getIdentifier() {
-        return "" + getParameterIndex();
-    }
-
-    @Override
-    public String getCssClass() {
-        return getMetaModel().getCssClass("isis-");
+            final UiParameterWkt uiParameter) {
+        super(UiObjectWkt.ofAdapter(uiParameter.getMetaModelContext(), uiParameter.getOwner()));
+        this.uiParameter = uiParameter;
     }
 
     @Override
@@ -112,17 +95,4 @@ implements UiParameter {
         return getParameterNegotiationModel().getParamModels().getElseFail(getParameterIndex());
     }
 
-    @Override
-    public ParameterNegotiationModel getParameterNegotiationModel() {
-        return delegate.getParameterNegotiationModel();
-    }
-
-    // -- HELPER
-
-    @Override
-    public MetaModelContext getMetaModelContext() {
-        return delegate.getMetaModelContext();
-    }
-
-
 }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java
index 44a466dd63..880c663016 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java
@@ -20,32 +20,31 @@ package org.apache.isis.viewer.wicket.model.models;
 
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.core.metamodel.commons.ScalarRepresentation;
-import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.interactions.managed.InteractionVeto;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedProperty;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedValue;
-import org.apache.isis.core.metamodel.interactions.managed.PropertyNegotiationModel;
 import org.apache.isis.core.metamodel.object.ManagedObject;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.viewer.commons.model.scalar.UiProperty;
-import org.apache.isis.viewer.wicket.model.models.interaction.prop.PropertyUiModelWkt;
+import org.apache.isis.viewer.commons.model.scalar.HasUiProperty;
+import org.apache.isis.viewer.wicket.model.models.interaction.prop.UiPropertyWkt;
 
+import lombok.Getter;
 import lombok.val;
 
 public class ScalarPropertyModel
 extends ScalarModel
-implements UiProperty {
+implements HasUiProperty {
 
     private static final long serialVersionUID = 1L;
 
-    private PropertyUiModelWkt delegate;
+    @Getter(onMethod_={@Override})
+    private UiPropertyWkt uiProperty;
 
     public static ScalarPropertyModel wrap(
-            final PropertyUiModelWkt delegate,
+            final UiPropertyWkt uiProperty,
             final ScalarRepresentation viewOrEdit,
             final UiObjectWkt.RenderingHint renderingHint) {
-        return new ScalarPropertyModel(delegate, viewOrEdit, renderingHint);
+        return new ScalarPropertyModel(uiProperty, viewOrEdit, renderingHint);
     }
 
     /**
@@ -54,43 +53,23 @@ implements UiProperty {
      * property.
      */
     private ScalarPropertyModel(
-            final PropertyUiModelWkt delegate,
+            final UiPropertyWkt uiProperty,
             final ScalarRepresentation viewOrEdit,
             final UiObjectWkt.RenderingHint renderingHint) {
-        super(UiObjectWkt.ofAdapter(delegate.getMetaModelContext(), delegate.getOwner()),
+        super(UiObjectWkt.ofAdapter(uiProperty.getMetaModelContext(), uiProperty.getOwner()),
                 viewOrEdit, renderingHint);
-        this.delegate = delegate;
+        this.uiProperty = uiProperty;
     }
 
     /** @return new instance bound to the same delegate */
     public ScalarPropertyModel copyHaving(
             final ScalarRepresentation viewOrEdit,
             final UiObjectWkt.RenderingHint renderingHint) {
-        return wrap(delegate, viewOrEdit, renderingHint);
-    }
-
-    @Override
-    public OneToOneAssociation getMetaModel() {
-        return delegate.getMetaModel();
+        return wrap(uiProperty, viewOrEdit, renderingHint);
     }
 
     public ManagedProperty getManagedProperty() {
-        return delegate.propertyInteraction().getManagedProperty().get();
-    }
-
-    @Override
-    public PropertyNegotiationModel getPendingPropertyModel() {
-        return delegate.getPendingPropertyModel();
-    }
-
-    @Override
-    public String getIdentifier() {
-        return getMetaModel().getFeatureIdentifier().getMemberLogicalName();
-    }
-
-    @Override
-    public String getCssClass() {
-        return getMetaModel().getCssClass("isis-");
+        return uiProperty.propertyInteraction().getManagedProperty().get();
     }
 
     @Override
@@ -123,7 +102,7 @@ implements UiProperty {
 
     @Override
     public String toStringOf() {
-        val featureId = delegate.getMetaModel().getFeatureIdentifier();
+        val featureId = uiProperty.getMetaModel().getFeatureIdentifier();
         return getFriendlyName() + ": " +
                 featureId.getLogicalTypeName() + "#" + featureId.getMemberLogicalName();
 
@@ -153,9 +132,4 @@ implements UiProperty {
         return getManagedProperty().getAssociatedActions();
     }
 
-    @Override
-    public MetaModelContext getMetaModelContext() {
-        return delegate.getMetaModelContext();
-    }
-
 }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/UiObjectWkt.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/UiObjectWkt.java
index ae0e8273cc..b826996951 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/UiObjectWkt.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/UiObjectWkt.java
@@ -168,7 +168,7 @@ implements
 
     @Override
     public String getTitle() {
-        return getObject().getTitle();
+        return getManagedObject().getTitle();
     }
 
     @Override
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/act/ActionInteractionWkt.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/act/ActionInteractionWkt.java
index 772751bc15..74b56182fd 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/act/ActionInteractionWkt.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/act/ActionInteractionWkt.java
@@ -67,7 +67,7 @@ extends HasBookmarkedOwnerAbstract<ActionInteraction> {
 
     private final String memberId;
     private final Where where;
-    private Can<ParameterUiModelWkt> childModels;
+    private Can<UiParameterWkt> childModels;
     private @Nullable ScalarPropertyModel associatedWithPropertyIfAny;
     private @Nullable ScalarParameterModel associatedWithParameterIfAny;
     private @Nullable EntityCollectionModel associatedWithCollectionIfAny;
@@ -155,11 +155,11 @@ extends HasBookmarkedOwnerAbstract<ActionInteraction> {
 
     // -- LAZY BINDING
 
-    public Stream<ParameterUiModelWkt> streamParameterUiModels() {
+    public Stream<UiParameterWkt> streamParameterUiModels() {
         if(childModels==null) {
             final int paramCount = actionInteraction().getMetamodel().get().getParameterCount();
             this.childModels = IntStream.range(0, paramCount)
-                    .mapToObj(paramIndex -> new ParameterUiModelWkt(this, paramIndex))
+                    .mapToObj(paramIndex -> new UiParameterWkt(this, paramIndex))
                     .collect(Can.toCan());
         }
         return childModels.stream();
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/act/ParameterUiModelWkt.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/act/UiParameterWkt.java
similarity index 95%
rename from viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/act/ParameterUiModelWkt.java
rename to viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/act/UiParameterWkt.java
index 44274a1bbc..dc9f71ae40 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/act/ParameterUiModelWkt.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/act/UiParameterWkt.java
@@ -37,7 +37,7 @@ import lombok.NonNull;
  *
  * @see ActionInteractionWkt
  */
-public final class ParameterUiModelWkt
+public final class UiParameterWkt
 extends ChainingModel<ActionInteraction>
 implements
     HasCommonContext,
@@ -48,7 +48,7 @@ implements
 
     final int paramIndex;
 
-    ParameterUiModelWkt(
+    UiParameterWkt(
             final ActionInteractionWkt model,
             final int paramIndex) {
         super(model);
@@ -78,11 +78,6 @@ implements
         return actionInteraction().getMetamodel().get().getParameters().getElseFail(paramIndex);
     }
 
-    @Override
-    public String getCssClass() {
-        return getMetaModel().getCssClass("isis-");
-    }
-
     @Override
     public @NonNull ManagedObject getValue() {
         return getParameterNegotiationModel().getParamValue(paramIndex);
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/prop/PropertyInteractionWkt.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/prop/PropertyInteractionWkt.java
index 7103bee94e..986df74997 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/prop/PropertyInteractionWkt.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/prop/PropertyInteractionWkt.java
@@ -59,7 +59,7 @@ extends HasBookmarkedOwnerAbstract<PropertyInteraction> {
 
     private final String memberId;
     private final Where where;
-    private Can<PropertyUiModelWkt> childModels;
+    private Can<UiPropertyWkt> childModels;
 
     public PropertyInteractionWkt(
             final BookmarkedObjectWkt bookmarkedObject,
@@ -102,9 +102,9 @@ extends HasBookmarkedOwnerAbstract<PropertyInteraction> {
 
     // -- LAZY BINDING
 
-    public Stream<PropertyUiModelWkt> streamPropertyUiModels() {
+    public Stream<UiPropertyWkt> streamPropertyUiModels() {
         if(childModels==null) {
-            childModels = Can.ofSingleton(new PropertyUiModelWkt(this));
+            childModels = Can.ofSingleton(new UiPropertyWkt(this));
         }
         return childModels.stream();
     }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/prop/PropertyUiModelWkt.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/prop/UiPropertyWkt.java
similarity index 97%
rename from viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/prop/PropertyUiModelWkt.java
rename to viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/prop/UiPropertyWkt.java
index d1d0776fd4..21a2669eb3 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/prop/PropertyUiModelWkt.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/interaction/prop/UiPropertyWkt.java
@@ -36,7 +36,7 @@ import org.apache.isis.viewer.wicket.model.models.HasCommonContext;
  * @see PropertyInteractionWkt
  * @see ChainingModel
  */
-public final class PropertyUiModelWkt
+public final class UiPropertyWkt
 extends ChainingModel<PropertyInteraction>
 implements
     HasCommonContext,
@@ -45,7 +45,7 @@ implements
 
     private static final long serialVersionUID = 1L;
 
-    PropertyUiModelWkt(
+    UiPropertyWkt(
             final PropertyInteractionWkt model) {
         super(model);
     }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
index 692bce8472..266f45b284 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
@@ -39,7 +39,7 @@ import org.apache.isis.viewer.commons.model.scalar.UiParameter;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.ScalarParameterModel;
 import org.apache.isis.viewer.wicket.model.models.ScalarPropertyModel;
-import org.apache.isis.viewer.wicket.model.models.interaction.act.ParameterUiModelWkt;
+import org.apache.isis.viewer.wicket.model.models.interaction.act.UiParameterWkt;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
 import org.apache.isis.viewer.wicket.ui.panels.PromptFormAbstract;
 import org.apache.isis.viewer.wicket.ui.util.Wkt;
@@ -75,7 +75,7 @@ extends PromptFormAbstract<ActionModel> {
         paramPanels.clear();
 
         actionModel.streamPendingParamUiModels()
-        .map(ParameterUiModelWkt.class::cast)
+        .map(UiParameterWkt.class::cast)
         .forEach(paramModel->{
 
             val container = Wkt.containerAdd(repeatingView, repeatingView.newChildId());
@@ -89,7 +89,7 @@ extends PromptFormAbstract<ActionModel> {
 
     private void newParamPanel(
             final WebMarkupContainer container,
-            final ParameterUiModelWkt paramModel,
+            final UiParameterWkt paramModel,
             final Consumer<ScalarPanelAbstract> onNewScalarPanel) {
 
         val scalarParamModel = ScalarParameterModel.wrap(paramModel);
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
index 63c27008d6..88972f0302 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
@@ -50,8 +50,8 @@ import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.object.ManagedObject;
 import org.apache.isis.core.metamodel.object.ManagedObjects;
-import org.apache.isis.viewer.wicket.model.models.UiObjectWkt;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.model.models.UiObjectWkt;
 import org.apache.isis.viewer.wicket.model.models.ValueModel;
 import org.apache.isis.viewer.wicket.model.util.WktContext;
 import org.apache.isis.viewer.wicket.ui.components.entity.icontitle.EntityIconAndTitlePanel;
@@ -200,7 +200,7 @@ class IsisToWicketTreeAdapter {
     // -- ISIS' TREE-MODEL
 
     /**
-     * Extending the EntityModel to also provide a TreePath.
+     * Extending the UiObjectWkt to also provide a TreePath.
      */
     private static class TreeModel extends UiObjectWkt {
         private static final long serialVersionUID = 8916044984628849300L;