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/01 03:59:38 UTC

[isis] 03/03: ISIS-3167: remove ManagedObject.titleString()

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 4703b300129fd87db8ae4c50a7cc26683256ee87
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Sep 1 05:43:20 2022 +0200

    ISIS-3167: remove ManagedObject.titleString()
---
 .../ident/TitleFacetFromProjectionFacet.java       |  2 +-
 .../facets/object/title/TitleRenderRequest.java    | 11 ++++----
 .../annotation/TitleFacetViaTitleAnnotation.java   |  2 +-
 .../objectvalue/regex/RegExFacetAbstract.java      |  2 +-
 .../isis/core/metamodel/object/ManagedObject.java  | 33 ++++++----------------
 .../isis/core/metamodel/object/MmEntityUtil.java   |  2 +-
 .../isis/core/metamodel/object/MmTitleUtil.java    | 19 ++++++++++++-
 .../objectmanager/memento/ObjectMemento.java       |  3 +-
 .../specimpl/ObjectSpecificationAbstract.java      |  3 +-
 .../core/metamodel/util/snapshot/XmlSnapshot.java  |  8 +++---
 .../excel/applib/service/_CellMarshaller.java      |  2 +-
 .../ui/components/ExcelFileModel.java              |  2 +-
 .../ui/components/collections/TableViewFx.java     |  2 +-
 .../ui/components/collection/TableViewVaa.java     |  2 +-
 .../DomainModelTest_usingGoodDomain.java           |  2 +-
 .../interaction/DomainObjectTesterFactory.java     |  2 +-
 .../commons/model/action/ActionFormUiModel.java    |  2 +-
 .../domainobjects/DomainObjectLinkTo.java          |  2 +-
 .../domainobjects/DomainObjectReprRenderer.java    |  4 +--
 .../domainobjects/DomainServiceLinkTo.java         |  4 +--
 .../domainobjects/ScalarValueReprRenderer.java     |  2 +-
 ...entNegotiationServiceForRestfulObjectsV1_0.java |  2 +-
 .../JsonValueEncoderServiceDefault.java            |  2 +-
 .../viewer/wicket/model/models/EntityModel.java    |  2 +-
 .../ui/components/actioninfo/ActionInfoPanel.java  |  2 +-
 .../entityactions/LinkAndLabelFactory.java         |  2 +-
 .../summary/CollectionContentsAsSummary.java       |  2 +-
 .../entity/icontitle/EntityIconAndTitlePanel.java  |  7 ++---
 .../scalars/reference/ReferencePanel.java          |  2 +-
 .../ui/components/value/StandaloneValuePanel.java  |  2 +-
 .../widgets/breadcrumbs/BreadcrumbPanel.java       |  2 +-
 .../select2/providers/ChoiceProviderAbstract.java  |  2 +-
 .../viewer/wicket/ui/pages/entity/EntityPage.java  |  2 +-
 33 files changed, 70 insertions(+), 70 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/projection/ident/TitleFacetFromProjectionFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/projection/ident/TitleFacetFromProjectionFacet.java
index 504f0a4f1c..df8fde10d0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/projection/ident/TitleFacetFromProjectionFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/projection/ident/TitleFacetFromProjectionFacet.java
@@ -44,7 +44,7 @@ extends TitleFacetAbstract {
     public String title(final TitleRenderRequest titleRenderRequest) {
         final ManagedObject targetAdapter = titleRenderRequest.getObject();
         val projectedAdapter = projectionFacet.projected(targetAdapter);
-        return projectedAdapter.titleString();
+        return projectedAdapter.getTitle();
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/TitleRenderRequest.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/TitleRenderRequest.java
index 14b5ec6104..cda0b5a478 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/TitleRenderRequest.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/TitleRenderRequest.java
@@ -44,13 +44,12 @@ public class TitleRenderRequest {
 
     /**
      * Provide a title for the target object, possibly abbreviated (according to supplied predicate)
-     *
      * <p>
-     * One reason why the title might be abbreviated is if it is being evaluated in the context of another object,
-     * for example as a child object of a parented collection of some parent object. In such a context, the
-     * title might be shortened so that it does not needlessly incorporate the title of the parent (context)
-     * object.
-     * </p>
+     * One reason why the title might be abbreviated is if it is being evaluated in the context
+     * of another object.
+     * For example as a child object of a parented collection of some parent object.
+     * In such a context, the title might be shortened so that it does not needlessly incorporate
+     * the title of the parent (context) object.
      */
     @Builder.Default
     private final @NonNull Predicate<ManagedObject> skipTitlePartEvaluator =
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java
index cf24c97174..8875b5620b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java
@@ -179,7 +179,7 @@ implements ImperativeFacet {
         if (adapter == null) {
             return null;
         }
-        return adapter.titleString();
+        return adapter.getTitle();
     }
 
     private static String abbreviated(final String str, final int maxLength) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/regex/RegExFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/regex/RegExFacetAbstract.java
index 0b20ee2d19..258b93f379 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/regex/RegExFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/regex/RegExFacetAbstract.java
@@ -75,7 +75,7 @@ implements RegExFacet {
         if (proposedArgument.getPojo() == null) {
             return null;
         }
-        final String titleString = proposedArgument.titleString();
+        final String titleString = proposedArgument.getTitle();
         if (!doesNotMatch(titleString)) {
             return null;
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/ManagedObject.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/ManagedObject.java
index 06fd277f57..df2861b712 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/ManagedObject.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/ManagedObject.java
@@ -20,7 +20,6 @@ package org.apache.isis.core.metamodel.object;
 
 import java.util.Optional;
 import java.util.function.Supplier;
-import java.util.function.UnaryOperator;
 
 import org.springframework.lang.Nullable;
 
@@ -31,7 +30,6 @@ import org.apache.isis.commons.internal.collections._Collections;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.context.HasMetaModelContext;
 import org.apache.isis.core.metamodel.facets.object.icon.ObjectIcon;
-import org.apache.isis.core.metamodel.facets.object.title.TitleRenderRequest;
 import org.apache.isis.core.metamodel.object.ManagedObject.Specialization.BookmarkPolicy;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
@@ -345,28 +343,14 @@ extends
     // -- TITLE
 
     /**
-     * The (TODO translated ?) title of the wrapped pojo.
+     * The (untranslated) title of the wrapped pojo.
      */
     String getTitle();
 
-    @Deprecated
-    default String titleString() {
-        return getTitle();
-    }
-
-    default String titleString(final UnaryOperator<TitleRenderRequest.TitleRenderRequestBuilder> onBuilder) {
-        return _InternalTitleUtil
-                .titleString(onBuilder.apply(
-                        TitleRenderRequest.builder()
-                        .object(this))
-                        .build());
-    }
-
-
     // -- SHORTCUT - ELEMENT SPECIFICATION
 
     /**
-     * Used only for (standalone or parented) collections.
+     * As used for the element type of collections.
      */
     default Optional<ObjectSpecification> getElementSpecification() {
         return getSpecification().getElementSpecification();
@@ -448,9 +432,9 @@ extends
     static ManagedObject viewmodel(
             final @NonNull ObjectSpecification spec,
             final @Nullable Object pojo,
-            final Optional<Bookmark> bookmarkIfAny) {
+            final Optional<Bookmark> bookmarkIfKnown) {
         return pojo != null
-                ? bookmarkIfAny.map(bookmark->bookmarked(spec, pojo, bookmark)) //FIXME
+                ? bookmarkIfKnown.map(bookmark->bookmarked(spec, pojo, bookmark)) //FIXME
                         .orElseGet(()->new _ManagedObjectWithEagerSpec(spec, pojo)) //FIXME
                 : empty(spec);
     }
@@ -525,12 +509,13 @@ extends
             return (ManagedObject)pojo;
         }
         val spec = specLoader.specForType(pojo.getClass()).orElse(null);
-        return wrapScalarInternal(spec, pojo);
+        return wrapScalarInternal(spec, pojo, Optional.empty());
     }
 
     private static ManagedObject wrapScalarInternal(
             final @Nullable ObjectSpecification spec,
-            final @NonNull Object pojo) {
+            final @NonNull Object pojo,
+            final @NonNull Optional<Bookmark> bookmarkIfAny) {
 
         _Assert.assertTrue(!_Collections.isCollectionOrArrayOrCanType(pojo.getClass()),
                 ()->String.format("is scalar %s", pojo.getClass()));
@@ -547,7 +532,7 @@ extends
         case SERVICE:
             return service(spec, pojo);
         case VIEWMODEL:
-            return viewmodel(spec, pojo, Optional.empty());
+            return viewmodel(spec, pojo, bookmarkIfAny);
         case ENTITY:
             return entity(spec, pojo);
         case MIXIN:
@@ -572,7 +557,7 @@ extends
             return (ManagedObject)pojo;
         }
         return !_Collections.isCollectionOrArrayOrCanType(pojo.getClass())
-                ? wrapScalarInternal(spec, pojo)
+                ? wrapScalarInternal(spec, pojo, Optional.empty())
                 : new _ManagedObjectWithEagerSpec(spec, pojo);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmEntityUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmEntityUtil.java
index 13e2d3bf21..1305817bb1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmEntityUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmEntityUtil.java
@@ -192,7 +192,7 @@ public final class MmEntityUtil {
             throw _Exceptions.illegalArgument(
                     "can't set a reference to a transient object [%s] from a persistent one [%s]",
                     second,
-                    first.titleString());
+                    first.getTitle());
         }
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmTitleUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmTitleUtil.java
index 9161c78ba7..8e9c9c7584 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmTitleUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/MmTitleUtil.java
@@ -18,9 +18,12 @@
  */
 package org.apache.isis.core.metamodel.object;
 
+import java.util.function.Predicate;
+
 import org.springframework.lang.Nullable;
 
 import org.apache.isis.applib.value.semantics.Renderer;
+import org.apache.isis.core.metamodel.facets.object.title.TitleRenderRequest;
 import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
 
 import lombok.val;
@@ -35,7 +38,7 @@ public class MmTitleUtil {
 
     public String titleOf(final ManagedObject adapter) {
         return adapter!=null
-                ? adapter.titleString()
+                ? adapter.getTitle()
                 : "";
     }
 
@@ -63,4 +66,18 @@ public class MmTitleUtil {
         return renderer.htmlPresentation(valueFacet.createValueSemanticsContext(feature), adapter.getPojo());
     }
 
+    public String getTitleHonoringTitlePartSkipping(
+            final ManagedObject managedObject,
+            final Predicate<ManagedObject> skipTitlePart) {
+        return ManagedObjects.isPacked(managedObject)
+                ? "(multiple objects)"
+                : managedObject != null
+                    ? _InternalTitleUtil.titleString(
+                            TitleRenderRequest.builder()
+                            .object(managedObject)
+                            .skipTitlePartEvaluator(skipTitlePart)
+                            .build())
+                    : "(no object)";
+    }
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMemento.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMemento.java
index 23dbe77415..2c8b569762 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMemento.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/memento/ObjectMemento.java
@@ -36,9 +36,10 @@ public interface ObjectMemento extends BookmarkHolder, HasLogicalType, Serializa
 
     /**
      * The object's title for rendering (before translation).
-     * Corresponds to {@link ManagedObject#titleString()}.
+     * Corresponds to {@link ManagedObject#getTitle()}.
      * <p>
      * Directly support choice rendering, without the need to (re-)fetch entire object graphs.
+     * (TODO translated or not?)
      */
     String getTitle();
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index a385325532..76296c1606 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -566,7 +566,8 @@ implements ObjectSpecification {
             final ManagedObject targetObjectAdapter,
             final InteractionInitiatedBy interactionMethod) {
 
-        return new ObjectTitleContext(targetObjectAdapter, getFeatureIdentifier(), targetObjectAdapter.titleString(),
+        return new ObjectTitleContext(targetObjectAdapter, getFeatureIdentifier(),
+                targetObjectAdapter.getTitle(),
                 interactionMethod);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/snapshot/XmlSnapshot.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/snapshot/XmlSnapshot.java
index 69e49b224f..93a2ff4cb9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/snapshot/XmlSnapshot.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/snapshot/XmlSnapshot.java
@@ -547,7 +547,7 @@ public class XmlSnapshot implements Snapshot {
     }
 
     private String log(final String label, final ManagedObject adapter) {
-        return log(label, (adapter == null ? "(null)" : adapter.titleString() + "[" + oidAsString(adapter) + "]"));
+        return log(label, (adapter == null ? "(null)" : adapter.getTitle() + "[" + oidAsString(adapter) + "]"));
     }
 
     private String log(final String label, final Object pojo) {
@@ -634,7 +634,7 @@ public class XmlSnapshot implements Snapshot {
         }
         final Element element = schema.createElement(getXmlDocument(), spec.getShortIdentifier(),
                 spec.getFullIdentifier(), spec.getSingularName(), spec.getPluralName());
-        isisMetaModel.appendIsisTitle(element, adapter.titleString());
+        isisMetaModel.appendIsisTitle(element, adapter.getTitle());
 
         if (log.isDebugEnabled()) {
             log.debug("objectToElement(NO): create XS element for Isis class");
@@ -712,7 +712,7 @@ public class XmlSnapshot implements Snapshot {
                     if (valueFacet != null) {
                         valueStr = valueFacet.toEncodedString(Format.JSON, value.getPojo());
                     } else {
-                        valueStr = value.titleString();
+                        valueStr = value.getTitle();
                     }
 
                     final boolean notEmpty = (valueStr.length() > 0);
@@ -751,7 +751,7 @@ public class XmlSnapshot implements Snapshot {
                             fullyQualifiedClassName);
 
                     if (referencedObjectAdapter != null) {
-                        isisMetaModel.appendIsisTitle(xmlReferenceElement, referencedObjectAdapter.titleString());
+                        isisMetaModel.appendIsisTitle(xmlReferenceElement, referencedObjectAdapter.getTitle());
                     } else {
                         isisMetaModel.setIsEmptyAttribute(xmlReferenceElement, true);
                     }
diff --git a/extensions/core/excel/applib/src/main/java/org/apache/isis/extensions/excel/applib/service/_CellMarshaller.java b/extensions/core/excel/applib/src/main/java/org/apache/isis/extensions/excel/applib/service/_CellMarshaller.java
index 48535b5c7c..b368c440a4 100644
--- a/extensions/core/excel/applib/src/main/java/org/apache/isis/extensions/excel/applib/service/_CellMarshaller.java
+++ b/extensions/core/excel/applib/src/main/java/org/apache/isis/extensions/excel/applib/service/_CellMarshaller.java
@@ -77,7 +77,7 @@ final class _CellMarshaller {
 
         final ObjectSpecification propertySpec = otoa.getElementType();
         final Object propertyAsObj = propertyAdapter.getPojo();
-        final String propertyAsTitle = propertyAdapter.titleString();
+        final String propertyAsTitle = propertyAdapter.getTitle();
 
         // value types
         if(propertySpec.isValue()) {
diff --git a/extensions/vw/exceldownload/wicket-ui/src/main/java/org/apache/isis/extensions/viewer/wicket/exceldownload/ui/components/ExcelFileModel.java b/extensions/vw/exceldownload/wicket-ui/src/main/java/org/apache/isis/extensions/viewer/wicket/exceldownload/ui/components/ExcelFileModel.java
index a98e380efc..93bc83678d 100644
--- a/extensions/vw/exceldownload/wicket-ui/src/main/java/org/apache/isis/extensions/viewer/wicket/exceldownload/ui/components/ExcelFileModel.java
+++ b/extensions/vw/exceldownload/wicket-ui/src/main/java/org/apache/isis/extensions/viewer/wicket/exceldownload/ui/components/ExcelFileModel.java
@@ -232,7 +232,7 @@ class ExcelFileModel extends LoadableDetachableModel<File> {
             return;
         }
 
-        final String objectAsStr = cellValue.titleString();
+        final String objectAsStr = cellValue.getTitle();
         cell.setCellValue(objectAsStr);
         return;
     }
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/collections/TableViewFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/collections/TableViewFx.java
index 3b17c2e243..bcc8ebcedd 100644
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/collections/TableViewFx.java
+++ b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/collections/TableViewFx.java
@@ -194,7 +194,7 @@ public class TableViewFx extends VBox {
             val propertyValue = property.get(targetObject);
             return propertyValue == null
                     ? NULL_LITERAL
-                    : propertyValue.titleString();
+                    : propertyValue.getTitle();
         } catch (Exception e) {
             return Optional.ofNullable(e.getMessage()).orElse(e.getClass().getName());
         }
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/collection/TableViewVaa.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/collection/TableViewVaa.java
index 144c75d3a5..f153afc9ce 100644
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/collection/TableViewVaa.java
+++ b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/collection/TableViewVaa.java
@@ -176,7 +176,7 @@ public class TableViewVaa extends VerticalLayout {
             val propertyValue = property.get(targetObject);
             return propertyValue == null
                     ? NULL_LITERAL
-                    : propertyValue.titleString();
+                    : propertyValue.getTitle();
         } catch (Exception e) {
             return Optional.ofNullable(e.getMessage()).orElse(e.getClass().getName());
         }
diff --git a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
index a3558477e5..82a33d1151 100644
--- a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
+++ b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
@@ -263,7 +263,7 @@ class DomainModelTest_usingGoodDomain {
             assertEquals("inherited icon", titleService.iconNameOf(instance));
 
             val domainObject = ManagedObject.of(spec, instance);
-            assertEquals("inherited title", domainObject.titleString());
+            assertEquals("inherited title", domainObject.getTitle());
             assertEquals("inherited icon", iconFacet.iconName(domainObject));
         }
 
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/DomainObjectTesterFactory.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/DomainObjectTesterFactory.java
index 231d8c5e13..09424fb3b2 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/DomainObjectTesterFactory.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/DomainObjectTesterFactory.java
@@ -175,7 +175,7 @@ public class DomainObjectTesterFactory {
             assertEquals(expectedResult,
                     super.objectSpecification.getTitleService().titleOf(vm.getPojo()));
             assertEquals(expectedResult,
-                    vm.titleString());
+                    vm.getTitle());
         }
 
         public void assertIcon(final @Nullable String expectedResult) {
diff --git a/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/action/ActionFormUiModel.java b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/action/ActionFormUiModel.java
index f25e5eadc5..961f24661f 100644
--- a/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/action/ActionFormUiModel.java
+++ b/viewers/commons/model/src/main/java/org/apache/isis/viewer/commons/model/action/ActionFormUiModel.java
@@ -105,7 +105,7 @@ extends HasTitle, HasActionInteraction {
             }
             buf.append(MmTitleUtil.abbreviatedTitleOf(paramValue, 8, "..."));
         });
-        return owner.titleString() + "." + getFriendlyName()
+        return owner.getTitle() + "." + getFriendlyName()
             + (buf.length()>0
                     ?"(" + buf.toString() + ")"
                     :"");
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectLinkTo.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectLinkTo.java
index 06e476fa52..5553995444 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectLinkTo.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectLinkTo.java
@@ -56,7 +56,7 @@ public class DomainObjectLinkTo implements ObjectAdapterLinkTo {
                         relElseDefault(rel).getName(),
                         RepresentationType.DOMAIN_OBJECT,
                         linkRef(new StringBuilder()).toString());
-        linkBuilder.withTitle(objectAdapter.titleString());
+        linkBuilder.withTitle(objectAdapter.getTitle());
         return linkBuilder;
     }
 
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
index a7dcb570e9..f7d5dfbd6d 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
@@ -63,7 +63,7 @@ extends ReprRendererAbstract<ManagedObject> {
 
         final String objectRef = ManagedObjects.stringifyElseFail(objectAdapter, "/");
         final String url = "objects/" + objectRef;
-        return LinkBuilder.newBuilder(resourceContext, rel.getName(), RepresentationType.DOMAIN_OBJECT, url).withTitle(objectAdapter.titleString());
+        return LinkBuilder.newBuilder(resourceContext, rel.getName(), RepresentationType.DOMAIN_OBJECT, url).withTitle(objectAdapter.getTitle());
     }
 
     public static LinkBuilder newLinkToObjectLayoutBuilder(
@@ -185,7 +185,7 @@ extends ReprRendererAbstract<ManagedObject> {
             }
 
             // title
-            final String title = objectAdapter.titleString();
+            final String title = objectAdapter.getTitle();
             representation.mapPutString("title", title);
 
             // serviceId or instance Id
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainServiceLinkTo.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainServiceLinkTo.java
index 2dfe37dd67..c5f9b35d31 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainServiceLinkTo.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainServiceLinkTo.java
@@ -39,13 +39,13 @@ public class DomainServiceLinkTo extends DomainObjectLinkTo {
                 relElseDefault(rel).andParam("serviceId", serviceId),
                 RepresentationType.DOMAIN_OBJECT,
                 linkRef(new StringBuilder()).toString());
-        linkBuilder.withTitle(objectAdapter.titleString());
+        linkBuilder.withTitle(objectAdapter.getTitle());
         return linkBuilder;
     }
 
 
     @Override
-    protected StringBuilder linkRef(StringBuilder buf) {
+    protected StringBuilder linkRef(final StringBuilder buf) {
         return buf.append("services/").append(serviceId);
     }
 
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ScalarValueReprRenderer.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ScalarValueReprRenderer.java
index d771d5da1b..ef7fa55279 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ScalarValueReprRenderer.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ScalarValueReprRenderer.java
@@ -66,7 +66,7 @@ implements HasObjectFeature {
     @Override
     public ScalarValueReprRenderer with(final ManagedObject objectAdapter) {
         if (!objectAdapter.getSpecification().isValue()) {
-            throw ReprRendererException.create("Not an (encodable) value", objectAdapter.titleString());
+            throw ReprRendererException.create("Not an (encodable) value", objectAdapter.getTitle());
         }
 
         val context = JsonValueConverter.Context.of(
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
index 28c941055d..c1aa08b060 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
@@ -296,7 +296,7 @@ implements ContentNegotiationService {
     }
 
     private static String titleOf(final ManagedObject argumentAdapter) {
-        return argumentAdapter!=null?argumentAdapter.titleString():"";
+        return argumentAdapter!=null?argumentAdapter.getTitle():"";
     }
 
     private static String abbreviated(final String str, final int maxLength) {
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderServiceDefault.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderServiceDefault.java
index 65766b0270..6608afeb62 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderServiceDefault.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderServiceDefault.java
@@ -173,7 +173,7 @@ public class JsonValueEncoderServiceDefault implements JsonValueEncoderService {
                                 val decompRepr = JsonRepresentation.jsonAsMap(valueAsJson);
                                 // amend emums with "enumTitle"
                                 if(simple.getType() == ValueType.ENUM) {
-                                    decompRepr.mapPutString("enumTitle", valueAdapter.titleString());
+                                    decompRepr.mapPutString("enumTitle", valueAdapter.getTitle());
                                 }
                                 repr.mapPutJsonRepresentation("value", decompRepr);
                                 appendFormats(repr, null, simple.getType().value(), context.isSuppressExtensions());
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index b7043aff5b..f5c00cd63c 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -170,7 +170,7 @@ implements
 
     @Override
     public String getTitle() {
-        return getObject().titleString();
+        return getObject().getTitle();
     }
 
     @Override
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actioninfo/ActionInfoPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actioninfo/ActionInfoPanel.java
index aa6c06238d..046893c8ee 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actioninfo/ActionInfoPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actioninfo/ActionInfoPanel.java
@@ -39,7 +39,7 @@ extends PanelAbstract<ManagedObject, ActionModel> {
 
         // TODO: render instead as links (providing isn't a service; provide a
         // component for this?)
-        Wkt.labelAdd(this, ID_TARGET, ()->actionModel.getParentObject().titleString());
+        Wkt.labelAdd(this, ID_TARGET, ()->actionModel.getParentObject().getTitle());
         Wkt.labelAdd(this, ID_ACTION_NAME, ()->actionModel.getFriendlyName());
     }
 }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/LinkAndLabelFactory.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/LinkAndLabelFactory.java
index 960f503416..50274cd702 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/LinkAndLabelFactory.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/LinkAndLabelFactory.java
@@ -120,7 +120,7 @@ extends Function<ObjectAction, LinkAndLabel> {
         if (!isIdentifiable) {
             throw new IllegalArgumentException(String.format(
                     "Object '%s' is not identifiable (has no identifier).",
-                    objectAdapter.titleString()));
+                    objectAdapter.getTitle()));
         }
     }
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/summary/CollectionContentsAsSummary.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/summary/CollectionContentsAsSummary.java
index d34e9e99b8..16d7fc6a53 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/summary/CollectionContentsAsSummary.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/summary/CollectionContentsAsSummary.java
@@ -136,7 +136,7 @@ implements CollectionCountProvider {
             this.propertyName = propertyName;
             int nonNullCount = 0;
             for (val adapter : adapters) {
-                titles.add(adapter.titleString());
+                titles.add(adapter.getTitle());
                 final ManagedObject valueAdapter =
                         numberAssociation.get(adapter, InteractionInitiatedBy.USER);
                 if (valueAdapter == null) {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
index e1d142e2a7..3c270faf80 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
@@ -30,6 +30,7 @@ import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFactor
 import org.apache.isis.core.metamodel.object.ManagedObject;
 import org.apache.isis.core.metamodel.object.ManagedObjects;
 import org.apache.isis.core.metamodel.object.MmEntityUtil;
+import org.apache.isis.core.metamodel.object.MmTitleUtil;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ObjectAdapterModel;
@@ -174,11 +175,7 @@ extends PanelAbstract<ManagedObject, ObjectAdapterModel> {
 
     private String determineTitle() {
         val managedObject = getModel().getObject();
-        return ManagedObjects.isPacked(managedObject)
-                ? "(multiple objects)"
-                : managedObject != null
-                    ? managedObject.titleString(conf->conf.skipTitlePartEvaluator(this::isContextAdapter))
-                    : "(no object)";
+        return MmTitleUtil.getTitleHonoringTitlePartSkipping(managedObject, this::isContextAdapter);
     }
 
     private int abbreviateTo(final ObjectAdapterModel model, final String titleString) {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index 2969161cc2..353c9e3241 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -238,7 +238,7 @@ public class ReferencePanel extends ScalarPanelSelectAbstract {
     String getTitleForFormComponentInput() {
         val pendingElseCurrentAdapter = scalarModel().getObject();
         return pendingElseCurrentAdapter != null
-                ? pendingElseCurrentAdapter.titleString()
+                ? pendingElseCurrentAdapter.getTitle()
                 : "(no object)";
     }
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java
index a91cfe9de4..9f37f50aa2 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java
@@ -56,7 +56,7 @@ extends PanelAbstract<ManagedObject, ValueModel> {
         } else {
             // resort to (textual) title rendering
             Wkt.labelAdd(this, ID_STANDALONE_VALUE, ()->
-                getModel().getObject().titleString());
+                getModel().getObject().getTitle());
         }
     }
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
index 38556b909e..c24103e0ba 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
@@ -74,7 +74,7 @@ extends PanelAbstract<Void, IModel<Void>> {
             }
 
             private String titleFor(final EntityModel model) {
-                return model.getManagedObject().titleString();
+                return model.getManagedObject().getTitle();
             }
 
             @Override
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderAbstract.java
index 03856f6bf9..72db452951 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ChoiceProviderAbstract.java
@@ -106,7 +106,7 @@ implements HasCommonContext {
 
     /**
      * Filters all choices against a term by using their
-     * {@link ManagedObject#titleString() title string}
+     * {@link ManagedObject#getTitle() title string}
      *
      * @param term The term entered by the user
      * @param choiceMementos The collections of choices to filter
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
index 8130d25fa3..f2c310563e 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
@@ -156,7 +156,7 @@ public class EntityPage extends PageAbstract {
 
         Facets.gridPreload(objectSpec, objectAdapter);
 
-        final String titleStr = objectAdapter.titleString();
+        final String titleStr = objectAdapter.getTitle();
         setTitle(titleStr);
 
         WebMarkupContainer entityPageContainer = new WebMarkupContainer("entityPageContainer");