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

danhaywood pushed a commit to branch CAUSEWAY-2485
in repository https://gitbox.apache.org/repos/asf/causeway.git

commit 5e0b1f5375e1b2c93a85bad97167f13b57cdd048
Author: danhaywood <[email protected]>
AuthorDate: Sun May 21 16:47:50 2023 +0100

    CAUSEWAY-2485: cleans up Secman SPI example
---
 .../src/main/java/demoapp/dom/DemoModuleJpa.java   |  2 +-
 .../java/demoapp/dom/featured/FeaturedMenu.java    |  2 +
 .../causewayext/CausewayExtTypesMenu.java          |  4 +-
 .../cal/CausewayCalendarEvents-common.adoc         |  0
 .../cal/CausewayCalendarEvents-description.adoc    |  0
 .../causewayext/cal/CausewayCalendarEvents.java    |  6 +--
 .../cal/CausewayCalendarEvents.layout.xml          |  0
 .../cal/holder/CausewayCalendarEventHolder.java    |  2 +-
 .../cal/holder/CausewayCalendarEventHolder2.java   |  2 +-
 ...ausewayCalendarEventHolder_actionReturning.java |  2 +-
 ...endarEventHolder_actionReturningCollection.java |  2 +-
 .../CausewayCalendarEventHolder_mixinProperty.java |  2 +-
 ...EventHolder_updateReadOnlyOptionalProperty.java |  2 +-
 ..._updateReadOnlyOptionalPropertyWithChoices.java |  2 +-
 ...CalendarEventHolder_updateReadOnlyProperty.java |  2 +-
 ...ntHolder_updateReadOnlyPropertyWithChoices.java |  2 +-
 .../jdo/CausewayCalendarEventJdo-description.adoc  |  0
 .../cal/jdo/CausewayCalendarEventJdo.java          |  5 +-
 .../cal/jdo/CausewayCalendarEventJdoEntities.java  |  2 +-
 .../jpa/CausewayCalendarEventJpa-description.adoc  |  0
 .../cal/jpa/CausewayCalendarEventJpa.java          |  5 +-
 .../cal/jpa/CausewayCalendarEventJpaEntities.java  |  2 +-
 .../persistence/CausewayCalendarEventEntity.java   |  4 +-
 .../CausewayCalendarEventEntity.layout.xml         |  0
 .../persistence/CausewayCalendarEventSeeding.java  |  2 +-
 .../cal/samples/CausewayCalendarEventSamples.java  |  2 +-
 .../vm/CausewayCalendarEventVm-description.adoc    |  0
 .../cal/vm/CausewayCalendarEventVm.java            |  5 +-
 .../cal/vm/CausewayCalendarEventVm.layout.xml      |  0
 .../sse/AsyncActionDemo-description.adoc           |  0
 .../causewayext/sse/AsyncActionDemo.java           |  2 +-
 .../causewayext/sse/AsyncActionDemo.layout.xml     |  0
 .../causewayext/sse/AsyncActionMenu.java           |  2 +-
 .../causewayext/sse/DemoTask.java                  |  2 +-
 .../causewayext/sse/TaskProgress.java              |  2 +-
 .../dom/featured/causewayext/sse/package-info.java |  4 ++
 .../dom/featured/layout/tabs/TabDemo.layout.xml    | 13 ++---
 .../src/main/java/demoapp/dom/menubars.layout.xml  | 26 ++++-----
 .../apptenancy/AppTenancyVm-description.adoc       | 62 +++++++++++++---------
 .../ApplicationTenancyEvaluatorForDemo.java        |  9 +++-
 .../dom/types/causewayext/sse/package-info.java    |  4 --
 41 files changed, 97 insertions(+), 88 deletions(-)

diff --git a/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java 
b/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
index 50b6ec5486..9a8858bf77 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
@@ -66,7 +66,7 @@ import demoapp.dom.types.causeway.clobs.jpa.CausewayClobJpa;
 import 
demoapp.dom.types.causeway.localresourcepaths.jpa.CausewayLocalResourcePathJpa;
 import demoapp.dom.types.causeway.markups.jpa.CausewayMarkupJpa;
 import demoapp.dom.types.causeway.passwords.jpa.CausewayPasswordJpa;
-import demoapp.dom.types.causewayext.cal.jpa.CausewayCalendarEventJpa;
+import demoapp.dom.featured.causewayext.cal.jpa.CausewayCalendarEventJpa;
 import demoapp.dom.types.causewayval.asciidocs.jpa.CausewayAsciiDocJpa;
 import demoapp.dom.types.causewayval.markdowns.jpa.CausewayMarkdownJpa;
 import demoapp.dom.types.causewayval.vegas.jpa.CausewayVegaJpa;
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/featured/FeaturedMenu.java 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/FeaturedMenu.java
index 524c5af568..17f6882a48 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/featured/FeaturedMenu.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/featured/FeaturedMenu.java
@@ -85,6 +85,8 @@ public class FeaturedMenu {
         return 14;
     }
 
+
+
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(cssClassFa="fa-comment", describedAs="Opens the Tooltip-Demo 
page.")
     public DescribedAsVm toolTips(){
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/CausewayExtTypesMenu.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/CausewayExtTypesMenu.java
similarity index 93%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/CausewayExtTypesMenu.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/CausewayExtTypesMenu.java
index f5f4bd82fd..f8f27b6ef0 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/CausewayExtTypesMenu.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/CausewayExtTypesMenu.java
@@ -17,7 +17,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext;
+package demoapp.dom.featured.causewayext;
 
 import javax.inject.Named;
 
@@ -29,7 +29,7 @@ import org.apache.causeway.applib.annotation.NatureOfService;
 import org.apache.causeway.applib.annotation.PriorityPrecedence;
 import org.apache.causeway.applib.annotation.SemanticsOf;
 
-import demoapp.dom.types.causewayext.cal.CausewayCalendarEvents;
+import demoapp.dom.featured.causewayext.cal.CausewayCalendarEvents;
 
 @Named("demo.CausewayExtTypesMenu")
 @DomainService(
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/CausewayCalendarEvents-common.adoc
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/CausewayCalendarEvents-common.adoc
similarity index 100%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/CausewayCalendarEvents-common.adoc
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/CausewayCalendarEvents-common.adoc
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/CausewayCalendarEvents-description.adoc
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/CausewayCalendarEvents-description.adoc
similarity index 100%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/CausewayCalendarEvents-description.adoc
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/CausewayCalendarEvents-description.adoc
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/CausewayCalendarEvents.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/CausewayCalendarEvents.java
similarity index 93%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/CausewayCalendarEvents.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/CausewayCalendarEvents.java
index d82ce3ea90..310fbed097 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/CausewayCalendarEvents.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/CausewayCalendarEvents.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.cal;
+package demoapp.dom.featured.causewayext.cal;
 
 import java.util.List;
 
@@ -43,9 +43,9 @@ import 
org.apache.causeway.extensions.fullcalendar.applib.value.CalendarEvent;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolderRepository;
+import 
demoapp.dom.featured.causewayext.cal.persistence.CausewayCalendarEventEntity;
+import demoapp.dom.featured.causewayext.cal.vm.CausewayCalendarEventVm;
 import demoapp.dom.types.Samples;
-import 
demoapp.dom.types.causewayext.cal.persistence.CausewayCalendarEventEntity;
-import demoapp.dom.types.causewayext.cal.vm.CausewayCalendarEventVm;
 
 @XmlRootElement(name = "Demo")
 @XmlType
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/CausewayCalendarEvents.layout.xml
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/CausewayCalendarEvents.layout.xml
similarity index 100%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/CausewayCalendarEvents.layout.xml
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/CausewayCalendarEvents.layout.xml
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder.java
similarity index 96%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder.java
index 79fd41fb30..8c287691a3 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.cal.holder;
+package demoapp.dom.featured.causewayext.cal.holder;
 
 import javax.inject.Named;
 
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder2.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder2.java
similarity index 98%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder2.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder2.java
index 9611f51501..928170357c 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder2.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder2.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.cal.holder;
+package demoapp.dom.featured.causewayext.cal.holder;
 
 import org.apache.causeway.applib.annotation.LabelPosition;
 import org.apache.causeway.applib.annotation.Property;
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder_actionReturning.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder_actionReturning.java
similarity index 96%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder_actionReturning.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder_actionReturning.java
index 942b312883..3cf8b6adb5 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder_actionReturning.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder_actionReturning.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.cal.holder;
+package demoapp.dom.featured.causewayext.cal.holder;
 
 import org.apache.causeway.applib.annotation.Action;
 import org.apache.causeway.applib.annotation.SemanticsOf;
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder_actionReturningCollection.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder_actionReturningCollection.java
similarity index 96%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder_actionReturningCollection.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder_actionReturningCollection.java
index 76cefe8fc8..ed8a6d851f 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder_actionReturningCollection.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder_actionReturningCollection.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.cal.holder;
+package demoapp.dom.featured.causewayext.cal.holder;
 
 import java.util.Collection;
 import java.util.stream.Collectors;
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder_mixinProperty.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder_mixinProperty.java
similarity index 96%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder_mixinProperty.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder_mixinProperty.java
index aaca9d1362..2127865c4c 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder_mixinProperty.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder_mixinProperty.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.cal.holder;
+package demoapp.dom.featured.causewayext.cal.holder;
 
 import org.apache.causeway.applib.annotation.Property;
 import org.apache.causeway.applib.annotation.PropertyLayout;
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyOptionalProperty.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyOptionalProperty.java
similarity index 97%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyOptionalProperty.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyOptionalProperty.java
index 31d47fc3ab..a27999d700 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyOptionalProperty.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyOptionalProperty.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.cal.holder;
+package demoapp.dom.featured.causewayext.cal.holder;
 
 import org.apache.causeway.applib.annotation.Action;
 import org.apache.causeway.applib.annotation.ActionLayout;
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyOptionalPropertyWithChoices.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyOptionalPropertyWithChoices.java
similarity index 97%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyOptionalPropertyWithChoices.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyOptionalPropertyWithChoices.java
index 9a0028d99f..6786be8691 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyOptionalPropertyWithChoices.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyOptionalPropertyWithChoices.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.cal.holder;
+package demoapp.dom.featured.causewayext.cal.holder;
 
 import java.util.List;
 import java.util.stream.Collectors;
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyProperty.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyProperty.java
similarity index 97%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyProperty.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyProperty.java
index e8b2cbfa7e..8fd7fa0f78 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyProperty.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyProperty.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.cal.holder;
+package demoapp.dom.featured.causewayext.cal.holder;
 
 import org.apache.causeway.applib.annotation.Action;
 import org.apache.causeway.applib.annotation.ActionLayout;
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyPropertyWithChoices.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyPropertyWithChoices.java
similarity index 97%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyPropertyWithChoices.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyPropertyWithChoices.java
index a060f115ba..fff54990ab 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyPropertyWithChoices.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/holder/CausewayCalendarEventHolder_updateReadOnlyPropertyWithChoices.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.cal.holder;
+package demoapp.dom.featured.causewayext.cal.holder;
 
 import java.util.List;
 import java.util.stream.Collectors;
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/jdo/CausewayCalendarEventJdo-description.adoc
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/jdo/CausewayCalendarEventJdo-description.adoc
similarity index 100%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/jdo/CausewayCalendarEventJdo-description.adoc
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/jdo/CausewayCalendarEventJdo-description.adoc
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/jdo/CausewayCalendarEventJdo.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/jdo/CausewayCalendarEventJdo.java
similarity index 96%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/jdo/CausewayCalendarEventJdo.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/jdo/CausewayCalendarEventJdo.java
index c234fd6394..52b45c2944 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/jdo/CausewayCalendarEventJdo.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/jdo/CausewayCalendarEventJdo.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.cal.jdo;
+package demoapp.dom.featured.causewayext.cal.jdo;
 
 import javax.inject.Named;
 import javax.jdo.annotations.Column;
@@ -36,11 +36,10 @@ import org.apache.causeway.applib.annotation.Title;
 
 import org.apache.causeway.extensions.fullcalendar.applib.value.CalendarEvent;
 
+import 
demoapp.dom.featured.causewayext.cal.persistence.CausewayCalendarEventEntity;
 import lombok.Getter;
 import lombok.Setter;
 
-import 
demoapp.dom.types.causewayext.cal.persistence.CausewayCalendarEventEntity;
-
 @Profile("demo-jdo")
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/jdo/CausewayCalendarEventJdoEntities.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/jdo/CausewayCalendarEventJdoEntities.java
similarity index 96%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/jdo/CausewayCalendarEventJdoEntities.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/jdo/CausewayCalendarEventJdoEntities.java
index f9608a2a34..c5b563ebbf 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/jdo/CausewayCalendarEventJdoEntities.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/jdo/CausewayCalendarEventJdoEntities.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.cal.jdo;
+package demoapp.dom.featured.causewayext.cal.jdo;
 
 import org.springframework.context.annotation.Profile;
 import org.springframework.stereotype.Service;
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/jpa/CausewayCalendarEventJpa-description.adoc
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/jpa/CausewayCalendarEventJpa-description.adoc
similarity index 100%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/jpa/CausewayCalendarEventJpa-description.adoc
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/jpa/CausewayCalendarEventJpa-description.adoc
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/jpa/CausewayCalendarEventJpa.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/jpa/CausewayCalendarEventJpa.java
similarity index 96%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/jpa/CausewayCalendarEventJpa.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/jpa/CausewayCalendarEventJpa.java
index c8ac538d0b..735ee8806e 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/jpa/CausewayCalendarEventJpa.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/jpa/CausewayCalendarEventJpa.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.cal.jpa;
+package demoapp.dom.featured.causewayext.cal.jpa;
 
 import javax.inject.Named;
 import javax.persistence.Column;
@@ -38,12 +38,11 @@ import 
org.apache.causeway.persistence.jpa.applib.integration.CausewayEntityList
 
 import org.apache.causeway.extensions.fullcalendar.applib.value.CalendarEvent;
 
+import 
demoapp.dom.featured.causewayext.cal.persistence.CausewayCalendarEventEntity;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
-import 
demoapp.dom.types.causewayext.cal.persistence.CausewayCalendarEventEntity;
-
 @Profile("demo-jpa")
 //tag::class[]
 @Entity
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/jpa/CausewayCalendarEventJpaEntities.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/jpa/CausewayCalendarEventJpaEntities.java
similarity index 96%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/jpa/CausewayCalendarEventJpaEntities.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/jpa/CausewayCalendarEventJpaEntities.java
index f685c186a6..92b08887b2 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/jpa/CausewayCalendarEventJpaEntities.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/jpa/CausewayCalendarEventJpaEntities.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.cal.jpa;
+package demoapp.dom.featured.causewayext.cal.jpa;
 
 import org.springframework.context.annotation.Profile;
 import org.springframework.stereotype.Service;
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/persistence/CausewayCalendarEventEntity.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/persistence/CausewayCalendarEventEntity.java
similarity index 91%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/persistence/CausewayCalendarEventEntity.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/persistence/CausewayCalendarEventEntity.java
index 657f7e450a..0ee658d8a9 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/persistence/CausewayCalendarEventEntity.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/persistence/CausewayCalendarEventEntity.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.cal.persistence;
+package demoapp.dom.featured.causewayext.cal.persistence;
 
 import javax.inject.Named;
 
@@ -24,7 +24,7 @@ import org.apache.causeway.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
-import demoapp.dom.types.causewayext.cal.holder.CausewayCalendarEventHolder2;
+import 
demoapp.dom.featured.causewayext.cal.holder.CausewayCalendarEventHolder2;
 
 import org.apache.causeway.extensions.fullcalendar.applib.value.CalendarEvent;
 
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/persistence/CausewayCalendarEventEntity.layout.xml
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/persistence/CausewayCalendarEventEntity.layout.xml
similarity index 100%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/persistence/CausewayCalendarEventEntity.layout.xml
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/persistence/CausewayCalendarEventEntity.layout.xml
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/persistence/CausewayCalendarEventSeeding.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/persistence/CausewayCalendarEventSeeding.java
similarity index 95%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/persistence/CausewayCalendarEventSeeding.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/persistence/CausewayCalendarEventSeeding.java
index 9fafbaf3f1..1e1bd1f14d 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/persistence/CausewayCalendarEventSeeding.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/persistence/CausewayCalendarEventSeeding.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.cal.persistence;
+package demoapp.dom.featured.causewayext.cal.persistence;
 
 import javax.inject.Inject;
 
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/samples/CausewayCalendarEventSamples.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/samples/CausewayCalendarEventSamples.java
similarity index 96%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/samples/CausewayCalendarEventSamples.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/samples/CausewayCalendarEventSamples.java
index 14b9d33947..11d31620f7 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/samples/CausewayCalendarEventSamples.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/samples/CausewayCalendarEventSamples.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.cal.samples;
+package demoapp.dom.featured.causewayext.cal.samples;
 
 import java.util.stream.Stream;
 
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/vm/CausewayCalendarEventVm-description.adoc
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/vm/CausewayCalendarEventVm-description.adoc
similarity index 100%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/vm/CausewayCalendarEventVm-description.adoc
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/vm/CausewayCalendarEventVm-description.adoc
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/vm/CausewayCalendarEventVm.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/vm/CausewayCalendarEventVm.java
similarity index 94%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/vm/CausewayCalendarEventVm.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/vm/CausewayCalendarEventVm.java
index d80581fcab..9ae401e803 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/vm/CausewayCalendarEventVm.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/vm/CausewayCalendarEventVm.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.cal.vm;
+package demoapp.dom.featured.causewayext.cal.vm;
 
 import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
@@ -24,7 +24,6 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import org.apache.causeway.applib.annotation.DomainObject;
 import org.apache.causeway.applib.annotation.Editing;
@@ -36,11 +35,11 @@ import org.apache.causeway.applib.annotation.Title;
 
 import org.apache.causeway.extensions.fullcalendar.applib.value.CalendarEvent;
 
+import 
demoapp.dom.featured.causewayext.cal.holder.CausewayCalendarEventHolder2;
 import lombok.Getter;
 import lombok.Setter;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.types.causewayext.cal.holder.CausewayCalendarEventHolder2;
 
 //tag::class[]
 @XmlRootElement(name = "root")
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/vm/CausewayCalendarEventVm.layout.xml
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/vm/CausewayCalendarEventVm.layout.xml
similarity index 100%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/cal/vm/CausewayCalendarEventVm.layout.xml
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/cal/vm/CausewayCalendarEventVm.layout.xml
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/sse/AsyncActionDemo-description.adoc
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/sse/AsyncActionDemo-description.adoc
similarity index 100%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/sse/AsyncActionDemo-description.adoc
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/sse/AsyncActionDemo-description.adoc
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/sse/AsyncActionDemo.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/sse/AsyncActionDemo.java
similarity index 98%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/sse/AsyncActionDemo.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/sse/AsyncActionDemo.java
index 0ffbecb547..cc5a72ffb3 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/sse/AsyncActionDemo.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/sse/AsyncActionDemo.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.sse;
+package demoapp.dom.featured.causewayext.sse;
 
 import javax.inject.Inject;
 import javax.inject.Named;
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/sse/AsyncActionDemo.layout.xml
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/sse/AsyncActionDemo.layout.xml
similarity index 100%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/sse/AsyncActionDemo.layout.xml
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/sse/AsyncActionDemo.layout.xml
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/sse/AsyncActionMenu.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/sse/AsyncActionMenu.java
similarity index 97%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/sse/AsyncActionMenu.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/sse/AsyncActionMenu.java
index 398d3f31f4..fc07a055fb 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/sse/AsyncActionMenu.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/sse/AsyncActionMenu.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.sse;
+package demoapp.dom.featured.causewayext.sse;
 
 import javax.inject.Inject;
 import javax.inject.Named;
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/sse/DemoTask.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/sse/DemoTask.java
similarity index 97%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/sse/DemoTask.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/sse/DemoTask.java
index b2f613c958..0c1d802ec3 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/sse/DemoTask.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/sse/DemoTask.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.sse;
+package demoapp.dom.featured.causewayext.sse;
 
 import java.util.concurrent.atomic.LongAdder;
 
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/sse/TaskProgress.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/sse/TaskProgress.java
similarity index 97%
rename from 
examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/sse/TaskProgress.java
rename to 
examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/sse/TaskProgress.java
index ce781d130a..b31a117e8b 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/sse/TaskProgress.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/sse/TaskProgress.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.types.causewayext.sse;
+package demoapp.dom.featured.causewayext.sse;
 
 import java.util.concurrent.atomic.LongAdder;
 
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/sse/package-info.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/sse/package-info.java
new file mode 100644
index 0000000000..6bad946df3
--- /dev/null
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/causewayext/sse/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * This files are NOT generated.
+ */
+package demoapp.dom.featured.causewayext.sse;
\ No newline at end of file
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/featured/layout/tabs/TabDemo.layout.xml
 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/layout/tabs/TabDemo.layout.xml
index 6fd1d941e0..fbd48659eb 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/featured/layout/tabs/TabDemo.layout.xml
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/featured/layout/tabs/TabDemo.layout.xml
@@ -13,16 +13,13 @@
           xmlns:cpt="https://causeway.apache.org/applib/layout/component";
 >
     <bs3:row>
-        <bs3:col span="12" unreferencedActions="true">
-            <cpt:domainObject/>
-            <cpt:action id="clearHints"/>
-            <cpt:action id="downloadLayoutXml"/>
-            <cpt:action id="openRestApi"/>
-            <cpt:action id="rebuildMetamodel"/>
-
+        <bs3:col span="10" unreferencedActions="true">
+            <cpt:domainObject />
             <cpt:action id="doHideField"/>
             <cpt:action id="doShowField"/>
-
+        </bs3:col>
+        <bs3:col span="2">
+            <cpt:fieldSet name="" id="sources" />
         </bs3:col>
     </bs3:row>
     <bs3:row>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml 
b/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml
index 321aeffd60..5ede0a654e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml
+++ b/examples/demo/domain/src/main/java/demoapp/dom/menubars.layout.xml
@@ -173,6 +173,10 @@ For latest we use: 
https://raw.githubusercontent.com/apache/causeway/master/anto
                 <mb3:named>Core SPIs</mb3:named>
                 <mb3:serviceAction objectType="demo.ServicesMenu" 
id="errorReportingService" />
             </mb3:section>
+            <mb3:section>
+                <mb3:named>SecMan SPI</mb3:named>
+                <mb3:serviceAction objectType="demo.ExtSecManMenu" 
id="appTenancy"/>
+            </mb3:section>
         </mb3:menu>
 
         <mb3:menu>
@@ -284,28 +288,20 @@ For latest we use: 
https://raw.githubusercontent.com/apache/causeway/master/anto
         </mb3:menu>
 
         <mb3:menu>
-            <mb3:named>Extensions</mb3:named>
+            <mb3:named>Featured</mb3:named>
             <mb3:section>
-                <mb3:named>Wicket Viewer</mb3:named>
+                <mb3:named>Layout</mb3:named>
+                <mb3:serviceAction objectType="demo.FeaturedMenu" 
id="toolTips" />
+                <mb3:serviceAction objectType="demo.FeaturedMenu" id="tabDemo" 
/>
+            </mb3:section>
+            <mb3:section>
+                <mb3:named>Wicket Extensions</mb3:named>
                 <mb3:serviceAction objectType="demo.CausewayExtTypesMenu" 
id="calendarEvents"/>
                 <mb3:serviceAction objectType="demo.AsyncActionMenu" 
id="asyncActions">
                     <cpt:named>SSE</cpt:named>
                     <cpt:describedAs>Background (Async) 
Actions</cpt:describedAs>
                 </mb3:serviceAction>
             </mb3:section>
-            <mb3:section>
-                <mb3:named>SecMan</mb3:named>
-                <mb3:serviceAction objectType="demo.ExtSecManMenu" 
id="appTenancy"/>
-            </mb3:section>
-        </mb3:menu>
-
-        <mb3:menu>
-            <mb3:named>Featured</mb3:named>
-            <mb3:section>
-                <mb3:named>Layout</mb3:named>
-                <mb3:serviceAction objectType="demo.FeaturedMenu" 
id="toolTips" />
-                <mb3:serviceAction objectType="demo.FeaturedMenu" id="tabDemo" 
/>
-            </mb3:section>
             <mb3:section>
                 <mb3:named>Custom UI</mb3:named>
                 <mb3:serviceAction objectType="demo.FeaturedMenu" 
id="whereInTheWorld" />
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/AppTenancyVm-description.adoc
 
b/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/AppTenancyVm-description.adoc
index bf5191b2ca..85c4fbfb0f 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/AppTenancyVm-description.adoc
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/AppTenancyVm-description.adoc
@@ -2,27 +2,55 @@
 
 Application Tenancy is the idea that certain information "belongs" to one 
party and should be either not visible or at least not modifiable by some other 
party.
 
-The SecMan extension provides a very flexible way of implementing this, 
through the `ApplicationTenancyEvaluator` SPI.
+The SecMan extension provides a very flexible way of implementing this, 
through the 
link:https://causeway.apache.org/refguide/2.0.0-RC1/extensions/index/secman/applib/tenancy/spi/ApplicationTenancyEvaluator.html#section-top[ApplicationTenancyEvaluator]
 SPI.
 This allows a domain service to decide whether to hide or to disable each 
object for the current user.
 
-For example:
+[IMPORTANT]
+====
+This SPI is a presentation-layer concern only.
+It does not prevent the domain objects from being retrieved from the data 
store.
+In particular, there is nothing to prevent "malicious" code from retrieving 
and interacting with objects from another tenancy.
+====
+
+== How this demo works
+
+On the left hand side is a collection of objects, each with different names.
+There are also two properties that control an implementation of 
`ApplicationTenancyEvaluator`.
 
+* The "Hide Regex" determines which objects with a matching name should be 
hidden.
+For example, "M.\*" will hide those whose name starting "M", while ".*" will 
hide them all.
+* The "Disable Regex" determines which objects can no longer be modified (when 
you navigate into them).
+
+In terms of code:
+
+* the SPI implementation is:
++
 [source,java]
+.ApplicationTenancyEvaluatorForDemo.java
 ----
 include::ApplicationTenancyEvaluatorForDemo.java[tags=class]
 ----
 <.> implements the SPI.
 There can be multiple implementations; all will be checked.
-
 <.> whether this implementation handles the type of the domain object being 
considered.
-This demo application deals only with the `TenantedJdo` entity type.
-
+<.> set by the page object
+This demo application deals only with the `TenantedEntity` entity type.
 <.> whether the current user can view the domain object.
+<.> whether the current user can modify (invoke actions, edit the properties 
of) the domain object.
+
+* the page object has actions that set a pattern on the service.
++
+[source,java]
+.AppTenancyVm.java
+----
+include::AppTenancyVm.java[tags=hideRegex]
+----
+
 
-<.> whether the current user can interact (invoke actions, modify the 
properties of) the domain object.
+=== Leveraging User Tenancy
 
-This demo example doesn't in fact use the current `ApplicationUser` at all.
-A typical implementation though can exploit the fact that `ApplicationUser` 
implements `HasAtPath` and therefore can return an `atPath`: the "application 
tenancy path":
+This demo implementation doesn't in fact use the current `ApplicationUser` at 
all.
+A more realistic implementation would exploit the fact that `ApplicationUser` 
implements `HasAtPath` and therefore can return an `atPath`: the "application 
tenancy path":
 
 [source,java]
 ----
@@ -34,20 +62,4 @@ public interface ApplicationUser extends HasAtPath {
 
 The `atPath` is just a string and can take any format and be processed in any 
way that makes sense.
 One algorithm is to use it to define a hierarchy path, for example "/GBR/LON" 
represents a user based in London, Great Britain while "/ITA/MIL" is a user 
based in Milan, Italy.
-If the domain object also implements `HasAtPath`, then the 
`ApplicationTenancyEvaluator` can compare the two ``atPath``s to determine if 
the location/tenancy of the user is compatible with the location/tenancy of the 
domain object.
-
-This particular demo though simply uses a regular expression to control 
visibility and usability, with two properties (to the left-hand side of this 
page) used to control the domain service.
-For example:
-
-[source,java]
-----
-include::AppTenancyVm.java[tags=hideRegex]
-----
-
-[IMPORTANT]
-====
-This SPI is a presentation-layer concern only.
-It does not prevent the domain objects from being retrieved from the data 
store.
-
-In particular, there is nothing to prevent "malicious" code from retrieving 
and interacting with objects from another tenancy.
-====
+If the domain object also implements `HasAtPath`, then the 
`ApplicationTenancyEvaluator` can compare the two ``atPath``s to determine if 
the location/tenancy of the user is should allow access to the location/tenancy 
of the domain object.
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/ApplicationTenancyEvaluatorForDemo.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/ApplicationTenancyEvaluatorForDemo.java
index c3efcb9746..c0c79616f9 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/ApplicationTenancyEvaluatorForDemo.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/ApplicationTenancyEvaluatorForDemo.java
@@ -40,6 +40,7 @@ public class ApplicationTenancyEvaluatorForDemo
         return TenantedEntity.class.isAssignableFrom(cls);
     }
 
+    private Pattern hidePattern;                                               
     // <.>
     @Override
     public String hides(Object domainObject, ApplicationUser applicationUser) 
{     // <.>
         if(hidePattern == null) {
@@ -53,6 +54,7 @@ public class ApplicationTenancyEvaluatorForDemo
                 : null;
     }
 
+    private Pattern disablePattern;                                            
     // <3>
     @Override
     public String disables(Object domainObject, ApplicationUser 
applicationUser) {  // <.>
         if(disablePattern == null) {
@@ -65,7 +67,10 @@ public class ApplicationTenancyEvaluatorForDemo
                 ? String.format("disabled, because name matches '%s'", 
disablePattern)
                 : null;
     }
+    // ...
+//end::class[]
 
+//tag::hideRegex[]
     @Getter
     private String hideRegex;
     public void setHideRegex(String hideRegex) {
@@ -74,7 +79,7 @@ public class ApplicationTenancyEvaluatorForDemo
                 ? Pattern.compile(hideRegex)
                 : null;
     }
-    private Pattern hidePattern;
+//end::hideRegex[]
 
     @Getter
     private String disableRegex;
@@ -84,7 +89,7 @@ public class ApplicationTenancyEvaluatorForDemo
                 ? Pattern.compile(disableRegex)
                 : null;
     }
-    private Pattern disablePattern;
 
+//tag::class[]
 }
 //end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/sse/package-info.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/sse/package-info.java
deleted file mode 100644
index 674db93f96..0000000000
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/types/causewayext/sse/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * This files are NOT generated.
- */
-package demoapp.dom.types.causewayext.sse;
\ No newline at end of file


Reply via email to