You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2021/02/13 07:54:01 UTC

[isis] 01/02: ISIS-2444: docs for more services

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

danhaywood pushed a commit to branch ISIS-2444
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 413fbacac6d3631e9bcc025f43a4c8cf6a19f367
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Feb 13 06:49:28 2021 +0000

    ISIS-2444: docs for more services
---
 .../pages/ExceptionRecognizerService.adoc          |   2 +-
 .../applib-svc/pages/ExecutionSubscriber.adoc      |   2 +-
 .../modules/applib-svc/pages/FactoryService.adoc   |   2 +-
 .../applib-svc/pages/GridLoaderService.adoc        |   8 +-
 .../hooks/examples_and_usage.adoc                  |   6 ++
 .../applib-svc/pages/GridSystemService.adoc        |  70 +-------------
 .../hooks/examples_and_usage.adoc                  |  12 ++-
 .../GridSystemService/hooks/implementation.adoc    |   4 +
 .../applib-svc/pages/HealthCheckService.adoc       |  64 +------------
 .../hooks/examples_and_usage.adoc                  |   4 +
 .../HealthCheckService/hooks/implementation.adoc   |  28 ++++++
 .../implementation.adoc => HintIdProvider.adoc}    |   7 +-
 .../hooks/examples_and_usage.adoc}                 |  27 ++++--
 .../hooks/implementation.adoc}                     |   0
 .../adoc/modules/applib-svc/pages/HintStore.adoc   |  98 +-------------------
 .../pages/HintStore/hooks/examples_and_usage.adoc  |  17 +++-
 .../pages/HintStore/hooks/implementation.adoc      |   2 +
 .../applib-svc/pages/HomePageResolverService.adoc  |  30 +-----
 .../hooks/examples_and_usage.adoc                  |   3 +
 .../hooks/implementation.adoc                      |   2 +
 .../partials/_presentation-layer-spi.adoc          |   4 +
 .../exceprecog/ExceptionRecognizerService.java     |   3 +-
 .../applib/services/grid/GridSystemService.java    | 102 ++++++++++++++++++++-
 .../applib/services/health/HealthCheckService.java |  16 ++++
 .../isis/applib/services/hint/HintIdProvider.java  |  27 ++++++
 .../isis/applib/services/hint/HintStore.java       |  65 ++++++++++++-
 .../services/homepage/HomePageResolverService.java |   3 +-
 .../viewer/services/mementos/ObjectMementoWkt.java |  48 +++++-----
 28 files changed, 353 insertions(+), 303 deletions(-)

diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/ExceptionRecognizerService.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/ExceptionRecognizerService.adoc
index b7bb04d..7b6c2d1 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/ExceptionRecognizerService.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/ExceptionRecognizerService.adoc
@@ -5,7 +5,7 @@
 
 
 
-include::system:generated:page$index/applib/services/exceprecog/ExceptionRecognizerService.adoc[leveloffset=+2]
+include::system:generated:page$index/applib/services/exceprecog/ExceptionRecognizerService.adoc[]
 
 include::ExceptionRecognizerService/hooks/implementation.adoc[]
 
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/ExecutionSubscriber.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/ExecutionSubscriber.adoc
index 42d5526..4e295c0 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/ExecutionSubscriber.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/ExecutionSubscriber.adoc
@@ -5,7 +5,7 @@
 
 
 
-include::system:generated:page$index/applib/services/publishing/spi/ExecutionSubscriber.adoc[leveloffset=+2]
+include::system:generated:page$index/applib/services/publishing/spi/ExecutionSubscriber.adoc[]
 
 include::ExecutionSubscriber/hooks/implementation.adoc[]
 
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/FactoryService.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/FactoryService.adoc
index 5a18b9d..fd7e162 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/FactoryService.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/FactoryService.adoc
@@ -5,7 +5,7 @@
 
 
 
-include::system:generated:page$index/applib/services/factory/FactoryService.adoc[leveloffset=+2]
+include::system:generated:page$index/applib/services/factory/FactoryService.adoc[]
 
 include::FactoryService/hooks/implementation.adoc[]
 
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/GridLoaderService.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/GridLoaderService.adoc
index b71e46a..e76f84a 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/GridLoaderService.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/GridLoaderService.adoc
@@ -4,15 +4,9 @@
 :Notice: 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 ag [...]
 
 
-include::system:generated:page$index/applib/services/grid/GridLoaderService.adoc[leveloffset=+2]
+include::system:generated:page$index/applib/services/grid/GridLoaderService.adoc[]
 
 include::GridLoaderService/hooks/implementation.adoc[]
 
 include::GridLoaderService/hooks/examples_and_usage.adoc[]
 
-== Related Services
-
-See also:
-
-* xref:system:generated:index/applib/services/grid/GridService.adoc[GridService]
-* xref:system:generated:index/applib/services/grid/GridLoaderService.adoc[GridLoaderService]
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/GridLoaderService/hooks/examples_and_usage.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/GridLoaderService/hooks/examples_and_usage.adoc
index 21f4ba4..46ed3c2 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/GridLoaderService/hooks/examples_and_usage.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/GridLoaderService/hooks/examples_and_usage.adoc
@@ -2,3 +2,9 @@
 :Notice: 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 ag [...]
 
 
+== See also
+
+Related services:
+
+* xref:system:generated:index/applib/services/grid/GridService.adoc[GridService]
+* xref:system:generated:index/applib/services/grid/GridLoaderService.adoc[GridLoaderService]
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/GridSystemService.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/GridSystemService.adoc
index 91ceccf..631904e 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/GridSystemService.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/GridSystemService.adoc
@@ -4,74 +4,10 @@
 :Notice: 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 ag [...]
 
 
-WARNING: TODO: this content has not yet been reviewed/updated for v2.0
+include::system:generated:page$index/applib/services/grid/GridSystemService.adoc[]
 
+include::GridSystemService/hooks/implementation.adoc[]
 
-The `GridSystemService` encapsulates a single layout grid system which can be used to customize the layout
-of domain objects.  In particular this means being able to return a "normalized" form (validating and associating
-domain object members into the various regions of the grid) and in providing a default grid if there is no other
-metadata available.
+include::GridSystemService/hooks/examples_and_usage.adoc[]
 
-The framework provides a single such grid implementation, namely for Bootstrap3.
 
-[NOTE]
-====
-Unlike most other domain services, the framework will check _all_ available implementations of `GridSystemService` to obtain available grid systems, rather than merely the first implementation found; in other words it uses the chain-of-responsibility pattern.
-Services are called in the order defined by the Spring link:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/annotation/Order.html[`@Order`] annotation).
-
-Note though that each concrete implementation must also provide corresponding Wicket viewer components capable of interpreting the grid layout.
-====
-
-
-== API
-
-include::system:generated:page$index/applib/services/grid/GridSystemService.adoc[leveloffset=+2]
-
-TODO example migration
-
-.Deprecated Docs
-[WARNING]
-================================
-
-== SPI
-
-The SPI defined by this service is:
-
-[source,java]
-----
-include::refguide:applib-svc:example$services/grid/GridSystemService.java[tags="refguide"]
-----
-<.> The concrete subclass of `Grid` supported by this implementation.
-As noted in the introduction, there can be multiple implementations of this service,  but there can only be one implementation per concrete subclass.
-As is normal practice, these are ordered as per the Spring link:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/annotation/Order.html[`@Order`] or equivalent annotation.
-
-<.> the target namespace for this grid system.  This is used when generating the XML.  The Bootstrap3 grid system provided by the framework returns the value `http://isis.apache.org/applib/layout/grid/bootstrap3`.
-
-<.> the schema location for the XSD.  The Bootstrap3 grid system provided by the framework returns the value `http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd`.
-
-<.> a default grid, eg two columns in ratio 4:8.  Used when no existing grid layout exists for a domain class.
-
-<.> Validates and normalizes a grid, modifying the grid so that all of the domain object's members (properties, collections, actions) are bound to regions of the grid.  This is done using existing metadata, most notably that of the xref:refguide:applib-ant:MemberOrder.adoc[`@MemberOrder`] annotation.
-Such a grid, if persisted as the layout XML file for the domain class, allows the
- `@MemberOrder` annotation to be removed from the source code of the domain class (but other annotations must be retained).
-
-<.> Takes a normalized grid and enriches it with additional metadata (taken from Apache Isis' internal metadata) that can be represented in the layout XML.
-Such a grid, if persisted as the layout XML file for the domain class, allows all layout annotations (xref:refguide:applib-ant:ActionLayout.adoc[`@ActionLayout`], xref:refguide:applib-ant:PropertyLayout.adoc[`@PropertyLayout`] and xref:refguide:applib-ant:CollectionLayout.adoc[`@CollectionLayout`]) to be removed from the source code of the domain class.
-
-<.> Takes a normalized grid and strips out removes all members, leaving only the grid structure.
-Such a grid, if persisted as the layout XML file for the domain class, requires that the xref:refguide:applib-ant:MemberOrder.adoc[`@MemberOrder`] annotation is retained in the source code of said class in order to bind members to the regions of the grid.
-
-
-
-================================
-
-== Implementation
-
-The framework provides `GridSystemServiceBS3`, an implementation that encodes the bootstrap3 grid system.
-(The framework also provides xref:vw:ROOT:about.adoc[Wicket viewer] components that are capable of interpreting and rendering this metadata).
-
-
-
-== Related Services
-
-This service is used by xref:refguide:applib-svc:GridService.adoc[`GridService`].
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/GridSystemService/hooks/examples_and_usage.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/GridSystemService/hooks/examples_and_usage.adoc
index 21f4ba4..efc6deb 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/GridSystemService/hooks/examples_and_usage.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/GridSystemService/hooks/examples_and_usage.adoc
@@ -1,4 +1,14 @@
-
 :Notice: 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 ag [...]
 
 
+== Usage Notes
+
+The framework will check _all_ available implementations of `GridSystemService` to obtain available grid systems, rather than merely the first implementation found, to determine if a grid is available for the domain object to be rendered; in other words it uses the link:https://en.wikipedia.org/wiki/Chain-of-responsibility_pattern[chain-of-responsibility] pattern.
+Services are called in the order defined by the Spring link:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/annotation/Order.html[`@Order`] annotation).
+
+Note though that each concrete implementation must also provide corresponding Wicket viewer components capable of interpreting the grid layout.
+This is therefore a highly specialized and very deep customisation of the framework.
+
+== See also
+
+This service is used by xref:refguide:applib-svc:GridService.adoc[`GridService`].
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/GridSystemService/hooks/implementation.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/GridSystemService/hooks/implementation.adoc
index 697f559..c5ac13b 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/GridSystemService/hooks/implementation.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/GridSystemService/hooks/implementation.adoc
@@ -4,3 +4,7 @@
 
 
 == Implementation
+
+The framework provides a single grid implementation, `o.a.i.core.metamodel.services.grid.bootstrap3.GridSystemServiceBS3`, which supports Bootstrap3.
+
+(The framework also provides xref:vw:ROOT:about.adoc[Wicket viewer] components that are capable of interpreting and rendering this metadata.
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/HealthCheckService.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/HealthCheckService.adoc
index ff7489e..21832bf 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/HealthCheckService.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/HealthCheckService.adoc
@@ -5,69 +5,11 @@
 
 
 
-This SPI service integrates with Spring Boot's link:https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/actuate/health/HealthIndicator.html[HealthIndicator] SPI, surfaced through the link:https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html[Spring Boot Actuator].
+include::system:generated:page$index/applib/services/health/HealthCheckService.adoc[]
 
-This is accessible from the `/actuator/health` endpoint.
+include::HealthCheckService/hooks/implementation.adoc[]
 
-The service, when called, will be within the context of a special internal user `__health` with the internal role `__health-role`.
+include::HealthCheckService/hooks/examples_and_usage.adoc[]
 
-This service was introduced to allow deployment infrastructure to monitor the app and (potentially) restart it if required.
-For example, if deploying to Docker then both Docker Swarm and Kubernetes are orchestrators that can perform this task.
 
 
-== API
-
-include::system:generated:page$index/applib/services/health/HealthCheckService.adoc[leveloffset=+2]
-
-TODO example migration
-
-.Deprecated Docs
-[WARNING]
-================================
-
-== SPI
-
-The SPI defined by `HealthCheckService` is:
-
-[source,java]
-----
-include::refguide:applib-svc:example$services/health/HealthCheckService.java[tags="refguide"]
-----
-
-
-================================
-
-== Implementation
-
-The framework provides no default implementation, but the xref:docs:starters:simpleapp.adoc[simpleapp] starter app provides a sample implementation:
-
-[source,java]
-----
-@Service
-@Named("domainapp.HealthCheckServiceImpl")
-@Log4j2
-public class HealthCheckServiceImpl implements HealthCheckService {
-
-    private final SimpleObjects simpleObjects;
-
-    @Inject
-    public HealthCheckServiceImpl(SimpleObjects simpleObjects) {
-        this.simpleObjects = simpleObjects;
-    }
-
-    @Override
-    public Health check() {
-        try {
-            simpleObjects.ping();
-            return Health.ok();
-        } catch (Exception ex) {
-            return Health.error(ex);
-        }
-    }
-}
-----
-
-== Related Services
-
-The internal domain service `o.a.i.core.webapp.health.HealthIndicatorUsingHealthCheckService` acts as the bridge between Spring and the `HealthCheckService' SPI.
-
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/HealthCheckService/hooks/examples_and_usage.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/HealthCheckService/hooks/examples_and_usage.adoc
index 21f4ba4..a1eaee9 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/HealthCheckService/hooks/examples_and_usage.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/HealthCheckService/hooks/examples_and_usage.adoc
@@ -2,3 +2,7 @@
 :Notice: 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 ag [...]
 
 
+== Related Services
+
+The internal domain service `o.a.i.core.webapp.health.HealthIndicatorUsingHealthCheckService` acts as the bridge between Spring and the `HealthCheckService' SPI.
+
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/HealthCheckService/hooks/implementation.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/HealthCheckService/hooks/implementation.adoc
index 697f559..22c3e54 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/HealthCheckService/hooks/implementation.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/HealthCheckService/hooks/implementation.adoc
@@ -4,3 +4,31 @@
 
 
 == Implementation
+
+The framework provides no default implementation, but the xref:docs:starters:simpleapp.adoc[simpleapp] starter app provides a link:https://github.com/apache/isis-app-simpleapp/blob/master/webapp/src/main/java/domainapp/webapp/application/services/health/HealthCheckServiceImpl.java[sample implementation]:
+
+[source,java]
+----
+@Service
+@Named("domainapp.HealthCheckServiceImpl")
+@Log4j2
+public class HealthCheckServiceImpl implements HealthCheckService {
+
+    private final SimpleObjects simpleObjects;
+
+    @Inject
+    public HealthCheckServiceImpl(SimpleObjects simpleObjects) {
+        this.simpleObjects = simpleObjects;
+    }
+
+    @Override
+    public Health check() {
+        try {
+            simpleObjects.ping();
+            return Health.ok();
+        } catch (Exception ex) {
+            return Health.error(ex);
+        }
+    }
+}
+----
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/HealthCheckService/hooks/implementation.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/HintIdProvider.adoc
similarity index 77%
copy from api/applib/src/main/adoc/modules/applib-svc/pages/HealthCheckService/hooks/implementation.adoc
copy to api/applib/src/main/adoc/modules/applib-svc/pages/HintIdProvider.adoc
index 697f559..a4288d3 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/HealthCheckService/hooks/implementation.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/HintIdProvider.adoc
@@ -1,6 +1,11 @@
+[#HintIdProvider]
+= HintIdProvider
 
 :Notice: 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 ag [...]
 
+include::system:generated:page$index/applib/services/hint/HintIdProvider.adoc[]
 
+include::HintIdProvider/hooks/implementation.adoc[]
+
+include::HintIdProvider/hooks/examples_and_usage.adoc[]
 
-== Implementation
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/ExecutionSubscriber.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/HintIdProvider/hooks/examples_and_usage.adoc
similarity index 54%
copy from api/applib/src/main/adoc/modules/applib-svc/pages/ExecutionSubscriber.adoc
copy to api/applib/src/main/adoc/modules/applib-svc/pages/HintIdProvider/hooks/examples_and_usage.adoc
index 42d5526..975aaa8 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/ExecutionSubscriber.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/HintIdProvider/hooks/examples_and_usage.adoc
@@ -1,14 +1,29 @@
-[#ExecutionSubscriber]
-= ExecutionSubscriber
-
 :Notice: 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 ag [...]
 
+== Usage Example
+
+For example, suppose that there's a view model that wraps a `Customer` and its ``Order``s.
+For this view model the `Customer` represents the logical identity.
+This view model might therefore be implemented as follows:
 
+[source,java]
+----
+@XmlRootElement("customerAndOrders")
+@XmlAccessType(FIELD)
+public class CustomerAndOrders implements HintStore.HintIdProvider {
 
-include::system:generated:page$index/applib/services/publishing/spi/ExecutionSubscriber.adoc[leveloffset=+2]
+    @Getter @Setter
+    private Customer customer;
 
-include::ExecutionSubscriber/hooks/implementation.adoc[]
+    // ...
 
-include::ExecutionSubscriber/hooks/examples_and_usage.adoc[]
+    @Programmatic
+    public String hintId() {
+        bookmarkService.bookmarkFor(getCustomer()).toString();
+    }
 
+    @XmlTransient
+    @Inject BookmarkService bookmarkService;
+}
+----
 
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/HomePageResolverService/hooks/examples_and_usage.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/HintIdProvider/hooks/implementation.adoc
similarity index 100%
copy from api/applib/src/main/adoc/modules/applib-svc/pages/HomePageResolverService/hooks/examples_and_usage.adoc
copy to api/applib/src/main/adoc/modules/applib-svc/pages/HintIdProvider/hooks/implementation.adoc
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/HintStore.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/HintStore.adoc
index 2045329..3e25f42 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/HintStore.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/HintStore.adoc
@@ -3,101 +3,9 @@
 
 :Notice: 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 ag [...]
 
+include::system:generated:page$index/applib/services/hint/HintStore.adoc[]
 
-WARNING: TODO: this content has not yet been reviewed/updated for v2.0
+include::HintStore/hooks/implementation.adoc[]
 
-The `HintStore` service defines an SPI for the xref:vw:ROOT:about.adoc[Wicket viewer] to store UI hints on a per-object basis.
-For example, the viewer remembers which tabs are selected, and for collections which view is selected (eg table or hidden), which page of a table to render, or whether "show all" (rows) is toggled.
+include::HintStore/hooks/examples_and_usage.adoc[]
 
-The default implementation of this service uses the HTTP session.
-The service is an SPI because the amount of data stored could potentially be quite large (for large numbers of users who use the app all day).
-An SPI makes it easy to plug in an alternative implementation that is more sophisticated than the default (eg implementing MRU/LRU queue, or using a NoSQL database, or simply to disabling the functionality altogether).
-
-== API
-
-include::system:generated:page$index/applib/services/hint/HintStore.adoc[leveloffset=+2]
-
-TODO example migration
-
-.Deprecated Docs
-[WARNING]
-================================
-
-== SPI
-
-The SPI of `HintStore` is:
-
-[source,java]
-----
-include::refguide:applib-svc:example$services/hint/HintStore.java[tags="refguide"]
-----
-
-<.> obtain a hint (eg which tab to open) for a particular object.
-Object identity is represented by `Bookmark`, as per the xref:refguide:applib-svc:BookmarkService.adoc[`BookmarkService`], so that alternative implementations can easily serialize this state to a string.
-<.> set the state of a hint.
-(The value of) all hints are represented as strings.
-<.> remove a single hint for an object; <.> remove all hints <.> obtain all known hints for an object
-
-
-================================
-
-== Implementation
-
-The core framework provides a default implementation of this service (`org.apache.isis.viewer.wicket.viewer.services.HintStoreUsingWicketSession`).
-
-== API
-
-include::system:generated:page$index/applib/services/hint/HintStore.adoc[leveloffset=+2]
-
-TODO example migration
-
-.Deprecated Docs
-[WARNING]
-================================
-
-== View models
-
-Hints are stored against the `Bookmark` of a domain object, essentially the identifier of the domain object.
-For a domain entity this identifier is fixed and unchanging but for a view models the identifier changes each time the view model's state changes (the identifier is basically a digest of the object's state).
-This means that any hints stored against the view model's bookmark are in effect lost as soon as the view model is modified.
-
-To address this issue the `HintStore` provides an optional interface that the view model can implement, the intent of which is to expose the "logical" identity of the view model.
-This interface is:
-
-[source,java]
-----
-include::refguide:applib-svc:example$services/hint/HintStore.java[tags="refguide-1",indent=0]
-----
-
-For example, suppose that there's a view model that wraps a `Customer` and its ``Order``s.
-For this the `Customer` represents the logical identity.
-This view model might therefore be implemented as follows:
-
-[source,java]
-----
-@XmlRootElement("customerAndOrders")
-@XmlAccessType(FIELD)
-public class CustomerAndOrders implements HintStore.HintIdProvider {
-
-    @Getter @Setter
-    private Customer customer;
-
-    ...
-
-    @Programmatic
-    public String hintId() {
-        bookmarkService.bookmarkFor(getCustomer()).toString();
-    }
-
-    @XmlTransient
-    @Inject BookmarkService bookmarkService;
-}
-----
-
-
-================================
-
-== Related Services
-
-The xref:vw:ROOT:about.adoc[Wicket viewer] exposes the xref:applib-classes:about.adoc#clearHints["clear hints"]
-mixin action that is for use by end-users of the application to clear any UI hints that have accumulated for a domain object.
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/HintStore/hooks/examples_and_usage.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/HintStore/hooks/examples_and_usage.adoc
index 21f4ba4..b139286 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/HintStore/hooks/examples_and_usage.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/HintStore/hooks/examples_and_usage.adoc
@@ -1,4 +1,19 @@
-
 :Notice: 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 ag [...]
 
+[WARNING]
+====
+The default implementation of this service uses the HTTP session.
+As the amount of data stored could potentially be quite large (for large numbers of users who use the app all day), it does in effect constitute a memory leak.
+
+An alternative implementation might be more sophisticated (eg implementing an MRU/LRU queue, or using a NoSQL database to store the hints, or simply to disable the functionality altogether).
+====
+
+
+== See Also
+
+* The xref:vw:ROOT:about.adoc[Wicket viewer] exposes theclear hints"mixin action
+(`o.a.i.viewer.wicket.viewer.mixins.Object_clearHints`)
+that is for use by end-users of the application to clear any UI hints that have accumulated for a domain object.
+
+* Mutable view models should implement the xref:HintIdProvider.adoc[] interface in order for hints to work.
 
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/HintStore/hooks/implementation.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/HintStore/hooks/implementation.adoc
index 697f559..742adb5 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/HintStore/hooks/implementation.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/HintStore/hooks/implementation.adoc
@@ -4,3 +4,5 @@
 
 
 == Implementation
+
+The core framework provides a default implementation of this service (`o.a.i.viewer.wicket.viewer.services.HintStoreUsingWicketSession`).
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/HomePageResolverService.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/HomePageResolverService.adoc
index a563b20..8a5d0d7 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/HomePageResolverService.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/HomePageResolverService.adoc
@@ -4,35 +4,11 @@
 :Notice: 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 ag [...]
 
 
+include::system:generated:page$index/applib/services/homepage/HomePageResolverService.adoc[]
 
+include::HomePageResolverService/hooks/implementation.adoc[]
 
-This service simply provides access to the home page object (if any) annotated with xref:refguide:applib-ant:HomePage.adoc[`@HomePage`].
+include::HomePageResolverService/hooks/examples_and_usage.adoc[]
 
-It was originally introduced to support the default implementation of xref:refguide:applib-svc:RoutingService.adoc[`RoutingService`], but was factored out to support alternative implementations of that service (and may be useful for other use cases).
 
-== API
-
-include::system:generated:page$index/applib/services/homepage/HomePageResolverService.adoc[leveloffset=+2]
-
-TODO example migration
-
-.Deprecated Docs
-[WARNING]
-================================
-
-== API
-
-The API defined by `HomePageResolverService` is:
-
-[source,java]
-----
-include::refguide:applib-svc:example$services/homepage/HomePageResolverService.java[tags="refguide"]
-----
-
-
-================================
-
-== Implementation
-
-The default implementation is provided by `o.a.i.core.runtimeservices.homepage.HomePageResolverServiceDefault`.
 
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/HomePageResolverService/hooks/examples_and_usage.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/HomePageResolverService/hooks/examples_and_usage.adoc
index 21f4ba4..40c2d3f 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/HomePageResolverService/hooks/examples_and_usage.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/HomePageResolverService/hooks/examples_and_usage.adoc
@@ -2,3 +2,6 @@
 :Notice: 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 ag [...]
 
 
+== Notes
+
+This service was originally introduced to support the default implementation of xref:refguide:applib-svc:RoutingService.adoc[`RoutingService`], but was factored out to support alternative implementations of that service (and may be useful for other use cases).
diff --git a/api/applib/src/main/adoc/modules/applib-svc/pages/HomePageResolverService/hooks/implementation.adoc b/api/applib/src/main/adoc/modules/applib-svc/pages/HomePageResolverService/hooks/implementation.adoc
index 697f559..f792826 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/pages/HomePageResolverService/hooks/implementation.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/pages/HomePageResolverService/hooks/implementation.adoc
@@ -4,3 +4,5 @@
 
 
 == Implementation
+
+The default implementation is provided by `o.a.i.core.runtimeservices.homepage.HomePageResolverServiceDefault`.
diff --git a/api/applib/src/main/adoc/modules/applib-svc/partials/_presentation-layer-spi.adoc b/api/applib/src/main/adoc/modules/applib-svc/partials/_presentation-layer-spi.adoc
index f82bc3f..109988b 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/partials/_presentation-layer-spi.adoc
+++ b/api/applib/src/main/adoc/modules/applib-svc/partials/_presentation-layer-spi.adoc
@@ -38,6 +38,10 @@ The framework will call all available implementations until a mapping is made (c
 
 
 
+|xref:refguide:applib-svc:HintStore.adoc[HintIdProvider]
+|Provide a "logical" identity for view models such that UI hints can be stored for them.
+
+
 |xref:refguide:applib-svc:HintStore.adoc[HintStore]
 |Stores UI hints on a per-object basis.
 For example, the viewer remembers which tabs are selected, and for collections which view is selected (eg table or hidden), which page of a table to render, or whether "show all" (rows) is toggled.
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerService.java b/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerService.java
index e9e2e5e..41226d2 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerService.java
@@ -31,7 +31,8 @@ import org.apache.isis.commons.collections.Can;
 public interface ExceptionRecognizerService {
 
     /**
-     *
+     * All ExceptionRecognizer implementations as discovered by the IoC
+     * container,  honoring order of precedence.
      * @return all ExceptionRecognizer implementations as discovered by the IoC container,
      * honoring order of precedence.
      */
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/grid/GridSystemService.java b/api/applib/src/main/java/org/apache/isis/applib/services/grid/GridSystemService.java
index d5dc6c2..613e22c 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/grid/GridSystemService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/grid/GridSystemService.java
@@ -21,31 +21,125 @@ package org.apache.isis.applib.services.grid;
 import org.apache.isis.applib.layout.grid.Grid;
 
 /**
- * Provides an implementation of {@link Grid}.
+ *
+ * Encapsulates a single layout grid system which can be used to customize the layout
+ * of domain objects.
+ *
+ * <p>
+ * In particular this means being able to return a "normalized" form
+ * (validating and associating domain object members into the various regions
+ * of the grid) and in providing a default grid if there is no other metadata
+ * available.
+ * </p>
  *
  * @since 1.x {@index}
  */
 public interface GridSystemService<G extends Grid> {
 
+
+
+
     /**
-     * Which grid (implementation) is defined by this service.
+     * The concrete subclass of {@link Grid} supported by this implementation.
+     *
+     * <p>
+     *     There can be multiple implementations of this service, this indicates
+     *     the base class used by the implementation.
+     * </p>
      */
     Class<G> gridImplementation();
 
+    /**
+     * The target namespace for this grid system.
+     *
+     * <p>
+     *     This is used when generating the XML.  The Bootstrap3 grid system
+     *     provided by the framework returns the value
+     *     `http://isis.apache.org/applib/layout/grid/bootstrap3`.
+     * </p>
+     */
     String tns();
 
+    /**
+     * The schema location for the XSD.
+     *
+     * <p>
+     *     Every grid system is expected to provide a schema XSD in order to
+     *     provide code completion in an IDE. The Bootstrap3 grid system
+     *     provided by the framework returns the value
+     *     `http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd`.
+     * </p>
+     *
+     * @return
+     */
     String schemaLocation();
 
+    /**
+     * A default grid, used when no grid layout can be found for the domain
+     * class.
+     *
+     * <p>
+     *     For example, this layout could define two columns in ratio 4:8.
+     * </p>
+     *
+     * @param domainClass
+     * @return
+     */
     G defaultGrid(Class<?> domainClass);
 
     /**
-     * Validate the grid, derive any missing object members, and overwrite any facets in the metamodel based on the
-     * layout.
+     * Validates and normalizes a grid, modifying the grid so that all of the
+     * domain object's members (properties, collections, actions) are bound to
+     * regions of the grid.
+     *
+     * <p>
+     * This is done using existing metadata, most notably that of the
+     * {@link org.apache.isis.applib.annotation.MemberOrder} annotation.
+     * Such a grid, if persisted as the layout XML file for the domain class,
+     * allows the {@link org.apache.isis.applib.annotation.MemberOrder}
+     * annotation to be removed from the source code of the domain class
+     * (but other annotations must be retained).
+     * </p>
      */
     void normalize(G grid, Class<?> domainClass);
 
+    /**
+     * Takes a normalized grid and enriches it with all the available metadata
+     * (taken from Apache Isis' internal metadata) that can be represented in
+     * the layout XML.
+     *
+     * <p>
+     * Such a grid, if persisted as the layout XML file for the domain class,
+     * allows all layout annotations
+     * ({@link org.apache.isis.applib.annotation.ActionLayout},
+     * {@link org.apache.isis.applib.annotation.PropertyLayout},
+     * {@link org.apache.isis.applib.annotation.CollectionLayout}) to be
+     * removed from the source code of the domain class.
+     *
+     * </p>
+     * @param grid
+     * @param domainClass
+     */
     void complete(G grid, Class<?> domainClass);
 
+    /**
+     * Takes a normalized grid and strips out removes all members, leaving only
+     * the grid structure.
+     *
+     * <p>
+     *     Such a grid, if persisted as the layout XML file for the domain
+     *     class, requires that the
+     *     {@link org.apache.isis.applib.annotation.MemberOrder} annotation
+     *     is retained in the source code of said class in order to bind
+     *     members to the regions of the grid.
+     * </p>
+     *
+     * @param grid
+     * @param domainClass
+     */
     void minimal(G grid, Class<?> domainClass);
 
+
+
+
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/health/HealthCheckService.java b/api/applib/src/main/java/org/apache/isis/applib/services/health/HealthCheckService.java
index 8ae9b89..34cb3ac 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/health/HealthCheckService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/health/HealthCheckService.java
@@ -19,6 +19,22 @@
 package org.apache.isis.applib.services.health;
 
 /**
+ * This SPI service allow runtime infrastructure such as Kubernetes or Docker
+ * Swarm to monitor the app and (potentially) restart it if required.
+ *
+ * <p>
+ * This SPI service integrates with Spring Boot's
+ * <a href="https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/actuate/health/HealthIndicator.html">HealthIndicator</a>
+ * SPI, surfaced through the
+ * <a href="https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html">Spring Boot Actuator</a>.
+ * It is therefore accessible from the <code>/actuator/health</code> endpoint
+ * (Spring allows the endpoint URL to be altered or suppressed).
+ * </p>
+ *
+ * <p>
+ * The service, when called, will be within the context of a special internal
+ * user <i>__health</i> with the internal role <i>__health-role</i>.
+ * </p>
  *
  * @since 2.0 {@index}
  */
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/hint/HintIdProvider.java b/api/applib/src/main/java/org/apache/isis/applib/services/hint/HintIdProvider.java
new file mode 100644
index 0000000..cbe6815
--- /dev/null
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/hint/HintIdProvider.java
@@ -0,0 +1,27 @@
+package org.apache.isis.applib.services.hint;
+
+/**
+ * Provides an SPI for view models to implement to represent
+ * their "logical" identity (stable even if the view model's state changes).
+ *
+ * <p>
+ *     Hints are stored against the `Bookmark` of a domain object, essentially
+ *     the identifier of the domain object. For a domain entity this identifier
+ *     is fixed and unchanging but for view models the identifier changes each
+ *     time the view model's state changes (the identifier is basically a
+ *     digest of the object's state).
+ *     This means that any hints stored against the view model's bookmark are
+ *     in effect lost as soon as the view model is modified.
+ * </p>
+ *
+ * <p>
+ *     This SPI therefore allows a view model to take advantage of the hinting
+ *     mechanism of the viewer by providing a "logical" identity stored which
+ *     hints for the view model can be stored.
+ * </p>
+ *
+ * @since 1.x {@index}
+ */
+public interface HintIdProvider {
+    String hintId();
+}
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/hint/HintStore.java b/api/applib/src/main/java/org/apache/isis/applib/services/hint/HintStore.java
index 3a7b774..a76cca7 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/hint/HintStore.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/hint/HintStore.java
@@ -23,22 +23,79 @@ import java.util.Set;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 
 /**
+ * Defines a mechanism for viewers to store arbitrary UI hints on a per-object
+ * basis.
+ *
+ * <p>
+ * This store <i>is</i> used by the Wicket viewer.   For example, the viewer
+ * remembers which tabs are selected, and for collections which view is
+ * selected (eg table or hidden), which page of a table to render, or whether
+ * "show all" (rows) is toggled.
+ * </p>
+ *
  * @since 1.x {@index}
  */
 public interface HintStore {
 
-    interface HintIdProvider {
-        String hintId();
-    }
-
+    /**
+     * Obtain a hint (eg which tab to open) for a particular object.
+     *
+     * <p>
+     * Object identity is represented by {@link Bookmark} so that alternative
+     * implementations can easily serialize this state to a string.
+     * </p>
+     *
+     * @apiNote Object identity is represented by {@link Bookmark} so that
+     *          alternative implementations can easily serialize this state to a string.
+     *
+     * @param bookmark - representing the domain object
+     * @param hintKey - the key of the hint
+     *
+     * @return - the value of the hint, or null.
+     */
     String get(final Bookmark bookmark, String hintKey);
 
+    /**
+     * Set the state of a hint for the domain object
+     *
+     * @apiNote Object identity is represented by {@link Bookmark} so that
+     *          alternative implementations can easily serialize this state to a string.
+     *
+     * @param bookmark - representing the domain object
+     * @param hintKey - the key of the hint
+     * @param value - the value of the hint
+     */
     void set(final Bookmark bookmark, String hintKey, String value);
 
+    /**
+     * Removes hint for the domain object.
+     *
+     * @apiNote Object identity is represented by {@link Bookmark} so that
+     *          alternative implementations can easily serialize this state to a string.
+     *
+     * @param bookmark - representing the domain object
+     * @param hintKey - the key of the hint
+     */
     void remove(final Bookmark bookmark, String hintKey);
 
+    /**
+     * Remotes all hints for the domain object.
+     *
+     * @apiNote Object identity is represented by {@link Bookmark} so that
+     *          alternative implementations can easily serialize this state to a string.
+     *
+     * @param bookmark - representing the domain object
+     */
     void removeAll(Bookmark bookmark);
 
+    /**
+     * The keys of all available hints for the domain object.
+     *
+     * @apiNote Object identity is represented by {@link Bookmark} so that
+     *          alternative implementations can easily serialize this state to a string.
+     *
+     * @param bookmark - representing the domain object
+     */
     Set<String> findHintKeys(Bookmark bookmark);
 
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/homepage/HomePageResolverService.java b/api/applib/src/main/java/org/apache/isis/applib/services/homepage/HomePageResolverService.java
index 2125bba..9c982fa 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/homepage/HomePageResolverService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/homepage/HomePageResolverService.java
@@ -21,7 +21,8 @@ package org.apache.isis.applib.services.homepage;
 import org.apache.isis.applib.annotation.HomePage;
 
 /**
- * Returns a view model annotated with {@link HomePage}.
+ * This service simply provides access to the home page object (if any)
+ * annotated with {@link HomePage}.
  *
  * @since 2.0 {@index}
  */
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/mementos/ObjectMementoWkt.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/mementos/ObjectMementoWkt.java
index 96bcefb..6ad0084 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/mementos/ObjectMementoWkt.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/mementos/ObjectMementoWkt.java
@@ -27,7 +27,7 @@ import java.util.Objects;
 import java.util.function.Function;
 
 import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.applib.services.hint.HintStore;
+import org.apache.isis.applib.services.hint.HintIdProvider;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
@@ -68,7 +68,7 @@ final class ObjectMementoWkt implements Serializable {
      * Factory method
      */
     static ObjectMementoWkt createPersistent(
-            RootOid rootOid, 
+            RootOid rootOid,
             SpecificationLoader specificationLoader) {
 
         return new ObjectMementoWkt(rootOid, specificationLoader);
@@ -186,10 +186,10 @@ final class ObjectMementoWkt implements Serializable {
 
             @Override
             public boolean equals(
-                    ObjectMementoWkt memento, 
+                    ObjectMementoWkt memento,
                     ObjectMementoWkt otherMemento) {
 
-                return otherMemento.recreateStrategy == ENCODEABLE && 
+                return otherMemento.recreateStrategy == ENCODEABLE &&
                         memento.encodableValue.equals(otherMemento.encodableValue);
             }
 
@@ -222,7 +222,7 @@ final class ObjectMementoWkt implements Serializable {
                 if(_NullSafe.isEmpty(memento.persistentOidStr)) {
                     throw _Exceptions.illegalArgument("need an id to lookup an object specId=%s", memento.objectSpecId);
                 }
-                
+
                 RootOid rootOid = Oid.unmarshaller().unmarshal(memento.persistentOidStr, RootOid.class);
                 try {
 
@@ -253,7 +253,7 @@ final class ObjectMementoWkt implements Serializable {
 
             @Override
             public boolean equals(ObjectMementoWkt oam, ObjectMementoWkt other) {
-                return other.recreateStrategy == LOOKUP 
+                return other.recreateStrategy == LOOKUP
                         && oam.persistentOidStr.equals(other.persistentOidStr);
             }
 
@@ -267,10 +267,10 @@ final class ObjectMementoWkt implements Serializable {
                 return oam.persistentOidStr;
             }
 
-        }, 
+        },
         /**
          * If all other strategies fail, as last resort we use plain java serialization, provided
-         * that the type in question is serializable 
+         * that the type in question is serializable
          */
         SERIALIZABLE {
             @Override
@@ -286,7 +286,7 @@ final class ObjectMementoWkt implements Serializable {
 
             @Override
             public boolean equals(
-                    ObjectMementoWkt memento, 
+                    ObjectMementoWkt memento,
                     ObjectMementoWkt otherMemento) {
                 return otherMemento.recreateStrategy == SERIALIZABLE
                         && Objects.equals(memento.objectSpecId, otherMemento.objectSpecId)
@@ -316,7 +316,7 @@ final class ObjectMementoWkt implements Serializable {
                 MetaModelContext mmc);
 
         public abstract boolean equals(
-                ObjectMementoWkt memento, 
+                ObjectMementoWkt memento,
                 ObjectMementoWkt otherMemento);
 
         public abstract int hashCode(ObjectMementoWkt memento);
@@ -351,7 +351,7 @@ final class ObjectMementoWkt implements Serializable {
      * Also, populated only if {@link #getCardinality() sort} is {@link Cardinality#SCALAR scalar}
      */
     private String encodableValue;
-    
+
     /**
      * The current value, if {@link RecreateStrategy#SERIALIZABLE}; will be <tt>null</tt> otherwise.
      *
@@ -377,7 +377,7 @@ final class ObjectMementoWkt implements Serializable {
     private Bookmark bookmark;
 
     /**
-     * Only populated for {@link ManagedObject#getPojo() domain object}s that implement {@link HintStore.HintIdProvider}.
+     * Only populated for {@link ManagedObject#getPojo() domain object}s that implement {@link HintIdProvider}.
      */
     private String hintId;
 
@@ -387,7 +387,7 @@ final class ObjectMementoWkt implements Serializable {
     private ArrayList<ObjectMementoWkt> list;
 
     private ObjectMementoWkt(
-            ArrayList<ObjectMementoWkt> list, 
+            ArrayList<ObjectMementoWkt> list,
             ObjectSpecId objectSpecId) {
 
         this.cardinality = Cardinality.VECTOR;
@@ -398,7 +398,7 @@ final class ObjectMementoWkt implements Serializable {
     private ObjectMementoWkt(RootOid rootOid, SpecificationLoader specificationLoader) {
 
         // -- // TODO[2112] do we ever need to create ENCODEABLE here?
-        val specId = rootOid.getObjectSpecId(); 
+        val specId = rootOid.getObjectSpecId();
         val spec = specificationLoader.lookupBySpecIdElseLoad(specId);
         if(spec!=null && spec.isEncodeable()) {
             this.cardinality = Cardinality.SCALAR;
@@ -406,7 +406,7 @@ final class ObjectMementoWkt implements Serializable {
             this.encodableValue = rootOid.getIdentifier();
             this.recreateStrategy = RecreateStrategy.ENCODEABLE;
             return;
-        } 
+        }
         // -- //
 
         this.cardinality = Cardinality.SCALAR;
@@ -443,14 +443,14 @@ final class ObjectMementoWkt implements Serializable {
             val rootOid = ManagedObjects.identifyElseFail(adapter);
             persistentOidStr = rootOid.enString();
             bookmark = rootOid.asBookmark();
-            if(adapter.getPojo() instanceof HintStore.HintIdProvider) {
-                HintStore.HintIdProvider provider = (HintStore.HintIdProvider) adapter.getPojo();
+            if(adapter.getPojo() instanceof HintIdProvider) {
+                HintIdProvider provider = (HintIdProvider) adapter.getPojo();
                 this.hintId = provider.hintId();
             }
             recreateStrategy = RecreateStrategy.LOOKUP;
             return;
         }
-        
+
         val encodableFacet = spec.getFacet(EncodableFacet.class);
         val isEncodable = encodableFacet != null;
         if (isEncodable) {
@@ -458,21 +458,21 @@ final class ObjectMementoWkt implements Serializable {
             recreateStrategy = RecreateStrategy.ENCODEABLE;
             return;
         }
-        
+
         if(spec.isSerializable()) {
             val serializer = spec.getMetaModelContext().getObjectManager().getObjectSerializer();
-            serializedObject = serializer.serialize(adapter); 
-            recreateStrategy = RecreateStrategy.SERIALIZABLE;    
+            serializedObject = serializer.serialize(adapter);
+            recreateStrategy = RecreateStrategy.SERIALIZABLE;
             return;
         }
-        
+
         throw _Exceptions.illegalArgument("Don't know how to create an ObjectMemento for a type "
                 + "with ObjectSpecification %s. "
                 + "All other strategies failed. Type is neither "
                 + "identifiable (isManagedBean() || isViewModel() || isEntity()), "
                 + "nor is a 'parented' Collection, "
                 + "nor has 'encodable' semantics, nor is (Serializable || Externalizable)", spec);
-        
+
     }
 
     private Cardinality getCardinality() {
@@ -514,7 +514,7 @@ final class ObjectMementoWkt implements Serializable {
         if(spec.getBeanSort().isManagedBean()) {
             return spec.getMetaModelContext().lookupServiceAdapterById(objectSpecId.asString());
         }
-        
+
         return cardinality.asAdapter(this, mmc);
     }