You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2023/01/05 09:18:48 UTC

[isis] branch 3309-demo.obj.layout updated (ad8de884e5 -> ad4b72f143)

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

ahuber pushed a change to branch 3309-demo.obj.layout
in repository https://gitbox.apache.org/repos/asf/isis.git


 discard ad8de884e5 ISIS-3309: [Demo] Object Layout Annotation: adding VM stubs
     add 5e93b51bd3 Bump structurizr-core from 1.16.1 to 1.16.2
     add 69ea832715 Merge pull request #1290 from apache/dependabot/maven/master/com.structurizr-structurizr-core-1.16.2
     add b699e21b97 Bump wagon-ftp from 3.5.2 to 3.5.3
     add 7846828bf0 Merge pull request #1294 from apache/dependabot/maven/master/org.apache.maven.wagon-wagon-ftp-3.5.3
     add 552c240157 Bump spring-boot-starter-parent from 2.7.6 to 2.7.7
     add 6067ef6fb5 Merge pull request #1293 from apache/dependabot/maven/master/org.springframework.boot-spring-boot-starter-parent-2.7.7
     add 77a4249c65 Bump spring-boot-maven-plugin from 2.7.6 to 2.7.7
     add ef1f414dfb Merge pull request #1295 from apache/dependabot/maven/master/org.springframework.boot-spring-boot-maven-plugin-2.7.7
     add 6288933bcf Bump spring-boot.version from 2.7.6 to 2.7.7
     add e716ae8e11 Merge pull request #1296 from apache/dependabot/maven/master/spring-boot.version-2.7.7
     add 32831c6969 Bump wagon-ssh from 3.5.2 to 3.5.3
     add 7c658a3ce9 Merge pull request #1297 from apache/dependabot/maven/master/org.apache.maven.wagon-wagon-ssh-3.5.3
     add 08091428cb Bump dependency-check-maven from 7.4.1 to 7.4.3
     add fad6d11096 Merge pull request #1309 from apache/dependabot/maven/master/org.owasp-dependency-check-maven-7.4.3
     add 77deb22dd8 Bump error_prone_annotations from 2.16 to 2.17.0
     add cf9c91c9e2 Merge pull request #1313 from apache/dependabot/maven/master/com.google.errorprone-error_prone_annotations-2.17.0
     add 42e73097c8 Bump easymock from 5.0.1 to 5.1.0
     add a7f16e3c88 Merge pull request #1316 from apache/dependabot/maven/master/org.easymock-easymock-5.1.0
     add 036e7a4403 Bump vaadin.version from 23.3.1 to 23.3.2
     add e58d393d6a Merge pull request #1307 from apache/dependabot/maven/master/vaadin.version-23.3.2
     add 1a46614f65 Bump javaparser-core from 3.24.9 to 3.24.10
     add ebae7b9097 Merge pull request #1314 from apache/dependabot/maven/master/com.github.javaparser-javaparser-core-3.24.10
     add 34a3e2b599 Bump maven-model-builder from 3.8.6 to 3.8.7
     add 99d278261a Merge pull request #1315 from apache/dependabot/maven/master/org.apache.maven-maven-model-builder-3.8.7
     add 7fb94aa612 Bump maven-jaxb2-plugin from 0.15.1 to 0.15.2
     add 7a65fd6de2 Merge pull request #1310 from apache/dependabot/maven/master/org.jvnet.jaxb2.maven2-maven-jaxb2-plugin-0.15.2
     add a28f7f38b9 ISIS-3317: CSS navbar link color fix
     add c99038bbb5 ISIS-3317: flatly CSS Navbar Font Color fixes
     new 49b9c18dfa ISIS-3309: [Demo] Object Layout Annotation: adding VM stubs
     new ad4b72f143 ISIS-3318: simplified internal use of BookmarkPolicy

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (ad8de884e5)
            \
             N -- N -- N   refs/heads/3309-demo.obj.layout (ad4b72f143)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../causeway/applib/annotation/BookmarkPolicy.java   |  7 +++++--
 api/schema/pom.xml                                   |  2 +-
 bom/pom.xml                                          | 16 ++++++++--------
 .../apache/causeway/core/metamodel/util/Facets.java  |  6 ++----
 core/pom.xml                                         |  2 +-
 starters/pom.xml                                     |  4 ++--
 tooling/javamodel/pom.xml                            |  2 +-
 tooling/pom.xml                                      |  4 ++--
 .../commons/model/action/HasManagedAction.java       |  8 +++-----
 .../viewer/wicket/model/models/ActionModelImpl.java  |  5 +++--
 .../viewer/wicket/model/models/BookmarkTreeNode.java | 20 +++++---------------
 .../wicket/model/models/BookmarkableModel.java       |  4 +++-
 .../wicket/model/models/BookmarkedPagesModel.java    |  2 +-
 .../wicket/model/models/ManagedObjectModel.java      | 13 -------------
 .../interaction/HasBookmarkedOwnerAbstract.java      | 13 +++----------
 .../bootstrap/css/bootstrap-overrides-all-v2.css     |  3 +--
 .../bootstrap/css/bootstrap-overrides-flatly.css     |  6 +++---
 17 files changed, 44 insertions(+), 73 deletions(-)


[isis] 01/02: ISIS-3309: [Demo] Object Layout Annotation: adding VM stubs

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch 3309-demo.obj.layout
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 49b9c18dfa91c5df6cddf2a6ddced8ef6b17f32b
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Dec 23 08:48:26 2022 +0100

    ISIS-3309: [Demo] Object Layout Annotation: adding VM stubs
---
 .../DomainObjectLayout/DomainObjectLayoutMenu.java |  2 +-
 ... => DomainObjectLayoutBookmarkingNestedVm.java} | 17 +++++---
 ...omainObjectLayoutBookmarkingVm-description.adoc |  7 ++++
 .../DomainObjectLayoutBookmarkingVm.java           |  9 +++-
 .../DomainObjectLayoutBookmarkingVm.layout.xml     | 49 ++++++++++++++++++++++
 .../DomainObjectLayoutCssClassVm-description.adoc  |  6 +++
 .../cssClass/DomainObjectLayoutCssClassVm.java     |  2 +-
 .../DomainObjectLayoutCssClassVm.layout.xml        | 49 ++++++++++++++++++++++
 ...DomainObjectLayoutCssClassFaVm-description.adoc |  6 +++
 .../cssClassFa/DomainObjectLayoutCssClassFaVm.java |  2 +-
 .../DomainObjectLayoutCssClassFaVm.layout.xml      | 49 ++++++++++++++++++++++
 ...omainObjectLayoutDescribedAsVm-description.adoc |  6 +++
 .../DomainObjectLayoutDescribedAsVm.java           |  2 +-
 .../DomainObjectLayoutDescribedAsVm.layout.xml     | 49 ++++++++++++++++++++++
 .../DomainObjectLayoutNamedVm-description.adoc     |  6 +++
 .../named/DomainObjectLayoutNamedVm.java           |  2 +-
 .../named/DomainObjectLayoutNamedVm.layout.xml     | 49 ++++++++++++++++++++++
 .../DomainObjectLayoutPagedVm-description.adoc     |  7 ++++
 .../paged/DomainObjectLayoutPagedVm.java           |  2 +-
 .../paged/DomainObjectLayoutPagedVm.layout.xml     | 49 ++++++++++++++++++++++
 .../DomainObjectLayoutPluralVm-description.adoc    |  7 ++++
 .../plural/DomainObjectLayoutPluralVm.java         |  2 +-
 .../plural/DomainObjectLayoutPluralVm.layout.xml   | 49 ++++++++++++++++++++++
 ...DomainObjectLayoutXxxUiEventVm-description.adoc |  6 +++
 .../xxxUiEvent/DomainObjectLayoutXxxUiEventVm.java |  2 +-
 .../DomainObjectLayoutXxxUiEventVm.layout.xml      | 49 ++++++++++++++++++++++
 26 files changed, 469 insertions(+), 16 deletions(-)

diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/DomainObjectLayoutMenu.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/DomainObjectLayoutMenu.java
index 7f06cb87e1..d181b087d0 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/DomainObjectLayoutMenu.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/DomainObjectLayoutMenu.java
@@ -79,7 +79,7 @@ public class DomainObjectLayoutMenu {
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(cssClassFa="fa-signature",
-        describedAs = "Custom text for the domain object's type wherever labelled")
+        describedAs = "Custom text for the domain object's type wherever labeled")
     public DomainObjectLayoutNamedVm named(){
         return factoryService.viewModel(new DomainObjectLayoutNamedVm());
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/bookmarking/DomainObjectLayoutBookmarkingVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/bookmarking/DomainObjectLayoutBookmarkingNestedVm.java
similarity index 78%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/bookmarking/DomainObjectLayoutBookmarkingVm.java
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/bookmarking/DomainObjectLayoutBookmarkingNestedVm.java
index 48b17e175b..18d10c1d67 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/bookmarking/DomainObjectLayoutBookmarkingVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/bookmarking/DomainObjectLayoutBookmarkingNestedVm.java
@@ -25,7 +25,9 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
+import org.apache.causeway.applib.annotation.BookmarkPolicy;
 import org.apache.causeway.applib.annotation.DomainObject;
+import org.apache.causeway.applib.annotation.DomainObjectLayout;
 import org.apache.causeway.applib.annotation.Nature;
 import org.apache.causeway.applib.annotation.ObjectSupport;
 import org.apache.causeway.applib.annotation.Optionality;
@@ -36,23 +38,26 @@ import lombok.Getter;
 import lombok.Setter;
 
 //tag::class[]
-@XmlRootElement(name = "root")
+@XmlRootElement(name = "child")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@Named("demo.DomainObjectLayoutBookmarkingVm")
+@Named("demo.DomainObjectLayoutBookmarkingVmNested")
 @DomainObject(
         nature=Nature.VIEW_MODEL)
-public class DomainObjectLayoutBookmarkingVm implements HasAsciiDocDescription {
+@DomainObjectLayout(
+        bookmarking = BookmarkPolicy.AS_CHILD    // <.>
+        )
+public class DomainObjectLayoutBookmarkingNestedVm implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
-        return "DomainObjectLayout#bookmarking";
+        return "DomainObjectLayoutBookmarkingVmNested";
     }
 
-    //TODO
+    //TODO[ISIS-3309]
     @Property(optionality = Optionality.OPTIONAL)
     @XmlElement(required = false)
     @Getter @Setter
-    private String dummy;
+    private BookmarkPolicy dummy;
 
 }
 //end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/bookmarking/DomainObjectLayoutBookmarkingVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/bookmarking/DomainObjectLayoutBookmarkingVm-description.adoc
new file mode 100644
index 0000000000..907ba46909
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/bookmarking/DomainObjectLayoutBookmarkingVm-description.adoc
@@ -0,0 +1,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 [...]
+
+The `bookmarking` attribute ...
+
+TODO[ISIS-3309]
+Add link to object once visited as a bookmark
+
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/bookmarking/DomainObjectLayoutBookmarkingVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/bookmarking/DomainObjectLayoutBookmarkingVm.java
index 48b17e175b..c4dfd366a1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/bookmarking/DomainObjectLayoutBookmarkingVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/bookmarking/DomainObjectLayoutBookmarkingVm.java
@@ -25,7 +25,9 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
+import org.apache.causeway.applib.annotation.BookmarkPolicy;
 import org.apache.causeway.applib.annotation.DomainObject;
+import org.apache.causeway.applib.annotation.DomainObjectLayout;
 import org.apache.causeway.applib.annotation.Nature;
 import org.apache.causeway.applib.annotation.ObjectSupport;
 import org.apache.causeway.applib.annotation.Optionality;
@@ -42,17 +44,20 @@ import lombok.Setter;
 @Named("demo.DomainObjectLayoutBookmarkingVm")
 @DomainObject(
         nature=Nature.VIEW_MODEL)
+@DomainObjectLayout(
+        bookmarking = BookmarkPolicy.AS_ROOT    // <.>
+        )
 public class DomainObjectLayoutBookmarkingVm implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
         return "DomainObjectLayout#bookmarking";
     }
 
-    //TODO
+    //TODO[ISIS-3309]
     @Property(optionality = Optionality.OPTIONAL)
     @XmlElement(required = false)
     @Getter @Setter
-    private String dummy;
+    private DomainObjectLayoutBookmarkingNestedVm nestedObjectLevel1 = new DomainObjectLayoutBookmarkingNestedVm();
 
 }
 //end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/bookmarking/DomainObjectLayoutBookmarkingVm.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/bookmarking/DomainObjectLayoutBookmarkingVm.layout.xml
new file mode 100644
index 0000000000..875e9c68b8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/bookmarking/DomainObjectLayoutBookmarkingVm.layout.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
+	license agreements. See the NOTICE file distributed with this work for additional
+	information regarding copyright ownership. The ASF licenses this file to
+	you under the Apache License, Version 2.0 (the "License"); you may not use
+	this file except in compliance with the License. You may obtain a copy of
+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
+	by applicable law or agreed to in writing, software distributed under the
+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+	OF ANY KIND, either express or implied. See the License for the specific
+	language governing permissions and limitations under the License. -->
+<bs3:grid
+        xsi:schemaLocation="http://causeway.apache.org/applib/layout/component http://causeway.apache.org/applib/layout/component/component.xsd   http://causeway.apache.org/applib/layout/grid/bootstrap3 http://causeway.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://causeway.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://causeway.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
+		</bs3:col>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Description" id="description" >
+				<cpt:action id="clearHints" position="PANEL" />
+				<cpt:action id="downloadLayoutXml"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="rebuildMetamodel" position="PANEL"/>
+				<cpt:action id="downloadMetamodelXml"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="inspectMetamodel"  position="PANEL_DROPDOWN"/>
+                <cpt:action id="recentCommands"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/cssClass/DomainObjectLayoutCssClassVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/cssClass/DomainObjectLayoutCssClassVm-description.adoc
new file mode 100644
index 0000000000..cc14303af2
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/cssClass/DomainObjectLayoutCssClassVm-description.adoc
@@ -0,0 +1,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 [...]
+
+The `cssClass` attribute ...
+
+TODO[ISIS-3309]
+CSS class to wrap the UI component representing the domain object
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/cssClass/DomainObjectLayoutCssClassVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/cssClass/DomainObjectLayoutCssClassVm.java
index 32bb3f4d8e..a470792b3a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/cssClass/DomainObjectLayoutCssClassVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/cssClass/DomainObjectLayoutCssClassVm.java
@@ -48,7 +48,7 @@ public class DomainObjectLayoutCssClassVm implements HasAsciiDocDescription {
         return "DomainObjectLayout#cssClass";
     }
 
-    //TODO
+    //TODO[ISIS-3309]
     @Property(optionality = Optionality.OPTIONAL)
     @XmlElement(required = false)
     @Getter @Setter
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/cssClass/DomainObjectLayoutCssClassVm.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/cssClass/DomainObjectLayoutCssClassVm.layout.xml
new file mode 100644
index 0000000000..875e9c68b8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/cssClass/DomainObjectLayoutCssClassVm.layout.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
+	license agreements. See the NOTICE file distributed with this work for additional
+	information regarding copyright ownership. The ASF licenses this file to
+	you under the Apache License, Version 2.0 (the "License"); you may not use
+	this file except in compliance with the License. You may obtain a copy of
+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
+	by applicable law or agreed to in writing, software distributed under the
+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+	OF ANY KIND, either express or implied. See the License for the specific
+	language governing permissions and limitations under the License. -->
+<bs3:grid
+        xsi:schemaLocation="http://causeway.apache.org/applib/layout/component http://causeway.apache.org/applib/layout/component/component.xsd   http://causeway.apache.org/applib/layout/grid/bootstrap3 http://causeway.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://causeway.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://causeway.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
+		</bs3:col>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Description" id="description" >
+				<cpt:action id="clearHints" position="PANEL" />
+				<cpt:action id="downloadLayoutXml"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="rebuildMetamodel" position="PANEL"/>
+				<cpt:action id="downloadMetamodelXml"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="inspectMetamodel"  position="PANEL_DROPDOWN"/>
+                <cpt:action id="recentCommands"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/cssClassFa/DomainObjectLayoutCssClassFaVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/cssClassFa/DomainObjectLayoutCssClassFaVm-description.adoc
new file mode 100644
index 0000000000..59056c567c
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/cssClassFa/DomainObjectLayoutCssClassFaVm-description.adoc
@@ -0,0 +1,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 [...]
+
+The `cssClassFa` attribute ...
+
+TODO[ISIS-3309]
+Font awesome icon to represent domain object
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/cssClassFa/DomainObjectLayoutCssClassFaVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/cssClassFa/DomainObjectLayoutCssClassFaVm.java
index 9d1e4ac0f0..71e3c493dc 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/cssClassFa/DomainObjectLayoutCssClassFaVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/cssClassFa/DomainObjectLayoutCssClassFaVm.java
@@ -48,7 +48,7 @@ public class DomainObjectLayoutCssClassFaVm implements HasAsciiDocDescription {
         return "DomainObjectLayout#cssClassFa";
     }
 
-    //TODO
+    //TODO[ISIS-3309]
     @Property(optionality = Optionality.OPTIONAL)
     @XmlElement(required = false)
     @Getter @Setter
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/cssClassFa/DomainObjectLayoutCssClassFaVm.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/cssClassFa/DomainObjectLayoutCssClassFaVm.layout.xml
new file mode 100644
index 0000000000..875e9c68b8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/cssClassFa/DomainObjectLayoutCssClassFaVm.layout.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
+	license agreements. See the NOTICE file distributed with this work for additional
+	information regarding copyright ownership. The ASF licenses this file to
+	you under the Apache License, Version 2.0 (the "License"); you may not use
+	this file except in compliance with the License. You may obtain a copy of
+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
+	by applicable law or agreed to in writing, software distributed under the
+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+	OF ANY KIND, either express or implied. See the License for the specific
+	language governing permissions and limitations under the License. -->
+<bs3:grid
+        xsi:schemaLocation="http://causeway.apache.org/applib/layout/component http://causeway.apache.org/applib/layout/component/component.xsd   http://causeway.apache.org/applib/layout/grid/bootstrap3 http://causeway.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://causeway.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://causeway.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
+		</bs3:col>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Description" id="description" >
+				<cpt:action id="clearHints" position="PANEL" />
+				<cpt:action id="downloadLayoutXml"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="rebuildMetamodel" position="PANEL"/>
+				<cpt:action id="downloadMetamodelXml"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="inspectMetamodel"  position="PANEL_DROPDOWN"/>
+                <cpt:action id="recentCommands"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/describedAs/DomainObjectLayoutDescribedAsVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/describedAs/DomainObjectLayoutDescribedAsVm-description.adoc
new file mode 100644
index 0000000000..344d19e741
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/describedAs/DomainObjectLayoutDescribedAsVm-description.adoc
@@ -0,0 +1,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 [...]
+
+The `describedAs` attribute ...
+
+TODO[ISIS-3309]
+Description of the property, shown as a tooltip
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/describedAs/DomainObjectLayoutDescribedAsVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/describedAs/DomainObjectLayoutDescribedAsVm.java
index 4bf73bb9be..ce8253cbee 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/describedAs/DomainObjectLayoutDescribedAsVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/describedAs/DomainObjectLayoutDescribedAsVm.java
@@ -48,7 +48,7 @@ public class DomainObjectLayoutDescribedAsVm implements HasAsciiDocDescription {
         return "DomainObjectLayout#describedAs";
     }
 
-    //TODO
+    //TODO[ISIS-3309]
     @Property(optionality = Optionality.OPTIONAL)
     @XmlElement(required = false)
     @Getter @Setter
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/describedAs/DomainObjectLayoutDescribedAsVm.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/describedAs/DomainObjectLayoutDescribedAsVm.layout.xml
new file mode 100644
index 0000000000..875e9c68b8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/describedAs/DomainObjectLayoutDescribedAsVm.layout.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
+	license agreements. See the NOTICE file distributed with this work for additional
+	information regarding copyright ownership. The ASF licenses this file to
+	you under the Apache License, Version 2.0 (the "License"); you may not use
+	this file except in compliance with the License. You may obtain a copy of
+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
+	by applicable law or agreed to in writing, software distributed under the
+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+	OF ANY KIND, either express or implied. See the License for the specific
+	language governing permissions and limitations under the License. -->
+<bs3:grid
+        xsi:schemaLocation="http://causeway.apache.org/applib/layout/component http://causeway.apache.org/applib/layout/component/component.xsd   http://causeway.apache.org/applib/layout/grid/bootstrap3 http://causeway.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://causeway.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://causeway.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
+		</bs3:col>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Description" id="description" >
+				<cpt:action id="clearHints" position="PANEL" />
+				<cpt:action id="downloadLayoutXml"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="rebuildMetamodel" position="PANEL"/>
+				<cpt:action id="downloadMetamodelXml"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="inspectMetamodel"  position="PANEL_DROPDOWN"/>
+                <cpt:action id="recentCommands"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/named/DomainObjectLayoutNamedVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/named/DomainObjectLayoutNamedVm-description.adoc
new file mode 100644
index 0000000000..4c00c90cde
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/named/DomainObjectLayoutNamedVm-description.adoc
@@ -0,0 +1,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 [...]
+
+The `named` attribute ...
+
+TODO[ISIS-3309]
+Custom text for the domain object's type wherever labeled
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/named/DomainObjectLayoutNamedVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/named/DomainObjectLayoutNamedVm.java
index eb33b5ed95..8f79c74d6f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/named/DomainObjectLayoutNamedVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/named/DomainObjectLayoutNamedVm.java
@@ -48,7 +48,7 @@ public class DomainObjectLayoutNamedVm implements HasAsciiDocDescription {
         return "DomainObjectLayout#named";
     }
 
-    //TODO
+    //TODO[ISIS-3309]
     @Property(optionality = Optionality.OPTIONAL)
     @XmlElement(required = false)
     @Getter @Setter
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/named/DomainObjectLayoutNamedVm.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/named/DomainObjectLayoutNamedVm.layout.xml
new file mode 100644
index 0000000000..875e9c68b8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/named/DomainObjectLayoutNamedVm.layout.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
+	license agreements. See the NOTICE file distributed with this work for additional
+	information regarding copyright ownership. The ASF licenses this file to
+	you under the Apache License, Version 2.0 (the "License"); you may not use
+	this file except in compliance with the License. You may obtain a copy of
+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
+	by applicable law or agreed to in writing, software distributed under the
+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+	OF ANY KIND, either express or implied. See the License for the specific
+	language governing permissions and limitations under the License. -->
+<bs3:grid
+        xsi:schemaLocation="http://causeway.apache.org/applib/layout/component http://causeway.apache.org/applib/layout/component/component.xsd   http://causeway.apache.org/applib/layout/grid/bootstrap3 http://causeway.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://causeway.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://causeway.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
+		</bs3:col>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Description" id="description" >
+				<cpt:action id="clearHints" position="PANEL" />
+				<cpt:action id="downloadLayoutXml"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="rebuildMetamodel" position="PANEL"/>
+				<cpt:action id="downloadMetamodelXml"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="inspectMetamodel"  position="PANEL_DROPDOWN"/>
+                <cpt:action id="recentCommands"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/paged/DomainObjectLayoutPagedVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/paged/DomainObjectLayoutPagedVm-description.adoc
new file mode 100644
index 0000000000..bc9a0bf3e3
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/paged/DomainObjectLayoutPagedVm-description.adoc
@@ -0,0 +1,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 [...]
+
+The `paged` attribute ...
+
+TODO[ISIS-3309]
+Add link to object once visited as a bookmark
+Number of domain objects per page in collections
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/paged/DomainObjectLayoutPagedVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/paged/DomainObjectLayoutPagedVm.java
index 7b04622f8d..eba6870f44 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/paged/DomainObjectLayoutPagedVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/paged/DomainObjectLayoutPagedVm.java
@@ -48,7 +48,7 @@ public class DomainObjectLayoutPagedVm implements HasAsciiDocDescription {
         return "DomainObjectLayout#paged";
     }
 
-    //TODO
+    //TODO[ISIS-3309]
     @Property(optionality = Optionality.OPTIONAL)
     @XmlElement(required = false)
     @Getter @Setter
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/paged/DomainObjectLayoutPagedVm.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/paged/DomainObjectLayoutPagedVm.layout.xml
new file mode 100644
index 0000000000..875e9c68b8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/paged/DomainObjectLayoutPagedVm.layout.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
+	license agreements. See the NOTICE file distributed with this work for additional
+	information regarding copyright ownership. The ASF licenses this file to
+	you under the Apache License, Version 2.0 (the "License"); you may not use
+	this file except in compliance with the License. You may obtain a copy of
+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
+	by applicable law or agreed to in writing, software distributed under the
+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+	OF ANY KIND, either express or implied. See the License for the specific
+	language governing permissions and limitations under the License. -->
+<bs3:grid
+        xsi:schemaLocation="http://causeway.apache.org/applib/layout/component http://causeway.apache.org/applib/layout/component/component.xsd   http://causeway.apache.org/applib/layout/grid/bootstrap3 http://causeway.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://causeway.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://causeway.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
+		</bs3:col>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Description" id="description" >
+				<cpt:action id="clearHints" position="PANEL" />
+				<cpt:action id="downloadLayoutXml"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="rebuildMetamodel" position="PANEL"/>
+				<cpt:action id="downloadMetamodelXml"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="inspectMetamodel"  position="PANEL_DROPDOWN"/>
+                <cpt:action id="recentCommands"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/plural/DomainObjectLayoutPluralVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/plural/DomainObjectLayoutPluralVm-description.adoc
new file mode 100644
index 0000000000..db20be303a
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/plural/DomainObjectLayoutPluralVm-description.adoc
@@ -0,0 +1,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 [...]
+
+The `plural` attribute ...
+
+TODO[ISIS-3309]
+Overrides plural form for the domain object's type, eg for irregular plurals
+
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/plural/DomainObjectLayoutPluralVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/plural/DomainObjectLayoutPluralVm.java
index 11f6239099..898328dac6 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/plural/DomainObjectLayoutPluralVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/plural/DomainObjectLayoutPluralVm.java
@@ -48,7 +48,7 @@ public class DomainObjectLayoutPluralVm implements HasAsciiDocDescription {
         return "DomainObjectLayout#plural";
     }
 
-    //TODO
+    //TODO[ISIS-3309]
     @Property(optionality = Optionality.OPTIONAL)
     @XmlElement(required = false)
     @Getter @Setter
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/plural/DomainObjectLayoutPluralVm.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/plural/DomainObjectLayoutPluralVm.layout.xml
new file mode 100644
index 0000000000..875e9c68b8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/plural/DomainObjectLayoutPluralVm.layout.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
+	license agreements. See the NOTICE file distributed with this work for additional
+	information regarding copyright ownership. The ASF licenses this file to
+	you under the Apache License, Version 2.0 (the "License"); you may not use
+	this file except in compliance with the License. You may obtain a copy of
+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
+	by applicable law or agreed to in writing, software distributed under the
+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+	OF ANY KIND, either express or implied. See the License for the specific
+	language governing permissions and limitations under the License. -->
+<bs3:grid
+        xsi:schemaLocation="http://causeway.apache.org/applib/layout/component http://causeway.apache.org/applib/layout/component/component.xsd   http://causeway.apache.org/applib/layout/grid/bootstrap3 http://causeway.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://causeway.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://causeway.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
+		</bs3:col>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Description" id="description" >
+				<cpt:action id="clearHints" position="PANEL" />
+				<cpt:action id="downloadLayoutXml"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="rebuildMetamodel" position="PANEL"/>
+				<cpt:action id="downloadMetamodelXml"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="inspectMetamodel"  position="PANEL_DROPDOWN"/>
+                <cpt:action id="recentCommands"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/xxxUiEvent/DomainObjectLayoutXxxUiEventVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/xxxUiEvent/DomainObjectLayoutXxxUiEventVm-description.adoc
new file mode 100644
index 0000000000..76ec8c41c0
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/xxxUiEvent/DomainObjectLayoutXxxUiEventVm-description.adoc
@@ -0,0 +1,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 [...]
+
+The `xxxUiEvent` attribute ...
+
+TODO[ISIS-3309]
+Class of the UI events emitted to allow subscribers to specify title, icon etc
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/xxxUiEvent/DomainObjectLayoutXxxUiEventVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/xxxUiEvent/DomainObjectLayoutXxxUiEventVm.java
index 6ca9d4a9b7..42b1874451 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/xxxUiEvent/DomainObjectLayoutXxxUiEventVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/xxxUiEvent/DomainObjectLayoutXxxUiEventVm.java
@@ -48,7 +48,7 @@ public class DomainObjectLayoutXxxUiEventVm implements HasAsciiDocDescription {
         return "DomainObjectLayout#xxxUiEvent";
     }
 
-    //TODO
+    //TODO[ISIS-3309]
     @Property(optionality = Optionality.OPTIONAL)
     @XmlElement(required = false)
     @Getter @Setter
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/xxxUiEvent/DomainObjectLayoutXxxUiEventVm.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/xxxUiEvent/DomainObjectLayoutXxxUiEventVm.layout.xml
new file mode 100644
index 0000000000..875e9c68b8
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/xxxUiEvent/DomainObjectLayoutXxxUiEventVm.layout.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
+	license agreements. See the NOTICE file distributed with this work for additional
+	information regarding copyright ownership. The ASF licenses this file to
+	you under the Apache License, Version 2.0 (the "License"); you may not use
+	this file except in compliance with the License. You may obtain a copy of
+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
+	by applicable law or agreed to in writing, software distributed under the
+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+	OF ANY KIND, either express or implied. See the License for the specific
+	language governing permissions and limitations under the License. -->
+<bs3:grid
+        xsi:schemaLocation="http://causeway.apache.org/applib/layout/component http://causeway.apache.org/applib/layout/component/component.xsd   http://causeway.apache.org/applib/layout/grid/bootstrap3 http://causeway.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
+        xmlns:bs3="http://causeway.apache.org/applib/layout/grid/bootstrap3"
+        xmlns:cpt="http://causeway.apache.org/applib/layout/component"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<bs3:row>
+		<bs3:col span="10" unreferencedActions="true">
+			<cpt:domainObject />
+		</bs3:col>
+		<bs3:col span="2">
+			<cpt:fieldSet name="" id="sources" />
+		</bs3:col>
+	</bs3:row>
+
+	<bs3:row>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
+		</bs3:col>
+		<bs3:col span="6">
+			<cpt:fieldSet name="Description" id="description" >
+				<cpt:action id="clearHints" position="PANEL" />
+				<cpt:action id="downloadLayoutXml"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="rebuildMetamodel" position="PANEL"/>
+				<cpt:action id="downloadMetamodelXml"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="inspectMetamodel"  position="PANEL_DROPDOWN"/>
+                <cpt:action id="recentCommands"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="downloadJdoMetadata"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
+				<cpt:property id="description"/>
+			</cpt:fieldSet>
+		</bs3:col>
+	</bs3:row>
+	<bs3:row>
+		<bs3:col span="12" unreferencedCollections="true"/>
+	</bs3:row>
+
+</bs3:grid>


[isis] 02/02: ISIS-3318: simplified internal use of BookmarkPolicy

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch 3309-demo.obj.layout
in repository https://gitbox.apache.org/repos/asf/isis.git

commit ad4b72f143999349da89f5c4350b23f55ad8fbd5
Author: andi-huber <ah...@apache.org>
AuthorDate: Thu Jan 5 10:18:27 2023 +0100

    ISIS-3318: simplified internal use of BookmarkPolicy
---
 .../causeway/applib/annotation/BookmarkPolicy.java   |  7 +++++--
 .../apache/causeway/core/metamodel/util/Facets.java  |  6 ++----
 .../commons/model/action/HasManagedAction.java       |  8 +++-----
 .../viewer/wicket/model/models/ActionModelImpl.java  |  5 +++--
 .../viewer/wicket/model/models/BookmarkTreeNode.java | 20 +++++---------------
 .../wicket/model/models/BookmarkableModel.java       |  4 +++-
 .../wicket/model/models/BookmarkedPagesModel.java    |  2 +-
 .../wicket/model/models/ManagedObjectModel.java      | 13 -------------
 .../interaction/HasBookmarkedOwnerAbstract.java      | 13 +++----------
 9 files changed, 25 insertions(+), 53 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/causeway/applib/annotation/BookmarkPolicy.java b/api/applib/src/main/java/org/apache/causeway/applib/annotation/BookmarkPolicy.java
index 2b96b65547..cc3e058bdb 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/annotation/BookmarkPolicy.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/annotation/BookmarkPolicy.java
@@ -22,7 +22,7 @@ package org.apache.causeway.applib.annotation;
 import javax.xml.bind.annotation.XmlType;
 
 /**
- * 
+ *
  * @since 1.x {@index}
  */
 @XmlType(
@@ -49,6 +49,9 @@ public enum BookmarkPolicy {
      * Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta
      * annotations or superclasses/interfaces).
      */
-    NOT_SPECIFIED
+    NOT_SPECIFIED;
+
+    public boolean isRoot() {return this == AS_ROOT;}
+    public boolean isChild() {return this == AS_CHILD;}
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/util/Facets.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/util/Facets.java
index 2d5ecf42ae..7d81013a04 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/util/Facets.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/util/Facets.java
@@ -114,10 +114,8 @@ public final class Facets {
         .map(BookmarkPolicyFacet::value);
     }
 
-    public Predicate<FacetHolder> bookmarkPolicyMatches(final Predicate<BookmarkPolicy> matcher) {
-        return facetHolder->Facets.bookmarkPolicy(facetHolder)
-        .map(matcher::test)
-        .orElse(false);
+    public BookmarkPolicy bookmarkPolicyOrElseNotSpecified(final @Nullable FacetHolder facetHolder) {
+        return bookmarkPolicy(facetHolder).orElse(BookmarkPolicy.NOT_SPECIFIED);
     }
 
     public Optional<BSGrid> bootstrapGrid(
diff --git a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/action/HasManagedAction.java b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/action/HasManagedAction.java
index 64b5845282..afb683aef5 100644
--- a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/action/HasManagedAction.java
+++ b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/action/HasManagedAction.java
@@ -44,9 +44,9 @@ public interface HasManagedAction {
 
     /**
      * Metamodel of the represented {@link ManagedAction}.
-     * @apiNote implementing classes may provide this more directly 
+     * @apiNote implementing classes may provide this more directly
      *  than having to conjure up a ManagedAction only to provide its metamodel;
-     *  in other words: this is not strictly required but provides optimization opportunities   
+     *  in other words: this is not strictly required but provides optimization opportunities
      */
     ObjectAction getAction();
 
@@ -82,10 +82,8 @@ public interface HasManagedAction {
      */
     default boolean isBookmarkable() {
         val action = getAction();
-
         return action.getSemantics().isSafeInNature()
-                && Facets.bookmarkPolicyMatches(BookmarkPolicy.AS_ROOT::equals)
-                    .test(action);
+                && Facets.bookmarkPolicyOrElseNotSpecified(action).isRoot();
     }
 
     default Identifier getFeatureIdentifier() {
diff --git a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ActionModelImpl.java b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ActionModelImpl.java
index 60ae4ab273..6214ac85a7 100644
--- a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ActionModelImpl.java
+++ b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ActionModelImpl.java
@@ -25,6 +25,7 @@ import org.apache.wicket.model.ChainingModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 import org.apache.causeway.applib.Identifier;
+import org.apache.causeway.applib.annotation.BookmarkPolicy;
 import org.apache.causeway.applib.annotation.Where;
 import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
@@ -114,8 +115,8 @@ implements ActionModel {
     // --
 
     @Override
-    public boolean hasAsRootPolicy() {
-        return true;
+    public BookmarkPolicy getBookmarkPolicy() {
+        return BookmarkPolicy.AS_ROOT;
     }
 
     @Override
diff --git a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/BookmarkTreeNode.java b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/BookmarkTreeNode.java
index b0de7ac283..10eee2716e 100644
--- a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/BookmarkTreeNode.java
+++ b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/BookmarkTreeNode.java
@@ -43,13 +43,14 @@ public class BookmarkTreeNode implements Serializable {
     private static final long serialVersionUID = 1L;
 
     private final List<BookmarkTreeNode> children = _Lists.newArrayList();
-    private final int depth;
+    @Getter private final int depth;
 
     @Getter private final Bookmark oidNoVer; //TODO rename field, versions have been removed
     @Getter private final String oidNoVerStr; //TODO rename field, versions have been removed
 
     private String title;
-    private PageParameters pageParameters;
+
+    @Getter private PageParameters pageParameters;
 
     public static BookmarkTreeNode newRoot(
             final BookmarkableModel bookmarkableModel) {
@@ -133,7 +134,7 @@ public class BookmarkTreeNode implements Serializable {
         }
 
         // and also match recursively down to all children and grand-children.
-        if(candidateEntityModel.hasAsChildPolicy()) {
+        if(candidateEntityModel.getBookmarkPolicy().isChild()) {
             for(BookmarkTreeNode childNode: this.getChildren()) {
                 inGraph = childNode.matches(candidateEntityModel) || inGraph; // evaluate each
             }
@@ -219,17 +220,6 @@ public class BookmarkTreeNode implements Serializable {
         }
     }
 
-    public int getDepth() {
-        return depth;
-    }
-
-
-    // //////////////////////////////////////
-
-    public PageParameters getPageParameters() {
-        return pageParameters;
-    }
-
     // //////////////////////////////////////
 
     public static @Nullable Bookmark bookmarkFrom(final PageParameters pageParameters) {
@@ -241,7 +231,7 @@ public class BookmarkTreeNode implements Serializable {
         }
     }
 
-    public static String oidStrFrom(final BookmarkableModel candidateBookmarkableModel) {
+    public static @Nullable String oidStrFrom(final BookmarkableModel candidateBookmarkableModel) {
         final Bookmark bookmark = bookmarkFrom(candidateBookmarkableModel.getPageParametersWithoutUiHints());
         return bookmark != null
                 ? bookmark.stringify()
diff --git a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/BookmarkableModel.java b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/BookmarkableModel.java
index 1b72bd4e19..c26fdb997c 100644
--- a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/BookmarkableModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/BookmarkableModel.java
@@ -20,6 +20,7 @@ package org.apache.causeway.viewer.wicket.model.models;
 
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
+import org.apache.causeway.applib.annotation.BookmarkPolicy;
 import org.apache.causeway.viewer.commons.model.mixin.HasTitle;
 
 public interface BookmarkableModel
@@ -32,6 +33,7 @@ extends HasTitle {
 
     public abstract PageParameters getPageParametersWithoutUiHints();
 
-    public abstract boolean hasAsRootPolicy();
+    /** governs how to populate the BookmarkPanel in the UI */
+    public abstract BookmarkPolicy getBookmarkPolicy();
 
 }
diff --git a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/BookmarkedPagesModel.java b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/BookmarkedPagesModel.java
index 722a5929a0..c4737a424c 100644
--- a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/BookmarkedPagesModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/BookmarkedPagesModel.java
@@ -66,7 +66,7 @@ public class BookmarkedPagesModel extends ModelAbstract<List<BookmarkTreeNode>>
             rootNodes.add(0, rootNode);
             current = candidatePP;
         } else {
-            if (bookmarkableModel.hasAsRootPolicy()) {
+            if (bookmarkableModel.getBookmarkPolicy().isRoot()) {
                 rootNode = BookmarkTreeNode.newRoot(bookmarkableModel);
                 rootNodes.add(0, rootNode);
                 current = candidatePP;
diff --git a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ManagedObjectModel.java b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ManagedObjectModel.java
index 0245081261..e8501adee1 100644
--- a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ManagedObjectModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ManagedObjectModel.java
@@ -23,7 +23,6 @@ import java.util.Optional;
 
 import org.springframework.lang.Nullable;
 
-import org.apache.causeway.applib.annotation.BookmarkPolicy;
 import org.apache.causeway.applib.id.LogicalType;
 import org.apache.causeway.applib.services.bookmark.Bookmark;
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
@@ -32,7 +31,6 @@ import org.apache.causeway.core.metamodel.object.ManagedObjects;
 import org.apache.causeway.core.metamodel.object.PackedManagedObject;
 import org.apache.causeway.core.metamodel.objectmanager.memento.ObjectMemento;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
-import org.apache.causeway.core.metamodel.util.Facets;
 
 import lombok.NonNull;
 import lombok.Synchronized;
@@ -138,17 +136,6 @@ extends ModelAbstract<ManagedObject> {
         return elementTypeSpec;
     }
 
-
-    public final boolean hasAsRootPolicy() {
-        return Facets.bookmarkPolicyMatches(BookmarkPolicy.AS_ROOT::equals)
-                .test(getTypeOfSpecification());
-    }
-
-    public final boolean hasAsChildPolicy() {
-        return Facets.bookmarkPolicyMatches(BookmarkPolicy.AS_CHILD::equals)
-                .test(getTypeOfSpecification());
-    }
-
     public boolean isEmpty() {
         return memento == null;
     }
diff --git a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/interaction/HasBookmarkedOwnerAbstract.java b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/interaction/HasBookmarkedOwnerAbstract.java
index cc1534f218..e6875f171c 100644
--- a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/interaction/HasBookmarkedOwnerAbstract.java
+++ b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/interaction/HasBookmarkedOwnerAbstract.java
@@ -51,16 +51,9 @@ implements
         return bookmarkedObject;
     }
 
-    // -- SHORTCUTS
-
-    public final boolean hasAsRootPolicy() {
-        return Facets.bookmarkPolicyMatches(BookmarkPolicy.AS_ROOT::equals)
-                .test(getTypeOfSpecification());
-    }
-
-    public final boolean hasAsChildPolicy() {
-        return Facets.bookmarkPolicyMatches(BookmarkPolicy.AS_CHILD::equals)
-                .test(getTypeOfSpecification());
+    /** governs how to populate the BookmarkPanel in the UI */
+    public final BookmarkPolicy getBookmarkPolicy() {
+        return Facets.bookmarkPolicyOrElseNotSpecified(getTypeOfSpecification());
     }
 
     public final ObjectSpecification getTypeOfSpecification() {