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/06/26 13:52:26 UTC

[isis] branch master updated: ISIS-1720: cleaning up ManagedMember

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 1d5550a  ISIS-1720: cleaning up ManagedMember
1d5550a is described below

commit 1d5550aa6f2c63f2a089581ac6b9b900845cf666
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Jun 26 15:52:16 2021 +0200

    ISIS-1720: cleaning up ManagedMember
    
    also optimize mixed-in member lookup when searching actions
---
 .../interactions/managed/ManagedFeature.java       | 10 ++++-----
 .../interactions/managed/ManagedMember.java        |  6 +-----
 .../managed/ParameterNegotiationModel.java         |  2 +-
 .../core/metamodel/spec/ObjectSpecification.java   | 14 +++++++++++++
 .../specloader/specimpl/FacetedMethodsBuilder.java |  3 +--
 .../specimpl/OneToOneAssociationMixedIn.java       |  4 +++-
 .../javafx/ui/components/UiComponentFactoryFx.java | 20 +++++++++---------
 .../javafx/ui/components/object/ObjectViewFx.java  |  2 +-
 .../prototyping/PrototypingInfoPopupProvider.java  |  6 +++---
 .../ui/components/UiComponentFactoryVaa.java       | 12 +++++------
 .../vaadin/ui/components/action/ActionDialog.java  | 14 ++++++-------
 .../ui/components/blob/BlobFieldFactory.java       |  6 +++---
 .../ui/components/clob/ClobFieldFactory.java       |  6 +++---
 .../ui/components/markup/MarkupFieldFactory.java   |  6 +++---
 .../vaadin/ui/components/object/ObjectViewVaa.java | 24 +++++++++++-----------
 .../ui/components/other/FallbackFieldFactory.java  |  8 ++++----
 .../components/temporal/TemporalFieldFactory.java  | 10 ++++-----
 .../ui/components/text/TextFieldFactory.java       |  6 +++---
 .../ui/components/text/uuid/UuidFieldFactory.java  |  6 +++---
 .../ui/vaa/components/AsciiDocFieldFactoryVaa.java |  6 +++---
 .../model/components/UiComponentFactory.java       | 20 +++++++++---------
 .../decorator/prototyping/PrototypingUiModel.java  | 18 ++++++++--------
 22 files changed, 110 insertions(+), 99 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedFeature.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedFeature.java
index 7a3cd33..be0ad4c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedFeature.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedFeature.java
@@ -33,9 +33,9 @@ public interface ManagedFeature {
     Identifier getIdentifier();
 
     /**
-     * @return The feature's display name, as rendered with the UI.
+     * @return The feature's translated friendly name, as rendered with the UI.
      */
-    String getDisplayLabel();
+    String getFriendlyName();
 
     /**
      * @return The specification of the feature's underlying type.
@@ -58,7 +58,7 @@ public interface ManagedFeature {
      * @return Optionally the feature's facet of the specified {@code facetType}
      * (as per the type it reports from {@link Facet#facetType()}), based on existence.
      */
-    default <T extends Facet> Optional<T> getFacet(@Nullable Class<T> facetType) {
+    default <T extends Facet> Optional<T> getFacet(@Nullable final Class<T> facetType) {
         return facetType!=null
                 ? Optional.ofNullable(getMetaModel().getFacet(facetType))
                 : Optional.empty();
@@ -69,13 +69,13 @@ public interface ManagedFeature {
      * @return Whether there exists a facet for this feature, that is of the
      * specified {@code facetType} (as per the type it reports from {@link Facet#facetType()}).
      */
-    default <T extends Facet> boolean hasFacet(@Nullable Class<T> facetType) {
+    default <T extends Facet> boolean hasFacet(@Nullable final Class<T> facetType) {
         return facetType!=null
                 ? getMetaModel().getFacet(facetType)!=null
                 : false;
     }
 
-    default <T extends Facet> T getFacetElseFail(@Nullable Class<T> facetType) {
+    default <T extends Facet> T getFacetElseFail(@Nullable final Class<T> facetType) {
         return getFacet(facetType)
                 .orElseThrow(()->_Exceptions
                         .noSuchElement("Feature %s has no such facet %s",
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedMember.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedMember.java
index 99a78dc..4ac66b8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedMember.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedMember.java
@@ -123,17 +123,13 @@ public abstract class ManagedMember implements ManagedFeature {
         return getMetaModel().getId();
     }
 
-    public String getName() {
-        return getMetaModel().getFriendlyName(null);
-    }
-
     @Override
     public Identifier getIdentifier() {
         return getMetaModel().getFeatureIdentifier();
     }
 
     @Override
-    public String getDisplayLabel() {
+    public String getFriendlyName() {
         return getMetaModel().getFriendlyName(this::getOwner);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ParameterNegotiationModel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ParameterNegotiationModel.java
index ce94646..37a2561 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ParameterNegotiationModel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ParameterNegotiationModel.java
@@ -282,7 +282,7 @@ public class ParameterNegotiationModel {
         }
 
         @Override
-        public String getDisplayLabel() {
+        public String getFriendlyName() {
             return getMetaModel().getStaticFriendlyName()
                     .orElseThrow(_Exceptions::unexpectedCodeReach);
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
index 8db7b2d..564962b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
@@ -73,6 +73,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationContainer;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.core.metamodel.specloader.specimpl.IntrospectionState;
 import org.apache.isis.core.metamodel.specloader.specimpl.MixedInMember;
+import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionMixedIn;
 
 import lombok.NonNull;
 import lombok.val;
@@ -145,6 +146,19 @@ extends
     }
 
     /**
+     * @since 2.0
+     */
+    public default Optional<ObjectActionMixedIn> lookupMixedInAction(final ObjectSpecification mixinSpec) {
+        return
+                streamAnyActions(MixedIn.INCLUDED)
+                .filter(ObjectActionMixedIn.class::isInstance)
+                .map(ObjectActionMixedIn.class::cast)
+                .filter(member->member.getMixinType().getFeatureIdentifier().equals(mixinSpec.getFeatureIdentifier()))
+                .findAny();
+    }
+
+
+    /**
      * @return Java class this specification is associated with
      */
     Class<?> getCorrespondingClass();
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
index 01b5631..a7e3a4e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
@@ -565,8 +565,7 @@ implements HasMetaModelContext {
         }
 
         return inspectedTypeSpec
-                .lookupMixedInMember(inspectedTypeSpec)
-                .map(ObjectActionMixedIn.class::cast)
+                .lookupMixedInAction(inspectedTypeSpec)
                 .map(ObjectActionMixedIn::getFacetedMethod)
                 .map(FacetedMethod::getMethod)
                 .map(method::equals)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
index 902ae71..8071967 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
@@ -38,7 +38,9 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import lombok.Getter;
 import lombok.val;
 
-public class OneToOneAssociationMixedIn extends OneToOneAssociationDefault implements MixedInMember {
+public class OneToOneAssociationMixedIn
+extends OneToOneAssociationDefault
+implements MixedInMember {
 
     /**
      * The type of the mixin (providing the action), eg annotated with {@link org.apache.isis.applib.annotation.Mixin}.
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/UiComponentFactoryFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/UiComponentFactoryFx.java
index 8a811af..1a66328 100644
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/UiComponentFactoryFx.java
+++ b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/UiComponentFactoryFx.java
@@ -27,8 +27,8 @@ import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.LabelPosition;
 import org.apache.isis.commons.handler.ChainOfResponsibility;
-import org.apache.isis.core.config.environment.IsisSystemEnvironment;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.core.config.environment.IsisSystemEnvironment;
 import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedMember;
 import org.apache.isis.incubator.viewer.javafx.model.context.UiContextFx;
@@ -55,9 +55,9 @@ public class UiComponentFactoryFx implements UiComponentFactory<Node, Node> {
 
     @Inject
     private UiComponentFactoryFx(
-            IsisSystemEnvironment isisSystemEnvironment,
-            UiContextFx uiContext,
-            List<UiComponentHandlerFx> handlers) {
+            final IsisSystemEnvironment isisSystemEnvironment,
+            final UiContextFx uiContext,
+            final List<UiComponentHandlerFx> handlers) {
 
         this.isPrototyping = isisSystemEnvironment.isPrototyping();
         this.uiContext = uiContext;
@@ -68,7 +68,7 @@ public class UiComponentFactoryFx implements UiComponentFactory<Node, Node> {
     }
 
     @Override
-    public Node componentFor(ComponentRequest request) {
+    public Node componentFor(final ComponentRequest request) {
 
         val formField = chainOfHandlers
                 .handle(request)
@@ -89,13 +89,13 @@ public class UiComponentFactoryFx implements UiComponentFactory<Node, Node> {
     }
 
     @Override
-    public Node buttonFor(ButtonRequest request) {
+    public Node buttonFor(final ButtonRequest request) {
 
         val managedAction = request.getManagedAction();
         val disablingUiModelIfAny = request.getDisablingUiModelIfAny();
         val actionEventHandler = request.getActionEventHandler();
 
-        val uiButton = new Button(managedAction.getName());
+        val uiButton = new Button(managedAction.getFriendlyName());
         uiButton.setOnAction(event->actionEventHandler.accept(managedAction));
 
         disablingUiModelIfAny.ifPresent(disablingUiModel->{
@@ -110,7 +110,7 @@ public class UiComponentFactoryFx implements UiComponentFactory<Node, Node> {
     }
 
     @Override
-    public Node parameterFor(ComponentRequest request) {
+    public Node parameterFor(final ComponentRequest request) {
         val formField = chainOfHandlers
                 .handle(request)
                 .orElseThrow(()->_Exceptions.unrecoverableFormatted(
@@ -119,11 +119,11 @@ public class UiComponentFactoryFx implements UiComponentFactory<Node, Node> {
     }
 
     @Override
-    public LabelAndPosition<Node> labelFor(ComponentRequest request) {
+    public LabelAndPosition<Node> labelFor(final ComponentRequest request) {
         val labelPosition = request.getManagedFeature().getFacet(LabelAtFacet.class)
                 .map(LabelAtFacet::label)
                 .orElse(LabelPosition.NOT_SPECIFIED);
-        val uiLabel = new Label(request.getDisplayLabel());
+        val uiLabel = new Label(request.getFriendlyName());
         return LabelAndPosition.of(labelPosition, uiLabel);
     }
 
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java
index 0c8de07f..eaf9618 100644
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java
+++ b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java
@@ -236,7 +236,7 @@ public class ObjectViewFx extends VBox {
                 .getManagedCollection()
                 .ifPresent(managedCollection -> {
 
-                    val titledPanel = _fx.add(container, new TitledPanel(managedCollection.getName()));
+                    val titledPanel = _fx.add(container, new TitledPanel(managedCollection.getFriendlyName()));
 
                     // handle associated actions
                     for(val actionData : collectionData.getActions()) {
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingInfoPopupProvider.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingInfoPopupProvider.java
index 4389579..40ac429 100644
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingInfoPopupProvider.java
+++ b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingInfoPopupProvider.java
@@ -53,7 +53,7 @@ public class PrototypingInfoPopupProvider {
 
     public void showPrototypingPopup(final PrototypingUiModel prototypingUiModel) {
         val infoNode = getPrototypingInfoUiComponent(prototypingUiModel);
-        val headerText = prototypingUiModel.getFeatureFullLabel();
+        val headerText = prototypingUiModel.getFeatureFriendlyIdentifier();
         val contentText = prototypingUiModel.getFeatureType().toString();
         Dialogs.message("Inspect Metamodel", headerText, contentText, infoNode);
     }
@@ -65,7 +65,7 @@ public class PrototypingInfoPopupProvider {
         private final String key;
         private final String value;
         @Override
-        public int compareTo(Info other) {
+        public int compareTo(final Info other) {
             return this.getKey().compareTo(other.getKey());
         }
     }
@@ -119,7 +119,7 @@ public class PrototypingInfoPopupProvider {
         return scrollPane;
     }
 
-    private String summarize(Facet facet) {
+    private String summarize(final Facet facet) {
         val sb = new StringBuilder();
         sb.append(facet.getClass().getSimpleName());
         if(facet instanceof FacetAbstract) {
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/UiComponentFactoryVaa.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/UiComponentFactoryVaa.java
index c001ddf..c01b109 100644
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/UiComponentFactoryVaa.java
+++ b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/UiComponentFactoryVaa.java
@@ -45,7 +45,7 @@ public class UiComponentFactoryVaa implements UiComponentFactory<Component, Comp
     private final List<Class<?>> registeredHandlers;
 
     @Inject
-    private UiComponentFactoryVaa(List<Handler<Component>> handlers) {
+    private UiComponentFactoryVaa(final List<Handler<Component>> handlers) {
         this.chainOfHandlers = ChainOfResponsibility.of(handlers);
         this.registeredHandlers = handlers.stream()
                 .map(Handler::getClass)
@@ -53,13 +53,13 @@ public class UiComponentFactoryVaa implements UiComponentFactory<Component, Comp
     }
 
     @Override
-    public Component buttonFor(ButtonRequest request) {
+    public Component buttonFor(final ButtonRequest request) {
 
         val managedAction = request.getManagedAction();
         val disablingUiModelIfAny = request.getDisablingUiModelIfAny();
         val actionEventHandler = request.getActionEventHandler();
 
-        val uiButton = _vaa.newButton(managedAction.getName());
+        val uiButton = _vaa.newButton(managedAction.getFriendlyName());
 
         disablingUiModelIfAny.ifPresent(disablingUiModel->{
 //            uiContext.getDisablingDecoratorForButton()
@@ -76,7 +76,7 @@ public class UiComponentFactoryVaa implements UiComponentFactory<Component, Comp
     }
 
     @Override
-    public Component componentFor(ComponentRequest request) {
+    public Component componentFor(final ComponentRequest request) {
         return chainOfHandlers
                 .handle(request)
                 .orElseThrow(()->_Exceptions.unrecoverableFormatted(
@@ -84,7 +84,7 @@ public class UiComponentFactoryVaa implements UiComponentFactory<Component, Comp
     }
 
     @Override
-    public Component parameterFor(ComponentRequest request) {
+    public Component parameterFor(final ComponentRequest request) {
         return chainOfHandlers
                 .handle(request)
                 .orElseThrow(()->_Exceptions.unrecoverableFormatted(
@@ -92,7 +92,7 @@ public class UiComponentFactoryVaa implements UiComponentFactory<Component, Comp
     }
 
     @Override
-    public LabelAndPosition<Component> labelFor(ComponentRequest request) {
+    public LabelAndPosition<Component> labelFor(final ComponentRequest request) {
         throw _Exceptions.unsupportedOperation("unlikely to be needed for Vaadin, "
                 + "since Field components already have their own label");
     }
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/action/ActionDialog.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/action/ActionDialog.java
index cfb650d..c846e6d 100644
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/action/ActionDialog.java
+++ b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/action/ActionDialog.java
@@ -95,11 +95,11 @@ public class ActionDialog extends Dialog {
 
     // -- HELPER
 
-    private Component header(ManagedAction managedAction, Can<Component> hidableComponents) {
+    private Component header(final ManagedAction managedAction, final Can<Component> hidableComponents) {
 
         val resizeHandler = DialogResizeHandler.of(this, hidableComponents);
 
-        val title = new H2(managedAction.getName());
+        val title = new H2(managedAction.getFriendlyName());
         title.addClassName("dialog-title");
 
         val minButton = new Button(VaadinIcon.ANGLE_DOWN.create());
@@ -123,9 +123,9 @@ public class ActionDialog extends Dialog {
     }
 
     private Component footer(
-            ManagedAction managedAction,
-            ParameterNegotiationModel pendingArgs,
-            Predicate<Can<ManagedObject>> submitCallback) {
+            final ManagedAction managedAction,
+            final ParameterNegotiationModel pendingArgs,
+            final Predicate<Can<ManagedObject>> submitCallback) {
 
         val okButton = new Button("Ok");
         val cancelButton = new Button("Cancel");
@@ -166,12 +166,12 @@ public class ActionDialog extends Dialog {
         private Button minButton;
         private Button maxButton;
 
-        public void bindMinimise(Button minButton) {
+        public void bindMinimise(final Button minButton) {
             this.minButton = minButton;
             minButton.addClickListener(event -> minimise());
         }
 
-        public void bindMaximise(Button maxButton) {
+        public void bindMaximise(final Button maxButton) {
             this.maxButton = maxButton;
             maxButton.addClickListener(event -> maximise());
         }
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/blob/BlobFieldFactory.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/blob/BlobFieldFactory.java
index e067aac..ede9934 100644
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/blob/BlobFieldFactory.java
+++ b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/blob/BlobFieldFactory.java
@@ -33,13 +33,13 @@ import lombok.val;
 public class BlobFieldFactory implements UiComponentHandlerVaa {
 
     @Override
-    public boolean isHandling(ComponentRequest request) {
+    public boolean isHandling(final ComponentRequest request) {
         return request.hasFeatureTypeFacet(BlobValueFacet.class);
     }
 
     @Override
-    public Component handle(ComponentRequest request) {
-        val uiField = new BlobField(request.getDisplayLabel());
+    public Component handle(final ComponentRequest request) {
+        val uiField = new BlobField(request.getFriendlyName());
         uiField.setValue(request.getFeatureValue(Blob.class).orElse(null));
         return uiField;
     }
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/clob/ClobFieldFactory.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/clob/ClobFieldFactory.java
index fc1634d..551e895 100644
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/clob/ClobFieldFactory.java
+++ b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/clob/ClobFieldFactory.java
@@ -33,13 +33,13 @@ import lombok.val;
 public class ClobFieldFactory implements UiComponentHandlerVaa {
 
     @Override
-    public boolean isHandling(ComponentRequest request) {
+    public boolean isHandling(final ComponentRequest request) {
         return request.hasFeatureTypeFacet(ClobValueFacet.class);
     }
 
     @Override
-    public Component handle(ComponentRequest request) {
-        val uiField = new ClobField(request.getDisplayLabel());
+    public Component handle(final ComponentRequest request) {
+        val uiField = new ClobField(request.getFriendlyName());
         uiField.setValue(request.getFeatureValue(Clob.class).orElse(null));
         return uiField;
     }
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/markup/MarkupFieldFactory.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/markup/MarkupFieldFactory.java
index 9739871..261a056 100644
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/markup/MarkupFieldFactory.java
+++ b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/markup/MarkupFieldFactory.java
@@ -31,13 +31,13 @@ import lombok.val;
 public class MarkupFieldFactory implements UiComponentHandlerVaa {
 
     @Override
-    public boolean isHandling(ComponentRequest request) {
+    public boolean isHandling(final ComponentRequest request) {
         return request.isFeatureTypeEqualTo(org.apache.isis.applib.value.Markup.class);
     }
 
     @Override
-    public Component handle(ComponentRequest request) {
-        val uiField = new MarkupField(request.getDisplayLabel());
+    public Component handle(final ComponentRequest request) {
+        val uiField = new MarkupField(request.getFriendlyName());
         uiField.setValue(request.getFeatureValue(org.apache.isis.applib.value.Markup.class).orElse(null));
         return uiField;
     }
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/object/ObjectViewVaa.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/object/ObjectViewVaa.java
index 592b194..c0c4aa1 100644
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/object/ObjectViewVaa.java
+++ b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/object/ObjectViewVaa.java
@@ -97,7 +97,7 @@ public class ObjectViewVaa extends VerticalLayout {
         val gridVisitor = new UiGridLayout.Visitor<HasComponents, Tabs>(this) {
 
             @Override
-            protected void onObjectTitle(HasComponents container, DomainObjectLayoutData domainObjectData) {
+            protected void onObjectTitle(final HasComponents container, final DomainObjectLayoutData domainObjectData) {
                 val uiTitle = _vaa.add(container, new H1(objectTitle));
                 //                uiTitle.addThemeVariants(
                 //                        ButtonVariant.LUMO_LARGE,
@@ -105,7 +105,7 @@ public class ObjectViewVaa extends VerticalLayout {
             }
 
             @Override
-            protected HasComponents newRow(HasComponents container, BS3Row bs3Row) {
+            protected HasComponents newRow(final HasComponents container, final BS3Row bs3Row) {
                 val uiRow = _vaa.add(container, new FlexLayout());
 
                 uiRow.setWidthFull();
@@ -122,7 +122,7 @@ public class ObjectViewVaa extends VerticalLayout {
             }
 
             @Override
-            protected HasComponents newCol(HasComponents container, BS3Col bs3col) {
+            protected HasComponents newCol(final HasComponents container, final BS3Col bs3col) {
 
                 val uiCol = _vaa.add(container, new VerticalLayout());
 
@@ -136,7 +136,7 @@ public class ObjectViewVaa extends VerticalLayout {
             }
 
             @Override
-            protected HasComponents newActionPanel(HasComponents container) {
+            protected HasComponents newActionPanel(final HasComponents container) {
                 val uiActionPanel = _vaa.add(container, new FlexLayout());
 
                 uiActionPanel.setWrapMode(FlexLayout.WrapMode.WRAP); // allow line breaking
@@ -145,7 +145,7 @@ public class ObjectViewVaa extends VerticalLayout {
             }
 
             @Override
-            protected Tabs newTabGroup(HasComponents container, BS3TabGroup tabGroupData) {
+            protected Tabs newTabGroup(final HasComponents container, final BS3TabGroup tabGroupData) {
                 val uiTabGroup = _vaa.add(container, new Tabs());
 
                 uiTabGroup.setOrientation(Tabs.Orientation.HORIZONTAL);
@@ -153,13 +153,13 @@ public class ObjectViewVaa extends VerticalLayout {
             }
 
             @Override
-            protected HasComponents newTab(Tabs container, BS3Tab tabData) {
+            protected HasComponents newTab(final Tabs container, final BS3Tab tabData) {
                 val uiTab = _vaa.add(container, new Tab(tabData.getName()));
                 return uiTab;
             }
 
             @Override
-            protected HasComponents newFieldSet(HasComponents container, FieldSet fieldSetData) {
+            protected HasComponents newFieldSet(final HasComponents container, final FieldSet fieldSetData) {
 
                 _vaa.add(container, new H2(fieldSetData.getName()));
 
@@ -179,13 +179,13 @@ public class ObjectViewVaa extends VerticalLayout {
 
 
             @Override
-            protected void onClearfix(HasComponents container, BS3ClearFix clearFixData) {
+            protected void onClearfix(final HasComponents container, final BS3ClearFix clearFixData) {
                 // TODO Auto-generated method stub
             }
 
             @SuppressWarnings("unused")
             @Override
-            protected void onAction(HasComponents container, ActionLayoutData actionData) {
+            protected void onAction(final HasComponents container, final ActionLayoutData actionData) {
 
                 val owner = managedObject;
                 val interaction = ActionInteraction.start(owner, actionData.getId(), Where.OBJECT_FORMS);
@@ -207,7 +207,7 @@ public class ObjectViewVaa extends VerticalLayout {
 
             @SuppressWarnings("unused")
             @Override
-            protected void onProperty(HasComponents container, PropertyLayoutData propertyData) {
+            protected void onProperty(final HasComponents container, final PropertyLayoutData propertyData) {
 
                 val owner = managedObject;
 
@@ -234,7 +234,7 @@ public class ObjectViewVaa extends VerticalLayout {
             }
 
             @Override
-            protected void onCollection(HasComponents container, CollectionLayoutData collectionData) {
+            protected void onCollection(final HasComponents container, final CollectionLayoutData collectionData) {
 
                 val owner = managedObject;
 
@@ -242,7 +242,7 @@ public class ObjectViewVaa extends VerticalLayout {
                 .checkVisibility()
                 .getManagedCollection()
                 .ifPresent(managedCollection -> {
-                    _vaa.add(container, new H3(managedCollection.getName()));
+                    _vaa.add(container, new H3(managedCollection.getFriendlyName()));
 
                     // handle associated actions
                     val actionBar = newActionPanel(container);
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/other/FallbackFieldFactory.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/other/FallbackFieldFactory.java
index 9d58e5b..275b04a 100644
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/other/FallbackFieldFactory.java
+++ b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/other/FallbackFieldFactory.java
@@ -44,12 +44,12 @@ public class FallbackFieldFactory implements UiComponentHandlerVaa {
     @Inject private Provider<UiComponentFactoryVaa> uiComponentFactory;
 
     @Override
-    public boolean isHandling(ComponentRequest request) {
+    public boolean isHandling(final ComponentRequest request) {
         return true; // the last handler in the chain
     }
 
     @Override
-    public Component handle(ComponentRequest request) {
+    public Component handle(final ComponentRequest request) {
 
         val spec = request.getManagedFeature().getSpecification();
 
@@ -73,12 +73,12 @@ public class FallbackFieldFactory implements UiComponentHandlerVaa {
         });
 
 
-        val uiField = new DebugField(request.getManagedFeature().getDisplayLabel());
+        val uiField = new DebugField(request.getManagedFeature().getFriendlyName());
         uiField.setValue(debugUiModel);
         return uiField;
     }
 
-    private String summarize(Facet facet) {
+    private String summarize(final Facet facet) {
         val sb = new StringBuilder();
         sb.append(facet.getClass().getSimpleName());
         if(facet instanceof FacetAbstract) {
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/temporal/TemporalFieldFactory.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/temporal/TemporalFieldFactory.java
index fb114bf..806a1e4 100644
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/temporal/TemporalFieldFactory.java
+++ b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/temporal/TemporalFieldFactory.java
@@ -40,7 +40,7 @@ import lombok.val;
 public class TemporalFieldFactory implements UiComponentHandlerVaa {
 
     @Override
-    public boolean isHandling(ComponentRequest request) {
+    public boolean isHandling(final ComponentRequest request) {
         return request.isFeatureTypeEqualTo(java.sql.Date.class)
             ||(request.hasFeatureTypeFacet(TemporalValueFacet.class)
                 // TODO lift this restrictions, as we support more types
@@ -51,7 +51,7 @@ public class TemporalFieldFactory implements UiComponentHandlerVaa {
     }
 
     @Override
-    public Component handle(ComponentRequest request) {
+    public Component handle(final ComponentRequest request) {
 
         val temporalCharacteristic = getTemporalCharacteristic(request);
         val offsetCharacteristic = getOffsetCharacteristic(request);
@@ -59,7 +59,7 @@ public class TemporalFieldFactory implements UiComponentHandlerVaa {
         switch(temporalCharacteristic) {
         case DATE_ONLY:{
 
-            val uiField = new DateField(request.getDisplayLabel());
+            val uiField = new DateField(request.getFriendlyName());
             val managedFeature = request.getManagedFeature();
 
             if(request.isFeatureTypeEqualTo(LocalDate.class)) {
@@ -92,7 +92,7 @@ public class TemporalFieldFactory implements UiComponentHandlerVaa {
 
     // -- HELPER
 
-    private TemporalCharacteristic getTemporalCharacteristic(ComponentRequest request) {
+    private TemporalCharacteristic getTemporalCharacteristic(final ComponentRequest request) {
         @SuppressWarnings("rawtypes")
         val temporalFacet = request.getFeatureTypeSpec().getFacet(TemporalValueFacet.class);
         if(temporalFacet!=null) {
@@ -107,7 +107,7 @@ public class TemporalFieldFactory implements UiComponentHandlerVaa {
         throw _Exceptions.unrecoverableFormatted("type %s not handled", request.getFeatureType());
     }
 
-    private OffsetCharacteristic getOffsetCharacteristic(ComponentRequest request) {
+    private OffsetCharacteristic getOffsetCharacteristic(final ComponentRequest request) {
         @SuppressWarnings("rawtypes")
         val temporalFacet = request.getFeatureTypeSpec().getFacet(TemporalValueFacet.class);
         if(temporalFacet!=null) {
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/text/TextFieldFactory.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/text/TextFieldFactory.java
index fe960ce..b3a415d 100644
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/text/TextFieldFactory.java
+++ b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/text/TextFieldFactory.java
@@ -34,14 +34,14 @@ import lombok.val;
 public class TextFieldFactory implements UiComponentHandlerVaa {
 
     @Override
-    public boolean isHandling(ComponentRequest request) {
+    public boolean isHandling(final ComponentRequest request) {
         return request.hasFeatureTypeFacet(StringValueFacet.class);
     }
 
     @Override
-    public Component handle(ComponentRequest request) {
+    public Component handle(final ComponentRequest request) {
 
-        val uiField = new TextField(request.getDisplayLabel());
+        val uiField = new TextField(request.getFriendlyName());
 
         val managedFeature = request.getManagedFeature();
 
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/text/uuid/UuidFieldFactory.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/text/uuid/UuidFieldFactory.java
index fce0959..3e5aeb7 100644
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/text/uuid/UuidFieldFactory.java
+++ b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/text/uuid/UuidFieldFactory.java
@@ -36,14 +36,14 @@ import lombok.val;
 public class UuidFieldFactory implements UiComponentHandlerVaa {
 
     @Override
-    public boolean isHandling(ComponentRequest request) {
+    public boolean isHandling(final ComponentRequest request) {
         return request.isFeatureTypeEqualTo(UUID.class);
     }
 
     @Override
-    public Component handle(ComponentRequest request) {
+    public Component handle(final ComponentRequest request) {
 
-        val uiField = new TextField(request.getDisplayLabel());
+        val uiField = new TextField(request.getFriendlyName());
 
         val managedFeature = request.getManagedFeature();
 
diff --git a/valuetypes/asciidoc/ui/vaadin/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/vaa/components/AsciiDocFieldFactoryVaa.java b/valuetypes/asciidoc/ui/vaadin/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/vaa/components/AsciiDocFieldFactoryVaa.java
index f36fc3a..f852b1a 100644
--- a/valuetypes/asciidoc/ui/vaadin/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/vaa/components/AsciiDocFieldFactoryVaa.java
+++ b/valuetypes/asciidoc/ui/vaadin/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/vaa/components/AsciiDocFieldFactoryVaa.java
@@ -34,13 +34,13 @@ public class AsciiDocFieldFactoryVaa implements UiComponentHandlerVaa {
     //private final static int TYPICAL_LENGTH = 48;
 
     @Override
-    public boolean isHandling(ComponentRequest request) {
+    public boolean isHandling(final ComponentRequest request) {
         return request.isFeatureTypeAssignableFrom(AsciiDoc.class);
     }
 
     @Override
-    public Component handle(ComponentRequest request) {
-        val uiField = new AsciiDocFieldVaa(request.getDisplayLabel());
+    public Component handle(final ComponentRequest request) {
+        val uiField = new AsciiDocFieldVaa(request.getFriendlyName());
         uiField.setValue(request.getFeatureValue(AsciiDoc.class).orElse(null));
 
 //not compatible with flexibly growing grids
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/components/UiComponentFactory.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/components/UiComponentFactory.java
index 62e67a6..19c6bad 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/components/UiComponentFactory.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/components/UiComponentFactory.java
@@ -68,14 +68,14 @@ public interface UiComponentFactory<B, C> {
         @NonNull private final ManagedFeature managedFeature;
         @NonNull private final Optional<DisablingUiModel> disablingUiModelIfAny;
 
-        public static ComponentRequest of(ManagedParameter managedParameter) {
+        public static ComponentRequest of(final ManagedParameter managedParameter) {
             return of(managedParameter, Optional.empty());
         }
 
         // -- SHORTCUTS
 
-        public String getDisplayLabel() {
-            return managedFeature.getDisplayLabel();
+        public String getFriendlyName() {
+            return managedFeature.getFriendlyName();
         }
 
         public ObjectSpecification getFeatureTypeSpec() {
@@ -86,17 +86,17 @@ public interface UiComponentFactory<B, C> {
             return managedFeature.getCorrespondingClass();
         }
 
-        public boolean isFeatureTypeEqualTo(@Nullable Class<?> type) {
+        public boolean isFeatureTypeEqualTo(@Nullable final Class<?> type) {
             return getFeatureType() == type;
         }
 
-        public boolean isFeatureTypeAssignableFrom(@Nullable Class<?> type) {
+        public boolean isFeatureTypeAssignableFrom(@Nullable final Class<?> type) {
             return type!=null
                     ? getFeatureType().isAssignableFrom(type)
                     : false;
         }
 
-        public boolean isFeatureTypeInstanceOf(@Nullable Class<?> type) {
+        public boolean isFeatureTypeInstanceOf(@Nullable final Class<?> type) {
             return type!=null
                     ? type.isAssignableFrom(getFeatureType())
                     : false;
@@ -107,14 +107,14 @@ public interface UiComponentFactory<B, C> {
          * @return Whether there exists a facet for this feature, that is of the
          * specified {@code facetType} (as per the type it reports from {@link Facet#facetType()}).
          */
-        public <T extends Facet> boolean hasFeatureTypeFacet(@Nullable Class<T> facetType) {
+        public <T extends Facet> boolean hasFeatureTypeFacet(@Nullable final Class<T> facetType) {
             return facetType!=null
                     ? getFeatureTypeSpec().getFacet(facetType)!=null
                     : false;
         }
 
         public <T extends Facet> boolean hasFeatureTypeFacetAnyOf(
-                @NonNull Can<Class<? extends Facet>> facetTypes) {
+                @NonNull final Can<Class<? extends Facet>> facetTypes) {
             return facetTypes.stream()
                     .map(getFeatureTypeSpec()::getFacet)
                     .anyMatch(_NullSafe::isPresent);
@@ -126,7 +126,7 @@ public interface UiComponentFactory<B, C> {
         }
 
         @Deprecated
-        public <T> Optional<T> getFeatureValue(@Nullable Class<T> type) {
+        public <T> Optional<T> getFeatureValue(@Nullable final Class<T> type) {
             val managedProperty = (ManagedProperty)managedFeature;
             //TODO do a type check before the cast, so we can throw a more detailed exception
             // that is, given type must be assignable from the actual pojo type
@@ -137,7 +137,7 @@ public interface UiComponentFactory<B, C> {
         }
 
         @Deprecated
-        public Optional<InteractionVeto> setFeatureValue(Object proposedNewValuePojo) {
+        public Optional<InteractionVeto> setFeatureValue(final Object proposedNewValuePojo) {
             //TODO we are loosing any fields that are cached within ManagedObject
             val proposedNewValue = ManagedObject.of(getFeatureTypeSpec(), proposedNewValuePojo);
             return ((ManagedProperty)managedFeature).modifyProperty(proposedNewValue);
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/decorator/prototyping/PrototypingUiModel.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/decorator/prototyping/PrototypingUiModel.java
index 00bd4dd..12983fe 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/decorator/prototyping/PrototypingUiModel.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/decorator/prototyping/PrototypingUiModel.java
@@ -35,31 +35,31 @@ import lombok.RequiredArgsConstructor;
 public class PrototypingUiModel {
 
     private final Class<?> featureType;
-    private final String featureShortLabel;
-    private final String featureFullLabel;
+    private final String featureFriendlyName;
+    private final String featureFriendlyIdentifier;
     private final Supplier<Stream<Facet>> facetStreamProvider;
 
-    public static PrototypingUiModel of(ActionUiMetaModel actionMeta) {
+    public static PrototypingUiModel of(final ActionUiMetaModel actionMeta) {
         return null; // used by wicket, not supported yet
     }
 
-    public static PrototypingUiModel of(ManagedAction managedAction) {
+    public static PrototypingUiModel of(final ManagedAction managedAction) {
         Class<?> featureType = managedAction.getAction().getReturnType().getCorrespondingClass();
-        String featureShortLabel = managedAction.getName();
+        String featureShortLabel = managedAction.getFriendlyName();
         String featureFullLabel = String.format("%s: %s",
                 managedAction.getMemberType(),
-                managedAction.getName());
+                managedAction.getId());
 
         return new PrototypingUiModel(featureType, featureShortLabel, featureFullLabel,
                 managedAction.getAction()::streamFacets);
     }
 
-    public static PrototypingUiModel of(ManagedMember managedMember) {
+    public static PrototypingUiModel of(final ManagedMember managedMember) {
         Class<?> featureType = managedMember.getSpecification().getCorrespondingClass();
-        String featureShortLabel = managedMember.getName();
+        String featureShortLabel = managedMember.getFriendlyName();
         String featureFullLabel = String.format("%s: %s",
                 managedMember.getMemberType(),
-                managedMember.getName());
+                managedMember.getId());
 
         return new PrototypingUiModel(featureType, featureShortLabel, featureFullLabel,
                 managedMember.getSpecification()::streamFacets);